Version: Unity 6.0 (6000.0)
言語 : 日本語
パーティクルシステム - スタンダードシェーダーとカスタム頂点ストリームの例
パーティクルのカスタムデータ形式を定義

パーティクルシステム - サーフェスシェーダーとカスタム頂点ストリームの例

カスタム頂点ストリームでサーフェスシェーダーを使用することは可能ですが、いくつか注意点があります。

  • サーフェス関数への入力構造体は、頂点シェーダーへの入力構造体と同じではありません。独自の頂点シェーダー入力構造体を用意する必要があります。以下の例の appdata_particles の箇所を参照してください。
  • サーフェスシェーダーを構築すると、名前が特定のトークンで始まる変数は自動処理されるようになります。最も注目に値するのは uv です。自動処理が問題を引き起こさないようにするには、UV 入力に異なる名前 (“texcoord” など) を指定してください。

これは、スタンダードシェーダーと同じ機能を持っていますが、サーフェスシェーダーです。

Shader "Particles/Anim Alpha Blend Surface" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags {"Queue"="Transparent" "RenderType"="Transparent"}
        Blend SrcAlpha OneMinusSrcAlpha
        ZWrite off
        LOD 200
        
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard alpha vertex:vert

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

         struct appdata_particles {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
            float4 color : COLOR;
            float4 texcoords : TEXCOORD0;
            float texcoordBlend : TEXCOORD1;
            };


        struct Input {
            float2 uv_MainTex;
            float2 texcoord1;
            float blend;
            float4 color;
        };


        void vert(inout appdata_particles v, out Input o) {
            UNITY_INITIALIZE_OUTPUT(Input,o);
            o.uv_MainTex = v.texcoords.xy;
            o.texcoord1 = v.texcoords.zw;
            o.blend = v.texcoordBlend;
            o.color = v.color;
          }


        half _Glossiness;
        half _Metallic;
        fixed4 _Color;


        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 colA = tex2D(_MainTex, IN.uv_MainTex);
            fixed4 colB = tex2D(_MainTex, IN.texcoord1);
            fixed4 c = 2.0f * IN.color * lerp(colA, colB, IN.blend) * _Color;
                 
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

パーティクルシステム - スタンダードシェーダーとカスタム頂点ストリームの例
パーティクルのカスタムデータ形式を定義