Top Banner
구구구 구구 , 구구구구 구구구 구구구 구 구구 구구구구 구구구 구구구 구구 구구 NDC 2013
198

구세대 엔진 신데렐라 만들기 최종본 유트브2

Jan 25, 2015

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구세대 엔진 ,신데렐라 만들기

비교적 구 기술 게임엔진 렌더링 시스템 생명 연장

NDC 2013

Page 2: 구세대 엔진 신데렐라 만들기 최종본 유트브2

고경석버티고우 게임즈 , 엔진팀

만능종합예술인을 지향

업계 경력

㈜ 엔오지 엔터테인먼트 바이탈 디바이스 (RTS) 개발 플라스틱스 온라인 개발 (MMORPG)

㈜ 아이서프 팀레볼루션 개발 (MORacing)

㈜ CJ 인터넷 개발 2 실 엔진 연구 개발 쿵야 어드벤쳐 개발

SK C&C E-World Project TFT

㈜ T3 엔터테인먼트 워크라이 개발

㈜ JCE 엔터테인먼트 전략기획실㈜ 이누카 인터렉티브㈜ 버티고우 게임즈 전략기술실

Page 3: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최재혁NEXON Korea, 개발 4 본부

HIGHQUALITYRENDERING에 관심이 많은 사람

Page 4: 구세대 엔진 신데렐라 만들기 최종본 유트브2

이 내용은 엔진을 선택하는 것이 아니라선택되어진 구세대 엔진을 어떻게 , 차세대 신규게임에적용시키는가에 대한 문제점의 고민입니다 .

Page 5: 구세대 엔진 신데렐라 만들기 최종본 유트브2

실제 ㈜ 버티고우 게임즈에서 사용하고있는 GameBryo 2.0~2.6 에서의 사례로구세대 엔진에서의 차세대 그래픽스 기술을 접목시키는 방법을 살펴보면서여러분이 가지고 계신 구세대 엔진 혹은코스트 ( 자금 , 인력 ) 때문에 차세대 엔진의 구입이 어려운 힘든 상황에미력하나마 ,참고 자료가 되었으면 좋겠습니다

고경석

Page 6: 구세대 엔진 신데렐라 만들기 최종본 유트브2

인디게임 만들면서근사한 렌더링 하고 싶었는데 ,방향을 찾지 못하는 많은 사람들에게 조금이나마 도움이 되고작은 경험을 나누는 자리였으면 ..

발표자 최재혁씨의 개인생각

Page 7: 구세대 엔진 신데렐라 만들기 최종본 유트브2

“ 흔한 게임브리오 엔진을 사용한 게임 스샷 .JPG”

본 이미지는 무작위 검색에 의하여 특정게임의 홍보 및 다른 의도가 없음을 알려드립니다

Page 8: 구세대 엔진 신데렐라 만들기 최종본 유트브2

“ 게임브리오 2.0~2.6 에서 차세대 게임 그래픽을”

Page 9: 구세대 엔진 신데렐라 만들기 최종본 유트브2

일단 , 보고 시작하자

Page 10: 구세대 엔진 신데렐라 만들기 최종본 유트브2

UGF 구현 영상

United Graphics FoundationKyoung Seok,Ko 2012~2013

본 영상은 필자의 지인들과 본인의 남는 시간을 활용해서 제작한 리소스를 가지고 만든엔진 다이렉트 영상입니다 리소스의 질은 떨어질 수 있으니 , 참고바랍니다

Page 11: 구세대 엔진 신데렐라 만들기 최종본 유트브2
Page 12: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

Page 13: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Light | 중요한 조명 처리 |

컴퓨터 그래픽스에서 가장 중요한 것은 색이 아닌 빛

Diffuse Lighting | Ambient Lighting | Light Mapping

Page 14: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Light | |

추구하는 방향성

Diffuse Lighting | Ambient Lighting | Light Mapping

군더더기 없는 물리모델 기반 라이팅

구세대 엔진중 많은 특징들은 이쁜게 렌더링 하기 위해Light 를 Mesh 나 Node 에 덕지덕지 사용하는 경향이 있다 .

= GI Methods

Page 15: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Light | |

Renderer 를 설계할 때 중요한 문제 한 가지는조명처리 방식을 결정하는 것

Diffuse Lighting | Ambient Lighting | Light Mapping

Forward VS Deferred

가장 무거운 연산이기도 하고 ..

게임 성격에 맞게 적합하다 판단한 ..

을 사용 ..

복잡한 Shading Model 을 쓰고 있기도 하고 ..

Page 16: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Diffuse Lighting |

Page 17: 구세대 엔진 신데렐라 만들기 최종본 유트브2

컴퓨터 그래픽스의 빛의 요소

Diffuse Lighting Process- 3 Channel BRDFs Lighting

- Translucency Process

Ambient Lighting Process For Static Ob-ject

- HDR Directional Lightmaps- Global SkyLight SH

Ambient Lighting Process For Dynamic Ob-ject

- Global SkyLight SH- Point Clouds SH

Lighting ProcessDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

Page 18: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Lighting 을 잘 받으려면 ?

Normal Map 개선Diffuse Lighting | Ambient Lighting | Light Mapping

| Light |

물체의 표면 관련 데이터가 중요

가장 중요한 부분이 Normal 에 대한 데이터

보통 Normal Map 에는 노이즈가 있다 .

Page 19: 구세대 엔진 신데렐라 만들기 최종본 유트브2

2-Channel Normal MapGPU 친화적인 텍스처 압축을 하되 , 손실을 줄일 수 있는 방법Call of Duty, Mass Effect, 언리얼 3 시스템에서 사용

Radiosity Normal MapSelfShadow 가 가능한 NormalMap 통상 RNMs 로 불린다 .Source 엔진에서 처음 구현 ,Source 엔진 , 언리얼 3 에서 사용

Normal Map 개선 작업

Page 20: 구세대 엔진 신데렐라 만들기 최종본 유트브2

보통 Normal Map 에는DXT1 을 많이 쓰는데DXT 포맷은 손실 압축이라서노이즈가 많다 .

노이즈 부터 제거하자

Page 21: 구세대 엔진 신데렐라 만들기 최종본 유트브2

일반 이미지를 DXT 로 압축하면

DXT 압축에 따른 결과

Page 22: 구세대 엔진 신데렐라 만들기 최종본 유트브2

2-Channel Normal Map 구현

