Version: Unity 6.3 Beta (6000.3)
Language : English
Vertex modifier Surface Shader example in the Built-In Render Pipeline
Final color modifier Surface Shader example in the Built-In Render Pipeline

Custom data Surface Shader example in the Built-In Render Pipeline

Using a vertex modifier function, it is also possible to compute custom data in a vertex ShaderA program that runs on the GPU. More info
See in Glossary
, which then will be passed to the Surface ShaderA streamlined way of writing shaders for the Built-in Render Pipeline. More info
See in Glossary
function per-pixel. The same compilation directive vertex:functionName is used, but the function should take two parameters: inout appdata_full and out Input. You can fill in any Input member that is not a built-in value there.

Note: Custom Input members used in this way must not have names beginning with ‘uv’ or they won’t work properly.

The example below defines a custom float3 customColor member, which is computed in a vertex function:

  Shader "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 customColor is set to the absolute value of the normal:

Shader example that calculates values in the vertex shader and uses them in the fragment shader.
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 GameObjectThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary
’s vertices, instead of doing that in the Surface Shader per-pixel.

Vertex modifier Surface Shader example in the Built-In Render Pipeline
Final color modifier Surface Shader example in the Built-In Render Pipeline
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961