Anime Shading Plus
Show / Hide Table of Contents

📝 渲染PASS說明


在 1️⃣ 1.安裝說明、前置設定(重要) 的最後,有提到

ASP需要兩個基本Renderer Feature:ASP Material Pass與ASP Depth-Offset Shadow。請在Renderer Data中加入並啟用它們。


這兩個Renderer Feature是獨立的render pass。本頁也會說明不需要額外pass的Cube Proxy,以及舊版分支中可選的ASP ShadowMap (Legacy)。

Material Pass


當人物Renderer的材質球使用ASP/Character或者ASP/Eye Shader時,這些renderer就會被寫進Material Pass中。
Material Pass會將renderer 4種資訊儲存到一張RGBA32貼圖當中,分別是:

RGBA通道 資訊類型 說明
R Material ID 渲染人物下的所有ASP材質球,ASP Character Panel都會賦予一個獨立的per-mateiral ID。
G Color Luminance 該renderer的albedo(包刮albedo map)的顏色亮度,是一個0~1的灰階色
B Outline Weight 來自Vertex Color的B通道,設為0的話outline會強制不顯示。
A 無 保留,用於自行擴充

Material ID非常重要,像是screen space outline還有其他後處理(比如說ToneMapping),都需要material ID才能正確知道當下的pixel是不是卡通渲染人物的pixel,可以用於指定特定效果在該pixel或者用於優化(跳過非卡通渲染人物的pixel)。
另外 Material Pass還會額外將renderer寫入一個獨立的depth map,原因是像是screen space outline這類螢幕空間Shader,必須透過深度判斷才能知道是否有其他物件(非ASP 材質)在人物之前,才能正確坐出遮擋的效果。這也正是screen space outline無法套用在半透明物體的原因,因為半透明物體不會提供這些效果所需要的深度資訊。

Cube Proxy自陰影移除


Cube Proxy不是Renderer Feature,也不會建立額外的render pass或shadow texture。ASP/Character與ASP/Eye會在包覆角色的Cube Proxy表面採樣Unity主光源shadow map,排除由Cube內部角色幾何造成的self-shadowing,同時保留Cube外部物件投射到角色上的陰影。

在ASP Character Panel中啟用 Simple AABB Cube to Remove Self-Shadowing,再調整 Character Center Position Offset 與 Self Shadow Cutoff AABB Size,讓Cube Proxy完整包覆角色。

ASP Shadow Map (Legacy;僅Unity 2022.3、6.0與6.3)


💡 這是可選的舊版方案。Unity 6.5已移除此Renderer Feature,只使用Cube Proxy。ASP Character Panel只會在ASP ShadowMap存在且啟用時顯示 ASP ShadowMap (Legacy);未加入時不會顯示為 missing。

當人物Renderer的材質使用 ASP/Character 或 ASP/Eye Shader時,這些Renderer的陰影會被寫進ASP Shadow Map。換句話說,這是一張只包含人物的shadow map,不包含場景中使用其他Shader的動態或靜態物件。

Image

ASP Shadow Map Renderer Feature提供了一些參數供使用者自訂

參數名稱 說明
Character Shadow Map Resolution ASP Shadow Map的大小,有1024x1024、2048x2048和4096x4096三種尺寸可以選擇
Clip Distance ASP Shadow Map的最遠渲染距離
Cascade Count Cascade Shadow Map的層數,最多支援到4層cascade。
Shadow Fade Ratio ASP Shadow Map的陰影淡出程度,設為0的話是完全不淡出,在與相機距離超過clip distance時會看到陰影直接被clip掉,建議設置是0.5~1

ASP Depth Offset Shadow


日系卡通渲染的角色額頭部分,通常會有較為精細的頭髮陰影,使用傳統的shadow map很難重現出那一種效果。

同時,因為ASP渲染的人物通常不會有自陰影(尤其是臉部),我們將符合設定Layer與rendering layer mask的renderer的深度渲染至一張RT內,
並且將這一個深度偏移後採樣,在像是臉部的材質上就可以得到頭髮的陰影。

Image

💡 為避免self-shadowing,ASP會使用Material ID阻止同一個材質接收自己投射的Depth Offset Shadow。因此,同一個材質不會同時成為這個陰影的Caster與Receiver。

  • Edit this page
In this article
Back to top Generated by DocFX