Montar uma biblioteca de recursos

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.


Montar uma biblioteca de recursos é o processo de importar e configurar uma coleção de recursos em um local central dentro da sua experiência para acesso fácil e reutilização.Esse processo pode economizar tempo significativo enquanto você se prepara para construir seu ambiente, especialmente se configurar os valores de cada recurso para melhorar o desempenho e otimizar o uso de memória em dispositivos de média a baixa gama.

Usando o arquivo Arte do Ambiente - Montagem file como referência, esta seção do currículo de arte ambiental mostra como montar uma biblioteca de recursos a partir de seus recursos polidos, incluindo instruções passo a passo sobre:

  • Criar materiais personalizados para o seu terreno a partir de suas texturas tileáveis.
  • Criar objetos SurfaceAppearance para sua folha de acabamento e aplicá-los a malhas desembrulhadas em sua biblioteca de recursos.
  • Definindo parâmetros de renderização para seus recursos para garantir o desempenho ideal em todos os dispositivos.
  • Conversar seus recursos em pacotes para que você possa atualizá-los e reutilizá-los em todos os seus projetos.

Depois de concluir esta seção, você aprenderá a utilizar sua biblioteca de recursos de maneira criativa para substituir ou converter o ambiente da caixa cinza ou adicionar toques finais que melhorem o espaço 3D geral.

The sample laser tag experience's modular and prop kit.

Criar materiais personalizados

O Studio representa materiais personalizados como MaterialVariant objetos dentro do MaterialService.Esses objetos MaterialVariant têm quatro propriedades que combinam os quatro mapas de textura tileáveis para criar um material personalizado de alta qualidade com características físicas:

Depois de fornecer os mapas de textura para essas propriedades, você pode aplicar seu novo material personalizado a ambas as partes, malhas e terreno.Você pode usar ou modificar os arquivos de mapa de textura de amostra .png para criar o Lumpy Moss, Flowering Lumpy Moss, Lumpy Moss com Pedras e materiais personalizados de Pedras dentro do ambiente final da etiqueta a laser do tutorial, ou você pode usar o seu próprio que você projetou na seção anterior do tutorial.

Para criar MaterialVariant objetos para suas texturas tileáveis:

  1. Na aba Início ou Modelo da barra de ferramentas, clique no botão Gerenciador de Materiais .A janela Gerenciador de Materiais abre.

  2. Na lista de Materiais , selecione o material base que mais se alinha com a sua textura tilizável.Por exemplo, se você estivesse criando um objeto MaterialVariant para a textura de ladrilho irregular, escolha o material padrão para que o material herde suas propriedades físicas.

  3. Na barra de ferramentas , clique no ícone .Um novo MaterialVariant é exibido na paleta com um ícone no canto inferior direito que indica que é um material personalizado.

    New MaterialVariant tile in Material Manager with icon to indicate a custom material
  4. No Inspector , navegue até a seção Geral , então renomeie o material para alinhar com o nome de sua textura tileável.

    The Inspector view with the name of the material highlighted.
  5. Na seção Mapas de Textura , no lado direito de Cor , clique no botão Importar . Um navegador de arquivos será exibido.

    The Texture Maps section of the Inspector view with the Import button highlighted.
  6. No navegador de arquivos, selecione o mapa de textura Albedo para a textura correspondente, então o botão Abrir.O navegador de arquivos fecha e o novo mapa de cores é exibido com seu ID de recurso.

  7. Repita esse processo para os mapas de textura Metalidade , Normal e Rugosidade .As atualizações de material personalizado refletem os mapas de textura.

    All texture maps for the Moss_Lumpy_A material.
     sphere part with the Moss_Lumpy_A material applied.
  8. Na seção Substituições , habilite a opção Definir como Substituição para garantir que, ao aplicar solo ao seu terreno, o Studio use esse material personalizado.

    The Set as Override toggle enabled.
  9. (Opcional) Se você estiver criando um material personalizado que represente um material orgânico,

    1. Na seção Azulejamento , clique no menu suspenso Padrão .
    2. Selecione Orgânico para aleatorizar a saída e reduzir o tiling visível.
    The Tiling section of the Inspector view with its settings.
  10. Repita esse processo para cada textura tileável que você deseja incluir em sua experiência.

Criar pacotes de Aparência da Superfície

O Studio utiliza folhas de acabamento dentro de SurfaceAppearance objetos que você pode paisar para MeshParts que contêm dados de UV.Semelhante a materiais personalizados, SurfaceAppearance objetos têm quatro propriedades que combinam os quatro mapas de textura da folha de acabamento para criar um tratamento de superfície visual 3D de alta qualidade:

