툴/유니티

HDRP 레이트레이싱 / NVIDIA X UNITY 웨비나

스튜디오 오버그래픽스 2023. 1. 28. 05:42

https://www.youtube.com/watch?v=sdXJx_xFUq4&list=PLZRkhdCgooCZzZfPfZobbt6SDqYB9XGMq&index=4 

 

기존에 보편적인 라이팅 렌더 방식인 래스터화는 카메라 프레임안에 들어온 메쉬,뎁스,쉐이더 등의 정보를 기반으로 반사광, 빛의 폐색 등을 표현했는데 정교하지 않을뿐더러 카메라 프레임 경계 밖 혹은 다른 오브젝트에 가려진 부분의 빛의 반사까지 담지 못해서 앵글에 따라 갑자기 나타나보이거나 튀는 라이팅이 있거나 정교한 빛 계산이 되지 않았다. 

레이트레이싱을 사용하면 래스터화의 단점들을 보완하고 더 사실적인 빛의 연산이 가능해진다.

 

 

Project Settings - Quality에 High,Medium,Low가 있지만 3개 다 레이트레이싱 설정은 안되어 있음

퀄리티마다 HDRP 퀄리티 설정 에셋 파일이 있음

현재 프로젝트에 쓸 해당 퀄리티 에셋에서 'Realtime Raytracing'을 체크해주고

HDRP Wizard에서 HDRP + DXR 'Fix All'로 설정해주고 에디터 재시작

 

씬 뷰에서도 안티앨리어싱 적용해서 볼수 있음

 

TAA 안티앨리어싱은 이전 프레임으로부터 결과에 반영하는 원리이다 보니 씬뷰에서도 매 프레임 새로고침되게 'Always Refresh'를 체크

 

그리고 HDRP퀄리티 에셋에 가서

Lighting 항목에

-Screen Space Ambient Occlusion

-Screen Space Global Illumination

-Screen Space Reflection

-Transparent

-Screen Space Shadow

다 체크하기

 

그리고 Project Settings - Graphics - HDRP Global Settings로 가서

Frame Settings(Default Value)의 Camera 항목에가서

Lighting항목에 방금 위에서 체크한 내용대로 적용됐는지 체크하기

Frame Settings에서도 설정이 되어 있어야지 아까 활성화한 효과가 렌더됌

(카메라 컴포넌트의 'Custom Frame Settings'를 체크하면 나오는 항목으로도 개별 카메라에 설정 가능함)

 


Volume에서의 Ray Tracing

Volume에서 Screen Space 방식을 쓰는 라이팅 처리 기법인 Ambient Occlusion이나 Global Illumination 등에 Ray Tracing을 체크하면 Screen Space방식을 대체해서 Ray Tracing기법으로 적용이 됌

 

Windows - Analysis - Rendering Debugger를 들어가면 각각 기능의 디버그 뷰를 볼수 있음

레이트레이싱 AO 디버그 뷰 예시

 

Volume에서 레이트레이싱이 체크되어 있으면 레이트레이싱 상태로 보는거고

레이트레이싱이 체크 해제 되어 있으면 기존 래스터화 기법으로 보게 됌

 

Ambient Occlusion

AO라고 하며 구석진 부분에 음영처리

레이트레이싱 AO의 경우 어두운곳과 금속 표면에서 두드러진 효과

Denoise를 쓰지않으면 프레임간 샘플이 무작위로 생성되어서 이미지가 불안정해보임

이러한 노이즈를 줄이려면 Denoise를 체크해주고 TAA도 같이 사용하면 개선됌

최적화를 잘하려면 Ray Length와 Sample Count를 적정 퀄리티 만큼만 설정하고

적용안할 오브젝트는 Layer Mask에서 제외함

 

Light Cluster

Rendering Debugger - Full Screen Mode에서 LightCluster를 체크하면 LightCluster가 적용된 그리드를 볼수있음(내 버전 문제거나 버그인지 작동을 안함)

