SlideShare a Scribd company logo
1 of 34
게임 프로그래머를 위한
리얼타임 렌더링
- 조명편 -
2018.01.26 데브루키 발표자 이석우
발표자 소개
 이석우 (1987년생)
 게임 회사로 이직 희망하는 병특(전문연구요원)
 발표자료에 대한 오류사항이나 궁금한 점이 있으면 아래의 메일로 연락주세요.
kkndsta@naver.com
참고자료
 게임 프로그래밍을 위한 3차원 그래픽스 - 저자 : 한정현 -
지난 이야기
 그래픽스 파이프라인에서 프래그먼트 처리 단계는 프래그먼트의 색상을 구한다.
 색상은 텍스쳐링과 조명 등을 통해 구해진다.
조명이란 무엇인가
 조명(illumination or lighting)은 광원과 물체 사이의 상호작용을 처리하는 기술이다.
 조명 모델
 국소 조명 모델(Local illumination)
 전역 조명 모델(global illumination)
국소 조명 모델
 광원과 표면 재질의 특성만을 고려한 조명 모델이다.
 직접 조명(direct lighting)이라고 한다.
 계산이 간단하지만 퀄리티가 떨어진다.
전역 조명 모델
 현실에서는 모든 표면에 빛이 간접적으로 도달한다. (장면의 특정 위치에서 광원이
보이지 않더라도, 조명은 다른 표면의 반사나 굴절 등을 통해 그 위치에 전달된다.)
 이러한 간접 조명을 고려하기 위해 전역 조명 모델(global illumination)은 주변 물체
들을 잠재적인 광원으로 본다.
전역 조명 모델의 문제점
 계산하는 데 너무 많은 비용이 든다.
 레스터라이제이션 기반의 GPU 아키텍쳐는 국소 조명 모델이 더 적절하다.
전역 조명 모델의 동향
 정밀한 GI를 이용하기 보다는 계산을 간략화한 GI를 이용한다.
 GI를 미리 계산한 후 텍스쳐에 저장하여 이를 실시간에 사용한다.
오늘 발표
 프래그먼트 처리 단계에서 사용되는 국소 조명 모델에 대해서 알아본다.
Phong Lighting model
 가장 보편적인 국소 조명 모델이다.
 디퓨즈, 스펙큘러, 엠비언트, 발광 항을 고려한다.
Diffuse term
 디퓨즈 항은 객체의 표면에 부딪힌 후 전방향으로 흩어지는 빛을 표현한다
 물체의 표면으로 들어온 빛은 모든 방향으로 같은 강도로 반사된다. 이를 난반사라
부른다.
 따라서, 반사량은 카메라 시선(시야 방향)에 무관하다.
Diffuse term - Lambert’s law -
 대신 반사량은 물체 표면에 들어오는 빛의 양에 비례한다.
 빛의 양은 노말 벡터와 빛 벡터의 내적으로 측정할 수 있다.
 이를 람베르트 법칙이라 한다.
빛의 양 = max 𝑛 ∙ 𝑙, 0 = max(𝑛𝑙𝑐𝑜𝑠𝜃, 0)
𝑝: 물체 표면 위의 한 점
𝑙 : 빛벡터
𝑛: 노말벡터
𝜃: 입사각
Diffuse term - Lambert’s law -
 그림 (b)와 같이 노말 벡터와 빛 벡터의 방향이 같을 경우, 빛의 양이 가장 크다.
 그림 (c)와 같이 입사각이 90도일 경우, 값이 0이 된다.
 그림 (d)와 같이 입사각이 90도 이상일 경우 내적은 음의 값이 된다. 이럴 경우 빛의