DXT 는 하드웨어 가속을 받기 때문에 쓰긴 써야 되는데 ..DXT 가 Alpha, Green값이 덜 훼손되는 특징이 있다 .이 값들을 x, y 에 저장하고 나머지 z값을 계산하여 z값 만들게 되면원본 DXT 보다 훨씬 깨끗한 Normal값을 뽑을 수 있다 .

깔끔한 Normal

Page 23: 구세대 엔진 신데렐라 만들기 최종본 유트브2

2 channel Normal Map Radiosity Normal Map

Radiosity Normal Map 비교

VALVE 에서 자체 음영이 가능한 방법을 개선렌더링 품질을 올리기 위해서는 반듯이 써야 한다 . 이제는 일반적인 방법하지만 라이트맵 3 장은 너무 용량이 크다 .개선방향 : [NDC 2012, 가성비 좋은 렌더링 10 선 , 버텍스 단위 3 축 조명 ]

Page 24: 구세대 엔진 신데렐라 만들기 최종본 유트브2

재질이나 라이팅이 밝아질수록 Normal 이 사라지는 현상이 있었다 .

Normal Map 을 Scaling했다 .

그래도 아직 모자른 감이 있었다 .

때때로 Normal값 강조를 위해

Page 25: 구세대 엔진 신데렐라 만들기 최종본 유트브2

3.0f scale

Normal Map Scaling 결과

Page 26: 구세대 엔진 신데렐라 만들기 최종본 유트브2

전통적인 조명 방식에서다음세대 조명 방식이라 생각되는 BRDF

Lighting ModelsDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

Phong/Blinn Phong Model

Micro-facet BRDFs

Next Generation Lighting Model

예전에는 느려서사용 못하고 있었음

이전에는 단지 빨리서 사용

Page 27: 구세대 엔진 신데렐라 만들기 최종본 유트브2

BRDFDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

불투명한 물체에서의 반사율을 나타내는 다양한 기법

쉽게 말하면 표면에서 빛이 어떻게 반사되는지를 나타내는 공식

BRDF란 ?

Page 28: 구세대 엔진 신데렐라 만들기 최종본 유트브2

일단 깨끗함48 개 Lighting 모델 제공표현하기 어려운 Material 도 쉽게 가능

Blinn-Phong BRDF

BRDF 를 쓸까 ?

Page 29: 구세대 엔진 신데렐라 만들기 최종본 유트브2

사실 이 복잡한 수식을다 알 필요는 없고F, G, D 의 요소를 이해하고 걍 쓰면 된다 .

정확한 수식이 아님 ..

Micro-facet 방정식

Page 30: 구세대 엔진 신데렐라 만들기 최종본 유트브2

FGD

– 국소면 사이의 그림자 , 마스킹의 영향

– 얼마나 오브젝트가 금속처럼 보일까

– 국소면의 Noraml 값 설정

Micro-facet 방정식

Page 31: 구세대 엔진 신데렐라 만들기 최종본 유트브2

다양한 Lighting Model

Page 32: 구세대 엔진 신데렐라 만들기 최종본 유트브2

가장 일반적으로 Diffuse 라이팅에 적용되는 공식은 Lambert 조명

Wrapped Diffuse Diffuse Lighting | Ambient Lighting | Light Mapping

| Light |

하지만 사용하다 보면 너무 어둡다 .

Page 33: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Wrapped DiffuseTeam Fortress 2 팀 에서 간단한 Diffuse 계산 대신 복잡한 Diffuse 제안

Image From Team Fortress2

Page 34: 구세대 엔진 신데렐라 만들기 최종본 유트브2

음영이 많이 생기는 기존의 Lambert 를 개선하기 위해 나온 것Diffuse vs Wrapped Diffuse

Page 35: 구세대 엔진 신데렐라 만들기 최종본 유트브2

TF2-Shading

Page 36: 구세대 엔진 신데렐라 만들기 최종본 유트브2

GameBryo(Lambert) Wrapped Diffuse(factor 1.0)다소 어두워 지는 경향이 있다 .

Wrapped Diffuse(factor 1.0)보완 1.5

구현

Page 37: 구세대 엔진 신데렐라 만들기 최종본 유트브2

알려진 Specular 만으로 표현 할 수 없는 재질이 많기 때문에 사용

FresnelDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

보는 각도에 따라서반사되는 재질이 달라진다 .그리고 모든 물체는 Fresnel 을 가진다 .

Page 38: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Crysis Fresnel 예제

반사체를 표현하는데 있어서 프레넬 함수를 사용하는 사실적인 표면의 표현이 가능

Crysis Fresnel 패널

Crysis

Page 39: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Diffuse Fresnel 지원환경맵 Fresnel 지원Fresnel MaskMap 지원스펙큘러맵과 연동지원( 보다 자연스러운 결과를 연출가능 )

구현범위

Page 40: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Translucency MaterialDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

일반적인 용어는 Sub Surface Scattering빛이 오브젝트의 표면의 한 지점으로 투과되어 내부로 퍼져나간 후 다른 위치로 빠져나가는 현상

두께에 기반한 Sub Surface Scattering

Page 41: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Translucency Material두께를 고려한 Sub Surface Scattering

Page 42: 구세대 엔진 신데렐라 만들기 최종본 유트브2

빛이 반투과 되는 피부나 식물의 입사귀 , 양초같은 오브젝트 표현에 적당

어디에 사용 ?

Page 43: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look

경험상 괜찮은 구현 방법은프로바이트 2 엔진에서 사용한 로컬 두께 맵을 이용하는 것

어떤걸 사용 ?

Page 44: 구세대 엔진 신데렐라 만들기 최종본 유트브2

오브젝트의 노멀을 뒤집어 엠비언트 오클루젼을 걸고 그것을 반전시키면 두께 맵이 나온다 .

사람 얼굴로 치자면 코끝이나 귀 끝이 밝게 나오고 얼굴 중심으로 갈수록 어두워지는 두께맵을 얻을 수 있음

아티스트가 라이트맵을 굽는 것과 비슷하다구현방법

Page 45: 구세대 엔진 신데렐라 만들기 최종본 유트브2

MMO 에서는 이 정도까지 쓰는 건 아직까지 좀 무리인 듯

현재까지 완성된 대부분 MMORPG 들은 단순히'피부 부분에만 붉은색을 추가했다'라는 걸 봐서 ..

아직까지는 대부분의 게임에서는 GPU Gems 에 소개 된 Fake SSS 를 많은 쓰는 듯

하지만 ..

Page 46: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Character ShadingDiffuse Lighting | Ambient Lighting | Light Mapping

| Light |

피부가 갖는 빛에 대한 투과성을 흉내 내기 위해 Translucency Material 을 가져다 쓴다 .

