유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon


Unity3D C#/유니티 쉐이더 공부

2018. 1. 15. 22:24

Occulusion(오클루젼)은 Ambient Occlusion(엠비언트 오클루젼)이라고도 부르며, 구석진 부분의 추가적인 음영을 표현하는 기능을 가지고 있음.

일반적으로 환경광(Ambient Color)로 가득 차 있는 세상에서 그림자가 드리워진 부분도 사방에서 오는 환경광 정도를 받고 있는 것이 일반적. 하지만, 매우 구석져 있거나 복잡한 물체들로 가려져서 환경광도 닿지 못하는 부분은 더욱 더 어두워지는데 이 부분을 Ambient Occlusion(엠비언트 오클루젼 : 환경 차폐)라고 부름.

이 Occlusion 맵 역시 여러 가지 툴에서 추출해 낼 수 있는 텍스쳐인데, SurfaceOutput에서는 float로 값을 받고 있음

이 맵을 사용하면 구석진 부분의 음영이 강조되며, 결과물의 차이가 생김.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

Shader "Custom/MetallicSmoothness" {

Properties {

_MainTex ("Albedo (RGB)", 2D) = "white" {}

_Metallic("Metallic", Range(0,1)) = 0

_Smoothness("Smoothness", Range(0,1)) = 0.5

_BumpMap("NormalMap", 2D) = "bump"{}

_Occlusion("Occlusion", 2D) = "white" {}

}

SubShader {

Tags { "RenderType"="Opaque" }

CGPROGRAM

#pragma surface surf Standard 

sampler2D _MainTex;

sampler2D _BumpMap;

sampler2D _Occlusion;

float _Metallic;

float _Smoothness;

struct Input {

float2 uv_MainTex;

float2 uv_BumpMap;

};

void surf (Input IN, inout SurfaceOutputStandard o) {

fixed4 c = tex2D (_MainTex, IN.uv_MainTex);

o.Occlusion = tex2D (_Occlusion, IN.uv_MainTex);

o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));

o.Albedo = c.rgb;

o.Metallic = _Metallic;

o.Smoothness = _Smoothness;

o.Alpha = c.a;

}

ENDCG

}

FallBack "Diffuse"

}

cs

일반적인 텍스쳐를 받아 사용하는 방법과 완전히 동일하지만, 특이하게 Occlusion 맵은 독립된 UV를 받으면 에러가 남. 반드시 _MainTex와 같은 uv를 사용해야 정상적으로 작동한다는 것 유념해야 함.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

'Unity3D C#/유니티 쉐이더 공부' Related Articles


유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

[유니티 기술소개] Unity HDRP의 레이트레이싱 기능 활용 방법

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon
유니티 테크놀로지스2021. 3. 10. 9:00

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

NVIDIA 웨비나

Unity HDRP의 레이트레이싱 기능 활용 방법

NVIDIA가 주최한 이번 웨비나에서는 Unity 전문가들이 고품질 시각화와 게임 프로젝트에 활용할 수 있는 HDRP(고해상도 렌더 파이프라인)의 최신 레이트레이싱 기능을 소개합니다

현재 웨비나는 NVIDIA 웹사이트에서 온디맨드로 시청하실 수 있습니다.

조명 시나리오에서 레이트레이싱(Ray Tracing)이란 카메라나 어떤 표면에서 다른 표면이나 광원 구조물(특히 카메라 뷰의 바깥에 있는 구조물)로 광선을 발사해 조명을 생성하는 것을 말합니다. 레이트레이싱은 영화 제작이나 고품질 시각화 분야에서 광범위하게 사용됩니다. 그러나 레이트레이싱된 이미지를 적절한 프레임 속도로 렌더링하려면 높은 컴퓨팅 성능이 필요하기 때문에 최근에 와서야 비로소 레이트레이싱 기법을 실시간으로 활용하게 되었습니다. 이 때문에 게임 업계에서는 몇 십 년간 래스터화(rasterization)라는 다른 기술을 사용했습니다. 래스터화란 어떤 조명이 픽셀에 영향을 미치는지 파악하여 화면의 픽셀을 셰이딩하는 것으로, 레이트레이싱의 개념과는 무관하며 화면 공간 특성으로 인해 여러 면에서 제약을 받습니다.