SurfaceAppearance.ColorMap – Representa o mapa de textura de refletância.SurfaceAppearance.MetalnessMap – Representa o mapa de textura de metalização.SurfaceAppearance.NormalMap - Representa o mapa de textura normal.SurfaceAppearance.RoughnessMap - Representa o mapa de textura de rugosidade.

Depois de fornecer os mapas de textura para essas propriedades, você pode fazer do objeto filho de um com dados de uv que sejam mapeados para sua folha de acabamento e os dados de uv se aplicam automaticamente ao modelo pai.É por esse motivo que é útil fazer do objeto SurfaceAppearance um pacote para que você possa reutilizar o mesmo objeto SurfaceAppearance em todos os seus recursos e propriedades modulares.Por exemplo, as seguintes malhas todas têm dados de UV que se mapam para o mesmo layout de folha de acabamento que está representado dentro de um único pacote de objeto SurfaceAppearance.

Você pode usar ou modificar os arquivos de mapa de textura de amostra .png para criar um objeto SurfaceAppearance que respeite os dados de uv para as amostras modulares e acessórios dentro do ambiente final da etiqueta a laser, ou você pode usar o seu próprio que você projetou na seção anterior do tutorial que se aplica aos seus próprios acessórios e propriedades modulares.

Para criar SurfaceAppearance pacotes que você pode filiar ao seu kit modular e acessórios:

  1. Insira um objeto Aparência da Superfície em >.

  2. Selecione o Objeto Aparência da Superfície , então, na janela Propriedades , selecione a propriedade Mapa de Cores . Um pop-up será exibido.

  3. Clique no botão Adicionar Imagem… . Um navegador de arquivos é exibido.

    The ColorMap pop-up with the Add Image button highlighted.
  4. Selecione o mapa de textura Albedo para a textura correspondente, então o botão Abrir .O navegador de arquivos fecha e a propriedade Mapa de Cores atualiza com um novo ID de recurso.

  5. Repita esse processo para o Mapa de Metalidade , Mapa Normal e Mapa de Rugosidade propriedades, selecionando seus respectivos mapas de textura do navegador de arquivos.

  6. Na janela Explorer , clique com o botão direito no Objeto Aparência da Superfície , então selecione Converter para Pacote e do menu contextual.O diálogo Converter em Pacote é exibido.

  7. Preencha os campos Título e Descrição , defina a propriedade para você ou para um grupo, então clique no botão Enviar .Uma vez concluído, um símbolo de link de cadeia é exibido sobre o ícone do ObjetoSurfaceAppearance para identificá-lo como um pacote.

    The Surface Appearance icon with a chain link symbol.
  8. (Opcional) Selecione o objeto Aparência da Superfície filho do Objeto Link de Pacote , então, na janela Propriedades , habilite Atualização Automática para atualizar automaticamente o pacote se você fizer quaisquer modificações no objeto Aparência da Superfície .

Importar recursos e propriedades modulares

O Studio representa os recursos modulares e objetos que você importa como Model objetos com filho MeshParts para cada componente do ativo.Por exemplo, se você importar uma seção de parede com um topo, borda inferior e componente de parede, o Studio representa o arquivo ou como uma Seção_de_Parede com uma criança separada Top_Trim , Bottom_Trim e Wall .

Usando o Importador 3D, você pode importar o kit modular de amostra e adereços para o Studio para uso em sua biblioteca de ativos ou você pode importar quaisquer ativos que você projetou na seção anterior do Tutorial.Para mais informações sobre a funcionalidade desta ferramenta, veja Importador 3D.

Para importar seus recursos e propriedades modulares na experiência:

  1. Na aba Início ou Avatar da barra de ferramentas, clique no botão Importar 3D . Um navegador de arquivos será exibido.

  2. Selecione um arquivo .fbx para um recurso modular ou adereço/acessório.

  3. Verifique a visualização do objeto e verifique se as configurações de importação estão corretas para o seu Objeto.

  4. Verifique quaisquer advertências ou mensagens de erro.

  5. Clique em Importar . O recurso é exibido na janela Explorer e na janela de visualização.

  6. Repita esse processo para cada recurso modular e adereço/acessório.

  7. Mova todos os seus recursos para uma área de sua experiência perto da geometria da caixa cinza. Essa zona é sua biblioteca de recursos.

Aplicar dados de Aparência da Superfície

