📝 渲染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的動態或靜態物件。

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內,
並且將這一個深度偏移後採樣,在像是臉部的材質上就可以得到頭髮的陰影。

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