Unity 6.3
0 онлайн 118 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 331 из 442

Использовать встроенные HLSL структуры в Встроенном Render Pipeline

Используйте предустановленные HLSL вершинные входные структуры из UnityCG.cginc для упрощения декларирования вершинных шейдеров во Встроенном Render Pipeline.

Чтобы использовать предварительно созданную структуру, выполните следующие действия:

  1. Добавьте #include "UnityCG.cginc" вверху вашего HLSLPROGRAM. Это импортирует файл UnityCG.cginc, который содержит предварительно построенные структуры.
  2. При объявлении функции вершинного шейдера используйте одну из предустановленных структур в качестве типа входного параметра. Например, чтобы использовать appdata_base, используйте v2f vert (appdata_base vertex_data).

Сборные конструкции в UnityCG.cginc являются:

  • appdata_base: указывает vertex для позиции, normalи texcoord.
  • appdata_tan: указывает vertex для позиции, tangent, normalи texcoord.
  • appdata_full: указывает vertex для позиции, tangent, normal, color, texcoord, texcoord1, texcoord2и texcoord3.
  • appdata_img: Заявляет vertex для позиции и texcoord.

Пример

Следующий шейдер использует appdata_baseи раскрашивает сетку на основе её нормалей.

Shader "VertexInputSimple" {
    SubShader {
        Pass {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
         
            // Declare the structure for data passed from the vertex shader to the fragment shader.
            struct v2f {
                float4 position : SV_POSITION;
                half4 color : COLOR;
            };
            
            // Use the built-in appdata_base structure for the vertex shader.
            v2f vert (appdata_base v)
            {
                v2f output_data;

                // Use the position from appdata_base.
                output_data.position = UnityObjectToClipPos(v.vertex);

                // Use the normal from appdata_base. 
                output_data.color.xyz = v.normal * 0.5 + 0.5;

                output_data.color.w = 1.0;
                return output_data;
            }

            half4 frag (v2f i) : SV_Target { 
                return i.color; 
            }

            ENDHLSL
        }
    } 
}

Дополнительные ресурсы