Gamebryo 구현 된 것

Page 47: 구세대 엔진 신데렐라 만들기 최종본 유트브2

피부는 플라스틱처럼 깨끗한 재질이 아니기 때문에 ,BeckMann Distribution 과 CookTorrance Term 라이팅 모델로 제한

구현방법

추가로 Frensnel 을 신경 쓰면 좋더라Frensnel 을 Diffuse와 Specular맵과 합성그리고 추가 Frensnel Color와 가중치를 적용하면 자연스럽게 Frensnel 을 적용 할 수 있다 .

Page 48: 구세대 엔진 신데렐라 만들기 최종본 유트브2

두깨맵을 내부적으로 이미시브 채널로 전송하여 SSSSS(Screen Space Sub Surface Scattering) 를 구현

Character Shading

Page 49: 구세대 엔진 신데렐라 만들기 최종본 유트브2

머리카락 표현의 경우 Anistorpic Brdf 모델을 적용

Character Shading

Page 50: 구세대 엔진 신데렐라 만들기 최종본 유트브2

두깨맵의 퀄러티와 설정에 따라 결과 퀄러티는 달라짐

Character Shading

Page 51: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Ambient Lighting |

Page 52: 구세대 엔진 신데렐라 만들기 최종본 유트브2

다른 물체에 반사되어 도달하는 간접광그렇기 때문에 Ambient값을 정확하게 계산하지못하고 , Diffuse 에 비해 영향이 아주 적기 때문에보통 Ambient 값을 단순히 상수로 사용 ..

Ambient 란 ?

Page 53: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Diffuse 의 영향이 미치지 않는 부분에는Ambient 영향이 절대적이라 차이가 크다 .

하지만

그런데 Ambient 를 실시간으로 계산하기에는 연산량이너무 많음 ..

Page 54: 구세대 엔진 신데렐라 만들기 최종본 유트브2

생각한게 고정 Ambient Lighting 과동적 Ambient Lighting

그래서

동적 Ambient Lighting 은 현실 타협이 가능한 전처리 과정이 포함된 방법입니다 .

Page 55: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Hemisphere Lighting | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

메탈기어 4 에서 사용된 기술

Page 56: 구세대 엔진 신데렐라 만들기 최종본 유트브2

물리적 정확함보다 영화적 연출을 중시한 기법메탈기어 4

Hemisphere Lighting

Image From MSG4

Page 57: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Hemisphere Lighting란 ?디자이너의 약간의 수작업으로 Lighting 설정한다 .

Page 58: 구세대 엔진 신데렐라 만들기 최종본 유트브2

시작은 Valve 에서 Irradiance Volume 라는간단한 방법으로 시작

디자이너에 의해서 음영의 의도적인 연출이 가능하게 됨

Irradiance Volume 의 장점이자 단점은 ..

Irradiance Volume

Page 59: 구세대 엔진 신데렐라 만들기 최종본 유트브2

하지만 Irradiance Volume 은 손이 너무 많이 감 .좀 더 개선된 방법이 Hemisphere Lighting

간단히 말하면 하늘색과 지면의 색을 설정해서 반구 모델을 만들고 Surface Normal 을 계산으로- 디자이너 일을 줄임- 연산 비용에 비해서 효과가 크다 .

Irradiance Volume 개선

Page 60: 구세대 엔진 신데렐라 만들기 최종본 유트브2

추가 개발한다면 동적으로 변화 할 수 있는 시스템도 만들 수 있을 듯 – 지형은 재질이 다르고 재질에 따른 반사광 의 색도 다르니깐 ..

아이디어

Page 61: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Spherical Harmonics | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

Global Illumination 에 대한 렌더링 방정식은모든 방향에 대해 적분을 해야 함으로 컴퓨터로계산하기가 힘들다 .

PRT 및 SH..

이에 대한 해결책으로 Spherical Harmonics Lighting 이 제안됨

Page 62: 구세대 엔진 신데렐라 만들기 최종본 유트브2

From IBL

큐브맵을 가지고 Global Illumination 을 흉내 낸다현재까지 알려진 것들 중 가장 값싼 방법

Spherical Harmonics | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

Image Based Lighting SH

Page 63: 구세대 엔진 신데렐라 만들기 최종본 유트브2

- 환경의 평균적인 큐브맵을 사용하거나 사용해야 어색하지 않았다 .

- 환경에 따라 큐브맵을 교환하면 실시간 GI 를 흉내 낼 수 있겠으나 , 현실적으로 자연스럽게는 어렵다 .

구현경험큐브맵을 이용한 SH 는 너무 정적이라 실용성이 있을까 ?란 의문

Page 64: 구세대 엔진 신데렐라 만들기 최종본 유트브2

From PointCloudsSpherical Harmonics | Light |

Diffuse Lighting | Ambient Lighting | Light Mapping

Point Clouds SH

캐릭터나 차량같이 움직이는 Prop 에 대해서는격자로 된 Point Clouds SH 를 미리 만들어서대응하게 하면 됨

Page 65: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현경험먼저 [동적 ] 물체를 위한 SH 계수를 어떻게 얻을까 ?

마야를 뜯어보자 터틀 , 브이레이 분석

일단 터틀 SH 데이터 구조 먼저 파악한 뒤터틀을 이용해 SH 를 배치하고 베이킹하여 XML 로 뽑아서그걸 엔진 내에서는 옥트리 형태로 관리옥트리 노드에 있는 Prop 에 해당 SH 데이터를 적용시킴

Page 66: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현경험그럼 [ 정적 ] 물체를 위한 SH 계수를 어떻게 얻을까 ?

정적 물체들은 그냥 SkyLab 이라는 하는 처리자를따로 만들어서 SH 를 생성하시고 적용시킴스카이를 Render Target 으로 따와서걍 SH 데이터로 바꿔 처리시킴

Page 67: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Unreal3,Beast,BattleField3

구현Point Clouds 중 한 점을 시뮬레이션

Page 68: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Light Mapping |

Page 69: 구세대 엔진 신데렐라 만들기 최종본 유트브2

실시간 Shadow 기법이 발전했지만 ,Light Map 은 여전히 게임 분위기를좌우하는 큰 요소

Light Mapping

Page 70: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Directional Light maps | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

방향성을 가지는 Light mapValve 가 개발

라이트 맵에 노멀 맵을 표현할 수 있는 방법을 찾을 수 있을까 ?

아이디어 :

Page 71: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Diffuse 만으로 게임 내 빛이 닿지 않는 부분은 보이지 않는다 .하지만 실제 환경은 수 많은 반사광이 존재함

