Como soluciono esse problema estranho de iluminação?

7

Estou fazendo um pequeno jogo no Unity, e alguns modelos estão exibindo sombreamentos muito feios. O sombreamento geralmente parece descolado ao longo das bordas entre triângulos. Eu sou muito novo em trabalhar em 3D; Aposto que este é um artefato de iluminação de vértice, mas não tenho certeza e não sei como corrigi-lo.

Aqui você pode ver o pior exemplo desse problema: texto alternativo

O mapeamento de luz de baixa qualidade é visível nessa foto, mas estou perguntando sobre as faixas visíveis e formas estranhas visíveis na superfície da malha laranja em primeiro plano. A malha foi construída e mapeada por UV no Blender e está usando um shader difuso de colisão padrão. Há uma luz atrás e acima da câmera; todas as outras luzes da cena estão bem distantes. O que estou fazendo de errado e como posso fazer melhor?

EDIT: Abaixo está o wireframe para este modelo no Blender.

texto alternativo

Gregory Avery-Weir
fonte
Talvez adicione uma captura de tela do modelo de estrutura de arame. E também por que você está usando o mapeamento de relevo e nenhum mapa de relevo? (ou parece que você não tem nenhum)
Notabene
Eu adicionei uma estrutura de arame. Há um mapa de relevo, mas é intencionalmente muito sutil. Esse objeto tem alguns metros de altura e o padrão de relevo é realmente visível apenas de perto.
Gregory Avery-Weir

Respostas:

6

Parece que seus normais de vértice podem estar confusos. As normais de cada vértice devem ser perpendiculares à face (paralelas às normais da face mostradas na imagem da estrutura de arame) e você precisará de vértices separados para os cantos, um para cada face que se encontre em um canto.

adurdin
fonte
11
Para corrigir normais de vértices no Blender, selecione todos os vértices (A) e use "recalcular as normais de fora" (Ctrl + N).
Jon Purdy
adurdin: isso funcionou perfeitamente. Muito obrigado. Purdy: Eu tentei recalcular os normais lá fora; o problema é que os normais do vértice eram (razoavelmente) a média dos normais da face. Eu precisava selecionar Bordas afiadas e depois Dividir vértices para separar cada superfície plana contígua do resto do modelo.
Gregory Avery-Weir
11
Eu acho que selecionar Flat-Shading em vez de Smooth no Blender (Mesh Tools) também teria funcionado.
bummzack
bummzack: Não vejo essa opção no painel Mesh Tools. Há um "Set Smooth" e "Set Solid" em Link and Materials, mas parece não se traduzir em Unity. Deve ser interno do Blender.
Gregory Avery-Weir
2

Parece um problema normal do vértice. Não tendo usado o Blender, não tenho certeza de quais opções você tem para ver / modificar as normais diretamente no nível do vértice.

A primeira coisa que eu faria para testar é separar a superfície frontal do resto do objeto e ver se ele acende corretamente. Se isso funcionar, você poderá exportá-lo como 2 partes, as faces frontal e traseira como um objeto e as partes laterais como outro.

wkerslake
fonte
Isto é exatamente o que era. O Blender não pode modificar as normais do vértice, então eu precisava separar as superfícies planas em sub-malhas separadas no mesmo objeto.
Gregory Avery-Weir
1

Sei que esse é um tópico antigo, mas me deparei com ele; talvez alguém possa se beneficiar com esta resposta: O problema é: você está tentando interpolar normais (sombreamento suave) em um ângulo de 90 °, o que na maioria das vezes leva a problemas

Existem várias soluções para isso: 1. defina o sombreamento para nivelado (menu T) 2. Selecione todas as arestas com um ângulo> 50 (ou superior, brinque um pouco), pressione CTRL E -> marca nítida. A unidade pode ler essa informação. Isso dividirá a vert. normais nas arestas marcadas, em vez de tentar interpolá-las. 3. Use um modificador de divisão de aresta para realmente dividir a malha no ângulo que você especificar (eu recomendaria o superior neste caso) 4. Use um modificador de chanfro com profundidade de 2 ou superior. Eu recomendaria essa opção, ela torna a malha um pouco mais alta em poli, mas também mais realista. Marque as arestas que deseja chanfrar ou escolha o ângulo como o modo de limitação.

Frederik
fonte
0

Se você estiver realmente usando o lightmapping, o Unity tem uma configuração de importação modular para gerar Lightmap UVs, o que provavelmente resolveria o seu problema.

Tetrad
fonte