AnyPortrait > スクリプト > カスタムシェーダー

カスタムシェーダー


AnyPortraitが提供するシェーダではなく、ユーザごとにシェーダを作成して使用する方法です。
カスタムシェーダの適用方法とベーキング方法については、関連ページを参照してください。
クリッピングマスクがあるかどうかによってシェーダコードを書く方法は2通りあります。




基本シェーダの作成方法



1. Properties
_Color("2X Color (RGBA Mul)", Color) = (0.5, 0.5, 0.5, 1.0)
_MainTex("Main Texture (RGBA)", 2D) = "white" {}
: デフォルトでAnyPortraitは2つのプロパティーしか使用しません。
カラーアニメーションの 「_Color」プロパティとテクスチャを適用する 「_MainTex」プロパティを宣言します。
これらの2つのプロパティを外部的に制御すると、AnyPortraitのロジックと競合する可能性があります。


2. Blending
Blend SrcAlpha OneMinusSrcAlpha : Alpha Blend
Blend One One : Additive
Blend OneMinusDstColor One : Soft Additive
Blend DstColor SrcColor : Multiplicative
: AnyPortraitで使用される4つの「ブレンド (Blending)」メソッド。
上記のように記述したり、必要に応じて他のブレンド宣言を行うことができます。


3. Albedo, Alpha
half4 c = tex2D(_MainTex, IN.uv_MainTex);
c.rgb *= _Color.rgb * 2.0f;
o.Alpha = c.a * _Color.a;
o.Albedo = c.rgb;
: 色の計算は、デフォルトで「2X Multiply」を適用します。
RGBが2倍になり、アルファが乗算されて適用されます。
必要に応じて変更することはできますが、エディタのレンダリング結果と異なる場合があります。




クリッピングマスクシェーダを作成する方法



1.Properties
_MaskTex("Mask Texture (A)", 2D) = "white" {}
_MaskScreenSpaceOffset("Mask Screen Space Offset (XY_Scale)", Vector) = (0, 0, 0, 1)
: クリッピングマスク処理のためにプロパティにマスクテクスチャを追加します。
AnyPortraitは自動的に上記のプロパティを追加してクリッピングレンダリングを処理します。
_MaskScreenSpaceOffset」は、「Screen Space」に対してクリッピングマスクを適用するためのプロパティです


2. Screen Space Semantic
struct Input
{
           float2 uv_MainTex;
           float4 screenPos;
           float4 color : COLOR;
};
: クリッピングマスクは「Screen Space」で処理されます。
したがって、Unityが使用する 「screenPos」変数を 「Fragment Shader」または 「Surface Shader」に渡す必要があります。


3. Mask
float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
screenUV -= float2(0.5f, 0.5f);
screenUV.x *= _MaskScreenSpaceOffset.z;
screenUV.y *= _MaskScreenSpaceOffset.w;
screenUV.x += _MaskScreenSpaceOffset.x * _MaskScreenSpaceOffset.z;
screenUV.y += _MaskScreenSpaceOffset.y * _MaskScreenSpaceOffset.w;
screenUV += float2(0.5f, 0.5f);
float mask = tex2D(_MaskTex, screenUV).r;
c.a *= mask;
: クリッピングマスクを計算してアルファチャンネルに適用する式。
この式は、通常どおり処理するのと同じ方法で記述する必要があります。