🦇 7.人物陰影設定 - 利用ASP Character Panel設定投射與接收陰影。(更新1.3 - 2025/11)
這一頁將示範如何透過ASP Character Panel設定人物陰影的投射與接收。
1.準備工作
1.首先,根據 2️⃣ 2.設置ASP Character Panel (重要) 的步驟,將ASPCharacterPanel這一個component加入到人物的root gameobject上。

2.接著確認ASP Render Feature Check List的Required Pass皆為Active,如果有顯示inactive或者missing的話,代表該renderer feature並沒有在當前URP renderer data中啟用,
請照著 1️⃣ 1.安裝說明、前置設定(重要) 將URP Asset與URP renderer data設定好。

3.接著,確認人物本身的material均已改為使用ASP/Character作為Shader。
只要目標Shader使用ASP/Character或者是ASP/Eye的材質,都會渲染進ASP的Character-Only Shadow Map中

2.設定陰影
到這一步,我們準備好開始設定人物陰影。回到當前人物的ASP Character Panel,往下會看到Shadow Behaviors分類,
此分類下總共有四個可展開項目。
| 項目名稱 | 說明 |
|---|---|
| Rendering Layer Information | 檢視與設定當前人物底下所有renderer各自的Layer與Rendering Layer Mask。 |
| Built-In Shadow Casting Behaviour | 檢視與設定當前人物底下所有renderer是否渲染陰影至Unity內建shadow map中。 |
| Built-In Shadow Receive Behaviour | 檢視與設定當前人物底下所有material是否接收來自至Unity內建shadow map的陰影。 |
| ASP Extra Shadow Behaviour | 檢視與設定當前人物底下所有material是否接收來自ASP的Character shadow map以及深度偏移陰影 |
💡 從ASP 1.3版之後,新增了設定立方體剔除自陰影的方式,相較於使用額外的shadow map,這是一個易於設定,同時節省效能的方法,以下頁面中我會將這兩種方法的設定步驟區分開來
請讓你的專案只選擇其中一種來設定
(新) 2-1 開啟立方體剔除以及設定陰影接收/投射
有綁定ASP Character Panel的角色上,在於Inspecotor上找到ASP Character Panel中的Shadow Behaviours分類
將SImple AABB Cube to Remove Self-shadowing 的 Enable 設為True
在shadow behaviours的其他選項中確認人物有確實跟投射Built-In Shadow (應全為綠色)

(新) 2- 2 開啟gizmos,調整剔除用立方體中心與大小
打開Editor中的Gizmos Toggle
調整Character Center Position Offset來控制剔除用立方體的中心
調整AABB Size來控制立方體的大小
💡 盡量讓這個立方體的大小可以包覆整個人物,但又不會太大。請記住人物本身是不會接收到來自立方體內的物體投射出的陰影的


(新) 2- 3關閉ASP Shadow Map
- 最後別忘了關閉ASP Shadow Map (因為使用立方體剔除法不需要額外的Shadow Map就能避免人物的自陰影了)

(舊)2-1 關閉人物對內建shadow map的陰影渲染。
先至Built-In Shadow Casting Behaviour分類中,我們可以在這裡檢視該人物底下所有renderer當下是否渲染至內建shadow map。
可以點擊各自的toggle也可以選擇下方的apply all一次開關所有shadow caster,這裡我們將所有內建shadow cast行為設為OFF。

(舊)2-2讓場景的其他static物件能顯示人物陰影
只要目標Shader使用ASP/Character或者是ASP/Eye的材質,都會渲染進ASP的Character-Only Shadow Map中,為了讓其他非ASP材質能接收人物陰影(比如說場景上使用的標準PBR材質),
我們需要將原本的 Universal Render Pipeline/Lit 改為 ASP/UniversalPBRLit。
ASP/UniversalPBRLi 不論是材質編輯器或是功能都與內建PBR一模一樣,唯一的差異就是在code中會額外去採樣進ASP的Character-Only Shadow Map,

(舊)2-3 控制指定材質接收人物陰影
在ASP Extra Shadow Behaviours中,靠左側的 Characater-Only Shadow Map分類,我們可以根據需求開啟少數接收人物自陰影也不會破壞美感的部分。比如說腿部與衣服。
大部分的情況下可以全都設為Not received。

(舊)2-4 指定特定部位投射與接收Depth-Offset Shadow。
首先,先確認專案的rendering layer mask設定與Depth Offset Shadow renderer feature。
1.設定專案的rendering layer mask與Depth Offset Shadow renderer feature

首先,我們需要在 URP Global Setting 中設定 Rendering Layer Mask。 在 Edit > Project Settings > URP Global Setting 中,新增一個 Rendering Layer Mask( Rendering Layers(3D) )。輸入合適的名稱,例如 : DepthOffsetShadowCaster。
接下來,我們需要設定 ASP Depth-Offset Shadow。在 Project 視窗中,找到儲存 Renderer Feature 的 URP Renderer Data。展開 Renderer Features 列表,找到 ASP Depth-Offset Shadow。
在面板上可以設定指定的layer與rendering layermask。
💡 請注意,Layer只能設定單一Layer,不可複選,複選。Rendering Layer Mask則可以複選

點擊展開Rendering Layer Information項目後,會看到如下畫面。

| 項目名稱 | 說明 |
|---|---|
| Layer | 在Editor,於每個game object右上方可設定,每個game object只能有1種layer,並且與physics系統共用,彈性低。 |
| Rendering Layer Mask | 每個renderer可獨立設定,Rendering Layer Mask可複選,彈性高。 |
1.首先確認上方的Depth Offset Shadow的目標Layer與Rendering Layer Mask。
2.接著針對個別renderer去設定它的Layer值與Rendering Layer Mask值,
只要layer相符且自身rendering layer mask的組合”包含”Depth Offset Shadow所設定的值,則該renderer會投射depth offset shadow。

⏭️ 前往下一頁 3️⃣ 3.人物渲染範例 - 賽璐璐