Cores nos materiais sem criar material
3 participantes
Página 1 de 1
Cores nos materiais sem criar material
Olá pessoal, há como mudar apenas a cor de um objeto sem haver a necessidade de criar um novo material para tal cor?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Uma das formas que uso, consiste em aplicar um shader que tem como cor base, as cores presentes nas vértices (vertex color) assim eu posso ter um material para vários objetos, sendo que, cada um deles tem sua própria cor.
Fazendo dessa forma, também é possível alterar a cor via script, para isso basta criar um array com as vértices do objeto e percorrer esse array aplicando a cor desejada.
qualquer coisa, mia aí que te ajudo! Boa noite bichano.
Fazendo dessa forma, também é possível alterar a cor via script, para isso basta criar um array com as vértices do objeto e percorrer esse array aplicando a cor desejada.
qualquer coisa, mia aí que te ajudo! Boa noite bichano.
Isabela- Avançado
- PONTOS : 2834
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: Cores nos materiais sem criar material
Quê?! Não entendi nadinha
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
NKKF escreveu:Olá pessoal, há como mudar apenas a cor de um objeto sem haver a necessidade de criar um novo material para tal cor?
Não tem como. A Unity faz o bloqueio do material base para evitar criar uma nova instância de material para cada objeto que você cria, então se você quer mudar a cor, deve obrigatoriamente criar um novo material. E sinceramente, é o mais correto a se fazer.
Re: Cores nos materiais sem criar material
Sim, tem como.
vou lhe dar um exemplo prático: Você tem 16 objetos, e quer que haja uma variação na cor principal de cada um.
Pelos meios normais, isso representaria 1 SetPass call(drawcall) por objeto, visto que, cada instância de objeto utiliza uma instância de material para representar a variação.
Por meio das cores das vértices(vertex color), você tem a possibilidade de definir uma cor por objeto, sem criar uma nova instância de material, já que a cor não é definida no material em si, sendo apenas um dado armazenado na Mesh e lido durante a execução.
Segue abaixo um teste que realizei aqui, nesta cena temos 2 setPass calls, um referente à cor sólida do Skybox e o outro às 16 instâncias da esfera padrão. Em mobile, isto seria um ganho considerável em desempenho, imagine ter 10000 objetos ao custo de apenas 1 Drawcall.
E aqui meu setup:
*Um shader que utiliza as cores das vértices como cor principal. Você pode encontrar vários shaders como esse na internet.
*O Script CorInstancia nada mais é que o exemplo da API da Unity sobre Mesh.color com uma variável do tipo Color declarada para que eu possa alterar a cor principal ao meu gosto.
Ref: Scripting API: Mesh.Color
Vantagens:
Custo de apenas 1 SetPass Call(drawcall) por n instâncias;
Flexibilidade de personalização, por ser uma cor definida por vértice, você pode ter mais de uma cor no mesmo objeto, ex:
Desvantagens:
Alterar em tempo real a propriedade Mesh.colors causa um leaking de memória, então você precisa definir as cores em um software 3d ou fazer como eu fiz no exemplo, usar o script apenas para alterar a cor e depois desabilitá-lo, visto que uma vez alterada a cor, ela já fica salva nas vértices, não sendo necessário alterar a todo momento.
Levando em consideração as vantagens e desvantagens, você pode utilizar essa técnica em quase tudo, exceto em objetos que você queira alterar a cor principal em tempo real.
vou lhe dar um exemplo prático: Você tem 16 objetos, e quer que haja uma variação na cor principal de cada um.
Pelos meios normais, isso representaria 1 SetPass call(drawcall) por objeto, visto que, cada instância de objeto utiliza uma instância de material para representar a variação.
Por meio das cores das vértices(vertex color), você tem a possibilidade de definir uma cor por objeto, sem criar uma nova instância de material, já que a cor não é definida no material em si, sendo apenas um dado armazenado na Mesh e lido durante a execução.
Segue abaixo um teste que realizei aqui, nesta cena temos 2 setPass calls, um referente à cor sólida do Skybox e o outro às 16 instâncias da esfera padrão. Em mobile, isto seria um ganho considerável em desempenho, imagine ter 10000 objetos ao custo de apenas 1 Drawcall.
E aqui meu setup:
*Um shader que utiliza as cores das vértices como cor principal. Você pode encontrar vários shaders como esse na internet.
*O Script CorInstancia nada mais é que o exemplo da API da Unity sobre Mesh.color com uma variável do tipo Color declarada para que eu possa alterar a cor principal ao meu gosto.
Ref: Scripting API: Mesh.Color
Vantagens:
Custo de apenas 1 SetPass Call(drawcall) por n instâncias;
Flexibilidade de personalização, por ser uma cor definida por vértice, você pode ter mais de uma cor no mesmo objeto, ex:
Desvantagens:
Alterar em tempo real a propriedade Mesh.colors causa um leaking de memória, então você precisa definir as cores em um software 3d ou fazer como eu fiz no exemplo, usar o script apenas para alterar a cor e depois desabilitá-lo, visto que uma vez alterada a cor, ela já fica salva nas vértices, não sendo necessário alterar a todo momento.
Levando em consideração as vantagens e desvantagens, você pode utilizar essa técnica em quase tudo, exceto em objetos que você queira alterar a cor principal em tempo real.
Isabela- Avançado
- PONTOS : 2834
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: Cores nos materiais sem criar material
Valeu Isa, tenho certeza que isso vai ajudar muuuita gente mesmo!
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Isto é interessante.
Seria aplicável no shader Standard sem perdas?
Seria aplicável no shader Standard sem perdas?
Re: Cores nos materiais sem criar material
Sim, sem perdas, apenas com a limitação que citei anteriormente.
Existe um tópico no fórum oficial que trata sobre uma versão do Standard Shader que use Vertex color, são 7 paginas e muitas versões, cada uma delas compatível com uma versão diferente da Unity...
Então, pra quem veio a este tópico procurando uma solução pra usar com as versões mais novas, sugiro que baixe o shader graph e faça igual a essa imagem.
Isso resolve a questão;
De qualquer forma, aqui está o link caso queira mais informações
Link bonitinho
Existe um tópico no fórum oficial que trata sobre uma versão do Standard Shader que use Vertex color, são 7 paginas e muitas versões, cada uma delas compatível com uma versão diferente da Unity...
Então, pra quem veio a este tópico procurando uma solução pra usar com as versões mais novas, sugiro que baixe o shader graph e faça igual a essa imagem.
Isso resolve a questão;
De qualquer forma, aqui está o link caso queira mais informações
Link bonitinho
Isabela- Avançado
- PONTOS : 2834
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: Cores nos materiais sem criar material
http://prntscr.com/leto2h :/
Isa, sabe se dá para usar esses recursos com sombras também?
Isa, sabe se dá para usar esses recursos com sombras também?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Vlw @Isabela ... Eu estava com um conceito errado dos materiais. Obrigado por corrigir :D
Re: Cores nos materiais sem criar material
Marcos, seus conceitos sobre materiais estão corretíssimos, quem desenvolve jogos é que acaba tirando leite de pedra pra conseguir contornar as limitações das engines, achando soluções como essa kkk uma ótima noite pra ti! @NKKF a imagem que postei é de um Standard shader com vertex color, o que por padrão recebe e gera sombras. Vai na fé que é sucesso :3
Isabela- Avançado
- PONTOS : 2834
REPUTAÇÃO : 260
Idade : 24
Respeito as regras :
Re: Cores nos materiais sem criar material
Isa, até agora não consegui aplicar/compreender/estudar/achar algo na internet sobre isso/refazer esse passo a passo.. Pode explicar de outra maneira?
Desculpa kk..
Desculpa kk..
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Consegui gente, era mais fácil do que eu pensava, valeu Isa e Marcos!
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Gente, descobri um problema: ele muda a cor da Mesh então ele precisa ter vários objetos então eu não posso usar apenas 1 Quad :/
Alguma ideia de como resolver?
#EDIT: Malz ae galera, funciona direitinho, eu que não sei usar '-'
Alguma ideia de como resolver?
#EDIT: Malz ae galera, funciona direitinho, eu que não sei usar '-'
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
Isa ou alguém, sabe se dá para fazer isso com texturas também?
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Cores nos materiais sem criar material
NKKF escreveu:Isa ou alguém, sabe se dá para fazer isso com texturas também?
EEEEm tese da, pois tu vai modificar diretamente a textura... Mas não sei quais métodos a Unity disponibiliza para isto. Talvez SetPixels, ou algo do tipo.
Tópicos semelhantes
» Cores Aleatorias!
» como mudar o material de um mesh que tem mas de 1 material por Script ?
» Materiais
» materiais unity
» Ajuda com cores.
» como mudar o material de um mesh que tem mas de 1 material por Script ?
» Materiais
» materiais unity
» Ajuda com cores.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos