Custom data Surface Shader example in the Built-In Render Pipeline
An example of a Surface Shader that inputs a custom color.
읽는 시간 1분최근 업데이트: 23일 전
Using a vertex modifier function, it is also possible to compute custom data in a vertex Shader, which then will be passed to the Surface Shader function per-pixel. The same compilation directive is used, but the function should take two parameters: and . You can fill in any Input member that is not a built-in value there.
vertex:functionNameinout appdata_fullout InputThe example below defines a custom member, which is computed in a vertex function:
float3 customColorShader "Example/Custom Vertex Data" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Lambert vertex:vert struct Input { float2 uv_MainTex; float3 customColor; }; void vert (inout appdata_full v, out Input o) { UNITY_INITIALIZE_OUTPUT(Input,o); o.customColor = abs(v.normal); } sampler2D _MainTex; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; o.Albedo *= IN.customColor; } ENDCG } Fallback "Diffuse" }
In this example is set to the absolute value of the normal:
customColor
Shader example that calculates values in the vertex shader and uses them in the fragment shader.
More practical uses could be computing any per-vertex data that is not provided by built-in Input variables; or optimizing Shader computations. For example, it's possible to compute Rim lighting at the GameObject's vertices, instead of doing that in the Surface Shader per-pixel.