UNITYで影をつくる〜アクネ退治
先程 酷いアクネを出していました
アクネというのはニキビという意味ですが、3DCGでは上記のようなゴミが出ることをいいます
上記は、影でよく出る種の デプスバッファの量子化におけるアクネではないのですが
似ているのでアクネといってみます
原因は、実は ShadowCasterにて、Posしか計算していなかったのが理由で
今回は
TRANSFER_SHADOW_CASTER_NORMALOFFSET
を使うようにします
ShadowCasterパスを直します
構造体
まず 今までは 頂点、ピクセル座標しか入力してなかったのを、色々と
頂点シェーダの入力
appdata_base構造体を使います
中身は
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
と、頂点、法線、UVがあります
フラグメントシェーダの入力
struct v2f {
V2F_SHADOW_CASTER;
};
とUNITYのマクロを使いますが、DirectionalLightだと下記のように posのみです
struct v2f {
float4 pos : SV_POSITION;
};
TRANSFER_SHADOW_CASTER_NORMALOFFSET
UnityObjectToClipPosから変更
TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)
結果
アクネなくなった