Sombreamento suave com nós?
Atualmente estou tentando construir um sombreador de estilo Anime no blender e editar os normais para obter um sombreamento melhor. Mas eu também quero um efeito de fresnel que não seja afetado pelos normais editados. Eu sei que há essa saída normal verdadeira no nó de geometria, mas ela me dá apenas os normais sombreados planos. Então, alguém conhece uma maneira de suavizar os normais com nós vetoriais ou algo que me dê normais sombreados suaves para o efeito fresnel?
Respostas
Espero que haja uma maneira melhor de fazer isso, mas aqui está uma solução alternativa que usei:
Copiei normais 'normais' para uma camada uv via script. Duas camadas para ser exato. Embora eu pudesse tê-los compactado em uma única camada, isso teria aumentado a complexidade do sombreador
import bpy
ob = bpy.context.object
for loop in ob.data.loops :
normal = ob.data.vertices[loop.vertex_index].normal
ob.data.uv_layers["XY"].data[loop.index].uv = (normal.x, normal.y)
ob.data.uv_layers["ZW"].data[loop.index].uv = (normal.z, 0)
Então, em shaders, eu pluguo o valor combinado na entrada de fresnel normal.
Aqui estão os exemplos de resultados da esquerda para a direita:
- Macaco padrão com fresnel padrão
- Com
normals edite normais personalizados conectados a fresnel - Com
normals edite fresnel padrão
Os artefatos (áreas brancas nítidas) são devido à edição normal ruim, que eu aposto que você não terá em seu modelo. Caso contrário, os normais transportados de UVs parecem ser quase idênticos aos normais suavizados originais
EDIT: Conforme observado por Heinrich Tester, o normal de UV também deve ser transformado de objeto em espaço mundial antes de usar