양은 0으로 한다.
max 𝑛𝑙𝑐𝑜𝑠0, 0 = 𝑛𝑙 max 𝑛𝑙𝑐𝑜𝑠90°
, 0 = 0 max 𝑛𝑙𝑐𝑜𝑠120°
, 0 = 0
Diffuse term - 빛의 색과 재질 -
 빛의 양 이외에도 추가적으로 빛의 고유색과 재질의 디퓨즈 반사율(diffuse
reflectance)을 고려하여 디퓨즈 항을 계산한다.
𝐿 𝑑 = max 𝑛 ∙ 𝑙, 0 𝑠 𝑑 ⊗ 𝑚 𝑑
𝐿 𝑑 : 디퓨즈 항
𝑠 𝑑 : 빛의 고유색
𝑚 𝑑 : 재질의 디퓨즈 반사율
Diffuse term - 빛의 색과 재질 -
 백색 빛 (1, 1, 1)이 물체의 표면 반사 노란빛을 띤다면 빨강색과 초록색은 반사하고
파란색을 흡수한다. 재질 파라미터를 이용하여 이러한 종류의 필터링이 가능하다.
(1, 1, 1) ⊗ (1, 1, 0) = (1, 1, 0) (0.5, 0.5, 0.5) ⊗ (0.5, 1, 0.5) = (0.25, 0.5, 0.25)
𝑠 𝑑 ⊗ 𝑚 𝑑
Diffuse term
 디퓨즈 항을 적용한 결과
Specular term
 스펙큘러 항은 물체 표면에 하이라이트(highlight)를 만드는데 사용되며 정반사라
부른다.
 스펙큘러 항은 계산하기 위해 시야 벡터, 반사 벡터, 빛벡터를 이용한다.
Specular term -반사 벡터-
 반사 벡터 유도
Specular term -시야 벡터-
 디퓨즈 항이 시야 벡터에 독립적인 반면 스펙큘러 항은 시야 벡터에 의존한다.
 하이라이트의 감소되는 정도는 (𝑟 ∙ 𝑣) 𝑠ℎ
로 근사적으로 계산되며, sh는 표면의 반짝임
(shininess)를 의미한다.
 완벽히 매끄러운 표면의 경우, sh값은 무한대가 되고 𝜌 = 0일 경우에만 카메라에 보인다.
 그렇지 않은 표면에서는, 𝜌가 0일 때 가장 큰 하이라이트가 생기고 𝜌가 커질수록 급격히
감소한다.
Specular term -하이라이트-
 sh값에 따른 결과
Specular term
 스펙큘러 항의 최종식은 아래와 같다.
 디퓨트 항의 재질과는 달리 스펙큘러 항의 재질 특성은 (0.9, 0.9, 0.9), (0.8, 0.8, 0.8)
등과 같이 회색조(gray-scale)로 표현되는데, 이는 하이라이트가 광원을 띄게 하기
위함이다.
Ambient term
 앰비언트 항은 장면 속 물체들로 반사된 빛을 근사적으로 표현한다. 흔히 간접광이
라 부른다.
 퐁 모델에서 엠비언트 항은 빛이 물체의 모든 표면에 동일한 광도로 반사된다.
Emissive term
 마지막으로 발산광은(emissive light)은 표면 그 자체에서 발산하는 빛을 묘사한다.
Phong Lighting Model
 퐁 모델은 네 개 항을 더하여 다음과 같이 정의된다.
Shader
 쉐이더는 GPU에서 실행가능한 프로그램을 의미하여, 프로그래머가 제어 할 수 있다.
쉐이딩 언어
 C 언어와 매우 유사하다.
 Hight Level Shading Launguage(HLSL) by Microsoft
 GLSL(OpenGL Shading Language) by OpenGL
 벡터와 행렬 같은 특수한 데이터 타입을 지원한다.
 입력 데이터의 두가지 종류
 Varing data: 쉐이더를 실행할 때마다 변하는 데이터(예 : 버텍스)
 Uniform data : 다수의 쉐이더에서 공유되는 일정한 값(예 : 월드 행렬)
Per-vertex Lighting
 Per-vertex Lighting은 버텍스 쉐이더에서 조명을 계산한다.
Per-vertex Lighting
 버텍스 쉐이더에서 계산된 조명 값은 래스터 라이져 단계에서 선형 보간되어 픽셀
단위의 값들로 저장된다.
Per-vertex Lighting 의 문제점
 하나의 삼각형을 이루는 3개의 버텍스에 하이라이트가 없을 경우, 삼각형 사이에 점 p에