다행히도 최신 메인스트림 GPU를 통해 하드웨어 가속 레이트레이싱이 대중화됨에 따라, 레이트레이싱은 특히 고품질 플랫폼에서 조명을 생성하기 위한 새로운 표준이 될 것으로 기대됩니다. HDRP(고해상도 렌더 파이프라인)는 기존의 래스터화 기법과 레이트레이싱 기법을 조합한 하이브리드 레이트레이싱 파이프라인을 제공합니다. 이를 통해 AO(앰비언트 오클루전), 반사, GI(전역 조명), 피하 산란, 그림자와 같은 일반적인 조명 효과의 레이트레이싱 버전을 생성할 수 있습니다.

위 영상은 유니티, NVIDIA, BMW의 야심찬 협업을 통해 탄생한 2019 BMW 8시리즈 쿠페의 쇼케이스입니다. 이 영상은 실시간 레이트레이싱을 사용할 때 오프라인 렌더링 솔루션에 소요되는 시간과 비용의 극히 일부만으로 매우 사실적인 결과물을 얻을 수 있다는 것을 잘 보여줍니다.

HDRP의 레이트레이싱은 현재 프리뷰로 제공되며, 아직 정식 제작에 사용 가능한 것은 아닙니다. 자유롭게 사용해 보고 포럼에 피드백을 남겨주시기 바랍니다.

이번 웨비나에서는 Unity 2020.2에서 사용 가능한 새로운 HDRP 템플릿을 활용합니다.

Unity 2020.2를 다운로드한 후 웨비나의 안내에 따르면 됩니다. 프로젝트 시작 방법은 매우 간단합니다. Unity Hub에서 새 프로젝트를 만든 다음 High Definition Render Pipeline 템플릿을 선택하고 ‘생성’ 버튼을 누르면 됩니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

현재 HDRP 템플릿에서는 조명 렌더링에 베이크된 라이트맵, 라이트 프로브 그룹, 반사 프로브, 섀도우맵 등을 통한 래스터화 기법만 사용합니다. 그러므로 먼저 레이트레이싱을 활용하도록 템플릿을 빠르게 변환할 것입니다.

그런 다음 HDRP에서 사용 가능한 주요 레이트레이싱 효과 4가지(레이트레이싱된 앰비언트 오클루전, 반사, 전역 조명, 그림자)를 자세히 설명합니다. 마지막으로, 레이트레이싱에 대한 더 과감한 접근 방식인 HDRP의 패스트레이싱(Path Tracing)을 다루며 세션을 마무리할 예정입니다. 패스트레이싱은 렌더링 시간이 크게 늘어나는 대신 훨씬 높은 시각적 정확도를 제공하는 기법입니다.

SSAO(화면 공간 앰비언트 오클루전)는 10년 이상 게임 실시간 렌더링의 주요 요소로 활용되어 왔습니다. 이는 월드에 있는 오브젝트 간의 시각적 접촉을 개선하고, 오목한 영역의 조명을 어둡게 하기 위해 환경의 디퓨즈 오클루전을 시뮬레이션하는 데 사용됩니다. 이 효과는 지나치게 많이 사용하면 지오메트리 주변에 후광이 생길 뿐만 아니라 만화 같은 결과물이 나오는 부작용이 있습니다. 무엇보다도 Z 버퍼에서 제공하는 깊이 정보에만 의존하기 때문에 프레임 바깥에 존재하는 오브젝트로부터 오클루전을 생성할 수 없다는 것이 화면 공간 기법의 커다란 단점 중 하나였습니다. 대신 비교적 낮은 성능 비용으로 카메라의 시점에 위치한 작은 영역의 마이크로 오클루전을 효과적으로 처리할 수 있다는 장점이 있습니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

레이트레이싱을 활용하면 카메라 절두체 너머에 있는 표면에 광선을 발사할 수 있으므로 프레임 바깥에 위치한 오브젝트에도 광선이 도달할 수 있습니다. 이렇게 하면 카메라 주변에 있는 모든 대형 오브젝트로부터 우수한 매크로 오클루전 효과를 얻을 수 있습니다. 엄밀히 말하자면 앰비언트 오클루전은 환경 조명의 근사치일 뿐이지만, 해상도나 밀도가 한정되어 있어 마이크로 오클루전을 포착할 수 없는 라이트맵이나 라이트프로브 같은 조명 기법을 보완할 수 있습니다.

