Unity Light Probe Proxy Volume 컴포넌트 가이드
개요
Light Probe Proxy Volume (LPPV) 컴포넌트는 Unity에서 사용되는 중요한 요소로, 대규모 동적 게임 오브젝트에게 더 많은 조명 정보를 제공합니다. 이 문서에서는 LPPV의 사용 방법과 기능, 코드 예제 등을 다룹니다.
LPPV 컴포넌트 개요
LPPV는 베이크된 라이트맵을 사용할 수 없는 큰 동적 오브젝트들 (예: 파티클 시스템, 스킨드 메시)에 추가 조명 정보를 제공합니다. 기본적으로, 프로브에서 빛을 받는 렌더러는 주변 라이트 프로브에서 보간된 조명을 받게 됩니다.
주요 기능
- 대규모 오브젝트의 조명 정보를 보간합니다.
- 스피리컬 하모닉스를 사용하여 조명의 공간 그레디언트를 제공합니다.
- 기본적으로 스탠다드 셰이더를 통해 지원됩니다.
LPPV의 사용 방법
컴포넌트 추가하기
LPPV 컴포넌트를 사용하려면 Mesh Renderer 컴포넌트를 가진 게임 오브젝트가 필요합니다. 기본적인 설정은 다음과 같습니다:
옵션 | 설명 |
---|---|
Off | 렌더러가 보간 라이트 프로브를 사용하지 않음 |
Blend Probes (기본값) | 렌더러가 하나의 보간된 라이트 프로브를 사용 |
Use Proxy Volume | 3D 격자 무늬의 보간 라이트 프로브를 사용 |
Bounding Box Mode 설정
LPPV의 바운딩 박스 모드는 보간된 라이트 프로브의 포지션을 결정합니다. 다음과 같은 세 가지 옵션이 있습니다:
모드 | 설명 |
---|---|
Automatic Local (기본값) | 로컬 공간의 바운딩 박스를 자동으로 계산 |
Automatic World | 월드 기준으로 바운딩 박스 계산 |
Custom | 사용자 지정 바운딩 박스를 사용 |
해상도 설정
LPPV의 해상도는 바운딩 볼륨 내 보간된 라이트 프로브의 개수에 영향을 미칩니다. 두 가지 옵션이 제공됩니다:
옵션 | 설명 |
---|---|
Automatic (기본값) | 사용자가 지정한 단위 영역당 보간된 라이트 프로브 개수 기반 |
Custom | 각 축마다 해상도 지정 가능 |
예제 코드
입문자를 위한 파티클 시스템 샘플 셰이더의 코드 예제입니다. 이 코드는 ShadeSHPerPixel
함수를 사용하여 LPPV의 효과를 적용합니다.
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
// Specify the target
#pragma target 3.0
#include "UnityCG.cginc"
#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;
};
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));
return col;
}
ENDCG
}
}
}
}
결론
Light Probe Proxy Volume 컴포넌트는 Unity에서 대규모 동적 오브젝트의 조명 채택에 있어 매우 유용한 도구입니다. 이 컴포넌트를 통해 보다 사실적인 조명 효과를 구현할 수 있습니다. 위의 내용과 코드 예제를 통해 LPPV의 기본적인 사용법과 설정 방법을 이해하시길 바랍니다.