서 하이라이트가 존재해도 Per-vertex Lighting의 결과는 하이라이트가 보이지 않는다.
Per-vertex Lighting
Per-fragment Lighting
실제 조명
Per-vertex Lighting 의 문제점
 이 문제는 카메라가 움직일 때 더욱 두드러져 하이라이트가 없어졌다 갑자기 생기
는 현상이 발생한다.
Per-fragment Lighting
 Per-vertex Light 문제를 해결하기 위해 프래그먼트에서 조명을 계산한다.
Per-fragment Lighting
 픽셀 세이더에서 조명을 계산하기 전, 노말
벡터를 반드시 정규화 해야한다. 래스터라
이저 단계에서 보간된 노말 벡터는 일반적
으로 단위벡터가 아니기 때문이다.
Q&A

More Related Content

What's hot

[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해SangYun Yi
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑MoonLightMS
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesJangho Lee
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정Dae Hyek KIM
 
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & GlassDae Hyek KIM
 
Devtree lightmapping unity5_2_1stday
Devtree lightmapping unity5_2_1stdayDevtree lightmapping unity5_2_1stday
Devtree lightmapping unity5_2_1stdaySangYun Yi
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correctionMinGeun Park
 
GameMath-Chapter 08 고급렌더링
GameMath-Chapter 08 고급렌더링GameMath-Chapter 08 고급렌더링
GameMath-Chapter 08 고급렌더링Mark Choi
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art TechnologiesSangYun Yi
 
[0529 박민근] 전역조명(global illumination)
[0529 박민근] 전역조명(global illumination)[0529 박민근] 전역조명(global illumination)
[0529 박민근] 전역조명(global illumination)MinGeun Park
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개noerror
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
9강 camera advanced light2
9강 camera advanced light29강 camera advanced light2
9강 camera advanced light2JP Jung
 
Unite2015 probelight(150417)
Unite2015 probelight(150417)Unite2015 probelight(150417)
Unite2015 probelight(150417)SangYun Yi
 

What's hot (20)

[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해Display color와 Digital texture format의 이해
Display color와 Digital texture format의 이해
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑
 
그림자 이야기
그림자 이야기그림자 이야기
그림자 이야기
 
Real-Time Global Illumination Techniques
Real-Time Global Illumination TechniquesReal-Time Global Illumination Techniques
Real-Time Global Illumination Techniques
 
언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정언차티드4 테크아트 파트1 톤맵핑&색보정
언차티드4 테크아트 파트1 톤맵핑&색보정
 
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass
언차티드4 테크아트 파트4 Special Case Materials - Moss & Wetness & Glass
 
Devtree lightmapping unity5_2_1stday
Devtree lightmapping unity5_2_1stdayDevtree lightmapping unity5_2_1stday
Devtree lightmapping unity5_2_1stday
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
 
GameMath-Chapter 08 고급렌더링
GameMath-Chapter 08 고급렌더링GameMath-Chapter 08 고급렌더링
GameMath-Chapter 08 고급렌더링
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
 
D2 Hdr
D2 HdrD2 Hdr
D2 Hdr
 
[0529 박민근] 전역조명(global illumination)
[0529 박민근] 전역조명(global illumination)[0529 박민근] 전역조명(global illumination)
[0529 박민근] 전역조명(global illumination)
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
9강 camera advanced light2
9강 camera advanced light29강 camera advanced light2
9강 camera advanced light2
 
Unite2015 probelight(150417)
Unite2015 probelight(150417)Unite2015 probelight(150417)
Unite2015 probelight(150417)
 

Similar to 리얼타임 렌더링 - 조명 입문편 -

[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field
[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field
[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field종빈 오
 
[12 0324] 빛과 그림자
[12 0324] 빛과 그림자[12 0324] 빛과 그림자
[12 0324] 빛과 그림자SeungMin Yang
 
언차티드4 테크아트 파트2 mipFog
언차티드4 테크아트 파트2 mipFog언차티드4 테크아트 파트2 mipFog
언차티드4 테크아트 파트2 mipFogDae Hyek KIM
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)해강
 
언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF TermDae Hyek KIM
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
Unity 3d study #3
Unity 3d study #3Unity 3d study #3
Unity 3d study #3Hyunwoo Kim
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기Madumpa Park
 
111118 ch 4_basic image manipulation_web
111118 ch 4_basic image manipulation_web111118 ch 4_basic image manipulation_web
111118 ch 4_basic image manipulation_webCARROTCG
 
The Art and Science of Digital Compositing Chapter 1,2
The Art and Science of Digital Compositing Chapter 1,2The Art and Science of Digital Compositing Chapter 1,2
The Art and Science of Digital Compositing Chapter 1,2CARROTCG
 
10_Human Skin Rendering
10_Human Skin Rendering10_Human Skin Rendering
10_Human Skin Renderingnoerror
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflectionBongseok Cho
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow MapsBongseok Cho
 

Similar to 리얼타임 렌더링 - 조명 입문편 - (17)

[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field
[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field
[GPU Gems3] Chapter 28. Practical Post Process Depth Of Field
 
[12 0324] 빛과 그림자
[12 0324] 빛과 그림자[12 0324] 빛과 그림자
[12 0324] 빛과 그림자
 
언차티드4 테크아트 파트2 mipFog
언차티드4 테크아트 파트2 mipFog언차티드4 테크아트 파트2 mipFog
언차티드4 테크아트 파트2 mipFog
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
7_조명.pptx
7_조명.pptx7_조명.pptx
7_조명.pptx
 
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
[Shader study] Lighting Killzone : Shadow Fall - 발표메모(13.10.14)
 
언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term언차티드4 테크아트 파트3 MicroShadowBRDF Term
언차티드4 테크아트 파트3 MicroShadowBRDF Term
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
렌더링 시스템
렌더링 시스템렌더링 시스템
렌더링 시스템
 
Unity 3d study #3
Unity 3d study #3Unity 3d study #3
Unity 3d study #3
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
111118 ch 4_basic image manipulation_web
111118 ch 4_basic image manipulation_web111118 ch 4_basic image manipulation_web
111118 ch 4_basic image manipulation_web
 
The Art and Science of Digital Compositing Chapter 1,2
The Art and Science of Digital Compositing Chapter 1,2The Art and Science of Digital Compositing Chapter 1,2
The Art and Science of Digital Compositing Chapter 1,2
 
10_Human Skin Rendering
10_Human Skin Rendering10_Human Skin Rendering
10_Human Skin Rendering
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
 

More from Sukwoo Lee

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
Component-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignComponent-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignSukwoo Lee
 

More from Sukwoo Lee (10)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
행동 트리
행동 트리행동 트리
행동 트리
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
Component-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented DesignComponent-Based Entity System과 Data-oriented Design
Component-Based Entity System과 Data-oriented Design
 

리얼타임 렌더링 - 조명 입문편 -

  • 1. 게임 프로그래머를 위한 리얼타임 렌더링 - 조명편 - 2018.01.26 데브루키 발표자 이석우
  • 2. 발표자 소개  이석우 (1987년생)  게임 회사로 이직 희망하는 병특(전문연구요원)  발표자료에 대한 오류사항이나 궁금한 점이 있으면 아래의 메일로 연락주세요. kkndsta@naver.com
  • 3. 참고자료  게임 프로그래밍을 위한 3차원 그래픽스 - 저자 : 한정현 -
  • 4. 지난 이야기  그래픽스 파이프라인에서 프래그먼트 처리 단계는 프래그먼트의 색상을 구한다.  색상은 텍스쳐링과 조명 등을 통해 구해진다.
  • 5. 조명이란 무엇인가  조명(illumination or lighting)은 광원과 물체 사이의 상호작용을 처리하는 기술이다.  조명 모델  국소 조명 모델(Local illumination)  전역 조명 모델(global illumination)
  • 6. 국소 조명 모델  광원과 표면 재질의 특성만을 고려한 조명 모델이다.  직접 조명(direct lighting)이라고 한다.  계산이 간단하지만 퀄리티가 떨어진다.
  • 7. 전역 조명 모델  현실에서는 모든 표면에 빛이 간접적으로 도달한다. (장면의 특정 위치에서 광원이 보이지 않더라도, 조명은 다른 표면의 반사나 굴절 등을 통해 그 위치에 전달된다.)  이러한 간접 조명을 고려하기 위해 전역 조명 모델(global illumination)은 주변 물체 들을 잠재적인 광원으로 본다.
  • 8. 전역 조명 모델의 문제점  계산하는 데 너무 많은 비용이 든다.  레스터라이제이션 기반의 GPU 아키텍쳐는 국소 조명 모델이 더 적절하다.
  • 9. 전역 조명 모델의 동향  정밀한 GI를 이용하기 보다는 계산을 간략화한 GI를 이용한다.  GI를 미리 계산한 후 텍스쳐에 저장하여 이를 실시간에 사용한다.
  • 10. 오늘 발표  프래그먼트 처리 단계에서 사용되는 국소 조명 모델에 대해서 알아본다.
  • 11. Phong Lighting model  가장 보편적인 국소 조명 모델이다.  디퓨즈, 스펙큘러, 엠비언트, 발광 항을 고려한다.
  • 12. Diffuse term  디퓨즈 항은 객체의 표면에 부딪힌 후 전방향으로 흩어지는 빛을 표현한다  물체의 표면으로 들어온 빛은 모든 방향으로 같은 강도로 반사된다. 이를 난반사라 부른다.  따라서, 반사량은 카메라 시선(시야 방향)에 무관하다.
  • 13. Diffuse term - Lambert’s law -  대신 반사량은 물체 표면에 들어오는 빛의 양에 비례한다.  빛의 양은 노말 벡터와 빛 벡터의 내적으로 측정할 수 있다.  이를 람베르트 법칙이라 한다. 빛의 양 = max 𝑛 ∙ 𝑙, 0 = max(𝑛𝑙𝑐𝑜𝑠𝜃, 0) 𝑝: 물체 표면 위의 한 점 𝑙 : 빛벡터 𝑛: 노말벡터 𝜃: 입사각
  • 14. Diffuse term - Lambert’s law -  그림 (b)와 같이 노말 벡터와 빛 벡터의 방향이 같을 경우, 빛의 양이 가장 크다.  그림 (c)와 같이 입사각이 90도일 경우, 값이 0이 된다.  그림 (d)와 같이 입사각이 90도 이상일 경우 내적은 음의 값이 된다. 이럴 경우 빛의 양은 0으로 한다. max 𝑛𝑙𝑐𝑜𝑠0, 0 = 𝑛𝑙 max 𝑛𝑙𝑐𝑜𝑠90° , 0 = 0 max 𝑛𝑙𝑐𝑜𝑠120° , 0 = 0
  • 15. Diffuse term - 빛의 색과 재질 -  빛의 양 이외에도 추가적으로 빛의 고유색과 재질의 디퓨즈 반사율(diffuse reflectance)을 고려하여 디퓨즈 항을 계산한다. 𝐿 𝑑 = max 𝑛 ∙ 𝑙, 0 𝑠 𝑑 ⊗ 𝑚 𝑑 𝐿 𝑑 : 디퓨즈 항 𝑠 𝑑 : 빛의 고유색 𝑚 𝑑 : 재질의 디퓨즈 반사율
  • 16. Diffuse term - 빛의 색과 재질 -  백색 빛 (1, 1, 1)이 물체의 표면 반사 노란빛을 띤다면 빨강색과 초록색은 반사하고 파란색을 흡수한다. 재질 파라미터를 이용하여 이러한 종류의 필터링이 가능하다. (1, 1, 1) ⊗ (1, 1, 0) = (1, 1, 0) (0.5, 0.5, 0.5) ⊗ (0.5, 1, 0.5) = (0.25, 0.5, 0.25) 𝑠 𝑑 ⊗ 𝑚 𝑑
  • 17. Diffuse term  디퓨즈 항을 적용한 결과
  • 18. Specular term  스펙큘러 항은 물체 표면에 하이라이트(highlight)를 만드는데 사용되며 정반사라 부른다.  스펙큘러 항은 계산하기 위해 시야 벡터, 반사 벡터, 빛벡터를 이용한다.
  • 19. Specular term -반사 벡터-  반사 벡터 유도
  • 20. Specular term -시야 벡터-  디퓨즈 항이 시야 벡터에 독립적인 반면 스펙큘러 항은 시야 벡터에 의존한다.  하이라이트의 감소되는 정도는 (𝑟 ∙ 𝑣) 𝑠ℎ 로 근사적으로 계산되며, sh는 표면의 반짝임 (shininess)를 의미한다.  완벽히 매끄러운 표면의 경우, sh값은 무한대가 되고 𝜌 = 0일 경우에만 카메라에 보인다.  그렇지 않은 표면에서는, 𝜌가 0일 때 가장 큰 하이라이트가 생기고 𝜌가 커질수록 급격히 감소한다.
  • 21. Specular term -하이라이트-  sh값에 따른 결과
  • 22. Specular term  스펙큘러 항의 최종식은 아래와 같다.  디퓨트 항의 재질과는 달리 스펙큘러 항의 재질 특성은 (0.9, 0.9, 0.9), (0.8, 0.8, 0.8) 등과 같이 회색조(gray-scale)로 표현되는데, 이는 하이라이트가 광원을 띄게 하기 위함이다.
  • 23. Ambient term  앰비언트 항은 장면 속 물체들로 반사된 빛을 근사적으로 표현한다. 흔히 간접광이 라 부른다.  퐁 모델에서 엠비언트 항은 빛이 물체의 모든 표면에 동일한 광도로 반사된다.
  • 24. Emissive term  마지막으로 발산광은(emissive light)은 표면 그 자체에서 발산하는 빛을 묘사한다.
  • 25. Phong Lighting Model  퐁 모델은 네 개 항을 더하여 다음과 같이 정의된다.
  • 26. Shader  쉐이더는 GPU에서 실행가능한 프로그램을 의미하여, 프로그래머가 제어 할 수 있다.
  • 27. 쉐이딩 언어  C 언어와 매우 유사하다.  Hight Level Shading Launguage(HLSL) by Microsoft  GLSL(OpenGL Shading Language) by OpenGL  벡터와 행렬 같은 특수한 데이터 타입을 지원한다.  입력 데이터의 두가지 종류  Varing data: 쉐이더를 실행할 때마다 변하는 데이터(예 : 버텍스)  Uniform data : 다수의 쉐이더에서 공유되는 일정한 값(예 : 월드 행렬)
  • 28. Per-vertex Lighting  Per-vertex Lighting은 버텍스 쉐이더에서 조명을 계산한다.
  • 29. Per-vertex Lighting  버텍스 쉐이더에서 계산된 조명 값은 래스터 라이져 단계에서 선형 보간되어 픽셀 단위의 값들로 저장된다.
  • 30. Per-vertex Lighting 의 문제점  하나의 삼각형을 이루는 3개의 버텍스에 하이라이트가 없을 경우, 삼각형 사이에 점 p에 서 하이라이트가 존재해도 Per-vertex Lighting의 결과는 하이라이트가 보이지 않는다. Per-vertex Lighting Per-fragment Lighting 실제 조명
  • 31. Per-vertex Lighting 의 문제점  이 문제는 카메라가 움직일 때 더욱 두드러져 하이라이트가 없어졌다 갑자기 생기 는 현상이 발생한다.
  • 32. Per-fragment Lighting  Per-vertex Light 문제를 해결하기 위해 프래그먼트에서 조명을 계산한다.
  • 33. Per-fragment Lighting  픽셀 세이더에서 조명을 계산하기 전, 노말 벡터를 반드시 정규화 해야한다. 래스터라 이저 단계에서 보간된 노말 벡터는 일반적 으로 단위벡터가 아니기 때문이다.
  • 34. Q&A