Version: Unity 6.0 (6000.0)
语言 : 中文
内置渲染管线中顶点修改器表面着色器的示例
内置渲染管线中最终颜色修改器表面着色器的示例

内置渲染管线中的自定义数据表面着色器示例

使用顶点修改器函数也可以为顶点着色器计算自定义数据,然后将数据逐像素传递给表面着色器函数。这时使用的编译指令也是 vertex:functionName,但函数应采用两个参数:inout appdata_fullout Input。您可以在其中填写除内置值以外的任何输入成员。

注意:以此种方式使用的自定义输入成员不得包含以“uv”开头的名称,否则它们将无法正常工作。

下方示例定义了一个由顶点函数计算的自定义 float3 customColor 成员:

  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"
  }

在此示例中,customColor 被设置为法线的绝对值:

更实际的用途包括计算任何不由内置输入变量提供的逐顶点数据;或优化着色器计算。例如,可以在游戏对象的顶点处计算边缘光照,而不是在表面着色器中逐像素进行计算。

内置渲染管线中顶点修改器表面着色器的示例
内置渲染管线中最终颜色修改器表面着色器的示例
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961