GWはシェーダー本4の執筆をメインに考えてまして、その最中で気づいた小ネタはこのエントリに随時追加していこうと思います。特記がなければSRP/UniversalRP/Litシェーダーの話です。
MaterialEditor.TextureScaleOffsetPropertyメソッドの引数1個版
ソース読んでて気づいたのでメモ
MaterialEditor.TextureScaleOffsetPropertyメソッド、公式ドキュメントでは引数2個と3個のインターフェースしか書いてありませんが、BaseShaderGUI.csに引数1個の利用例がありました。
protected static void DrawTileOffset(MaterialEditor materialEditor, MaterialProperty textureProp)
{
materialEditor.TextureScaleOffsetProperty(textureProp);
}単なる記載漏れな気もします。
マテリアル拡張エディタの特殊メソッド
マテリアルの拡張エディタ読んでて「このチェックボックスのラベルはどうやって表示してるんだろう?」と悩んだ時、大抵MaterialEditorに専用のメソッドが用意されてて「なんでだよ!」ってなります。以下今日見つけた分。
- MaterialEditor.EmissionEnabledProperty
- MaterialEditor.TextureScaleOffsetProperty
- MaterialEditor.EnableInstancingField
頼む、これで全部であってくれ!
COLORセマンティクスの話
モデルデータの頂点カラーを取得するには頂点シェーダーでCOLOR入力セマンティクスを使うのですが、Litシェーダーの入力は以下のようになっていて、COLORが含まれていません。
struct Attributes
{
float4 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float2 texcoord : TEXCOORD0;
float2 lightmapUV : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
};これStandardシェーダーではどうだったっけと思ったら、実はそっちでも使っていませんでした。モダンゲーム開発では頂点カラーって随分前から使ってないんでしょうか。確かに今更使いどころのあるパラメータではなさそうですが、ちょっと意外でした。
_GlossMapScale
Litシェーダーの_GlossMapScaleって変数、これ互換性の為に遺されてるだけで、すでに使ってない物の筈なんだけど、Lit.shader見ると2回宣言されてて、これミスなのかなあ?

DirectBDRF関数
DirectBDRF関数の中のコメント分で、BRDFspec式を説明している箇所が実コードと処理が一致せず、散々悩んだ上で、最終的に「必須の括弧が1対無い」という結論に。間違ってたらごめんなさい。
誤
// Final BRDFspec = roughness^2 / ( NoH^2 * (roughness^2 - 1) + 1 )^2 * (LoH^2 * (roughness + 0.5) * 4.0)
正
// Final BRDFspec = roughness^2 / (( NoH^2 * (roughness^2 - 1) + 1 )^2 * (LoH^2 * (roughness + 0.5) * 4.0))