Quando você passa pelo processo de desembrulhar os UVs de uma malha em software de modelagem de terceiros, o software armazena os dados de UV dentro do arquivo .fbx ou .obj da malha.Quando você importa esse mesh para o Studio, o objeto resultante MeshPart retém esses dados, mas você ainda precisa aplicar um objeto SurfaceAppearance com propriedades de mapa de textura da sua folha de acabamento para exibir suas texturas de acabamento no recurso.

Para aplicar SurfaceAppearance dados do mapa de textura a malhas desembrulhadas na sua biblioteca de recursos:

  1. Na janela Explorer , clique no seu pacote Aparência da Superfície , então pressione CtrlD (D) para duplicá-lo.
  2. Filho o pacote duplicado Aparência da Superfície para um recurso modular ou um adereço/acessório.O recurso aplica seus dados UV para os mapas de textura e exibe seu tratamento visual.
  3. Repita esse processo para cada recurso modular e adereço/acessório.

Defina parâmetros de física e renderização

Agora que você tem seus recursos dentro do Studio, é importante definir parâmetros de física e renderização que permitam que os recursos mantenham a qualidade visual mais alta possível em dispositivos com limitações de memória e GPU.Em geral, quanto mais estritamente você aderir à orientação nesta seção, mais performante você torna sua experiência.No entanto, é importante considerar cuidadosamente o contexto de onde você planeja colocar cada recurso dentro do ambiente geral para garantir que você mantenha seus objetivos estéticos e requisitos de jogabilidade.

Ancorado

A propriedade BasePart.Anchored determina se o sistema de física do Roblox Engine afeta a posição do Objeto.Quando você habilita essa propriedade para um Part ou MeshPart, ela remove o objeto das cálculos físicos da simulação dinâmica que está sempre em execução na experiência, o que significa que o objeto nunca mudará de posição devido à gravidade ou colisão de outros objetos.

Objetos que não simulam uma resposta de física são mais baratos de renderizar porque não ocupam a GPU necessária para esses cálculos de física.Quando você libera a GPU, melhora o desempenho para sua experiência, especialmente em dispositivos de baixo nível que precisam salvar GPU para um jogabilidadede ritmo acelerado.É por esse motivo que cada recurso além das portas no ambiente final do laser de etiquetagem de amostra é ancorado.

Pode Colidir

A propriedade BasePart.CanCollide determina se o objeto pode interagir fisicamente com outros objetos.Quando você habilita essa propriedade para um Part ou MeshPart, o objeto é impenetrável e as contas do Motor Roblox o contabilizam em cálculos de física.Esses cálculos podem impactar o desempenho da experiência quando há muitos objetos que o motor deve considerar em seus cálculos de física.

Para aliviar parte desse impacto no performance, desative essa propriedade para objetos com os quais o usuário nunca interagirá.Por exemplo, o ambiente de tag de laser final desabilita essa propriedade para toda folhagem.

Pode Tocar

A propriedade BasePart.CanTouch determina se os eventos Touched e TouchEnded são disparados no Objeto.Quando você habilita essa propriedade para um Part ou MeshPart, o Motor do Roblox verifica o estado do evento de toque do Objetopara ver se ele precisa ativar ou interromper um evento.

Esse processo ocorre para cada quadro, que pode ocupar uma quantidade significativa de memória se o motor precisar verificar o estado do evento de toque para muitos objetos de uma só vez.Para aliviar parte desse impacto na memória, habilite apenas essa propriedade para objetos que devem disparar um evento.

PodeBuscar

A propriedade BasePart.CanQuery determina se o Motor Roblox considera o objeto durante operações de consulta espacial, como raycasting.O Studio habilita essa propriedade para cada Part ou MeshPart por padrão, o que significa que o motor verifica se cada objeto precisa chamar uma operação de consulta espacial.Esse processo ocorre para cada quadro, que pode ocupar uma quantidade significativa de memória quando o motor precisa fazer essas verificações para muitos objetos de uma só vez.

Por esse motivo, é recomendado desativar essa propriedade para objetos que o Roblox Engine não precisa considerar para operações de consulta espacial.Ao tomar decisões sobre onde desativar essa propriedade, considere como cada recurso afeta o jogabilidade.Por exemplo, o ambiente de tag de laser final mantém essa propriedade ativada para cada parede no edifício porque o motor precisa contabilizar essas superfícies quando os usuários atiram lasers de sua arma de tag de laser.Se o motor não contabilizar esses recursos, então o laser atiraria diretamente através do edifício como se não estivesse lá em todas / todos.