SSAO와 마찬가지로, SSR(화면 공간 반사) 역시 프레임 안에 위치한 오브젝트만 반사할 수 있으며 카메라에 노출되지 않는 표면은 반사할 수 없습니다. 예를 들어 카메라가 바닥을 바라보는 경우 SSR 기법으로는 유용한 정보를 제공할 수 없습니다. 즉 SSR 기법은 근사치에 크게 의존하며, 내외부적으로 많은 방해물이 존재합니다. 따라서 정적 반사 프로브를 올바르게 배치하면 대부분의 정적 시나리오에서 더 멋지고 깔끔한 결과물을 얻을 수 있습니다. 하지만 SSR의 진가가 발휘되는 영역이 하나 있는데, 바로 바닥, 벽, 천장과 같이 카메라의 시점과 평행을 이루는 표면의 평면 반사를 처리할 때입니다. 레이싱 게임에서처럼 카메라 위치가 고정되어 있는 경우 SSR을 가장 효과적으로 활용할 수 있습니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

그러나 레이트레이싱의 경우 화면 바깥에 존재하는 정보에도 접근할 수 있기 때문에, 최소한 카메라 주변의 특정 반경 내에서는 광원 클러스터와 광선의 길이 등 한층 정확한 월드의 반사 정보를 제공할 수 있습니다.

레이트레이싱의 인상적인 기능 중 하나는 실시간 전역 조명을 생성할 수 있다는 점입니다. 실시간 전역 조명이란 간접 조명의 시뮬레이션으로 환경 안에서 반사되는 조명을 말합니다.

일반적으로 게임 엔진에서 간접 조명은 라이트 프로브 또는 라이트맵과 같은 사전 계산되거나 베이킹된 기법으로 처리되며, 이는 조명 작업을 하는 아티스트와 디자이너의 반복 작업 시간을 크게 늦출 수 있습니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

다행히 HDRP는 Performance와 Quality라는 두 가지 레이트레이싱 전역 조명 기법을 제공합니다.

Performance 기법은 직접 조명에서 높은 프레임 속도를 제공해야 하는 시나리오에 초점을 두며, Quality 기법은 다수의 반사와 샘플을 활용해 복잡한 실내 환경에서 매우 정확한 결과를 제공하는 대신 계산 비용은 매우 높아집니다.

높은 그림자 필터링 품질을 사용하는 경우, 기본적으로 HDRP는 실제 세계에서와 같이 섀도우 캐스터 주변은 경계선이 날카롭고, 나머지 부분은 자연스럽게 부드러운 뛰어난 품질의 그림자 맵을 제공합니다. 그러나 비용이 보다 저렴한 중간 필터링 품질을 사용하면 그림자를 드리우는 오브젝트와 그림자를 받는 오브젝트 간의 거리에 관계없이 전체 그림자 맵이 획일적으로 필터링되기 때문에 결과가 다소 실망스러울 수 있습니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

레이트레이싱 그림자를 활용하면 표면에서 광원을 향해 광선을 발사하여 그 사이에 발생하는 오클루전의 양을 파악할 수 있기 때문에 결과가 크게 개선됩니다. 따라서 적절한 성능 비용으로 매우 사실적인 그림자 근사치를 얻을 수 있습니다. HDRP는 투명한 그림자도 지원합니다!

마지막으로, 패스트레이싱을 활용하면 고품질 이미지를 기존 오프라인 렌더러보다 훨씬 빠르게 생성할 수 있습니다. 카메라에서 발사된 광선이 표면에 닿을 때마다 다른 표면과 광원(광원 클러스터 구조체)을 향해 또다른 광선을 발사합니다. 패스트레이싱이라는 이름은 카메라와 광원 사이에서 발생하는 광선의 이동을 패스(path)라고 부르는 데서 왔습니다.

유니티 앰비언트 오클루전 - yuniti aembieonteu okeullujeon

위에서 언급한 다른 레이트레이싱 방법과 비교하여 패스트레이싱이 가지는 장점은 그림자, 반사, 굴절, 전역 조명과 같은 모든 조명 효과를 단일 알고리즘으로 통합했다는 점입니다. 단점이라면 렌더링 시간과 노이즈를 꼽을 수 있지만, 노이즈 문제의 경우 몇 초에 걸쳐 샘플을 축적하면 노이즈가 덜한 결과를 얻을 수 있습니다.

NVIDIA가 준비한 이번 웨비나를 시청하고 나면 Unity가 제공하는 주요 레이트레이싱 기능에 대한 이해도를 높이고, 시각 효과와 실시간 게임의 품질도 크게 개선할 수 있을 것입니다.

Unity 레이트레이싱 포럼에서도 질문을 하거나 피드백을 남기실 수 있습니다.