실제 Light 는 ..

반사광이 있고 없고의 차이 ..

Image From Un-real3

Image From Un-real3

Page 72: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Directional Light map 은 반사광을 시뮬레이션하기 위해 개발 됨 .

즉 , Direct 한 빛 외에 반사되는 빛에 의한 Normal 을 추가로 표현 하는 것이 목적

Light Map 의 목적

Page 73: 구세대 엔진 신데렐라 만들기 최종본 유트브2

이전 Spherical Harmonics Ambient 를 사용 할 수 없다면아마 이게 유일한 주변광 라이팅일듯 .

Light Map 의 목적

Page 74: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Source 엔진에서 처음 사용현재 , Source,Unreal3등 여러 엔진에서 보편적으로 사용

다른 게임에서 사용 예

Page 75: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Metal Gear用 Fox Engine 에서의 Directional Lightmap 의 설명다른 게임에서 사용 예

Page 76: 구세대 엔진 신데렐라 만들기 최종본 유트브2

전통적으로 3 방향의 라이트맵이 필요하나 ,언리얼 3와 같이 x,y 축 2 장의 라이트맵을 사용

위의 그림은 라이트맵만 출력한 상태( 빛이 없어도 노멀맵이 표현된다 )

구현Directional Light maps 적용

Page 77: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현Directional Light Map 적용

Page 78: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현Directional Light Map 적용

Page 79: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Lightmap Calc Method | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

Artrmouse

노출이라는 개념을 첨가

라이트맵의 전통적인 계산 방식과는 다른 새로운 방법론을 만들고 싶었다

라이트맵을 텍스쳐의 개념보다 라이팅의 개념으로 더 보고 싶었다

Page 80: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Modulate Modulate 2X Modulate 4X

보통 Diffuse Map 과 Light Map 을 Modulate 해서나타내는데 .. 이 방법은 Light Map 이 칙칙해지는 단점이 있다 .

Traditional Light mapping

비 오는 날씨 같은 느낌 .Modulate 할 수록 색은 양극화 된다 .

Page 81: 구세대 엔진 신데렐라 만들기 최종본 유트브2

개선 방향Light Map 개선하기 위해낮은 주파수 영역 , 높은 주파수 영역을 각자 연산

아티스트가 일부 수정 가능하게 파라미터로 일부 제공

Page 82: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Use Diffuse LightingDiffuse Lightmap Generate

Flow

Use Ambient LightingAmbient Lightmap GenerateExpourse

Ligthtmap(8bit Alpha)

Artmouse Light mapping

노출 정도를 맵으로 표현해서 라이트맵의 알파채널에 넣는다 ( 픽셀당 8 비트 사용 )

노출 맵과 노출 계수를 활용하여 ,주변광과 직접광 라이트맵을 만들고 라이팅 계산을 한다

색 공간 계산 대신 , 감마계산을 활용하여 ,이전에는 불가능 밝기를 실현할 수 있다

Page 83: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Exposure = 1 Exposure = 2 Exposure = 3

구현 ambient light map

Page 84: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Exposure = 1 Exposure = 2 Exposure = 3

밝은 색 영역만 추출 (HDR 톤 맵핑과 유사 )버텍스 노멀과 빛 방향의 외적과 연산

구현 diffuse light map

Page 85: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현 결과최대한 중간 톤을 지키면서도 밝은 곳은 밝게 어두운 곳은연하게 또는 강하게 조절 할 수 있었다 .

Modulate 4X

Page 86: 구세대 엔진 신데렐라 만들기 최종본 유트브2

엠비언트 라이팅의 색과디퓨즈 라이팅의 색을 다르게 준 예

구현 결과

Page 87: 구세대 엔진 신데렐라 만들기 최종본 유트브2

하지만 ..여전히 A급 Light Map 얻는데 실패

Page 88: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Light Map Beast, Unreal Light-mass 의 수준에 도전해보자

Page 89: 구세대 엔진 신데렐라 만들기 최종본 유트브2

RGB 채널당 16 비트 혹은 32 비트 float 형 값을 가짐

OpenEXR 이나 HDRI 포멧으로 저장

RGB 채널당 0~255 의 단계를 저장하거나 그 이하의 단계를 가짐

32,24 비트 TGA 나 16 비트 DDS 로 저장Baking Light map in DCC

LDR Light map

Baking Light map in DCC

HDR Light map

HDR Light map

그런데 걍 HDR 로 Light map 을 만들게 되면Light map 한 장에 수백메가 ..

Page 90: 구세대 엔진 신데렐라 만들기 최종본 유트브2

RGBM HDR Light map | Light |Diffuse Lighting | Ambient Lighting | Light Mapping

장점 : 많은 색 영역을 확보할 수 있다단점 : 용량이 많다 . 비디오 메모리에서 DXTn 처럼 압축지원을 받지 못한다

HDR Light map

해결책 ? “RGBM Light map”PS3 의 적은 메모리 덕분에 많은 연구가 진행되어 나온 결과물 중 하나 ..

Page 91: 구세대 엔진 신데렐라 만들기 최종본 유트브2

전용 프로그램으로 OpenEXR 에서 인코딩되며 ,다른 방법보다 단순한 방법으로 Shader 에서 디코딩됩니다

RGBM FormatDXT5 의 RGB 채널에 LDR 칼라 값을알파채널에 휘도 값을 저장합니다

RGBM 공정Vray or FinalRender

HDR 라이트맵베이킹

OpenEXR

포멧으로저장

인코딩 프로그램으로DXT5 로 변환

디코딩In PixelShader

Page 92: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현칙칙한 느낌은 사라짐

Page 93: 구세대 엔진 신데렐라 만들기 최종본 유트브2

RGBM Light Map 의 아쉬운 점 : 명암 차이를 내기 쉽지 않다 구현 시 문제점

Page 94: 구세대 엔진 신데렐라 만들기 최종본 유트브2

또 수정

RGBM+Artrmouse Ex Method

노출정도를 편리하게 편집가능

Artmouse Exposure Method

Page 95: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최종 구현

Page 96: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최종 구현RGBM Directional Light Map

Page 97: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최종 구현RGBM Directional Light Map

Page 98: 구세대 엔진 신데렐라 만들기 최종본 유트브2

상용 Lighting 엔진 Beast와 비슷하게 구현최종 구현

Page 99: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Light | 그리고 또 뭐 하면 좋은게 .. |Diffuse Lighting | Ambient Lighting | Light Mapping

WYSIWYG 기능 제공

