Unity 레거시에서 고해상도 렌더 파이프라인으로의 전환 튜토리얼
HDRP는 새로운 셰이더 세트와 새로운 조명 단위를 사용하며, 둘 다 빌트인 Unity 렌더링 파이프라인과 호환되지 않습니다. Unity 프로젝트를 HDRP로 업그레이드하려면 먼저 프로젝트의 모든 머티리얼과 셰이더를 전환한 후 그에 따라 개별 광원 설정을 편집해야 합니다.
이 튜토리얼에서는 Unity의 바이킹 마을 에셋 패키지의 에셋이 포함된 샘플 씬을 사용하여 HDRP 업그레이드 프로세스를 설명합니다. 이 예제에 사용된 씬을 받으려면 이 레거시 씬 패키지를 다운로드하십시오.
고해상도 렌더 파이프라인(HDRP) 설정
먼저 다음 단계에 따라 HDRP 패키지를 기존 프로젝트에 추가하십시오.
Unity 에디터에서 Package Manager 창(메뉴: Window > Package Manager)을 엽니다.
창 상단의 메뉴에서 왼쪽 상단에 있는 패키지 리스트를 All packages 로 변경한 후 Advanced > Show Preview Packages 를 선택합니다. 이제 Render-Pipelines.High-Definition 패키지를 찾아 선택한 후 Install 을 클릭합니다.
그런 다음 고해상도 렌더 파이프라인 에셋을 생성하여 설정하십시오.
Assets > Create > Rendering > High Definition Render Pipeline Asset 을 선택하여 HDRP 에셋을 생성합니다.
Graphics Settings 창(메뉴: Edit > Project Settings > Graphics) 을 엽니다.
창 상단에서 고해상도 렌더 파이프라인 에셋을 Scriptable Render Pipelines Settings 필드에 할당합니다. 이렇게 하려면 라디오 버튼을 클릭한 후 리스트에서 에셋을 선택하거나, 에셋을 필드로 드래그합니다.
HDRP 패키지를 설치하고 HDRP 에셋을 할당하고 나면 씬이 올바르게 렌더링되지 않습니다(아래 스크린샷 참조). 이는 씬이 여전히 빌트인 셰이더를 사용하기 때문입니다. 다음 섹션에서는 이러한 빌트인 셰이더를 HDRP 호환 셰이더로 업그레이드하는 방법을 설명합니다.
머티리얼 업그레이드
씬의 머티리얼을 HDRP 호환 머티리얼로 업그레이드하려면 Edit > Render Pipeline 으로 이동한 후 다음 옵션 중 하나를 선택하십시오.
Upgrade Project Materials to High Definition Materials: 프로젝트의 모든 호환 머티리얼을 HDRP 머티리얼로 전환합니다.
Upgrade Selected Materials to High Definition Materials: 프로젝트 창에서 현재 선택된 머티리얼을 전환합니다.
프로젝트 창에 커스텀 머티리얼 또는 셰이더가 포함되어 있으면 스크립트가 이를 HDRP로 자동으로 업데이트하지 않습니다. 이 머티리얼과 셰이더는 수동으로 전환해야 합니다.
광원 조정
먼저 색 공간을 Linear 로 변경해야 합니다. Edit > Settings > Player 로 이동한 후 Other Settings 섹션에서 Color Space 를 Linear 로 설정하십시오.
HDRP는 물리 광원 단위를 사용하여 광원 강도를 제어합니다. 즉 이러한 단위는 빌트인 렌더 파이프라인이 사용하는 임의적인 단위와 일치하지 않습니다.
방향 광원의 강도는 Lux로 표시하고, 다른 광원의 강도는 Lumen으로 표시합니다.
따라서 예제 씬에서는 방향 광원을 추가하여 씬의 주요 자연광인 달빛을 표현하십시오. 맑은 밤하늘에 뜬 보름달의 광속은 약 0.25 Lux입니다.
달을 표현하는 광원의 효과만 보이도록 씬의 다른 광원은 모두 비활성화하십시오.
HDRP는 빌트인 렌더 파이프라인과 다르게 하늘을 처리하므로 런타임 시점에 Volume 스크립트를 사용하여 하늘 파라미터를 동적으로 변경할 수 있습니다.
GameObject > Rendering > Scene Settings 를 선택한 후 다음 설정을 조정하여 최고의 효과를 구현하십시오.
HD Shadow Settings: 최대 그림자 거리 및 방향광 그림자 캐스케이드 설정입니다.
Visual Environment: 씬의 하늘 및 안개 타입입니다.
Procedural Sky: 기존 절차적 하늘의 포트이며 동일한 설정을 포함합니다.
Exponential Fog: Density, Color Mode, Fog Distance, Fog Height 등의 필드를 처리할 수 있는 기본 안개입니다.
또한 게임 오브젝트에는 볼륨의 절차적 하늘을 참조하는 Baking Sky 컴포넌트도 있습니다. 이 컴포넌트는 하늘 데이터를 라이트매퍼에 전달하며, 언제든지 하나만 씬에 존재해야 합니다. 그렇지 않으면 Unity는 처음에 로드된 Baking Sky 컴포넌트를 단독으로 사용하고, 콘솔에 경고가 표시됩니다.
아래에는 예제의 절차적 하늘에 사용된 값이 나와 있습니다.
절차적 하늘의 빛 강도는 노출 과 멀티플라이어 로 표현됩니다. Lux로 전환하려면 노출을 0 노출값(EV)으로 설정하고 멀티플라이어를 Lux 값으로 사용하십시오. 이 예제에서 실제 같은 시각 효과를 구현하려면 멀티플라이어를 0.02 Lux로 설정하십시오. 이 값을 0.05로 높여 씬을 더욱 잘 보이도록 만들 수 있지만, 여전히 사실적으로 보일 만큼 충분히 낮습니다.
이때 씬에 조명을 생성 하여 광원 바운스와 방향성 소프트 섀도우를 만들 수 있습니다. Window > Rendering > Lighting Settings 로 이동한 후 Scene 탭의 아래쪽 근처에 있는 Generate Lighting 을 클릭하십시오.
불붙은 횃불은 보통 약 100-140 Lumen이므로, 씬 내 점 광원의 Intensity 를 이 두 값 사이로 설정한 후 Mode 를 Baked 로 설정해야 합니다. 베이크된 조명을 사용하면 라이트맵에 베이크되는 부드러운 그림자를 사용할 수 있습니다.
또한 광원 쿠키가 더 이상 동작하지 않는 것을 볼 수 있습니다. 이는 HDRP가 표준 텍스처를 광원 쿠키로 사용하고 컬러가 지정된 쿠키를 처리하기 때문입니다. 쿠키 텍스처("TorchCookie"라고 명명됨) 임포트 설정을 다음으로 변경하십시오.
Texture Type 을 default 로 변경
Texture Shape 을 Cube 로 변경
Mapping 을 Latitude-Longitude Layout (Cylindrical) 으로 변경
sRGB (Color Texture) 비활성화
Alpha Source 를 None 으로 변경
Border Mip Maps 비활성화
Wrap Mode 를 Clamp 로 변경
Generate Lighting 을 다시 클릭하면 씬이 다음과 같이 보입니다.
Play 버튼을 누르면 게임 창에서 다음을 볼 수 있습니다.
이를 레거시 스크린샷과 비교해 보면 변경 사항이 분명하지 않을 수 있습니다. 이는 이 예제가 이방성, 피하 산란, 패럴랙스 오클루전 매핑 등과 같은 새로운 HDRP 전용 머티리얼 기능을 사용하지 않고, 원본 머티리얼이 이미 PBR을 준수했기 때문입니다.
템플릿 씬 전환
3D With Extras 템플릿 씬은 전환 프로세스를 테스트할 수 있는 또 다른 흥미로운 씬입니다. Unity Hub를 열고 새로운 프로젝트를 생성한 후 Template 드롭다운에서 3D With Extras 를 선택하여 프로젝트를 가져올 수 있습니다. 프로젝트를 생성하여 열면 다음 씬이 표시됩니다.
이전 전환 예제와 마찬가지로, HDRP 패키지를 임포트(메뉴: Window > Package Manager)하고 컨버터(Edit > Render Pipeline)를 실행합니다.
다음 단계에 따라 씬의 일부 게임 오브젝트를 수정하여 올바르게 동작하도록 만듭니다.
Post-process Volume 게임 오브젝트에 연결된 포스트 프로세스 볼륨 스크립트에 Auto Exposure 효과를 추가(Add effect > Unity > Auto Exposure)합니다.
Minimum (EV), Maximum (EV) 및 Exposure Compensation 설정을 활성화한 후 다음 값으로 설정합니다.
이렇게 하면 광원 노출값(Min, Max)의 큰 차이와 전반적으로 높은 노출을 수용할 수 있습니다.
전환 프로세스가 반사 프로브의 크기를 변경했을 수 있습니다. 이 경우 속해 있는 영역의 크기와 일치할 때까지 각 반사 프로브의 Box Size 필드를 변경합니다.
태양을 나타내는 광원(씬의 Directional Light 게임 오브젝트에 연결된 광원)의 Intensity 를 100000으로 설정합니다.
씬 설정 게임 오브젝트(GameObject > Rendering > Scene Settings)를 만들고 하늘 Exposure 를 0으로, Multiplier 를 20000으로 설정합니다.
Spot Light 게임 오브젝트에 연결된 광원의 강도를 17000으로 설정합니다. 이는 두 개의 8500 Lumen 전등이 있기 때문입니다. Angle Affect Intensity 를 활성화하여 스팟 각도와 해당 Reflector를 보정합니다.
이전 예제의 쿠키 보정 섹션에 나와 있는 대로 광원 쿠키(Spotlight_Cookie)를 보정합니다.
전구 머티리얼(LightBulb_Mat)의 발광 강도를 13.05로 설정합니다. Emissive Color 피커를 클릭한 후 Intensity 필드에 수동으로 13.05를 입력합니다. 이 값은 다른 값보다 훨씬 낮은데, 이는 이미션 컬러 강도가 EV 단위를 사용하고, 다른 값은 Lumen을 사용하기 때문입니다. 두 단위 간에 전환하려면 다음 공식을 참조합니다. 노출값은 2의 제곱 비율입니다. 즉
x EV = 2 ^ x Lumen
이고y Lumen은 ln( y EV ) / ln( 2 )
입니다.
예를 들어 13.05 EV는 2 ^ 13.05 = 8480 Lumen
이므로 8480 Lumen은 ln( 8480 ) / ln( 2 ) = 13.05 EV
입니다.
- Generate Lighting 을 클릭하여 조명을 다시 베이크합니다.
이제 다음과 같은 씬을 볼 수 있습니다.
조명이 원본 스크린샷, 그리고 원본 HDRP 템플릿과 어떻게 다른지 확인하십시오. HDRP 템플릿은 보기 좋게 만들어졌지만, 사실적이지 않습니다. 반면에 이 씬은 물리적으로 정확한 광원 값을 사용합니다. 즉 하늘에 구름 한 점 없는 오후의 태양 직사광은 최고의 전문 공사장 스포트라이트보다 훨씬 더 밝습니다. 하지만 스포트라이트는 여전히 벽면에 빛과 그림자를 드리웁니다.
머티리얼을 수동으로 전환
HDRP 머티리얼 컨버터는 레거시 스탠다드 및 언릿 머티리얼을 HDRP 릿 및 언릿 머티리얼로 각각 자동으로 전환합니다. 이 섹션에서는 커스텀 머티리얼을 수동으로 쉽게 전환할 수 있도록 컨버터의 동작 방식에 대해 설명합니다.
마스크맵
레거시 스탠다드에서 릿으로의 전환 프로세스는 레거시 스탠다드의 다양한 머티리얼 맵을 HDRP 릿 머티리얼에 있는 마스크맵의 별도 RGBA 채널에 결합합니다.
메탈릭은 빨간색 채널로 이동
오클루전은 녹색 채널로 이동
디테일 마스크는 파란색 채널로 이동
평활도는 알파 채널로 이동
디테일 맵
레거시 스탠다드에서 릿으로의 전환 프로세스는 레거시 스탠다드의 다양한 디테일 맵을 HDRP 릿 머티리얼에 있는 디테일 맵의 별도 RGBA 채널에 결합합니다. 또한 평활도 디테일도 추가합니다.
알베도는 채도가 감소하고 빨간색 채널로 이동
노멀 Y는 녹색 채널로 이동
평활도는 파란색 채널로 이동
노멀 X는 알파 채널로 이동
이 프로세스는 오버레이 함수를 사용하여 디테일 알베도 및 평활도를 기본 값과 블렌딩합니다. 이는 Photoshop 같은 이미지 편집 소프트웨어를 사용하는 것과 유사합니다.