¿Sombreado suave con nodos?

Aug 26 2020

Actualmente estoy tratando de construir un sombreador de estilo Anime en Blender y editar las normales para obtener un mejor sombreado. Pero también quiero un efecto Fresnel que no se vea afectado por las normales editadas. Sé que existe esta verdadera salida normal en el nodo de geometría, pero me da solo las normales sombreadas planas. Entonces, ¿alguien sabe una manera de suavizar las normales con nodos vectoriales o algo más que me proporcione normales sombreadas suaves para el efecto Fresnel?

Respuestas

4 uvnoob Aug 26 2020 at 19:44

Espero que haya una mejor manera de hacer esto, pero aquí hay una solución que utilicé:

Copié normales 'normales' a una capa ultravioleta a través de un script. Dos capas para ser exactos. Si bien podría haberlos compactado en una sola capa, habría aumentado la complejidad del 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)

Luego, en los sombreadores, conecto el valor combinado en la entrada de normales de Fresnel.

Aquí hay resultados de muestra de izquierda a derecha:

  1. Mono predeterminado con fresnel predeterminado
  2. Con normals edity normales personalizados conectados a Fresnel
  3. Con normals edity fresnel predeterminado

Los artefactos (áreas blancas nítidas) se deben a una pésima edición normal, que apuesto a que no tendrá en su modelo. De lo contrario, las normales transferidas de los rayos UV parecen ser casi idénticas a las normales suavizadas originales

EDITAR: Como señaló Heinrich Tester, lo normal de UV también debe transformarse de objeto a espacio mundial antes de su uso