198
구구구 구구 , 구구구구 구구구 구구구 구 구구 구구구구 구구구 구구구 구구 구구 NDC 2013

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

  • Upload
    -

  • View
    4.573

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

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