1. 라이팅 모델2. 스킨 쉐이딩3. 라이트맵 에디팅4. Decal,Emissive맵등 편집5. 블렌딩 기능 편집

기능을 제한한 3D 컨텐츠 용 DCC Viewport Shader 를 통해 ,생산성을 증대시킨다

Page 100: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Manet |

Page 101: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Framework | Lighting Solution |Manet | SkyLab | Re-Construction of Color Pipeline | Building Emissive Glow Pipeline

Graphics Framework

Manet : Lighting Solution Project인상파의 대표적 화가의 이름에서 프로젝트 명을 따옴

리소스 파이프라인에서 데이터를 받아 게임환경을 처리하고 전달 .

최종적으로 Shader 로 표현해주는가장 Core 한 Framework

[Ambient Lighting 과 Direct Lighting 정보를 ]

Page 102: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Manet [Lighting Solution] 이 해야 될 일

Module 간 Connecting 기능Asset 관리 기능환경 관리Post Processing Special Effect

Page 103: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Point Cloud Octree Based SH BasisComposite value for Sun and Ground

Pre-Baking SH From Turtle Maya

Sun Ray form SkyDome

Ground Ray From Lightmap

( 아직 결정되지 않음 )Shader

Manet

Graphics Framework

Manet 구조

Dynamic SH GISkyLight And Indirect Ground Lighting( 개발 예정 )SunRay( 개발 예정 )……

우리는 대략 이런 식으루 구현 함

Page 104: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Manet 특징 ..Dynamic SH GI 데이터를 옥트리 형태로 가지고 있다 .

Unreal 3 & En-lighten

Page 105: 구세대 엔진 신데렐라 만들기 최종본 유트브2

다른 Lighting Solution

Enlighten CryEngine

Page 106: 구세대 엔진 신데렐라 만들기 최종본 유트브2

다른 Lighting Solution

Page 107: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Manet Test Build 2012-07-05

SH 처리 ..Dynamic SH GI 처리 형태

Page 108: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Lighting 을 계산 할 때 Sky, Land 의 영향이 중요하다 .

주변 환경 Lighting 처리 ..

Page 109: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| SkyLab |

Page 110: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Framework | Sky Process |Manet | SkyLab | Re-Construction of Color Pipeline | Building Emissive Glow Pipeline

Atmosphere Env.Solution

대기 환경을 시뮬레이션하기 위해 만든 Framework

레일리 산란 , 미 산란을 이용해물리 기반 대기 Scattering 을 처리간단한 태양 처리

Page 111: 구세대 엔진 신데렐라 만들기 최종본 유트브2

ShaderManet

Graphics Framework

ShaderSkyLab

Process Sky SH Lighting

Process Land Scattering

Process LensFlare Effect

Sky-Dome Parameter

Atmosphere Shader

SkyLAB 구조

진보된 스카이 , 지형 스케터링하늘에 관련된 효과 ( 구름의 스크롤 ,밤낮 구현등 )Manet 과 연동 -Sky Light 를 Manet 에 연결해줌Sun Shaft/God Ray( 개발 예정 )

Page 112: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Basic Sky ScatteringSkyLab 의 구면 하늘 셰이더는 레일리 , 미 산란 ,파라메터와 구의 반경 ,공기 층의 두께 , 노출 및 여러 가지 파라메터를 통해 결정된다

Page 113: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Blend Clouds Layer

| 블랜딩을 하지 않은 구름 레이어 | 수치로 조절 가능한 블랜딩 영역을 계산 | 블랜딩 영역으로 블랜딩한 구름 레이어

구름의 경우 절차적으로 구름을 생성하는 방식이 있지만아티스트가 그린 구름의 퀄리티를 따라 올 수는 없다 .하지만 너무 정적인데 , 동적으로 할 수는 없을까 ?

노이즈 맵을 만들어서 구름의 수증기양을 알파값으로 조절함

Page 114: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Dynamic Shape Transform구름의 가장자리 부분이나 수증기가 적은 부분은 때때로 나타났다사라졌다 하며 , 이것은 하늘을 동적으로 변화시켜 심심하지 않게 해준다

노이즈 텍스쳐가 필요하며 , 이것을 구름전체 이미지와 반응시키진 않는다 구름 농도에 상관없이 반응시킨다면 , 촌스러워지며 현실감이 떨어진다

Page 115: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Dynamic Shape Transform옅은 부분의 모양이 조금 변한 것을 볼 수 있다

스크린 샷으로는 잘 안보이니 뒤에서 동영상으로 ...

Page 116: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Silver Lining구름이 태양의 인접 구역에 가면 구름 외곽이 밝게 변하는 현상

실버 라이닝을 구현한 엔진들이 많지 않다

Page 117: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Silver Lining 구현구름 레이어의 알파를 이용하여 구름 이미지의 외곽선을 추출

Page 118: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Silver Lining외곽선과 Mie Scattering 과 계산함

Page 119: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Silver Lining합성 : Sliver Lining 수치로 자연스럽게 조절 가능

Page 120: 구세대 엔진 신데렐라 만들기 최종본 유트브2

태양위치에 따른 구름 색 변경[ 시간 ]

밤 , 아침까지의 구름의 색 자동 변경

Page 121: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Support Time of DayMMORPG 프로젝트라면 Night 에 대한 로직을 강화현재로써는 Star 텍스쳐를 블랜딩 하는 것까지 ..

Page 122: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Support to RT Cubemap And Event SH

렌더타겟으로 하늘만을 큐브맵으로 만든다 .하늘 큐브맵 이미지는 Lighting 계산에서 물이나 Frenel 에사용되고 SH 화 된 데이터는 GI Ambient 요소에 쓰이게 된다 .

Page 123: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Support to RT Cubemap And Event SH

물론 실시간은 아니고이벤트 방식으로 SH 계수화해서 사용한다 .실시간이 아니기 때문에 정확도는 약간 떨어진다 .

맵을 로딩하거나 이벤트시간에SH 화 시켜 Ambient Color 로 사용함상수 Ambient Color 는 더 이상 사용하지 말자

Page 124: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Support to RT Cubemap And Event SH

구현

Page 125: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Volumetric Light Scattering on a Highly Animated Scene in Real Time(nvidia GPU Gem3)

Support to Light Shafts(AKA Godray)

태양 빛 산란을 만들자기본적인 이론은 NVIDIA 문서를 참조해서 만들었다 .

Page 126: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현스크린 공간의 태양 이미지를 방향성을 갖는좌표 오프셋으로 여러 번 찍는 방식

