6 minuto(s) de leitura

1. O que é Material Instance?

A Mateial Instance ou Instanciação de Material é uma maneira de criar um Material pai, que pode então ser usado como base para fazer uma ampla variedade de Materiais filhos de aparência diferente. Para obter essa flexibilidade, o Material Instancing usa um conceito chamado herança: as propriedades do pai são fornecidas aos seus filhos. Aqui está um exemplo de herança de material em ação.

1.1. Convertendo nós em parâmetros

Convertemos os nós em parâmetros para que possam ser manipulados posteriormente pelo Material Instance. Para que possamos exemplificar segue abaixo os passos.

Vamos criar o material base com o nome M_Base_Master.

Figura: Blueprint Material Instance.
Lógica do material com cor base e normal.

Agora vamos converter os nós em parâmetros.

Figura: Material Instance - Convert to Parameter.
Convertendo valores em parâmetros.

Resultado dos material com parâmetros.

Figura: Material Instance -  Usando parâmetros.
Resultado do nó com parâmetros.

Em seguida definimos os seguintes atributos nos parâmetros:

  • Parameter name - Nome para o parâmetro que representa o input do material.
  • Group - Usado para agrupar os parâmetros por um determinado valor ou tema.

Sugestão de grupos:

  • Texture Parameter Values: Diffuse,NormalMap, Rough Texture;

  • Scalar Parameter Values: Valores escalares;

  • Metallic, Roughness: Vector Parameter Values : Color (R,G,B,A), UVTiling(R,G,B,A).

1.2. Criando Material Instance

Selecione o material M_Base_Master ou outro material e com o botão direito acione o menu de contexto e escolha Create Material Instance.

Figura: Material Instance - Create material instance.
Usamos um material como base.

2. Editor de material Instance

Figura: Material Instance instance editor.
Material Instance e suas propriedades.
  • Details - Propriedades e acesso aos parâmetros;

  • Parameter Groups - Grupo definido nos parâmetros dentro do material pai. Os parâmetros estão agrupados por tipo de valor Texture, Scalar e Vector;

  • Parent - Material pai.


3. Switch Parameter

StaticSwitchParameter recebe duas entradas e gera a primeira, se o valor do parâmetro for verdadeiro, e a segunda, caso contrário. No exemplo abaixo se o parâmetro for verdadeiro a multiplicação com a cor pode ser realizada caso contrário o textura não é multiplicada.

Figura: Blueprint Material Instance - Switch Parameter.
Figura: O nó Switch Parameters é visível no Editor de Material Instance e permite alternar entre dois valores, no exemplo acima o parâmetro é chamado de ColorSwitch.

4. Organizando parâmetros e definindo valor máximo e mínimo

Podemos organizar os parâmetros agrupando com a opção Group do nó e com Sort Priority ordenamos a visualização.

4.1. Group

No exemplo abaixo criamos os grupos:

  • Base Parameters;

  • Multipliers;

  • UV Tiling.

Figura: Material Instance - Parameter Group.
Criando vários parâmetros agrupados.

4.2. Valor Mínimo e Máximo

Podemos limitar os valores mínimo e máximo que podem ser passados como parâmetro utilizando a opção Slider.

Figura: Material Instance - Slider Min e Slider Max.
Limitando os valores dos parâmetros utilizando Slider Min en Max.

5. Implementando Material Instance com Blueprint

Podemos manipular os objetos do tipo material com scripts Blueprint possibilitando implementar objetos com materiais mais interativos, como por exemplo, um objeto que muda de cor ao click do mouse.

Para exemplificar utilizaremos o Level Blueprint interagindo com um objeto na cena.

Selecione um ator no View Port e adicione uma referência no Open Level Blueprint com a opção Create a Reference to, em seguida vamos utilizar o nó Create Dynamic Material Instance para criar uma associação de um material com a nossa lógica.

Figura: Material - Create material instance set.
Acima a lógica para criar o material instance e alterar a textura.
  • Create Dynamic Material Instance - Cria um Material Instance dinâmico que pode ser modificado durante a gameplay. O material referenciado em Source Material deve conter parâmetros;

  • Set Texture Parameter Value - Atualiza o valor do parâmetro informado em Parameter Name, é do tipo textura;

  • Set Scalar Parameter Value - Atualiza o valor escalar do parâmetro informado em Parameter Name com o valor value;

  • Set Vector Parameter Value - Atualiza o vetor do parâmetro informado em Parameter Name com o valor value.

Cafegeek - Material and Blueprint #2 Create Dynanmic Material Instance and Set Acima a lógica para criar o material instance e alterar a textura. [Link]
Cafegeek - Material and Material #1 Click Objects and Change Color [Link]

O script habilita o click do mouse e quando selecionado um objeto o evento customizado Change Color e acionado.