Lançar Sombra

A propriedade BasePart.CastShadow determina se o objeto lança uma sombra.Quando você habilita essa propriedade para um Part ou MeshPart, o Motor do Roblox calcula cada localização de vértice do objeto em tempo de execução, então desenha um raio de lançamento do sol para qualquer de seus objetos vizinhos até colidir com outro objeto para criar a sombra.

Esses cálculos podem vir a um custo de desempenho, especialmente quando você tem muitos objetos de complexidade geométrica.Isso ocorre porque objetos com complexidade geométrica têm mais polígonos do que objetos que são geometricamente simples, o que significa que eles têm mais vértices que o motor precisa calcular para a sombra do Objeto.Quanto menos polígonos em um Objeto, mais rápida é a operação e mais barata é sua sombra.

A wall section with few polygons, and a plant with many polygons casting shadows on a white wall.

Sombras podem fornecer um grande senso de realismo a objetos com profundidade geométrica 3D, então, ao decidir onde desativar essa propriedade, considere onde os objetos fornecem uma melhoria visual significativa ao ambiente e onde os usuários notarão a falta de sombras.Por exemplo, as sombras complexas da folhagem podem fornecer um grande senso de imersão no espaço ao ar livre onde os usuários provavelmente os verão, mas essa mesma imersão não é necessária para a folhagem que picosa através do teto com o qual os usuários nunca interagirão.

Lado a Lado

A propriedade MeshPart.DoubleSided determina se renderizar ambas as faces ou polígonos na malha.Quando você habilita essa propriedade para um plano MeshPart plano, como folhas, cabelo ou cartões de tecido, o Motor do Roblox renderiza ambas as faces ou polígonos na malha para permitir que os usuários vejam a completude do objeto, não importa em que ângulo eles estão olhando para o Objeto.Por exemplo, as folhas de árvore a seguir são malhas planas de um lado, e quando você ativa essa propriedade, qualquer uma das folhas que fica longe da câmera se torna visível para o usuário.

Essa propriedade é útil para adicionar realismo ao seu ambiente, mas vem com um custo de desempenho porque o motor precisa renderizar os polígonos do Objetoduas vezes: uma vez para a direção que enfrenta a Câmerado usuário e novamente para quaisquer malhas que estejam longe da Câmerado usuário.Para aliviar parte desse impacto no performance, o ambiente de tag de laser final apenas habilita essa propriedade para folhagem porque tem um forte impacto visual para realismo no espaço 3D.

Fidelidade de Colisão

A propriedade MeshPart.CollisionFidelity determina o quão próxima a hitbox física de uma malha ou união corresponde à sua representação visual.Por padrão, essa configuração rende uma hitbox que é aproximadamente igual à forma poligonal da malha, o que significa que onde os usuários colidem com o objeto é semelhante à geometria real da malha.Por exemplo, a malha do castelo nas seguintes imagens tem uma hitbox padrão que quase corresponde à forma de sua geometria.

A grey castle mesh.
Modelo Original
The same castle mesh with a colorful hitbox that shows where users can collide with the castle.
Padrão

Você pode definir essa propriedade para um valor diferente para reduzir a precisão da hitbox de uma malha.Por exemplo, quando você define esta propriedade para Casca , o motor do Roblox reduz significativamente os vértices da hitbox do mesh e, quando você define esta propriedade para Caixa , o motor reduz a hitbox do mesh para um cubo que envolve o mesh.Além disso, se você quiser aumentar a precisão da hitbox de um mesh, você pode definir essa propriedade para PrecisaConvexDecomposition para aumentar a quantidade de vértices na hitbox.

The same castle mesh with cube hitbox that shows where users can collide with the castle.
Caixa
The same castle mesh with a cylindrical hitbox that shows where users can collide with the castle.
Casca
The same castle mesh with a colorful hitbox that shows where users can collide with the castle. This version shows more colorful faces than the default hitbox.
PrecisaConvexDecomposition

Semelhante a BasePart.CastShadow, quanto mais vértices o Motor do Roblox precisa renderizar, maior o custo de desempenho.Por essa razão, é importante considerar como você quer que os usuários interajam com cada malha para ver se você pode reduzir a quantidade de vértices que o motor precisa renderizar para a hitbox da malha.Em casos em que não é necessário que uma hitbox seja precisa, defina esta propriedade para Caixa ou Concha .