그러나 어려웠던 점은 Z 버퍼도 검사해야 하고스크린 영역도 판단해야 제대로 된 차폐가 가능하다 .경험적으로 이를 위해 선형 Z 버퍼를 사용하는 것이 좋다 .

Page 127: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현 시 문제점구름은 이미지인데 .. 어떻게 판단할까 ?

일단 구름을 흑과 백으로 추출한 렌더 타겟을차폐 텍스처에 더해주는 방식으로 해결

Page 128: 구세대 엔진 신데렐라 만들기 최종본 유트브2

태양을 추출하는 버퍼를 만들어 ( 스크린 스페이스의 ¼ 크기 ) 구름 텍스쳐를 일단 차폐하고 뎁스 버퍼에서 추가로 차폐한다

구현 시 문제점

Page 129: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Support to Light Shafts(AKA Godray)

Page 130: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Re-Construction of Color Pipeline |

Page 131: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Framework | 컬러파이트라인의 재구성 |Manet | SkyLab | Re-Construction of Color Pipeline | Building Emissive Glow Pipeline

컬러 파이프라인의 재구성왜 크라이시스나 언리얼로 만든 게임은 색이 깨끗이 잘나오는데 구세대 엔진에서만든 게임은 색감이 죽는 걸까 ?

Page 132: 구세대 엔진 신데렐라 만들기 최종본 유트브2

HDR 라이트맵이나 HDR 톤맵핑의 차이일까 ?

이것 말고도 감마 공간에서의 Lighting 계산에서의 차이도 있다 .

Page 133: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구세대 엔진들 대부분은걍 선형공간에 대한 개념이 없다 .

프레임버퍼는 선형 공간에서 계산하고 있는데 ,우리가 화면에 보고 있는 최종 결과물이나 텍스쳐들은 감마공간

GPU Gems 3 권 24.1

Page 134: 구세대 엔진 신데렐라 만들기 최종본 유트브2

텍스쳐 레벨 (감마공간 )

Lighting and Material Processing( 선형공간 )

HDR Tone-mapping( 선형 ->감마 공간 )

Post Color Processing (감마 공간 )

컬러 파이프라인디자이너가 포토샵으로 만들어 내는 텍스처는감마가 적용된 텍스처

텍스처를 선형공간으로 바꾼다 .

Lighting 계산은 모든 이미지가선형공간에 있다고 판단하고 계산

감마 보정을 하는 이유는 주어진 대역폭 내에서 최대한의 화질을 보여주기 위해서 ..

Page 135: 구세대 엔진 신데렐라 만들기 최종본 유트브2

컬러 파이프라인하다보니 문제가 있었다 .

선형공간에서 RGBM 의 라이트맵 색 영역을 32Bit 버퍼가 버티질 못하고 손실 .

Page 136: 구세대 엔진 신데렐라 만들기 최종본 유트브2

컬러 파이프라인하다보니 문제가 있었다 .

선형공간에서 Color Grading 을 했는데 , Color값 손실 발생

Page 137: 구세대 엔진 신데렐라 만들기 최종본 유트브2

컬러 파이프라인이렇게 해결 했음

텍스쳐 레벨 (감마공간 )

Lighting and Material Processing( 선형공간 )

HDR Tone-mapping( 선형 ->감마 공간 )

Post Color Processing (감마 공간 )렌더 타겟을 16F 포멧으로

순서를 잘 지켜야 한다

Page 138: 구세대 엔진 신데렐라 만들기 최종본 유트브2

결과컬러 파이프라인 문제점 수정하고 그

실패

성공

Page 139: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

| Building Emissive Glow Pipeline |

Page 140: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Framework | Lighting Solution |Manet | SkyLab | Re-Construction of Color Pipeline | Building Emissive Glow Pipeline

Atmosphere Env.Solution

발광 텍스쳐를 추룰해서 렌더타겟에 그리고 블러링해서 합성하는 과정

아름다운 예광탄이나 이펙트를 만들고 싶었다 .

Page 141: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Glow PassHDR 상에서 일정한 LDR 이상의 컬러는 어느 정도의 Emissive 의 효과를 얻을 수 있으나 , 실제적으로 특정적이고 한정된 범위를 조절하기 어렵다 .

원하는 곳에 블러링을 하고 싶어서 Glow Pass 를 만들었다 .

Image From Un-real3

Image From Un-real3

Page 142: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Building Emissive Glow Pipeline

MRT ColorOut Value 추가

MRT 버퍼 추가 ½ 사이즈

Normal Emissive Glow

Lens FlareEmissiveGlow

Post ProcessGlow Blur

LensFX

Page 143: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Emissive Texture 에 일반 이미시브 ,렌즈 플레어 이미시브를 나눈다 ( 기준 알파 값의 유무 )

Emissive Glow Pass

Page 144: 구세대 엔진 신데렐라 만들기 최종본 유트브2

이미시브 텍스쳐 전체를 렌더링Normal Emissive Glow Pass

Page 145: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현하고 싶었던 것Anamorphic Lens Flare Effect 와일드 스크린 영화에 맞게고안된 렌즈가 Anamorphic Lens 이며 그 렌즈에 flare 가 나타나면 독특한 형태를 띄게 된다

Page 146: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현하고 싶었던 것스타트랙 , 트랜스포머등 영화에서 주로 사용되며 ,게임엔진에서는 Cysis2,3 가 대표적으로 지원한다

Page 147: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Implement of Anamorphic Lens flare LensFX 용의 이미시브의 추출된 패스 ( 알파값으로 추출해서 렌더링 )

Page 148: 구세대 엔진 신데렐라 만들기 최종본 유트브2

아직 AfterEffect와 같은 툴을 사용한 CG 에 부합되진 않는다Implement of Anamorphic Lens flare

Page 149: 구세대 엔진 신데렐라 만들기 최종본 유트브2

이미시브의 가중치를 만들어서 , 각 이미시브의 가중치가 다르므로 Flare 의 길이도 다르게 줄 수 있다

Implement of Anamorphic Lens flare

Page 150: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최종 구현Full Emissive Glow Pipeline(Basic+LensFX emissivePass)+ Anamorphic Lesn flare + Chromatic Aberration Lens Effect

Page 151: 구세대 엔진 신데렐라 만들기 최종본 유트브2

LightFrameworkPost Processing

Page 152: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Screen Space EffectPost Processing

Screen Space Ambient OcclusionScreen Space Sub ScatteringScreen Space DecalScreen Space GIETC..

이미지 포스트 프로세싱 이펙트로아래 내용을 써보니깐 괜찮았다 .

Page 153: 구세대 엔진 신데렐라 만들기 최종본 유트브2

