Ejemplos del Surface Shader
Ejemplos de Iluminación del Surface Shader

Modelos de Iluminación Personalizados en Surface Shaders

Cuando escriba Surface Shaders, usted está describiendo las propiedades de una superficie (albedo color, normal, …) y la interacción de iluminación es calculada por un Lighting Model. Los lighting models (modelos de iluminación) integrados son Lambert (iluminación difusa) y BlinnPhong (iluminación especular).

Algunas veces usted puede querer utilizar un lighting model (modelo de iluminación) personalizado, y es posible hacer esto en Surface Shaders. El Lighting model no es más que un par de funciones Cg/HLSL que coinciden en algunas convenciones. Los modelos integrados Lambert y BlinnPhong están definidos en el archivo Lighting.cginc dentro de Unity ({unity install path}/Data/CGIncludes/Lighting.cginc en Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc en Mac).

Declaración de Lighting Model

El Lighting Model es un par de funciones regulares con nombres comenzando con Lighting. Ellas pueden ser declaradas en cualquier parte de su archivo del sombreador o en uno de los archivos incluidos. Las funciones son:

  1. half4 Lighting<Name> (SurfaceOutput s, UnityGI gi); This is used in forward rendering path for light models that are not view direction dependent (e.g. diffuse).

  2. half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi); This is used in forward rendering path for light models that are view direction dependent.

  3. half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal); This is used in deferred lighting path.

  4. half4 Lighting<Name>_PrePass (SurfaceOutput s, half4 light); This is used in light prepass (legacy deferred) lighting path.

Tenga en cuenta que usted no necesita declarar todas las funciones. Un lighting model o bien utiliza view direction o no. Similarmente, si el lighting model va a funcionar solamente en forward, no declare la función _Deferred o _Prepass. De esta manera, todos los Shaders que lo utilizan se compilan a forward rendering solamente.

Custom GI (GI Personalizado)

Del mismo modo, personalice los datos de decodificación del lightmap y probes declarando la función a continuación.

  1. half4 Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);

Tenga en cuenta que para decodificar los lightmaps y probes SH de Unity, puede utilizar las funciones DecodeLightmap y ShadeSHPerPixel integradas, como se ve en UnityGI_Base en el archivo UnityGlobalIllumination.cginc dentro de Unity ({unity install path}/Data/CGIncludes/UnityGlobalIllumination.cginc on Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/UnityGlobalIllumination.cginc en Mac).

Ejemplos

Ejemplos de Iluminación del Surface Shader

Ejemplos del Surface Shader
Ejemplos de Iluminación del Surface Shader