LoginSignup
0
0

More than 1 year has passed since last update.

UnityでAlpha値を変更するshaderメモ

Last updated at Posted at 2021-10-13

はじめに

これは自らの戒めのために記事である.参考にならない人も多いかもしれない.

背景情報

objファイルに記載されているvertexカラーをunityに反映させると同時にalpha値をいじりたくなった.
アルファ値を追加する前のコードは以下の通り.メッシュに記述された情報を参照して反映している.

_.shader
Shader "Custom/VertexColorShader" {
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert vertex:vert
        #pragma target 3.0

        struct Input {
            float4 vertColor;
        };

        void vert(inout appdata_full v, out Input o){
            UNITY_INITIALIZE_OUTPUT(Input, o);
            o.vertColor = v.color;

            }

        void surf (Input IN, inout SurfaceOutput o) {
            o.Albedo = IN.vertColor.rgb;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

やったこと

今回はvectorColorのアルファではなく,別の値を代入できるようにする.
SurfaceOutputとやらを使っているので,Unity公式を参考にするとAlphaを代入できるらしい.
ほならばsurfacePutputに一行追加するだけで済むはず.

_.shader
        void surf (Input IN, inout SurfaceOutput o) {
            o.Albedo = IN.vertColor.rgb;
            o.Alpha = 0.1  // ここに追加
        }

しかし,alpha値は反映されなかった

解決

  1. "RenderType"="Opaque""RenderType"="Transparent" "Queue" = "Transparent"}に変更
  2. pragmaalphaを追加

以下,完成コード

_.shader
Shader "Custom/TransParentShader" {

    SubShader {
        Tags { "RenderType"="Transparent"  "Queue" = "Transparent"}
        Blend SrcAlpha OneMinusSrcAlpha

        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert vertex:vert alpha
        #pragma target 3.0

        struct Input {
            float4 vertColor;
        };
        // fixed4 _Color;
        void vert(inout appdata_full v, out Input o){
            UNITY_INITIALIZE_OUTPUT(Input, o);
            o.vertColor = v.color;
        }
        void surf (Input IN, inout SurfaceOutput o) {   
            o.Albedo = IN.vertColor.rgb;
            o.Alpha =  0.1;
        }
        ENDCG
    }
        // 影を描写しない
    FallBack "Transprent/Cutout/Diffuse"
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0