光照探針代理體 (Light Probe Proxy Volume) 組件

光照探針代理體?(LPPV) 組件允許不能使用烘焙光照貼圖的大型動(dòng)態(tài)游戲?qū)ο螅ɡ?,大型粒子系統(tǒng)或蒙皮網(wǎng)格)使用更多光照信息。
默認(rèn)情況下,探針光照渲染器從插入于場(chǎng)景內(nèi)周?chē)庹仗结樦g的單個(gè)光照探針接受光照。因此,游戲?qū)ο笤谡麄€(gè)表面上具有恒定的環(huán)境光照。此光照使用球諧函數(shù),因此具有旋轉(zhuǎn)漸變,但沒(méi)有空間漸變。在更大的游戲?qū)ο蠡蛄W酉到y(tǒng)上,這一點(diǎn)更明顯。游戲?qū)ο笊系墓庹张c錨點(diǎn)處的光照相匹配,如果游戲?qū)ο罂缭焦庹諠u變,游戲?qū)ο蟮哪承┎糠挚赡芸雌饋?lái)不正確。
__光照探針代理體__組件在包圍體內(nèi)生成插值光照探針的 3D 網(wǎng)格。可以在該組件的 UI 中指定此網(wǎng)格的分辨率。插值光照探針的球諧函數(shù) (SH) 系數(shù)將上傳到 3D 紋理中。隨后在渲染時(shí)會(huì)對(duì)包含 SH 系數(shù)的 3D 紋理進(jìn)行采樣以便計(jì)算對(duì)漫射環(huán)境光照的影響。這會(huì)向探針光照游戲?qū)ο筇砑涌臻g漸變。
標(biāo)準(zhǔn)著色器支持此功能。為了將此功能添加到自定義著色器,請(qǐng)使用?ShadeSHPerPixel
?函數(shù)。要了解如何實(shí)現(xiàn)此函數(shù),請(qǐng)參閱本頁(yè)底部的粒子系統(tǒng)示例著色器代碼示例。
何時(shí)使用該組件
Unity 中的大多數(shù)渲染器組件都包含光照探針。光照探針有三個(gè)選項(xiàng):
__Off__:渲染器不使用任何插值光照探針。
__Blend Probes__(默認(rèn)值):渲染器使用一個(gè)插值光照探針。
__Use Proxy Volume__:渲染器使用插值光照探針的 3D 網(wǎng)格。
將?Light Probes?屬性設(shè)置為?Use Proxy Volume?時(shí),游戲?qū)ο蟊仨氁堰B接__光照探針代理體__ (LPPV) 組件??梢栽谕挥螒?qū)ο笊咸砑?LPPV 組件,也可通過(guò)?Proxy Volume Override?屬性使用(借用)來(lái)自另一個(gè)游戲?qū)ο蟮?LPPV 組件。如果 Unity 無(wú)法在當(dāng)前游戲?qū)ο蠡?Proxy Volume Override 游戲?qū)ο笾姓业?LPPV 組件,則會(huì)在渲染器的底部顯示一條警告消息。
示例

在以上場(chǎng)景中,地板上有兩個(gè)平面使用發(fā)出大量光線(xiàn)的材質(zhì)。請(qǐng)注意:
使用 LPPV 組件時(shí),環(huán)境光會(huì)在幾何體上發(fā)生變化。應(yīng)使用一個(gè)插值光照探針在幾何體的每一側(cè)創(chuàng)建一個(gè)恒定顏色。
幾何體沒(méi)有使用靜態(tài)光照貼圖,球體表示插值光照探針。它們是?Gizmo Renderer?的一部分。
如何使用該組件
生成插值光照探針 3D 網(wǎng)格的區(qū)域受?Bounding Box Mode?屬性的影響。

有三個(gè)可用選項(xiàng):
Bounding Box Mode:????????????????????????????????????????????????????????功能:
Automatic Local__(默認(rèn)值)| 此模式下將計(jì)算局部空間包圍盒。在此包圍盒內(nèi)生成插值光照探針位置。如果渲染器組件未附加到游戲?qū)ο?,則會(huì)生成默認(rèn)包圍盒。包圍盒計(jì)算圍繞當(dāng)前渲染器進(jìn)行,并將沿著層級(jí)視圖往下的所有渲染器的?Light Probes__ 屬性設(shè)置為?Use Proxy Volume。
Automatic World?????????????????????????????此模式下圍繞當(dāng)前渲染器計(jì)算包圍盒,且沿著層級(jí)視圖往下的所有渲染器的?Light Probes?屬性均設(shè)置為?Use Proxy Volume。該包圍盒采用世界空間。
Custom????????????????????????????????????????????此模式下使用自定義包圍盒。在游戲?qū)ο蟮木植靠臻g中指定包圍盒。提供了包圍盒編輯工具。可以修改 UI 中的?Size?和?Origin?值來(lái)手動(dòng)編輯包圍體。

