Funções de material permitem agrupar partes de um gráfico de material em um recurso reutilizável que você pode compartilhar em uma biblioteca e inserir facilmente em outros materiais. Seu objetivo é simplificar a criação de materiais, fornecendo acesso instantâneo a redes comumente usadas de nós de materiais.
Por exemplo, a função Blend_Overlay mostrada abaixo contém toda a rede de expressões de material mostrada no lado direito da imagem. Em vez de construir essa rede de nós repetidamente, você pode inseri-la diretamente no seu gráfico a partir da biblioteca de funções de materiais.
As funções são editadas no Editor de material como um material normal, mas com algumas restrições sobre quais nós você pode usar. Quando usadas corretamente, elas podem reduzir a redundância de material, o que, por sua vez, reduz o esforço de manutenção do artista. As funções de material mantêm as expressões duplicadas em sincronia, impedindo os inevitáveis erros que surgem quando uma duplicata é perdida durante uma modificação.
Funções de material são uma classe de recurso distinta no Navegador de conteúdo. Seus gráficos são semelhantes aos de materiais, mas diferem em um importante aspecto. Em vez de um nó de material principal, as funções de material têm nós FunctionOutput, que aparecem como pins de saída no nó de função de material final quando usados em um material.
Pode ajudar pensar em uma função de material como um gabinete de projeto de eletrônica. Você pode adicionar quantas entradas e saídas achar necessário. O centro da função é a rede de expressões de material entre essas entradas e saídas. Esse exemplo usa duas camadas e as mescla como uma mesclagem de tela do Photoshop. A função abstrai os detalhes de um artista e, portanto, eles não precisam realmente conhecer a matemática de uma mesclagem de tela para usar uma operação de mesclagem de tela.
Nós de entrada (1) e saída (2) de uma função de material.
Como é possível ver acima, o que acontece entre a entrada e a saída depende inteiramente de você e será definido por qualquer rede de nós de expressões de naterial padrão. Depois de inserir uma função de material em um material, você verá apenas o nó de Chamada de função de material com suas entradas e saídas. O restante do gráfico está oculto dentro da função.
Biblioteca de funções de material
Quando sua função de material estiver concluída, você poderá publicá-la na Biblioteca de funções de material para facilitar o acesso durante a criação do material. A biblioteca de funções de material está disponível na Paleta no lado direito do Editor de material. A paleta contém uma lista categorizada e filtrável de funções de material disponíveis. Essa lista é preenchida a partir de quaisquer funções carregadas, mas também de quaisquer funções de material padrão encontradas no Banco de dados do Navegador de conteúdo.
Você pode passar o mouse sobre essas entradas para ver sua descrição como uma dica de ferramenta ou arrastar e soltar uma no seu material.
Para que uma função de material apareça na biblioteca de funções de material, sua propriedade Expor à Biblioteca deve ser verificada. No editor de função de material, desmarque todos os nós clicando em um espaço vazio no gráfico para mostrar as propriedades básicas da função de material. A opção Expor à biblioteca é encontrada no painel Detalhes.
Para obter uma lista completa das funções existentes na Biblioteca de funções de material por padrão, consulte a Referência de funções de material.
Nós relacionados a funções
Abaixo estão os nós de expressão de material que se relacionam com funções de material, juntamente com sua finalidade:
- MaterialFunctionCall - Permite usar uma função externa de outro material ou função. Os nós de entrada e saída da função externa tornam-se entradas e saídas do nó de chamada de função.
- FunctionInput - Apenas pode ser colocado em uma função de material, na qual ele define um dos pins de entrada da função.
- FunctionOutput - Apenas pode ser colocado em uma função de material, na qual ele define um dos pins de saída da função.
- TextureObject - Útil para fornecer uma textura padrão para uma entrada de função de textura dentro de uma função. Na verdade, esse nó não obtém a amostra da textura e, portanto, deve ser usado em conjunto com um nó TextureSample.
- TextureObjectParameter - Define um parâmetro de textura e gera o objeto de textura. Usado em materiais que chamam uma função com entradas de textura. Na verdade, esse nó não obtém a amostra da textura e, portanto, deve ser usado em conjunto com um nó TextureSample.
- StaticSwitch - Executa uma escolha de tempo de compilação entre duas entradas, com base no valor de entrada.
- StaticBool - Útil para fornecer um valor booleano padrão para uma entrada de função booleana estática dentro de uma função. Esse nó não alterna entre nada e, portanto, deve ser usado em conjunto com um nó StaticSwitch.
- StaticBoolParameter - Define um parâmetro booleano estático e gera o valor booleano estático. Usado em materiais que chamam uma função com entradas booleanas estáticas. Esse nó não alterna entre nada e, portanto, deve ser usado em conjunto com um nó StaticSwitch.
Entrada e saída
Como funções de material são redes encapsuladas de nós, cabe ao usuário garantir que os dados possam fluir para dentro e para fora delas. Isso é tratado por meio de nós FunctionInput e FunctionOutput. Entender esses nós é essencial para usar funções de material.
Dentro da própria função de material, os nós FunctionInput e FunctionOutput aparecem assim:
Quando a função de material é usada em um material, os nós FunctionInput e FunctionOutput aparecem como pins de entrada e saída no nó de função de material:
Nós FunctionInput
Conforme declarado, os nós FunctionInput servem como a porta através da qual os dados entram em uma função de material. Uma determinada função pode ter qualquer número desses nós de entrada, cada um correspondendo a um pino de entrada no nó de Chamada de função de material.
Os nós FunctionInput têm as seguintes propriedades e pins de dados:
| Item | Descrição |
|---|---|
| Propriedades | |
| Nome da entrada | O nome da entrada, que é visível como um pin de saída na função de material quando usado em um material. |
| Descrição | Uma descrição da entrada, que fica visível como uma dica de ferramenta quando você passa o mouse sobre o pin de entrada correspondente no nó de função de material. |
| Tipo de entrada | Define que tipo de dados a entrada aceita. Consulte Tipos de entradas abaixo. |
| Valor de prévia | Serve como um meio de teste e uma forma de ajudar a visualizar o que a função está fazendo durante o processo de construção. Qualquer valor inserido aqui é usado como se tivesse sido transmitido de uma entrada fora da função. |
| Usar valor de visualização como padrão | Essa caixa de seleção permite que os dados definidos no valor de visualização atuem como o valor padrão. Isso é útil se você não deseja forçar o usuário a fornecer uma entrada na função para esse valor. |
| Prioridade de classificação | Esse número é usado para controlar a ordem na qual os pins de entrada são exibidos no nó de função material. A ordem é do menor para o maior. |
| Pins de entrada | |
| Prévia | Os dados transmitidos para essa entrada substituem a propriedade Valor de prévia. Assim como sua propriedade associada, isso é útil para testar a função durante a construção e configurar valores padrão. |
| Pins de saída | |
| (Sem rótulo) | Isso fornece a saída para os dados de entrada que serão processados pela função. |
Nós FunctionOutput
Um nó FunctionOutput fornece os meios pelos quais os dados dentro de uma função de material saem da função para uso posterior em um material. Em outras palavras, ele gera o resultado final da função de material. Assim como os nós FunctionInput, uma função pode ter qualquer número de nós de saída, resultando em qualquer número de pins de saída em potencial.
Quando um nó FunctionOutput é selecionado, as seguintes propriedades ficam acessíveis no painel Detalhes.
| Item | Descrição |
|---|---|
| Saída da função de expressão de material | |
| Nome da saída | O nome da saída, que é visível como um pin de saída na função de material quando usado em um material. |
| Descrição | Uma descrição da saída, que é exibida como uma dica de ferramenta quando você passa o mouse sobre o pin de saída correspondente no nó de função de material. |
| Expressão de material | |
| Prioridade de classificação | Esse número é usado para controlar a ordem na qual os pins de saída são exibidos no nó de função material. A ordem é do menor para o maior. |
| Descrição | Esse campo de descrição define o texto na bolha de comentário do nó. Ele apenas é visível dentro do editor de funções de material. |
| Pins de saída | |
| (Sem rótulo) | Isso fornece a saída para os dados de entrada que serão processados pela função. |
Tipos de entrada
As entradas têm um tipo especificado que é necessário para quaisquer expressões conectadas a elas. Para definir o tipo de entrada, selecione um nó FunctionInput no editor de função de material e use a lista suspensa Tipo de entrada para selecionar uma opção.
Quando chamado em um material, o tipo de entrada é exibido como uma abreviação ao lado dos conectores de entrada. Nesse caso, ambas as entradas eram de Vector3, então V3 é exibido. Qualquer coisa conectada a uma entrada quando usada em um material deve ser conversível no tipo de entrada correto, ou você receberá um erro.
Abaixo estão os tipos de entrada disponíveis e suas abreviações associadas:
| Tipo de entrada | Abreviação |
|---|---|
| Scalar | S |
| Vector2 | V2 |
| Vector3 | V3 |
| Vector4 | V4 |
| Texture2D | T2D |
| TextureCube | TCube |
| Texture2DArray | T2dArr |
| VolumeTexture | TVol |
| StaticBool | B |
| MaterialAttributes | MA |
| TextureExternal | TExt |
Propriedades comuns
Ao editar uma função de material, desmarcar todos os nós ou clicar no plano de fundo do gráfico de material tornará as propriedades básicas da função visíveis no painel Detalhes.
| Item | Descrição |
|---|---|
| Propriedades | |
| Descrição | Essa descrição será exibida como uma dica de ferramenta quando os usuários passarem o mouse sobre a função de material na paleta ou sobre o corpo do nó de chamada de função no Editor de material. |
| Expor à biblioteca | Se essa caixa estiver marcada, a função de material aparecerá na lista de funções de material dentro da paleta do Editor de material, para que você possa inseri-la em materiais. Pode ser necessário reiniciar o editor para que uma nova função apareça. |
| Categorias de biblioteca | Essa matriz contém todas as categorias da aba Funções de material nas quais essa função aparecerá. |
Visualizando
Ao editar uma função de material, a janela de visualização mostra o nó que está sendo visualizado. Você pode clicar com o botão direito em qualquer nó e escolher Iniciar visualização do nó para visualizar os resultados da rede de materiais até aquele ponto.
Na maioria das vezes, você optará por visualizar a saída da função ou o resultado final da função de material. O nó de saída de função de material é visualizado por padrão.
Visualização da entrada da função
Os nós de entrada de função têm algumas opções para especificar valores de visualização, pois desconhecem os valores reais que os artistas usarão no material. Cada entrada tem um Valor de prévia integrado que você pode usar para mostrar uma constante para tipos de entrada float. As entradas de função também possuem um conector de 'Prévia' que permite substituir o valor integrado por qualquer valor que corresponda ao tipo de entrada. Neste exemplo, amostras de textura são usadas para fornecer um valor de visualização para as duas entradas Vector3.
Observe que a entrada tem uma opção no painel de detalhes para Usar valor de prévia como padrão. Quando ativado, o valor de visualização é usado sempre que a função é chamada em um material e nada está conectado a essa entrada. O valor de visualização atua como um sistema de apoio e evita erros de compilação quando nada está conectado à entrada. Isso torna a entrada uma entrada opcional e, portanto, é desenhado em cinza.
Parâmetros
Você pode usar Parâmetros em uma função de material como faria em um material normal. Esses parâmetros são passados diretamente para qualquer material para uso. Existem algumas pequenas diferenças no procedimento para usar parâmetros de textura.
Parâmetros de textura
Para usar um parâmetro de textura em uma função de material, crie um nó FunctionInput* e altere o tipo de dados para Texture2D. Conecte-o ao pino de substituição do objeto de textura em um nó Amostra de textura**.
Ao usar essa função de material em um material, coloque um nó TextureObjectParameter e conecte-o ao pin de entrada Texture2D na função de material.
Parâmetro booleano estático
Da mesma forma para parâmetros de chave estática, crie uma FunctionInput e altere o tipo de entrada para StaticBool. Conecte-a a um nó StaticSwitch:
No material que usa a função, coloque um nó StaticBoolParameter e conecte-o à entrada que aceita um Static Bool (Habilitar ladrilhamento neste exemplo).
Organização
Por padrão, funções de material são frequentemente usadas por muitos artistas e colegas de equipe que não participaram da criação da função propriamente dita. Portanto, é importante fornecer uma boa documentação sobre cada função e quais valores são necessários para suas entradas e saídas. Por esse motivo, funções têm vários campos de documentação acima do nome da função e dos nomes de entradas/saídas:
Descrição da função
Funções de material têm um campo Descrição no qual você pode documentar o que a função faz. Para adicionar uma descrição, clique em uma área vazia no gráfico de material enquanto edita uma função de material. Isso exibirá as propriedades da função no painel Detalhes, onde você pode inserir uma descrição no campo.
O texto da descrição é exibido como uma dica de ferramenta quando você passa o mouse sobre o nó Chamada de função do material em um gráfico de material.
Descrições de entrada e saída
Você pode adicionar um nome e uma descrição para os pins de entrada e saída na sua função de material. Ao editar uma função de material, selecione um nó de entrada ou saída no gráfico de material. No painel Detalhes, preencha os campos Nome da entrada e Descrição.
Quando essa função de material é usada em um material, cada pin de entrada exibe o nome que você inseriu, e a descrição é mostrada como uma dica de ferramenta quando você passa o mouse sobre a entrada.
Durante a edição de uma função de material, todas as ferramentas para organizar e documentar seu gráfico de material estão disponíveis para você. Leia aqui sobre como organizar um gráfico de materiais.
Propagação
Quando você edita uma função de material e clica no botão Salvar para recompilar e aplicar as alterações, a nova versão se propaga para todos os materiais ou funções carregados que fazem referência a essa função de material. Todos os materiais descarregados que façam referência à função serão atualizados com as alterações quando forem carregados novamente.
Quando uma entrada ou saída é excluída de uma função e as alterações são propagadas, todos os links para esses conectores excluídos em materiais que usam a função serão desfeitos! É importante considerar isso antes de recompilar uma função de material, pois a propagação não pode ser desfeita. Em quanto mais materiais uma função for usada, maior será o potencial de ruptura, portanto, tenha cuidado.
Todos os materiais carregados que usarem a função serão marcados como sujos quando a alteração da função for propagada, o que pode ser usado para ver quais pacotes podem ser salvos novamente a fim de evitar o aumento do tempo de carregamento. Você pode encontrar todos os materiais carregados que usam uma função clicando com o botão direito no Navegador de conteúdo e escolhendo Encontre materiais usando isto.
Aninhando funções
Você pode aninhar funções de material dentro de outras funções e encadeá-las arbitrariamente. A única ressalva é que funções de material não podem ser aninhadas de forma a criar uma dependência circular.
Erros de compilação
Se houver erros em uma função de material, uma caixa de diálogo de erro de compilação será gerada quando você tentar compilar o material. Uma mensagem de erro vermelha também aparece no topo da função de material que não foi compilada corretamente. Você pode passar o mouse sobre a mensagem de erro para ver uma dica de ferramenta que descreve o erro de compilação. Neste exemplo, a função material não está recebendo dados em nenhuma de suas entradas, o que faz com que a compilação falhe.
Você pode evitar os erros acima fornecendo valores de visualização para suas entradas e, em seguida, ativando a propriedade Usar valor de visualização como padrão de cada entrada. No entanto, essa prática pode servir como uma faca de dois gumes, pois não haverá nenhum alerta óbvio (como uma mensagem de erro) para lembrar que você deixou uma entrada desconectada.
Funções de material padrão
O Unreal Engine inclui várias dezenas de funções de material padrão pré-fabricadas. Eles podem ser acessados na Paleta do Editor de Material ou no menu de pesquisa acionado com o botão direito.
Se você quiser editar uma das funções de material padrão, poderá encontrar os recursos no Navegador de conteúdo, na pasta Engine > Conteúdo > Funções.
Se quaisquer alterações forem feitas e salvas em uma função de material padrão, elas existirão em todas as instâncias dessa função. Por esse motivo, é altamente recomendável que você faça uma cópia duplicada das funções padrão quando quiser fazer alterações.
Para obter mais informações sobre as funções de material padrão incluídas no Unreal Engine, consulte a Referência de funções de material.