Figura: Blueprint Material - Open Level blueprint call event.
Figura: No Level Blueprint implemente a lógica para chamar o Evento ChangeColor.

6. Parameter Global

Podemos definir parâmetros globais, que afetem todo o jogo, para que os materiais possam referenciar parâmetros escalares e vetoriais.

Informação: É uma ferramenta poderosa que os artistas podem usar para obter dados globais em muitos materiais de uma só vez. Ele também pode ser usado para gerar efeitos por nível, como quantidade de neve, quantidade de destruição, umidade, etc., que, de outra forma, exigiria a configuração de valores de parâmetros individuais em muitas instâncias de materiais diferentes em seu nível.

Criando parâmetros globais utilizamos a opção do menu de contexto Materials & Textures > Material Parameter Gobal.

Figura: Material - Parameter Collections.
Menu de contexto > Materials & Textures > Material Parameter Collection

Depois de criado o objeto podemos adicionar e editar valores do tipo Scalar e Vector no objeto Parameter Collection. Exemplo de nome MPC_Base.

Figura: Material - Editor de Parameter Collection.
Parâmetros do material.

No Editor de Materiais usamos o menu de contexto (RMB) e escolhemos a opção Material Parameter Collection selecionando o objeto criado com os parâmetros em Collection, MPC_Base.

Figura: Material - Collection Parameter.
Chamando no editor de materiais um Collection Parameter.

7. Material Function

Material Functions ou Funções de material são pequenos fragmentos de códigos gráficos de material que podem ser salvos em pacotes e reutilizados em vários materiais, em outras palavras são funções de programação. Seu objetivo é agilizar o processo de criação de material, dando acesso instantâneo a redes comumente usadas de nós materiais. São compostas basicamente por entradas de parâmetros e saída de dados.

Utilizamos o menu de Contexto Material & Textures > Material Function para criar as funções;

Figura: Blueprint Material Function - Output.
Figura: O editor da lógica da função criada utilizando os nós Texture Sample e um Vector 3 e redirecionando para a saída Output Result.
  • Perceba que a função apresenta um nó de resultado;

  • Podemos adicionar parâmetros para a função.

Figura: Blueprint Material Function Call.
Figura: Chamamos a função dentro do editor de materiais usando a função MaterialFunctionCall.

7.1. MakeMaterialAttribute

O nó Make Material Attributes une vários atributos. Isso é útil ao criar suas próprias funções de camada de material, pois você terá acesso a todos os atributos padrão para sua saída. Isso também pode ser usado para configurações de material complexas nas quais você deseja definir mais de um tipo de material e combiná-los, tudo dentro de um material.

Figura: Material - MakeMaterialAttribute.
Podemos juntar vários atributos utilizando MakeMaterialAttribute possibilitando construir camadas ou Layers e utilizar no retorno da função.

Ao usar a nó é necessário configurar o nó resultado do material principal com Use Material Attribute para True.

Figura: Blueprint Material - Nó resultado com Use Material Attribute true.
Devemos configurar o nó resultado do material com Use Material Attribute true.

7.2. BreakMaterialAttribute

É o inverso de MakeMaterialAttribute possibilitando a separação dos atributos recebidos por uma função.

Figura: Material - BreakMaterialAttribute.
Expandindo os atributos do material.

7.3. Parâmetros dentro das funções

Podemos adicionar parâmetros utilizamos o nó Input <Type>.

Criamos o nó e ajustamos as propriedades do parâmetro:

  • Input Name - Nome do parâmetro;

  • Input Type - Lista de tipos (VectorX, Scalar, Texture);

  • Preview value - Valores que podem ser usados como padrão;

  • Use Preview value as Default - Usa os valores configurados como padrão.

Chamamos a função dentro de um material expression utilizando:

  • F + LMB;

  • LMB e digitando Function/MaterialFunctionCall.

Logo em seguida configuramos a propriedade Material Function.

7.4. Adicionando Propriedades em uma material Function

Usamos SetMaterialAttributes para adicionar outros atributos no resultado de uma função que retorna um conjunto de atributos.

Figura: Material - SetMaterialAttributes.
A função MF_Base retorna um conjunto de atributos e com o nó SetMaterialAttributes podemos adicionar ou alterar os atributos vindos da função.

7.5. BlendMaterialAttribute

Usamos BlendMaterialAttribute para misturar duas funções, implementaremos duas funções, MF_Base e MF_Rust_Base, para exemplificar Make Material Attributes.

Função com a cor da base.

Figura: Função MF_Base.
A função MF_Base implementa detalhes básicos de um material.

Função para utilizar na mistura.

Figura: MF_Rust_Base.
Nova função com a mesma lógica trocando as texturas.

Fazendo a mistura das duas funções.

Figura: Material Function BlendMaterialAttribute.
O parâmetro Alpha controla como os valores são misturados.