今日まなび(20240827):Quadに張った透過テクスチャの形にあわせて影を落とす①

「今日まなび」は最低1日1h、ゲーム作るために学びたいことなんでもいいから学んでいくコーナー。
完全自分用でまとめることは考えなくてOK.1記事1h。(1hでどんだけ学べるかのスピード感もみていきたいので)
1hのうちに次回学ぶことも決定しておくこと

環境:unity2021.3.40f


直近の目標まとめ。 →透過テクスチャを張ったQuadにカスタムShaderを適応したら影がでなくなってしまったので影をつけたい

今日の学び:

前回調べたとりあえず影を落とす処理をQuadに反映してみたらこのようになった。 右はStandardシェーダーで、左がカスタムShaderである。

たしかに影は落ちたが、透過部分が反映されておらずメッシュの形(今回はQuadを使っているので4角形)で影が落ちてしまった。


というわけでStandardシェーダーの中身をみて、透過部分を考慮して影を落としている部分を調査したら以下の部分のようだった。

 //  Shadow rendering pass
 Pass {
     Name "ShadowCaster"
     Tags { "LightMode" = "ShadowCaster" }

     ZWrite On ZTest LEqual

     CGPROGRAM
     #pragma target 3.0

     // -------------------------------------


     #pragma shader_feature_local _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
     #pragma shader_feature_local _METALLICGLOSSMAP
     #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
     #pragma shader_feature_local _PARALLAXMAP
     #pragma multi_compile_shadowcaster
     #pragma multi_compile_instancing
     // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
     //#pragma multi_compile _ LOD_FADE_CROSSFADE

     #pragma vertex vertShadowCaster
     #pragma fragment fragShadowCaster

     #include "UnityStandardShadow.cginc"

     ENDCG
 }

次回、これを自作Shaderに適応できるか試す

TODO (調べたいこと、やりたいこととか疑問)

・自作shaderを適応したQuadでも影を落としたい ←今進行中
・ことなるポストプロセスを適応したい場合にカメラを分けなくてもいい方法あるんじゃないか
・Unityで深度バッファの値をどうやって取得できる?
・法線マップを扱う
・shaderで図形描いたりするのによく使う関数と使い方まとめ