Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

Пример Shader поверхности модификатора вершин во встроенном Render Pipeline

Пример шейдера, изменяющего позиции вершин.
Пример шейдера, изменяющего позиции вершин.

Можно использовать функцию "вершинного модификатора", которая будет модифицировать входящие вершинные данные в вершинном шейдере. Это может быть использовано для таких вещей, как процедурная анимация и экструзия вдоль нормалей. Для этого используется директива компиляции Surface Shader vertex:functionName, с функцией, которая принимает параметр inout appdata_full.

Вот Shader, который перемещает вершины вдоль их нормалей на сумму, указанную в материале:

  Shader "Example/Normal Extrusion" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
      _Amount ("Extrusion Amount", Range(-1,1)) = 0.5
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert vertex:vert
      struct Input {
          float2 uv_MainTex;
      };
      float _Amount;
      void vert (inout appdata_full v) {
          v.vertex.xyz += v.normal * _Amount;
      }
      sampler2D _MainTex;
      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
      }
      ENDCG
    } 
    Fallback "Diffuse"
  }