El enfoque de hoy estará en shaders. Usted puede ser curioso en cuanto a por qué fuimos a hablar sobre el editor, cómo escribir código en la unidad, y la construcción de un juego de Shaders.

La respuesta es sencilla, shaders son un aspecto muy importante de la pipeline de gráficos. Se le permite personalizar la forma en que el paisaje y los personajes son retratados en el juego.

Usted puede obtener el modelo 3D de Adobe utilizado Mixamo, su nombre es Knight_D_Pelegrini.
El sprite 2D se obtuvo del Temple Run pack esté disponible en Opengameart.com
Descargar el archivo zip proyecto aquí

Tabla de contenidos
convertirse en un desarrollador de juegos vr profesional con la unidad

Pre-Order The Complete Realidad Virtual desarrollo del juego con Unity y aprender a crear juegos y experiencias de inmersión mediante la construcción de 10 juegos de realidad virtual. El curso asume ninguna experiencia previa Unidad o VR – Te enseñaremos C #, la Unidad y la programación 3D de la tierra-para arriba

comprobarlo en Zenva Academia y obtener acceso temprano!

Introducción a Shaders

Para dar un ejemplo de lo que quiero decir, puede importar cualquier modelo 3D en la Unidad. Vamos a echar un vistazo a la Jet del juego que hemos construido.
JetDefault

Como se puede ver en la imagen de arriba, se utilizó el mismo chorro como antes y se ve igual. Veamos un poco más profundo y la mirada en el panel de información. Se puede ver debajo de donde dice Materiales que estamos permitiendo el uso de sondas de luz y utilizando una sonda mezcla de reflexiones. Si miramos un poco menos de eso, es donde el shader es.

ShaderInspector

Podemos ver que estamos usando un shader estándar y nos da muchas opciones que podemos modificar con ella. el modo, mapas principales Hemos renderizado de albedo, metálico, suavidad, mapas normales, mapas de altura, la oclusión, la emisión, la tarea detalle, suelo de baldosas, offset. mapas secundarios que tiene Detalle albedo x, mapa normal, suelo de baldosas, offset, y Conjunto UV.

Cada tipo de shader a nuestra disposición nos permite tener diferentes propiedades que podemos manipular para adaptarse a nuestras necesidades. Para ilustrar esto, permite el cambio del shader estándar para el shader Apagado / textura. Para ello, haga clic en el cuadro de sombreado, sin encender más destacado, y luego seleccione textura.

UnlitShowcase

Como podemos ver, las únicas propiedades que tenemos con éste es seleccionar qué textura a utilizar para el objeto, junto con suelo de baldosas y offset. También podemos ver que la forma en que el chorro se hace es muy diferente a la anterior con el shader estándar.

Vamos a echar un vistazo a algunas otras shaders para obtener una mejor comprensión de cómo funcionan.

Una mirada más profunda en los shaders

Shaders vienen en una amplia variedad de sabores a la derecha de la caja con la unidad y lo hace un excelente trabajo de manejar la mayor parte de su día a día las necesidades de desarrollo del juego. Por lo tanto, para ilustrar lo que quiero decir; Vamos a ver un sprite 2D y 3D para el modelo de cómo afectan los shaders de cada uno.

Para empezar, juego nos dejó una escena 2D y 3D para esto. En la escena 2D, cambiar la cámara de 3D a 2D y el modo de cámara de representación para ser ortográfica. El siguiente paso, crear un nuevo material haciendo clic derecho sobre la carpeta debe crear denominada Materiales, seleccionar materiales. Nombre que el templo material de material.

TempleRunMaterial

Ahora vamos a echar un vistazo a lo que dice la documentación de la unidad de lo que cada tipo de sombreado está destinado a lograr.