Para demonstrar esse conceito, faça referência às seguintes imagens que mostram a hitbox de cada modelo de parede que fornece um aumento de elevação entre o primeiro e o segundo andar do ambiente de tag de laser final.A hitbox padrão para a parede principal tem muita geometria desnecessária quando só precisa fornecer uma superfície para impedir que o usuário se mova nessa direção.Se você definir a propriedade para Caixa para este malha, você pode remover essa geometria redundante enquanto mantém o propósito da hitbox intacto.

A wall model that provides a rise in elevation.
Modelo Original
The same wall model with a colorful hitbox that shows where users can collide with the wall.
Padrão
The same wall model with a colorful hitbox for the trim, but only a box hitbox for the wall mesh.
Caixa

Ao tomar essas decisões, é importante considerar como alterar o valor padrão pode afetar negativamente os usuários enquanto eles navegam pelo seu ambiente.Por exemplo, se você definir a propriedade para Caixa para as malhas de acerto do modelo de parede, os usuários colidiriam com a hitbox se tentassem pular perto da parede.Em vez disso, defina essas malhas para Casca para que você reduza o número de vértices enquanto mantém a hitbox mais próxima da geometria da malha.

A wall model with a box hitbox for the top trip. Because the box sticks out, users can unintentionally collide with the top trim.
Caixa
The same wall model with a hull hitbox for the top trip. Because hull hitbox conforms much closer to the top of the model, allowing users to avoid colliding with the trim.
Casca

Observe que pode ser importante ter uma hitbox que seja precisamente conforme à forma de sua malha, especialmente quando você precisa controlar exatamente como os usuários colidem com sua forma.Por exemplo, no ambiente de etiqueta a laser de amostra final, é importante que os usuários colidam apenas com os cantos da porta e não com a própria porta, caso contrário, eles nunca seriam capazes de entrar ou sair de um bolso de combate.

A doorway model with optimized hitbox meshes.

Fidelidade de renderização

A propriedade MeshPart.RenderFidelity determina o nível de detalhe da malha que será exibido ao usuário.Quando você define esta propriedade para Enum.RenderFidelity.Automatic , o Motor do Roblox reduz a fidelidade da malha à medida que o usuário está longe da malha e, quando você define esta propriedade para Enum.RenderFidelity.Precise , cada vértice da sua malha é renderizado exatamente como você pretendia, não importa a distância entre eles.

Quanto mais objetos o motor deve renderizar precisamente ao usuário a partir de qualquer distância, especialmente se eles tiverem um alto número de vértices, maior o custo de desempenho.Para aliviar parte desse impacto no performance, defina essa propriedade para Enum.RenderFidelity.Performance para objetos com complexidade geométrica, como folhagem na biblioteca de recursos de amostra, porque eles não precisam ser exibidos em sua totalidade a partir de uma distância para qualquer requisito de jogabilidade.Isso reduz o número de polígonos da sua experiência sem sacrificar a qualidade visual geral.

Converte recursos em pacotes

Agora que todos os seus recursos modulares estão no Studio com parâmetros de renderização configurados para manter sua alta qualidade visual para todos os usuários, é hora de convertê-los em pacotes.É importante converter seus recursos em pacotes porque isso permite que você os reutilize repetidamente durante sua experiência atual e outros projetos.Além disso, você pode facilmente fazer edições em um pacote que preencha instantaneamente todas as suas instâncias, economizando muito tempo no processo de iteração.

Porque seus objetos SurfaceAppearance já são pacotes, quando você converte seus objetos Model em pacotes, eles se tornam pacotes aninhados.Pacotes aninhados permitem que você mantenha complexas hierarquias de objetos filhos que você pode modificar independentemente do pacote de objeto Model.Isso permite que você tenha maior controle sobre os componentes individuais de seus recursos.

Para converter seus recursos e propriedades modulares em pacotes:

  1. Na janela Explorer , clique com o botão direito em um recurso modular ou em um adereço/acessório, então selecione Conversar em Pacote no menu contextual.O diálogo Converter em Pacote é exibido.

  2. Preencha os campos Título e Descrição , defina a propriedade para você ou para um grupo, então clique no botão Enviar .Uma vez concluído, um símbolo de link de cadeia é exibido sobre o ícone do modelo para identificá-lo como um pacote.

    The Model icon with a chain link symbol.
  3. Repita esse processo para cada recurso modular e adereço/acessório.

Uma vez que você está feliz com o layout geral de sua biblioteca de recursos, você pode passar para a decoração do ambiente com seus recursos polidos e configurar elementos adicionais do espaço 3D para trazer seu mundo à vida.