카메라 주변 반사 프로브와 로컬 광원을 보여줌 이를 기준으로 광선이 표면에 도달할 때마다 로컬 광원이 무엇인지 나타냄

Camera Cluster Range는 낮게 설정할수록 성능이 개선됌

디버그 뷰에서 보면 빨간색 셀과 초록색 셀이 나타나는데 빨간색 셀로 표시되면 광원이나 반사프로브가 특정 한도를 초과했다는 의미로 특정 광원이나 반사광이 누락되 빛 번짐이 일어날수 있음

이 문제를 해결하려면 HDRP 에셋의 셀당 한도를 늘려야함

HDRP 에셋에 Light항목에 Maximum Light per Cell(Ray Tracing)에서 숫자를 조절하면 됌

물론 이값이 커지면 성능이 떨어짐

 

Screen Space Reflection

반사광을 처리하는 볼륨, 기본값은 래스터화 기법을 사용하며 반사 프로브를 통해 반사를 렌더하고 반사 프로브가 없다면 스카이맵을 폴백함. 마찬가지로 픽셀 정보로 작동하기 때문에 카메라 프레임 외의 정보를 반영 못함

이것 역시 Ray Tracing을 체크해서 래스터화 기능을 대체

Minimum Smoothness는 레이트레이싱 전 거칠기를 설정하는데 이 값이 높을수록 성능 개선

Mode에서 Performance는 성능 위주의 기능이고 Bounce는 1회만 적용

 

-Screen Space Reflection 레이트레이싱으로 거울 만들기

거울로 쓸 메터리얼은 HDRP/Lit 쉐이더로 Receive SSR을 체크하고 Metalic과 Smoothness를 높여줌

SSR을 체크하지 않으면 스카이맵이랑 반사프로브의 정보만 받아들이게됌

그리고 거울끼리 계속 반사를 시키려면 Mode를 Quality로 바꿔주고 Bounce 숫자를 올림

 

레이트레이싱 반사가 필요한 경우가 아니라면 반사 프로브로 대체하는게 성능 개선에 도움

 

Ray Tracing Settings

레이트레이싱은 카메라 절두체 범위와 상관없이 프레임 외부 내용도 렌더하긴 하지만 거울같이 여러번 반사광이 적용될때 그림자나 오브젝트가 누락되는 경우가 있음

-Extend Shadow Culling

-Extend Camera Cullling

기능을 사용해서 누락되는 것을 방지 할수 있음

 

Screen Space Global Illumination

전역 조명 효과로 광원이 다른 오브젝트에 부딪혀 은은하게 묻는거 같은 효과

적용 하려면 HDRP 에셋 세팅에서 SSGI가 적용되었는지 체크하고

카메라 프레임 셋팅에서도 SSGI가 적용되었는지 체크하고

머테리얼 옵션에서도 SSGI를 받는지 확인하고 체크

(2021 몇 버전부터는 머테리얼에 Receive SSGI는 빠지고 Receive SSR로 통합된듯)

 

-Clamp Value

높이면 높은 강도의 조명을 반환함(효과가 세짐)

 

Ray Tracing Shadow

레이트레이싱으로 그림자를 생성 하려면 광원의 ShadowMap에 RayTracedShadow를 체크

디렉셔널라이트의 경우 반투명 물질에 Color Shadow 적용 가능

반투명 머테리얼의 Transmittance Color의 컬러값을 Color Shadow로 렌더

 

Path Tracing

앞선 레이트레이싱 기법들(그림자,반사,굴절,전역조명 등) 하나로 합친 통합 프로세스

아직 실시간용으로는 적합하지 않음

 


스튜디오 오버그래픽스
정준희 Technical Artist
ovgrps@gmail.com

 

' > 유니티' 카테고리의 다른 글

드로우콜 DrawCall 최적화  (0) 2023.02.11
셰이더 코드 작성시 편집기  (0) 2023.02.11
HDRP Procedural Sky  (0) 2023.01.28
HDRP 조명 집중 탐구 가이드 e-book / 내용 정리  (0) 2023.01.25
텍스쳐 압축/최적화  (0) 2023.01.24