Además de la Shader estándar, hay una serie de otras categorías de una función de shaders para fines especializados:


  • FX:. Los efectos de iluminación y vidrio
  • GUI y la interfaz de usuario:. Para los gráficos de la interfaz de usuario
  • móvil:. Simplificado de sombreado de alto rendimiento para dispositivos móviles
  • Naturaleza:. Para los árboles y el terreno
  • Las partículas:. Efectos sobre el sistema de partículas
  • Skybox: Para representación de los ambientes de fondo detrás de toda la geometría
  • Sprites: Para el uso con el sistema de sprites 2D
  • Toon:. Renderizado en estilo de dibujos animados
  • Se apaga: Para la prestación que evita por completo toda la luz & amp; sombreado
  • Legacy: La gran colección de shaders más antiguas, que fueron reemplazados por el sombreado estándar

    Podemos ver que cada tipo de shader tiene un propósito específico, y por desgracia Toon no es parte de la construcción en los shaders a partir de la última versión de la Unidad en la actualidad. Así que, para evitar confusiones, a continuación es una captura de pantalla de todos los shaders presente en la Unidad.


    (Nota:. Podemos omitir personalizado desde el construido en la lista de shaders porque esos son los shaders que he construido que vamos a profundizar en adelante)

    La mayoría de los shaders que se utilizan normalmente son el estándar Shader, móvil Shaders, y shaders de Sprite. El shader estándar está diseñado para dar una visión bastante realista del modelo a pesar de que no tendrá ningún efecto de transparencia adecuada sobre los sprites 2D. Lo mismo ocurre con más o menos los Shaders móviles que están a su difusa típica y difusa golpeado, mapeo especular, y un procesador de partículas; Estos shaders están optimizados para el uso móvil, aunque puede ser utilizado en PC. Por último, tenemos los shaders de sprites. Tienen una opción por defecto y difusa. Estos shaders están optimizados para los sprites 2D si así lo decide utilizar un sombreado para el arte 2D.

    vista Vamos a cómo funciona el shader de serie en ambos modelos 2D y 3D.


    Como podemos ver, las vitrinas modelo 3D todos los pliegues y la iluminación para el modelo apropiadamente con muy buen sombreado. También parece bastante realista en términos de no mirar muy animados.


    El sprite 2D, sin embargo, parece apropiado a excepción de lo que parece ser la transparencia a través de la hemorragia. Vemos una frontera muy poco natural en todo el sprite y no tenemos forma de eliminarlo.

    El siguiente, es el shader difuso chichones móvil.


    El móvil shader difuso chichones en un modelo 3D se ve casi exactamente igual que el shader estándar y eso es exactamente la forma en que fue diseñado. Fue modelado después de la shader estándar, pero optimizado para dispositivos móviles.


    Una vez más, vemos los mismos resultados para el sprite 2D como con el shader estándar.

    móvil chocó con el mapeo especular.


    Este shader añade un poco de iluminación muy brillante al modelo. Cuanto más alto se tiene la propiedad brillo, más se parece a distorsionar la cara del modelo.


    Con el sprite 2D, que todavía tiene el borde alrededor del sprite, pero el sprite también tiene un muy buen brillo a la misma.

    Sprites defecto shader


    Ahora vemos algunos resultados inesperados para el modelo 3D. Parece convertir el modelo en 3D como un sprite 2D y se mezcla la cara para ser parte de la campana. La coloración también ha cambiado a ser una versión animada de los colores en lugar de los más oscuros que estamos acostumbrados.


    Ahora el 2D ya no sprite tiene esa frontera desagradable alrededor de ella y ha prestado adecuadamente.

    Sprites difusa de sombreado.


    Es de nuevo hace que el modelo 3D como un sprite 2D y se mezcla la cara para ser parte de la campana. La coloración también ha cambiado a ser los colores más oscuros que estamos más acostumbrados.


    El sprite de nuevo hace apropiadamente, y el esquema de color es más oscuro que la versión predeterminada.

    La construcción de nuestra propia Shader

    ¿Por qué queremos construir nuestra propia shader? La toma de let por ejemplo, que queremos un resultado muy concreto de cómo el personaje o modelo se debe mostrar y ninguno de los shaders defecto producirán los resultados que queremos. Tendríamos que rodar nuestro propio shader para producir esos resultados. Para entrar en el modo de pensar para la construcción de shaders, vamos a construir el sombreado más básico que hay, albedo de mapeo o como me gusta llamarlo, White Out. El código se ha comentado para dar una visión general breve de cómo se creó y vamos a ir más en profundidad después de esto para entender lo que está pasando.


    No se va a fondo con la sintaxis de sombreado en esta parte del tutorial, no se preocupe, que está al lado. Por ahora, vamos a hablar de cómo funciona este shader específicos.


    La primera parte del código es especificar dónde queremos que nuestro shader a vivir en el interior del editor de Unity. Que es todo lo que la línea 2 está haciendo. Línea 5, que sólo tiene la palabra Sub Shader es donde el resto de nuestras vidas de código. Las especifica la etiqueta de cómo queremos que nuestro objeto a ser prestados.

    CGProgram en la línea 11 indica que esta es la parte del código que fue construido por NVIDIA. La directiva pragma indica que queremos utilizar una parte específica de shader código creado previamente por nosotros y nos permite escribir un método sobre ella para darle mayor control sobre lo que hace.

    La estructura nos permite poner los valores dentro de ella que podemos manipular en el método. Por último, se obtiene con el método que debe tener el nombre de surf debido a la directiva pragma. Tenemos dos parámetros para el método, de entrada e inout o lo que queremos de salida.

    No es necesario llamar a la entrada, ya que se infiere de lo que queremos hacer. Hacemos salida de llamada y configurarlo para que albedo, que es una palabra clave de NVIDIA y lo ponemos al valor flotante de 1. Esto llenará con el color que en este caso es de color blanco.

    ENDCG es la designación de ese que estamos terminando el código CGPROGRAM. A continuación, establecemos un repliegue que establece que si el código no se puede ejecutar en una pieza específica de hardware que se debe seguir adelante y utilizar el sombreado nombrado en su lugar.


    descomponer Shader Sintaxis:

    La sintaxis de sombreado es relativamente fácil de recordar y que hará todo lo posible para explicarlo. Sólo recuerde, la Unidad tiene una excelente documentación, si usted lo puede encontrar que va sobre cada tipo de valor que puede tener un sombreado, así como cómo se puede manipular un shader en C # código de forma limitada.

    Otra cosa que siento que debo señalar, si no se ha notado ya, es que no existe la finalización de código para escribir archivos de sombreado. Usted puede encontrar uno muy simple en la Galería de Visual Studio, aunque puedo garantizar que usted no lo encontrará tan útil.
    Shader «MyShaderName» Properties {{// … propiedades aquí …} SubShader {// … subshader de hardware de gráficos Un … // … Sólo se necesita una SubShader, pero usted puede tener más si necesaria Pass {// … comandos de paso …} // … más pasadas si es necesario …} subShader {// … subshader de hardware de gráficos B …} // … opcional de respaldo … FallBack «retorno a otro shader si es necesario»} 1Shader «MyShaderName» Properties {{// … propiedades aquí …} SubShader {// … subshader de hardware de gráficos Un … // .. . Sólo se necesita una SubShader, pero puede tener más si es necesario Pass {// … comandos de paso …} // … más pasa si es necesario …} SubShader {// … subshader para los gráficos B hardware …} // … opcional de respaldo … fallBack «retorno a otro shader si es necesario»} Shader «Lista de ajustes utilizados frecuentemente» Propiedades {{_Color ( «color principal», en color) = (1, 1,1,0.5) _SpecColor ( «especificaciones color», color) = (1,1,1,1) _Emission ( «Emmisive color», color) = (0,0,0,0) _Shininess ( «Brillo», R ange (0,01, 1)) = 0.7_MainTex ( «Base (RGB)», 2D) = «blanco» {}} SubShader {Pass {Material de {difusa [_Color] ambiente [_Color] Brillo [_Shininess] Specular [_SpecColor] Emisión [_Emission]} Iluminación En SeparateSpecular En SetTexture [_MainTex] {ConstantColor [_Color] Combinar la textura * DOBLE primaria, textura *} constante sampler2D _MainTex; sampler2D _BumpMap; struct v2f {float4 pos: SV_POSITION; de color fixed3: COLOR0; }; struct SurfaceOutput {fixed3 Albedo; // color difuso fixed3 normal; // espacio tangente normal, si está escrita fixed3 de emisión; medio especular; // poder especular en el intervalo 0..1 fijo Gloss; // intensidad especular fija alfa; // alfa para transparencias}; struct SurfaceOutputStandardSpecular {fixed3 Albedo; // color difuso fixed3 especular; // color especular fixed3 normal; // espacio tangente normal, si está escrita half3 de emisión; medio Suavidad; // 0 = áspero, 1 = suavizar medio de oclusión; // oclusión (por defecto 1) fijado alfa; // alfa para transparencias}; olas vacío (en la entrada, inout SurfaceOutput o) {o.Albedo = 1; o.Alpha = 1; o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap)); } V2f vert (appdata_base v) {v2f O; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.color = v.normal * 0,5 + 0,5; O RETURN; } Fixed4 frag (v2f i): SV_Target {fixed4 retorno (i.Color, 1); }} ENDCG de emergencia «difusa»} 1234567891011121314151617181920212223242526Shader «Lista de ajustes utilizados frecuentemente» Propiedades {{_Color ( «Color principal», en color) = (1,1,1,0.5) _SpecColor ( «Especificaciones Color», de color) = (1 , 1,1,1) _Emission ( «Emmisive color», en color) = (0,0,0,0) _Shininess ( «Brillo», Rango (0.01,1)) = 0.7_MainTex ( «Base (RGB)», 2D) = «blanco» {}} SubShader {Pass {material {difusa [_Color] ambiente [_Color] Brillo [_Shininess] especular [_SpecColor] Emisiones [_Emission]} LightingOnSeparateSpecularOnSetTexture [_MainTex] {ConstantColor [_Color] Combinar la textura * DOBLE primaria , textura *} constante sampler2D _MainTex; sampler2D _BumpMap; structv2f {pos float4: SV_POSITION; fixed3 de color: COLOR0;}; structSurfaceOutput {fixed3 albedo; // color difuso fixed3 normal; // espacio tangente normal, si está escrita fixed3 de emisión; medio especular; // poder especular en el intervalo 0..1 fijo Gloss; // intensidad especular fija alfa; // alfa para transparencias}; struct SurfaceOutputStandardSpecular {fixed3 Albedo; // color difuso fixed3 especular; // color especular fixed3 normal; // espacio tangente normal, si está escrita half3 de emisión; medio Suavidad; // 0 = áspero, 1 = suavizar medio de oclusión; // oclusión (por defecto 1) fijado alfa; // alfa para transparencias}; olas vacío (en la entrada, inout SurfaceOutput o) {o.Albedo = 1; o.Alpha = 1; o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap)); } V2f vert (appdata_base v) {v2f O; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.color = v.normal * 0,5 + 0,5; O RETURN; } Fixed4 frag (v2f i): SV_Target {fixed4 retorno (i.Color, 1); }} ENDCG de emergencia «difusa»}

    Para descomponerlo, vamos a hablar de lo que cada elemento está haciendo.

    _Color = establece el color del objeto

    _SpecColor = es el color especular del objeto

    _Emission = el color de emisión del objeto

    _Shininess = la cantidad de luz reflejada por el objeto

    _MainTex = La textura siendo manipulado

    Iluminación = es una opción que puede tener dentro o fuera

    = SeparateSpecular una opción que se puede tener dentro o fuera

    Sampler2D = cómo se accede a una textura en su método

    fixed3 Albedo = difusa de color

    fixed3 normal = espacio tangente normal, si está escrito

    fixed3 Emisión = el color de emisión del objeto

    medio Specular = potencia especular en el intervalo 0..1

    Gloss fijo = intensidad especular

    fijo alfa = alfa para transparencias

    medio Suavidad = 0 = áspero, 1 = Suave

    medio Oclusión = oclusión (por defecto 1)

    o.Albedo = 1 o tex2D (_MainTex, IN.uv_MainTex));

    o.Alpha = 1 o tex2D (_MainTex, IN.uv_MainTex));

    o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));

    float2 = Uv dirección del objeto

    float3 = r, g, los valores de b

    float4 = r, g, b, a valores

    fixed2 = Uv dirección del objeto

    fixed3 = r, g, los valores de b

    fixed4 = r, g, b, a valores

    Esto no es de ninguna de las maneras la lista completa de variables disponibles con Shaders. Hay muchos más y son específicos para ciertas acciones dentro de un shader construido. El siguiente tutorial, vamos a entrar en más profundidad y construir más shaders para manejar las tareas más específicas. Hasta la próxima, esto es Jesse y puede ser el código libre de errores.

    Mensajes relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *