【UnityShader】#pragmaのalpha #5
前回の成果
TagブロックからTransparentを指定する意味がわかった。
今回やること
#pragma宣言の意味を理解して、今回こそ3Dオブジェクトの透明度を変化させる!
alpha:fade
// 今まで #pragma surface surf Standard fullforwardshadows // 今回 #pragma surface surf Standard alpha:fade
これの一番最後の部分ですね。
これが何を意味しているかを勉強していきます。
| オプション名 | 用途 |
|---|---|
| alpha | 透過部分を存在しているように見せる |
| alpha:auto | alphaと同じ |
| alpha:blend | アルファブレンディングを可能にする |
| alpha:fade | 透過部分を存在していないように見せる |
| alpha:premul | プレマルチプライドアルファ透明度を可能にする |
| alphatest:VariableName | アルファカットアウト透明度を有効にする |
alpha

普通に透過している。
alpha:auto

alphaに比べて若干影が濃いような気もするが、Unityエディタ上で違いをみてもなにもわからかった。
alpha:blend

ほんの僅かに、透明度がリアルになった。
alpha:fade

blendと同じ。
alpha:premul

alphaとalpha:autoと同じ。
alphatest:VariableName

そもそも透過されていない。
用途が違いそう。
そもそも指定しないと?

透過されません。
結局どれ使えばいい??
調べてみた感じ、基本autoとfadeで良さそう。
他のものは高度すぎてわからなかった
他にも沢山あるのですが、紹介しきれないので詳しく知りたい方は公式を確認してください。
今回の成果

とりあえず透明になった〜〜〜!
ソースコードにコメントを付与
Shader "Custom/translucent" { SubShader { // 半透明オブジェクトを一番最後に描画する Tags { "Queue" = "Transparent"} // あとで理解する LOD 200 // あとで理解する CGPROGRAM // 透過させる #pragma surface surf Standard alpha:fade // あとで理解する #pragma target 3.0 // Input構造体 struct Input{ float2 uv_MainTex; }; // surf関数 void surf(Input IN, inout SurfaceOutputStandard o){ // ベースカラーの変更 o.Albedo = fixed4(0.6f,0.7f,0.4f,1); // アルファ値の変更 o.Alpha = 0.6f; } // あとで理解する ENDCG } // あとで理解する FallBack "Diffuse" }
おまけ
あまり使わなそうな
- alpha:blend
- alpha:premul
- alphatest:VariableName
について少し記述していきます。
alpha:blend
使ってるshaderが見当たらない。
アルファブレンドをするなら
Blend SrcFactor DstFactor
という、アルファブレンドを設定できるものがあるのでそちらを使うことが多い。
詳しいことは、
このサイト様が参考になる。
alpha:premul
これも同じく見当たらない。
プレマルチプライドアルファ(Premultiplied Alpha)とは、RBGチャンネルにアルファ値が乗算されているもの。
alphatest:VariableName
上記2つよりも不明。
alphatest:VariableNameは -アルファテストモード。透明カットアウトシェーダに使用します。カットオフ値のVariableNameは、float変数になっています。
と記述されているサイト様はいくつかあるが具体的な説明はなかった。
SurfaceShaderとは関係なさそうだが、一応公式のAlphaTestのリンクを載せておきます。
完全に理解できたわけではないけど、雰囲気だけわかった気がする。
勉強すべき時が来た時にすればいいか。。。
