在設定陰影之前,這一頁會先說明為什麼ASP會至少使用額外的一張shadow map。


卡通渲染角色自陰影問題


在一般情況下,使用內建的shadow map時,人物身上的self shadowing的效果並不理想,這是因為shadow map的大小有限的關係 - 同一張shadow map必須能夠包含整個場景,場景上的人物通常只能佔shadow map內非常小的部分 (即使有使用Unity內建的4層Cacaded Shadow Map,仍然不夠)。

Untitled

上圖中,頭髮與臉部mesh投射出的陰影,就會因為shadow map不夠大而在自身產生不理想的self shadowing。

單單只是將頭髮與臉部mesh的ShadowCaster改成Off可以避免來自臉部與頭髮的自陰影,但地上的人物陰影同時也會缺少臉部與頭髮。

Untitled

自陰影的解決方法 - Character-Only Shadow Map


ASP選擇使用一個可以有效解決self shadowing的方法 - 將人物渲染至一張獨立的shadow map中,人物本身只接收來自Unity內建、不包含人物的shadow map陰影, 而一般的場景物件則接收包含人物的shadow map以及內建shadow map - 共兩張shadow map的陰影, 這並不是一個適用於所有類型的方法,但對於追求二次元風的卡通渲染來說已經可以得到足夠有說服力的結果。

Untitled

人物本身仍然能接收來自Unity內建shadow map的陰影

Untitled

抑或是選擇性的針對特定材質開啟接收人物陰影,比如說只將腿部的部分設為可接收/人物陰影

Untitled