Introducción
Este es un problema con el que me encuentro muy a menudo, es que varias veces a la hora de escribir mis shaders, a veces tengo que repetir una y otra vez algunas funciones de uso general, por otro lado me gustaría que cuando viera mis shaders, no tener que ver un tocho enorme de código. Al parecer hay una solución parcial, haciendo uso de archivos CGIncludes a modo de librerías. En esta ocasión miraremos más de cerca cómo se hace
Cómo empezar
Abriremos el explorador de windows dentro de la carpeta de assets de nuestro proyecto en unity, daremos click derecho a un espacio vacío de la carpeta y crearemos un nuevo archivo de texto, algo como: MiCGInclude.txt
Cambiamos la extension *.txt a *.cginc, no te preocupes si te sale un cuadro de advertencia.
Deje que unity compile el archivo, algo que supongo no sabías es que unity también puede compilar archivos CG y CGIncludes
Bien ahora estamos listos para crear nuestro primer código CGInclude, ahora abramos el archivo en Monodevelop o Visual Studio.
Cómo hacer esto
Con nuestro archivo CGInclude abierto, nosotros podemos comenzar a introducir el código que necesitamos que trabaje con nuestros shaders. El siguiente código conseguirá que nuestro archivo para usarse dentro de nuestro shader y permitirnos agregar más y más código a medida que desarrollemos mas y mas shaders:
1. Nosotros comenzaremos nuestro archivo con algo llamado directiva de preprocesador. Estas son sentencias como #pragma y #include. En este caso nosotros queremos definir un set de código que será ejecutado si nuestro shader incluye este archivo en las directivas del compilador. Introduzca el siguiente código en la parte superior del archivo CGInclude
2. Nosotros siempre necesitaremos asegurarnos de cerrar #if, #ifdef o #ifndef con un #endif para cerrar la definición, del mismo modo que una sentencia if necesita dos corchetes para cerrar en C#, introduzca el siguiente código después de la directiva #define.
3. En este punto, solo necesitaremos rellenar las tripas del archivo CGInclude. lo rellenaremos con el siguiente código;
4. con esto completado ya tenemos nuestro primer Archivo CGInclude, con solo un poco de código, ahora podemos almacenar nuestros propios modelos de iluminación o funciones especializadas.
Hay un par de pasos extras que usted necesita completar antes de que sea completamente utilizable. nosotros debemos decirle al shader actual que estamos trabajando que queremos usar este archivo y este código. Modificaremos las directivas de nuestro shader y así usaremos nuestro modelo de iluminación half lambert.
4. finalmente declararemos algunas propiedades para poder manipular el resultado. ponga las líneas a continuación en el bloque de propiedades.
Cuando regrese a unity, el shader y el archivo CGInclude debe compilar, y si usted no ve algún error, usted notará que en efecto Half lambert funciona y nuevos colores aparecerán en el material.
Cómo funciona.
Cuando usamos shaders, nosotros podemos incluir otros sets de código usando la directiva #include. Esto le dice a unity que queremos dejar que nuestro shader use el código contenido dentro del archivo CGInclude; esta es la razón por la que usamos esta directiva dentro de CGProgram .
Una vez que declaramos la directiva #include unity esta habilitado a encontrar el archivo cginc dentro del proyecto y mira dentro del archivo el contenido que esta dentro de las directivas #ifndef y #endif. cuando nosotros declaramos #ifndef, simplemente le estamos diciendo que if not defined, defina algo con un nombre. en este caso le pedimos que defina MI_CG_INCLUDE
Comments