장점화면 중심으로 효과를 처리하기 때문에 ,질 좋은 효과를 빠르게 표현 할 수 있다

단점RenderToTexture 를 기반으로 하기 때문에 ,메모리를 많이 소모한다Deferred Rendering 방식이 아니면 ,사용이 거의 불가능하다

장단점

Page 154: 구세대 엔진 신데렐라 만들기 최종본 유트브2

최근의 Screen Space Effect 는 많은 부분이 Deffered Rendering 의 요소인 Screen Surface Normal 과 위치그리고 선형 z 버퍼를 이용

구현

Page 155: 구세대 엔진 신데렐라 만들기 최종본 유트브2

CrysisScreen Space Effect 가 다른 게임에서 쓰인 사례

Page 156: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Gears of War2Screen Space Effect 가 다른 게임에서 쓰인 사례

Page 157: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Deferred 의 시작

ViewSpace Normal Surface Normal

게임브리오 2.X 버전은 Deferred Rendering 이 지원되지 않는다 !!!!

Page 158: 구세대 엔진 신데렐라 만들기 최종본 유트브2

SSAOVew-Space Normal, Position Map/Depth Map 지원을 받아 SSAO 구현

Page 159: 구세대 엔진 신데렐라 만들기 최종본 유트브2

SSAO

SSAO 적용

중첩되는 오브젝트가 있을 경우 함몰된 부분이광원효과를 덜 받게 된다 .

Page 160: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Screen Space Global Illumination스크린 스페이스에서 모든 물체가 발광한다 전제한다 .스크린 노멀과 뎁스 버퍼를 이용해 프레임버퍼의 컬러를 계산한다 .

Page 161: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Screen Space Global Illumination

SSGI 적용

화면상에 나타나 있는 모든 오브젝트들은 빛을 반사하여 발광한다 .

Page 162: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Screen Space Global IlluminationSSGI 는 프레임버퍼의 색을 스크린 서페이스 노멀을 사용해 인접된 색을 섞어줍니다

SSGI 적용

Page 163: 구세대 엔진 신데렐라 만들기 최종본 유트브2

HDR Tone mappingPost Processing

Tone Mapping 은 엔진을 개선하는데 있어서 가장 중요하게 여겨지는 요소 중 하나

HDR Image 를 모니터로 표시하기 위해 출력 가능한 휘도 범위의 LDR(0~255) 로 바꾸는 과정입니다

Page 164: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Linear Tone Mapping 의 단점은 색 영역의 제한이 생긴다

경험상 추천 하는 방식은 Reinhard 방식과 Filmic 방식의 톤 맵핑의 혼합방식입니다

DirectX와 GameBryo 가 대표적으로 Linear Tone Mapping 을 채용

Page 165: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Tone Mapping 비교 Reinhard’s 방법으로 Color 영역을 더 많이 지킬 수 있다

Linear Tone Mapping Reinhard’s Tone Mapping

Gamebryo(MidKey:0.72,BloomScale:0.5*0.5,Dlight Mul:100)

Gamebryo(MidKey:1.0,BloomScale:0.5*0.5,Dlight Mul:100)

UnitedHDR(MidKey:0.72,BloomScale:0.5*0.5,Dlight Mul:100)

UnitedHDR(MidKey:1.0,BloomScale:0.5*0.5,Dlight Mul:100)

Page 166: 구세대 엔진 신데렐라 만들기 최종본 유트브2

그런데 어째 좀 어두웠다 .그래서 Filmic Tone Mapping 의 추가 채택영화에서 사용하는 필름 커브를 이용합니다

Uncharted 2 에서 처음 개발CryEngine 3.4.0 버전에 채택

Image From Un-charted

Image From CRY EN-GINE

Page 167: 구세대 엔진 신데렐라 만들기 최종본 유트브2

+ Filmic 방식

Reinhard 방식 Reinhard 방식 + Filmic 방식

Reinhard 방식

Page 168: 구세대 엔진 신데렐라 만들기 최종본 유트브2

+ Filmic 방식Reinhard 방식

Linear Tone색이 날아가다

Reainhard Tone색은 지키는데 밝은 곳이 밝은 느낌이 아니다

Reainhard + Filmic색 영역을 지키면서밝은 곳은 밝게 ,암부도 단계가 풍부하다

Page 169: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Color GradingPost Processing

Image From Un-real3

영화에서는 후반 색 보정은 당연하게 사용

Page 170: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Look Up Texture 를 이용한 Color Grading 은 Post Effect 로서의 색 보정 역할 뿐만 아니라 개별 사물이나 캐릭터에도 적용이 가능

Actor 의 Shader Code 마지막에 Look Up Texture 관련 함수만 적용해주면 완성

게임에서는 Look Up Texture 를 이용해서 빠르게 적용합니다기본 텍스쳐는 RGB값을 컨버팅한 UV좌표에 정확히 자기의 Color 를 가지고 있는 상태

Page 171: 구세대 엔진 신데렐라 만들기 최종본 유트브2

추가 텍스쳐 제작 없이도 Look Up Table 만 만들어 놓으면 다양한 색의 사물이나

몬스터 , 이펙트를 다량으로 생성할 수 있음

대량 생산도 가능

Page 172: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Valve 방식소스 엔진의 경우 헤머 툴에 포함

Page 173: 구세대 엔진 신데렐라 만들기 최종본 유트브2

룩업 텍스쳐는 포토샵으로 작업해도 되지만 베가스나 에프터이펙트로 작업을 하는게 효과적게임 환경 구석구석을 돌아다니면서 맞춰야 하니깐

다른 툴 이용

Page 174: 구세대 엔진 신데렐라 만들기 최종본 유트브2

적용 결과

Page 175: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Bleach BypassPost Processing

[ 라이언 일병 구하기 ]을 통해 대중에 알려진 필름 기법

Page 176: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Bleach Bypass낮은 채도와 강한 콘트라스트로 인해 실사보다 더한 샤프니스가 두드러진다

Page 177: 구세대 엔진 신데렐라 만들기 최종본 유트브2

컬러 무드등 여러가지 컬라 조정기능In Game

Bleach bypass = 0.0 Bleach bypass = 1.0

Page 178: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Bokeh DOF Without VTFPost Processing

카메라로 Depth Of Field 를 적용하면 렌즈에 따라 Bokeh 가 발생합니다

Page 179: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Bokeh DOF게임 브리오에서 제공하는 선형 DOF 는 차세대에서 쓰기 좀 그렇다

Page 180: 구세대 엔진 신데렐라 만들기 최종본 유트브2

