Introducción.
Este es el tercer Blog dedicado a los modelos de iluminación, para poder continuar es necesario que lea los 2 Blogs anteriores, además tener presente como hacer un archivo CGINCLUDE, porque la intención es hacer un gran archivo que contenga una colección grande de modelos de iluminación que puedan ayudar a fácilmente poder cambiar la estética de nuestros juegos.
No todos los juegos tienen un calculo de luz realista, de hecho a veces es más conveniente no tener un modelo de iluminación realista ya que con el tiempo tiende a que nuestros juegos envejecen mejor y parezca fresco con los años, además que no es exigente en el texturizado, tampoco genera grandes cantidades de archivos, ya que por lo general descarta el mapa de normales y brillo especular, reflejos metálicos, rugosidad, etc.
Configuración de Escena.
Utiliza la escena del último blog, duplica alguna esfera, duplica un material y renombrarlo como "Toon", y crea un nuevo shader de superficie y nombrelo "Toon".
CustomLighting.cginc
Para este modelo es obligatorio declarar una textura sampler2D, normalmente llamado _Ramp o _ToonRamp, en mi caso lo llamaré _RampTex, esta textura lo que permite es cortar el degradado en franjas como si fueran cortes. también hubiera sido posible descartar la textura y hacer divisiones, multiplicaciones y redondeos para conseguir un resultado similar. pero aun asi no supera la ventaja que da la textura de colorear las sombras y las luces. así que vamos a declarar la textura _RampTex
Sampler2D _Ramptex; antes del modelo de iluminación.
El modelo como tal no es cosa del otro mundo. vamos a usar el clásico NdotL para el Lambert y el NdotV para el Bidireccional. Este calculo bidireccional no es nada ni siquiera cercano, es un calculo fake ya que al no ser un modelo de iluminación realista la intención es más por el colorido estético que por el calculo en si de la luz.
como ven el uso de Tex2D, es para usarlo como coordenada UV, en que pueda ubicar el color de la sombra dentro de la textura.
He puesto 2 versiones, Lambert sencillo y Lambert + el falso bidireccional usando un [Toggle(BDFR)] que declararemos en el shader.
Al final del resultado hay una función final color. esta función la hice con el sentido de simplificar y estandarizar el resultado final del color, pueden descartar esta función y hacer retorno sencillo.
ShaderToon.
El shader que hice fue con el propósito de experimentar con mapas normales, puede descartar el uso de mapas normales si lo desea, porque el resultado realmente no terminó de convencerme.
Puede observar que hago uso del #pragma shader_feature BDFR para descartar en la compilación si realmente llegó a no usarlo.
Conclusiones.
Queda claro que la textura puede hacer más cosas que solo cubrir una malla y dar una apariencia, sirve también para manejar datos, muchas veces mejor que como se haría un código.
Solo quédense con esto, una imagen vale más que mil palabras, aunque no lo crea en programación, una textura vale más que mil códigos y en cuestión de rendimiento si que es cierto.
Por ahora voy a descansar de escribir del tema de los modelos de iluminación, aún quedan varios modelos por fuera que trataremos después, en la medida que mis capacidades me lo permitan. sin embargo dejaré una página algo antigua dedicado a otros modelos poco convencionales pero igualmente válidos y que pueden aportar una estética distinta a los juegos.
https://www.jordanstevenstechart.com/lighting-models
Aún quedan otros modelos como translucencia plana para plantas, telas, plasticos, tambien queda por tratar la translucencia volumétrica para materiales como la parafina, estacas de hielo o la piel humana en la zona de las orejas cuando una luz intensa atraviesa la piel. También faltando el reflejo anisotrópico comúnmente usado en metales cepillados o en el cabello humano.
Comments