Automatic Local?與?Automatic World?之間的主要區(qū)別在于,在?Automatic Local?中,大型層級(jí)視圖中的游戲?qū)ο笫褂脕?lái)自父游戲?qū)ο蟮南嗤?LPPV 組件時(shí),包圍盒的計(jì)算需要耗費(fèi)更多資源。然而,生成的包圍盒大小可能更小,這意味著光照數(shù)據(jù)更緊湊。
包圍體內(nèi)的插值光照探針的數(shù)量受?Proxy Volume Resolution?屬性的影響。有兩個(gè)選項(xiàng):
__Automatic__(默認(rèn)值)- 使用指定的單位面積的插值光照探針數(shù)量以及包圍盒大小來(lái)計(jì)算每個(gè)軸上的分辨率。
Custom?- 允許在每個(gè)軸上指定不同分辨率(見(jiàn)下文)。

注意:每個(gè)軸上的最終分辨率必須是 2 的冪,并且分辨率的最大值為 32。
Probe Position Mode?指定插值光照探針相對(duì)于單元格中心的位置。在某些插值光照探針穿過(guò)墻壁或其他幾何體并導(dǎo)致光照泄漏時(shí),此選項(xiàng)可能很有用。以下示例使用 4x4 網(wǎng)格分辨率來(lái)顯示 2D 視圖中的?Cell Corner?與?Cell Center?之間的區(qū)別:

比較圖像
1.使用標(biāo)準(zhǔn)著色器的簡(jiǎn)單網(wǎng)格渲染器:


2.使用標(biāo)準(zhǔn)著色器的帶蒙皮的網(wǎng)格渲染器:


使用 ShadeSHPerPixel 函數(shù)的粒子系統(tǒng)示例著色器
Shader "Particles/AdditiveLPPV" {?
Properties {
? ?
_MainTex ("Particle Texture", 2D) = "white" {}
? ?
_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)?
}?
Category {
? ?
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
Blend SrcAlpha One
ColorMask RGB ? ?
Cull Off Lighting Off ZWrite Off ? ? ? ?
SubShader { ? ? ? ?
Pass {
CGPROGRAM ? ? ? ? ? ?
#pragma vertex vert ? ? ? ? ? ?
#pragma fragment frag ? ? ? ? ? ?
#pragma multi_compile_particles ? ? ? ? ? ?
#pragma multi_compile_fog ? ? ? ? ? ?
// 指定目標(biāo) ? ? ? ? ? ?
#pragma target 3.0 ? ? ? ? ? ? ? ? ? ? ? ?
#include "UnityCG.cginc" ? ? ? ? ? ? ? ? ? ? ? ?
// 必須包含此頭才能訪(fǎng)問(wèn) ShadeSHPerPixel ? ? ? ? ? ?
#include "UnityStandardUtils.cginc" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
fixed4 _TintColor; ? ? ? ? ? ?
sampler2D _MainTex; ? ? ? ? ? ? ? ? ? ? ? ?
struct appdata_t { ? ? ? ? ? ? ? ?
float4 vertex : POSITION; ? ? ? ? ? ? ? ?
float3 normal : NORMAL; ? ? ? ? ? ? ? ?
fixed4 color : COLOR; ? ? ? ? ? ? ? ?
float2 texcoord : TEXCOORD0; ? ? ? ? ? ? ? ? ? ? ? ? ? ?
}; ? ? ? ? ? ?
struct v2f { ? ? ? ? ? ? ? ?
float4 vertex : SV_POSITION; ? ? ? ? ? ? ? ?
fixed4 color : COLOR; ? ? ? ? ? ? ? ?
float2 texcoord : TEXCOORD0; ? ? ? ? ? ? ? ?
UNITY_FOG_COORDS(1) ? ? ? ? ? ? ? ?
float3 worldPos : TEXCOORD2; ? ? ? ? ? ? ? ?
float3 worldNormal : TEXCOORD3; ? ? ? ? ? ?
}; ? ? ? ? ? ? ? ? ? ? ? ?
float4 _MainTex_ST; ? ? ? ? ? ?
v2f vert (appdata_t v){ ? ? ? ? ? ? ? ?
v2f o; ? ? ? ? ? ? ? ?
o.vertex = UnityObjectToClipPos(v.vertex); ? ? ? ? ? ? ? ?
o.worldNormal = UnityObjectToWorldNormal(v.normal); ? ? ? ? ? ? ? ?
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; ? ? ? ? ? ? ? ?
o.color = v.color; ? ? ? ? ? ? ? ?
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);?
?UNITY_TRANSFER_FOG(o,o.vertex);?
return o;?
} ? ? ? ? ? ? ? ? ? ? ? ?
fixed4 frag (v2f i) : SV_Target {
half3 currentAmbient = half3(0, 0, 0);
half3 ambient = ShadeSHPerPixel(i.worldNormal, currentAmbient, i.worldPos);
?fixed4 col = _TintColor * i.color * tex2D(_MainTex, i.texcoord);
col.xyz += ambient;
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0,0,0,0));?
// 根據(jù)混合模式,霧效變?yōu)楹谏? ? ? ? ? ? ? ? ?
return col;
} ? ? ? ? ? ?
ENDCG ? ? ? ?
}}}}
硬件要求
該組件至少需要 Shader Model 4 圖形硬件和 API 支持,包括對(duì)具有 32 位浮點(diǎn)格式和線(xiàn)性過(guò)濾的 3D 紋理的支持。
要正常工作,場(chǎng)景需要通過(guò)__光照探針組__組件來(lái)包含光照探針。如果未滿(mǎn)足要求,則渲染器或光照探針代理體組件檢視面板將顯示一條警告消息。