버텍스 펫치를 쓰지 않고도 Bokeh 를 지원한다포커스는 기본 스크린 서페이스의 중심이며 , 포커스 영역을 지정할 수 있다

구현

Page 181: 구세대 엔진 신데렐라 만들기 최종본 유트브2

http://youtu.be/LQrRB3zUICc

영상

Page 182: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Pseudo Lens FlarePost Processing

Image From BattleField3(EA,DICE)

태양이나 라이트의 렌즈 플레어는 전통적으로 게임의 환경을 꾸미는 역할을 담당

Page 183: 구세대 엔진 신데렐라 만들기 최종본 유트브2

VS

구현 방식 비교스프라이트 기반 렌즈 플레어

- 명시적으로 배치 할 수 있다- 언제나 정적인 모습으로 비현실적으로 보인다

물리 기반 SS 렌즈 플레어

- 비용이 스프라이트 기반 렌즈

플레어에 비해 비싸다- 현실적이고도 , 이미지와 복합적으로 사용 할 수도

있다

Page 184: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Downsample + 임계 값 Flip horizontally + vertically 수평 뒤집기 + 수직 Generate lens flare features 렌즈 플레어 기능을 생성 Upscale + modulate with a 'dirt' texture + blend with original image 고급 + 는 ' 흙 ' 질감으로 조절 + 조화를 원본 이미지와 함께

구현 방법

Page 185: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Add Chromatic Halo Ring Add Dirty Lens Surface

영상

Page 186: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Anti AliasingPost Processing

지금까지 구현된 것은 루카츠아츠에서 드미트리기 제안한 DLAAMSAA 를 지양하고 Shader AA 를 구현한다

FXAA

Page 187: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Directionally Localized Anti-AliasingPost Processing

다른 관점에서 안티 알리아싱(GDC 2011 Dmitry Andreev, LucasArts) 에서 소개가로 세로 높은 주파수의 엣지를 샘플링 하여 블러링 한다

Page 189: 구세대 엔진 신데렐라 만들기 최종본 유트브2

구현

Directionally Localized Anti-Aliasing Without Anti-Aliasing

Page 190: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Optimizing SectionPost Processing

GameBryo Default Shader 보다 훨씬 많은 일들을 하고 , 고급 조명효과를 제공한다

GameBryo Default Shader 보다 무겁다

Shader Optimizing

Page 191: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Shader Optimizing가장 부하가 심한 라이팅 계산의 Skipping

픽셀 라이팅 스피킹

Vertex Shader 에서 기본라이팅을 계산( 대신 좀 넓은 영역으로 ) 0.5*N dot L+0.5

라이트맵의 일정 명도 이하의 값과 리얼타임 쉐도우의 영역을 추출

픽셀 쉐이더에서의 라이팅 계산

Page 192: 구세대 엔진 신데렐라 만들기 최종본 유트브2

블랙영역을 라이팅 스키핑 영역을 지정

Page 193: 구세대 엔진 신데렐라 만들기 최종본 유트브2

Diffuse Light

요약BRDFWrapped DiffuseFrensnelTransiucency Material

Ambient LightHemisphere LightingSpherical Harmonics From IBLSpherical Harmonics From Point Cloud

Light MappingDirectional LightmapHDR Lightmap

FrameworkManetSkyLabRe-Construction of ColorEmissive Glow

Post ProcessingScreen Space EffectHDR Tone mappingColor GradingBleach BypassBokeh DOF Without VTFPseudo Lens FlareDLAA

Page 194: 구세대 엔진 신데렐라 만들기 최종본 유트브2

물리기반 라이팅 모델사용

결론 정적 ,동적 SH,Hemi 시스템으로엠비언트 라이팅 시스템 강화Sub Surface Scatter-

ing/SSSSS 산란기법 사용최신 라이팅 솔루션에 근접한 라이트맵 구현마네 , 스카이랩등 미들웨어급 프레임 웍 구현으로 모듈간 연결 고리 구축부분적 디퍼드 시스템 채용과 컬러 재 구축 ,HDR톤 맵핑 구축으로 인한 차세대 컬러 구현

Page 195: 구세대 엔진 신데렐라 만들기 최종본 유트브2

결론

“We Can Do It”

Page 196: 구세대 엔진 신데렐라 만들기 최종본 유트브2

References

Wrap diffues : http://blog.stevemcauley.com/2011/12/03/energy-conserving-wrapped-diffuse/ http://engineroom.ubi.com/energy-conserving-wrapped-diffuse/

Normal Map : http://www.ozone3d.net/tutorials/bump_map_compression_p5.php http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_EfficientSelfShadowedRadiosityNormalMapping.pdfBRDF : Background: Physically-Based Shading (Naty Hoffman): http://renderwonk.com/publications/s2010-shading-course/hoffman/s2010_physically_based_shading_hoffman_a_notes.pdfPractical Implementation of Physically-Based Shading Models at tri-Ace (Yoshiharu Gotanda): http://renderwonk.com/publications/s2010-shading-course/gotanda/course_note_practical_implementation_at_triace.pdfCrafting Physically Motivated Shading Models for Game Development (Naty Hoffman): http://renderwonk.com/publications/s2010-shading-course/hoffman/s2010_physically_based_shading_hoffman_b_notes.pdfPhysically-based lighting in Call of Duty: Black Ops: http://advances.realtimerendering.com/s2011/Lazarov-Physically-Based-Lighting-in-Black-Ops%20(Siggraph%202011%20Advances%20in%20Real-Time%20Rendering%20Course).pptxMicrofacet Models for Refraction through Rough Surfaces:http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdfhttp://www.rorydriscoll.com/2009/01/25/energy-conservation-in-games/http://seblagarde.wordpress.com/2011/08/17/hello-world/

SH : http://developer.amd.com/media/gpu_assets/Tatarchuk_Irradiance_Volumes.pdf http://www2.ati.com/developer/gdc/D3DTutorial10_Half-Life2_Shading.pdf

Page 197: 구세대 엔진 신데렐라 만들기 최종본 유트브2

References

Directional Light map : http://www.decew.net/OSS/References/sem_ss06_07-Independant%20Explanation.pdf기타 : http://maddieman.wordpress.com/2009/06/23/gamma-correction-and-linear-colour-space-simplified/ http://www.slideshare.net/leemwymw/gamma-and-linear-colorspace

Page 198: 구세대 엔진 신데렐라 만들기 최종본 유트브2

기술 구현 및 협력버티고우 게임즈 고경석 책임연구원[email protected]

http://twitter.com/artmouse_ko