SlideShare a Scribd company logo
1 of 39
제7장 조명
1
7.1 빛과 재질의 상호작용
7.2 법선 벡터
7.3 램버트의 코사인 법칙
7.4 분산광 조명
7.5 반영광 조명
7.7 중간 정리
7.8 재질의 설정
7.9 평행광
7.10 점광
7.11 점적광
7.12 구현
7.13 조명 예제
7.14 조명된 두개골 예제
7.15 요약
7.16 연습문제
DirectX 11을 이용한 3D 게임 프로그래밍 입문
2022.06.07 함송연
7.1 빛과 재질의 상호작용
재질 Material
• 정점의 색상  표면의 재질 특성, 광원의 특성을 설정. 조명 방적식을 적용하여 정점 색상을 결정
• 재질은 빛이 물체의 표면과 상호작용하는 방식을 결정하는 속성들의 집합
• 표면이 반사, 흡수하는 빛의 색상들, 표면의 반사율, 투명도, 광택도 등
• 삼원색 이론
• 망막에는 적색광, 녹색광, 청색광에 민감한 세 종류의 광수용 세포가 있다.
2
7.1 빛과 재질의 상호작용
국소 조명 모형 local illumination model
• 국소 모형에서는 각 물체를 다른 물체와는 독립적으로 처리, 오직 광원에서 직접 방출된 빛만 다룬다.
(즉, 장면의 다른 물체에 반사된 빛은 무시한다.)
• 전역 조명 모형에서는 광원의 직접광뿐만 아니라 장면의 다른 물체에서 반사된 간접관도 고려한다.
3
7.2 법선 벡터
면 법선 face normal
• 면 법선 (face normal) : 다각형이 향하고 있는 방향을 나타내는 단위벡터 (= 다각형의 모든 점에 수직인 단
위벡터)
• 표면 법선 (surface normal) : 표면의 한 점이 접평면에 수직인 단위 벡터. 표면의 한 점이 ‘바라보는(facing)’
방향을 결정함
• 조명 계산을 위해서는 삼각형 메시 표면의 모든 점에서 표면 법선이 필요 (광선이 메시 표면의 점으로 입사
한 각도를 구하기 위함)
• 일반적으로 표면 법선은 삼각형 정점들, 즉 세 꼭짓점에만 지정하며 그러한 법선을 흔히 정점 법선이라 함.
• 래스터화 과정에서 그 세 정점 법선의 보간을 통해서 표면 점의 법선이 결정된다.
4
7.2.1 법선 벡터의 계산
면 법선 face normal
• 삼각형의 면 법선을 구하려면 우선 삼각형의 두 변에 놓인 벡터들을 구하고, 두 벡터로 면 법선 벡터를 구하
면 된다.
5
7.2.1 법선 벡터의 계산
정점 법선 평균
• 미분이 가능한 경우 미적분 기법들을 이용해서 표면의 점의 법선을 구할 수 있지만,
일반적으로 다각형 메시는 미분가능(differentiable)이 아니다.
• 다각형(주로 삼각형) 메시에 대해서는 정점 법선 평균을 이용한 기법이 흔히 쓰인다.
6
7.2.2 법선 벡터의 변환
법선 벡터의 변환
• 접선 벡터 u = v1 – v0은 법선 벡터 n에 수직이다.
• 이들에 비균등 비례 변환 A를 적용한다면, (b)에서 보듯이 변환된 접선 벡터
uA = v1A – v0A와 변환된 법선 벡터 nA는 더 이상 수직이 아니다.
• 점과 벡터(법선이 아닌)를 변환하는 변환 행렬 A가 주어졌을 때, 변환 후의 접
선 벡터와 법선 벡터가 여전히 직교가 되는 법선 벡터 변환 행렬 B를 구해야 한
다.
• 이때, 법선 벡터 n과 접선 벡터 u가 수직이라는 점부터 나아가면…
• 따라서 변환된 법선 벡터가 변환된 해당 접선 벡터 uA와 수직이 되게 하는 법
선 변환 행렬은 B = (A-1)T, 즉 A의 역행렬의 전치행렬(역전치행렬)이다.
7
7.2.2 법선 벡터의 변환
법선 벡터의 변환
• 만일 변환 행렬이 직교행렬(AT = A-1)이면, B = (A-1)T = (AT)T = A
• 즉, 직교 행렬의 경우 역전치를 따로 구할 필요 없이 A를 그대로 사용하면 된다.
• 법선 벡터를 비균등 변환이나 전단 변환으로 변환할 때에는 해당 변환 행렬의
역전치 행렬을 사용해야 한다.
8
7.2.2 법선 벡터의 변환
9
7.3 람베르트 코사인 법칙
10
람베르트의 코사인 법칙
• 빛이 들어오는 각도에 따라 반사되는 빛의 intensity가 다르며, 이것은 cosine 법칙을 따른다.
• 입사광을 가는 막대라고 생각할 때, dA는 막대가 표면과 교차하는 영역의 넓이
• 이로부터, 정점 법선과 빛 벡터(light vector) 사이의 각도에 기초해서 빛의 세기를 돌려주는 함수를 생각해
볼 수 있다.
(여기서 빛 벡터는 입사광의 반대 방향, 즉 표면에서 광원으로의 벡터임에 주의)
• 그 함수의 값은 정점 법선과 빛 벡터가 정확히 같은 방향일 때 최댓값, 정점 법선과 빛 벡터의 각도가 커짐에
따라 점차 감소
• 세타 > 90도 이면, 빛이 표면의 뒤쪽을 때린 것이므로 함수의 값, 즉 빛의 세기는 0이어야 함
7.3 람베르트 코사인 법칙
11
람베르트의 코사인 법칙
7.4 분산광 조명 diffuse
12
분산 반사 diffuse reflection
• 그림과 같은 거친 표면에서, 표면의 한 점을 빛이 때리면 광선들이 다양
한 무작위 방향으로 흩어진다.
• 이 책이 사용하는 조명 모형에서는 이런 종류의 빛/표면 상호작용에서 빛
이 표면 위쪽의 모든 방향으로 고르게 분산된다고 가정한다.
• 즉 표면의 한 점의 색상은 그 점을 어디에서 보든 같다.
• 그러므로 분산광을 계산할 때에는 시점을 고려할 필요가 없다.
(= 분산광 조명 계산은 시점에 독립적이다)
분산광 / 주변광 / 반영광
7.4 분산광 조명 diffuse
13
분산광의 계산:
• 분산광의 계산은 두 부분으로 나뉜다.
• 1) 분산광 재질 색상 x 분산광의 색상 = 반사된 분산광의 색상 (적/녹/청)
• Ld : 입사 분산광, md : 분산광 재질 색상
• 2) 반사광의 세기를 람베르트 코사인 법칙에 의거하여 조정
• 즉, 빛 벡터와 표면 법선의 각도에 따라 반사광의 세기를 조율
• Ld : 분산광 색상, md : 분산광 재질 색상
• L : 빛 벡터, n : 표면 법선, kd = max (L•n, 0)
• Cd : 그 점에서 반사된 분산광
분산광 / 주변광 / 반영광
7.5 주변광 조명 ambient
14
주변광의 계산:
• La : 주변광(ambient light), 광원에서 간접적으로 표면에 도달한 빛의 양
• Ma : 주변광 재질 색상, 표면이 주변광을 얼마나 흡수하고 반사하는지 결정
• 주변과의 계산에는 실질적인 물리 계산이 전혀 관여하지 않는다.
• 주변광 항을 분산광에 합한 새로운 조명 방정식
분산광 / 주변광 / 반영광
7.6 반영광 조명 specular
15
반영광의 계산:
• 그림과 같은 매끄러운 표면에서,
• 표면을 때린 광선들 중
시점을 향한 반사 원뿔(cone of reflectance)에 속하는 광선들은 눈에 뚜렷하게 인식됨
• 이를 반영 반사(specular reflection; 거울 반사)라고 함
• 분산광과는 달리 반영광은 특정 방향으로 반사되는 빛이므로 시점에 따라 인식되지 않을 수 있
음
분산광 / 주변광 / 반영광
7.6 반영광 조명 specular
16
반영광의 계산:
• 반영광이 반사되는 영역을 규정하는 원뿔은 반사 벡터 r에 대한 각도 Ømax로 정의된다.
• 반영광의 세기는 반사 벡터 r과 시점 벡터 v (표면 점 P에서 시점 위치 E로의 벡터) 사이의 각도
Ø에 따라 변한다.
• 반영광의 세기는 Ø = 0 일때 최대, Ø가 Ømax에 가까워짐에 따라 점차 0으로 감소한다.
분산광 / 주변광 / 반영광
7.6 반영광 조명 specular
17
• 반영 지수 p를 얼마로 두느냐에 따라
빛의 세기가 0으로 떨어지는 원뿔 각도 Ømax가 달
라진다.
• 이 매개변수 p를 조정함으로써 표면이 반짝이는 정
도(shininess)를 간접적으로 조정한다.
• 매끄럽고 빛나는 표면일수록 반사 원뿔이 작다.
(빛을 더 날카롭게 반사한다)
 p 값을 더 크게 할 수록 반짝거린다
• V와 r 둘 다 단위 벡터이므로 cos(Ø) = v•r
분산광 / 주변광 / 반영광
7.6 반영광 조명 specular
18
[그림 7.13]
분산광 / 주변광 / 반영광
7.7 중간 정리
19
하나의 광원에서 방출되는 빛
• 간접 조명을 흉내 내기 위한 주변광
• 직접광이 비교적 거친 표면에서 반사하는 현상을 본뜬 분산광
• 직접광이 비교적 매끄러운 표면에서 반사하는 현상을 본뜬 반영광
표면의 한 점이 가지는 재질 속성
• Ambient 주변광 재질: 표면이 주변광을 반사하고 흡수하는 정도
• Diffuse 분산광 재질: 표면이 분산광을 반사하고 흡수하는 정도
• Specular 반영광 재질: 표면이 반영광을 반사하고 흡수하는 정도
• 반영 지수: 반영광 계수에 쓰이는 지수(거듭제곱). 반사 원뿔의 크기를 결정하며, 결과적으로 표
면이 반짝이는 정도를 제어. 원뿔이 작을수록 표면이 더 매끄럽게 보인다(반짝인다)
조명을 이처럼 세 가지 구성요소로 분할하는 것은 유연성을 얻기 위함이다.
7.8 재질의 설정
20
• 같은 표면 상에서 다양한 재질 값을 설정하고 싶
다..
• 1) 정점 별로 재질값을 갖는다
• 이러한 정점별 재질은 래스터화 도중에 삼각형을
따라 보간되며, 삼각형 메시의 표면의 각 점마다
재질 값이 부여될 것
• 그러나 정점별 색상은 세밀한 세부사항을 사실적
으로 본뜨기에는 입도가 너무 크다.
• 2) 재질 값을 그리기 호출마다 다르게 설정할 수
있다.
• 재질 값들을 상수 버퍼의 한 멤버로 설정하면 이
후의 그리기 호출에서 그리는 기하구조들에 그
재질 값들이 적용된다.
7.8 재질의 설정
21
• 2) 재질 값을 그리기 호출마다 다르게 설정할 수
있다.
• 재질 값들을 상수 버퍼의 한 멤버로 설정하면 이
후의 그리기 호출에서 그리는 기하구조들에 그
재질 값들이 적용된다.
• 유사코드로 나타내면…
7.8 재질의 설정
22
• 재질 정보를 담는 Material 구조체 (예제에서 사용, LightHelper.h)
• Reflect : 추후 거울 같은 반사를 위한 값으로 우선 무시.
• 반영광 재질 색상의 넷째 성분으로 반영 지수p를 사용 (조명에는 알파값이 쓰이지 않으므로…)
• 분산광 재질의 알파 성분 : 알파 혼합에 사용 (추후 9장 상술)
7.9 평행광
23
• 본격적으로 광원 이야기를 해보자
• 평행광
• 점광
• 점적광
7.9 평행광
24
• 평행광 (parallel light, 지향광 directional light)
• 아주 멀리 있는 광원에서 오는 빛 (ex 태양)
• 평행광원은 빛이 나아가는 방향을 뜻하는 하나의 벡터로 정의
• 평행광의 조명 방정식은 식 7.3과 정확히 동일
평행광 / 점광 / 점적광
7.10 점광
25
• 점광 (point light)
• 모든 방향으로 내뿜는 빛 (ex 백열등 전구)
• 임의의 점 P에 대해 광원 위치 Q로부터 그 점으로 직접 도달하는 하나의 광선이 존재
• 점광의 빛 벡터는 빛이 나아가는 방향의 반대 (즉 P에서 점광원 Q로 가는 벡터)
• 평행광과의 본질적인 차이는 빛 벡터에 대한 계산 방식 뿐
평행광 / 점광 / 점적광
7.10.1 빛의 감쇠
26
빛의 세기 공식
• 물리적으로 빛의 세기는 역제곱 법칙에 근거한 거리
• L0은 광원에서 d = 1 만큼 떨어진 지점에서의 빛의 세기
• 단 이 공식은 항상 눈으로 보기에 좋은 결과가 나오지는 않음.
• 원하는 결과물이 나올 때까지 매개변수 값을 여러가지로 바꾸어볼 수 있는 다른 공식을 사용
평행광 / 점광 / 점적광
7.10.1 빛의 감쇠
27
빛의 세기 공식
• 원하는 결과물이 나올 때까지 매개변수 값을 여러가지로 바꾸어볼 수 있는 다른 공식을 사용
• A0, a1, a2는 소위 말하는 감쇠 매개변수들이다.
이를 도입해서 얻은 새로운 조명 방정식
• 감쇠가 주변광 항에는 영향을 미치지 않음 (특정 광원의 빛이 아니기 때문에)
평행광 / 점광 / 점적광
7.10.2 범위
28
범위 (range)
• 점광원에서의 범위 매개변수
• 광원과의 거리가 광원의 범위보다 큰 점은 그 광원으로부터 빛을 전혀 받지 않는다.
• 감쇠 매개변수로 약하게 만들 수는 있지만, 최대 적용 범위를 명시적으로 적용하는 것이 유용한
경우가 있음.
• 주어진 점이 범위 밖이면 셰이더 코드가 일찍 결과를 출력함으로써 값비싼 조명 계산과 동적 분
기를 생략할 수 있다.
• 멀리있는 빛을 본뜬 평행광과는 관련 없는 이야기
평행광 / 점광 / 점적광
7.11 점적광
29
점적광 (spotlight)
• 위치 Q에서 d 방향으로 뻗어 나가는 원뿔 형태의 빛 (ex 손전등(플래시))
• 점적광의 공식을 유도해 보자.
• 시작은 점광과 비슷
• 빛 벡터는 다음과 같이 주어진다.
• P : 빛을 받는 점, Q : 점적광원의 위치
• P는 오직 –L과 d 사이의 각도 Ø가 원뿔 각도 Ømax보다 작을 때에만 원뿔안에 있다. (=빛을
받는다)
• 또한 점적광 원뿔 안의 모든 광선의 세기가 동일하지는 않다.
• 중심에서 빛이 가장 강하고, Ø가 0에서 Ømax로 증가함에 따라 빞의 세기가 0으로 감쇠한다.
• 빛의 감쇠를 Ø의 함수로서 제어하려면, 점적광 원뿔의 크기를 제어하려면…
평행광 / 점광 / 점적광
7.11 점적광
30
점적광 (spotlight)
• 조건에 맞는 함수:
• Ø가 증가함에 따라 빛의 세기가 매끄럽게 감소하게 됨
• 또한 지수 s를 조정함으로서 Ømax를 간접적으로 제어할 수 있다 (원뿔 사이즈를 줄이거나 키울
수 있다)
• 점적광 방정식은 점광 방정식에 점적광 원뿔을 기준으로 한 점의 위치에 따른 빛의 감쇠를 흉내
내는 점적광 계수를 곱한 것이다.
• 이를 도입하면 전체적인 조명 방정식은…
평행광 / 점광 / 점적광
7.11 점적광
31
[참고] 함수들의 비용 비교
• 지향광 < 점광 < 점적광
평행광 / 점광 / 점적광
7.12 구현
32
7.12.1 조명을 위한 구조체들
1. Ambient: 광원이 방출하는 주변광의 양
2. Diffuse: 광원이 방출하는 분산광의 양
3. Specular: 광원이 방출하는 반영광의 양
4. Direction: 빛의 방향
5. Position: 광원의 위치
6. Range: 빛의 범위
7. Attenuation: 빛의 세기가 거리에 따라 감소하는 방식을 제어하는 세 개의
감쇠 상수들을 (a0, a1, a2) 형태로 저장
8. Spot: 점적광 계산에서 점적광 원뿔을 제어하는 데 쓰이는 지수
7.12 구현
33
7.12.3 지향광의 구현 (HLSL 함수)
• 이 HLSL 함수는 주어진 재질과 지향광원,
표면 법선,
그리고 시점 벡터 (빛을 받는 표면점에서 시
점을 향한 단위벡터)에 기초해서 표면 점의
조명 값(반사된 빛의 색상)을 계산한다.
• 동적 분기?
7.13 조명 예제
34
7.13 조명 예제
35
지연 렌더링 (deferred rendering)
• 예제 효과에서는 지향광원을 최대 세 개까지만 사용
• 지향광원을 제한하는 필연적인 이유는 없으나, 예제 응용 프로그램의 경우 몇가지 관리 작업이
편해진다.
• 특히 효과 프레임워크가 생성해야 할 셰이더 조합의 개수가 줄어든다.
• 또한 광원의 개수가 일정 수준을 넘으면 렌더링 비용이 아주 비싸지기 시작한다.
• 책의 3부에서 수많은 광원들을 효율적으로 다룰 수 있으며 점광과 점적광을 좀 더 일관된 방식으
로 처리할 수 있는 지연 렌더링(deferred rendering)이라고 부르는 또 다른 렌더링 방법을 배우게
될 것이다.
7.15 요약
36
7.15 요약
37
7.16 연습문제
38
39
끝

More Related Content

Similar to 7_조명.pptx

Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting민웅 이
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기동석 김
 
광학 관련 용어 정리
광학 관련 용어 정리광학 관련 용어 정리
광학 관련 용어 정리guestdde5998
 
광학 관련 용어 정리
광학 관련 용어 정리광학 관련 용어 정리
광학 관련 용어 정리guestdde5998
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -Sukwoo Lee
 
Build Lightmap system
Build Lightmap systemBuild Lightmap system
Build Lightmap systemJaesik Hwang
 
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation종빈 오
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflectionBongseok Cho
 
Real-time near-field global illumination based on a voxel model
Real-time near-field global illumination based on a voxel modelReal-time near-field global illumination based on a voxel model
Real-time near-field global illumination based on a voxel modelJaeyun Lee
 
GameMath-Chapter 07 조명
GameMath-Chapter 07 조명GameMath-Chapter 07 조명
GameMath-Chapter 07 조명Mark Choi
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow MapsBongseok Cho
 
Lighting in Stingray
Lighting in StingrayLighting in Stingray
Lighting in StingrayJaehoon Lee
 
[0604 석재호]광택성사전필터링
[0604 석재호]광택성사전필터링[0604 석재호]광택성사전필터링
[0604 석재호]광택성사전필터링Jaeho Seok
 
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)해강
 
14장 입자 시스템과 스트림 출력.pptx
14장 입자 시스템과 스트림 출력.pptx14장 입자 시스템과 스트림 출력.pptx
14장 입자 시스템과 스트림 출력.pptxHolyTak
 
Visualizing data using t-SNE
Visualizing data using t-SNEVisualizing data using t-SNE
Visualizing data using t-SNE홍배 김
 

Similar to 7_조명.pptx (20)

Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
 
광학 관련 용어 정리
광학 관련 용어 정리광학 관련 용어 정리
광학 관련 용어 정리
 
광학 관련 용어 정리
광학 관련 용어 정리광학 관련 용어 정리
광학 관련 용어 정리
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -
 
Build Lightmap system
Build Lightmap systemBuild Lightmap system
Build Lightmap system
 
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
[shaderx5] 4.6 Real-Time Soft Shadows with Shadow Accumulation
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
Lighting model
Lighting modelLighting model
Lighting model
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
Real-time near-field global illumination based on a voxel model
Real-time near-field global illumination based on a voxel modelReal-time near-field global illumination based on a voxel model
Real-time near-field global illumination based on a voxel model
 
GameMath-Chapter 07 조명
GameMath-Chapter 07 조명GameMath-Chapter 07 조명
GameMath-Chapter 07 조명
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
 
20120921
2012092120120921
20120921
 
Lighting in Stingray
Lighting in StingrayLighting in Stingray
Lighting in Stingray
 
[0604 석재호]광택성사전필터링
[0604 석재호]광택성사전필터링[0604 석재호]광택성사전필터링
[0604 석재호]광택성사전필터링
 
[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)[14.09.01] dynamic lighting in god of war3(shader study)
[14.09.01] dynamic lighting in god of war3(shader study)
 
14장 입자 시스템과 스트림 출력.pptx
14장 입자 시스템과 스트림 출력.pptx14장 입자 시스템과 스트림 출력.pptx
14장 입자 시스템과 스트림 출력.pptx
 
Visualizing data using t-SNE
Visualizing data using t-SNEVisualizing data using t-SNE
Visualizing data using t-SNE
 
정점 변환
정점 변환정점 변환
정점 변환
 

7_조명.pptx

  • 1. 제7장 조명 1 7.1 빛과 재질의 상호작용 7.2 법선 벡터 7.3 램버트의 코사인 법칙 7.4 분산광 조명 7.5 반영광 조명 7.7 중간 정리 7.8 재질의 설정 7.9 평행광 7.10 점광 7.11 점적광 7.12 구현 7.13 조명 예제 7.14 조명된 두개골 예제 7.15 요약 7.16 연습문제 DirectX 11을 이용한 3D 게임 프로그래밍 입문 2022.06.07 함송연
  • 2. 7.1 빛과 재질의 상호작용 재질 Material • 정점의 색상  표면의 재질 특성, 광원의 특성을 설정. 조명 방적식을 적용하여 정점 색상을 결정 • 재질은 빛이 물체의 표면과 상호작용하는 방식을 결정하는 속성들의 집합 • 표면이 반사, 흡수하는 빛의 색상들, 표면의 반사율, 투명도, 광택도 등 • 삼원색 이론 • 망막에는 적색광, 녹색광, 청색광에 민감한 세 종류의 광수용 세포가 있다. 2
  • 3. 7.1 빛과 재질의 상호작용 국소 조명 모형 local illumination model • 국소 모형에서는 각 물체를 다른 물체와는 독립적으로 처리, 오직 광원에서 직접 방출된 빛만 다룬다. (즉, 장면의 다른 물체에 반사된 빛은 무시한다.) • 전역 조명 모형에서는 광원의 직접광뿐만 아니라 장면의 다른 물체에서 반사된 간접관도 고려한다. 3
  • 4. 7.2 법선 벡터 면 법선 face normal • 면 법선 (face normal) : 다각형이 향하고 있는 방향을 나타내는 단위벡터 (= 다각형의 모든 점에 수직인 단 위벡터) • 표면 법선 (surface normal) : 표면의 한 점이 접평면에 수직인 단위 벡터. 표면의 한 점이 ‘바라보는(facing)’ 방향을 결정함 • 조명 계산을 위해서는 삼각형 메시 표면의 모든 점에서 표면 법선이 필요 (광선이 메시 표면의 점으로 입사 한 각도를 구하기 위함) • 일반적으로 표면 법선은 삼각형 정점들, 즉 세 꼭짓점에만 지정하며 그러한 법선을 흔히 정점 법선이라 함. • 래스터화 과정에서 그 세 정점 법선의 보간을 통해서 표면 점의 법선이 결정된다. 4
  • 5. 7.2.1 법선 벡터의 계산 면 법선 face normal • 삼각형의 면 법선을 구하려면 우선 삼각형의 두 변에 놓인 벡터들을 구하고, 두 벡터로 면 법선 벡터를 구하 면 된다. 5
  • 6. 7.2.1 법선 벡터의 계산 정점 법선 평균 • 미분이 가능한 경우 미적분 기법들을 이용해서 표면의 점의 법선을 구할 수 있지만, 일반적으로 다각형 메시는 미분가능(differentiable)이 아니다. • 다각형(주로 삼각형) 메시에 대해서는 정점 법선 평균을 이용한 기법이 흔히 쓰인다. 6
  • 7. 7.2.2 법선 벡터의 변환 법선 벡터의 변환 • 접선 벡터 u = v1 – v0은 법선 벡터 n에 수직이다. • 이들에 비균등 비례 변환 A를 적용한다면, (b)에서 보듯이 변환된 접선 벡터 uA = v1A – v0A와 변환된 법선 벡터 nA는 더 이상 수직이 아니다. • 점과 벡터(법선이 아닌)를 변환하는 변환 행렬 A가 주어졌을 때, 변환 후의 접 선 벡터와 법선 벡터가 여전히 직교가 되는 법선 벡터 변환 행렬 B를 구해야 한 다. • 이때, 법선 벡터 n과 접선 벡터 u가 수직이라는 점부터 나아가면… • 따라서 변환된 법선 벡터가 변환된 해당 접선 벡터 uA와 수직이 되게 하는 법 선 변환 행렬은 B = (A-1)T, 즉 A의 역행렬의 전치행렬(역전치행렬)이다. 7
  • 8. 7.2.2 법선 벡터의 변환 법선 벡터의 변환 • 만일 변환 행렬이 직교행렬(AT = A-1)이면, B = (A-1)T = (AT)T = A • 즉, 직교 행렬의 경우 역전치를 따로 구할 필요 없이 A를 그대로 사용하면 된다. • 법선 벡터를 비균등 변환이나 전단 변환으로 변환할 때에는 해당 변환 행렬의 역전치 행렬을 사용해야 한다. 8
  • 10. 7.3 람베르트 코사인 법칙 10 람베르트의 코사인 법칙 • 빛이 들어오는 각도에 따라 반사되는 빛의 intensity가 다르며, 이것은 cosine 법칙을 따른다. • 입사광을 가는 막대라고 생각할 때, dA는 막대가 표면과 교차하는 영역의 넓이 • 이로부터, 정점 법선과 빛 벡터(light vector) 사이의 각도에 기초해서 빛의 세기를 돌려주는 함수를 생각해 볼 수 있다. (여기서 빛 벡터는 입사광의 반대 방향, 즉 표면에서 광원으로의 벡터임에 주의) • 그 함수의 값은 정점 법선과 빛 벡터가 정확히 같은 방향일 때 최댓값, 정점 법선과 빛 벡터의 각도가 커짐에 따라 점차 감소 • 세타 > 90도 이면, 빛이 표면의 뒤쪽을 때린 것이므로 함수의 값, 즉 빛의 세기는 0이어야 함
  • 11. 7.3 람베르트 코사인 법칙 11 람베르트의 코사인 법칙
  • 12. 7.4 분산광 조명 diffuse 12 분산 반사 diffuse reflection • 그림과 같은 거친 표면에서, 표면의 한 점을 빛이 때리면 광선들이 다양 한 무작위 방향으로 흩어진다. • 이 책이 사용하는 조명 모형에서는 이런 종류의 빛/표면 상호작용에서 빛 이 표면 위쪽의 모든 방향으로 고르게 분산된다고 가정한다. • 즉 표면의 한 점의 색상은 그 점을 어디에서 보든 같다. • 그러므로 분산광을 계산할 때에는 시점을 고려할 필요가 없다. (= 분산광 조명 계산은 시점에 독립적이다) 분산광 / 주변광 / 반영광
  • 13. 7.4 분산광 조명 diffuse 13 분산광의 계산: • 분산광의 계산은 두 부분으로 나뉜다. • 1) 분산광 재질 색상 x 분산광의 색상 = 반사된 분산광의 색상 (적/녹/청) • Ld : 입사 분산광, md : 분산광 재질 색상 • 2) 반사광의 세기를 람베르트 코사인 법칙에 의거하여 조정 • 즉, 빛 벡터와 표면 법선의 각도에 따라 반사광의 세기를 조율 • Ld : 분산광 색상, md : 분산광 재질 색상 • L : 빛 벡터, n : 표면 법선, kd = max (L•n, 0) • Cd : 그 점에서 반사된 분산광 분산광 / 주변광 / 반영광
  • 14. 7.5 주변광 조명 ambient 14 주변광의 계산: • La : 주변광(ambient light), 광원에서 간접적으로 표면에 도달한 빛의 양 • Ma : 주변광 재질 색상, 표면이 주변광을 얼마나 흡수하고 반사하는지 결정 • 주변과의 계산에는 실질적인 물리 계산이 전혀 관여하지 않는다. • 주변광 항을 분산광에 합한 새로운 조명 방정식 분산광 / 주변광 / 반영광
  • 15. 7.6 반영광 조명 specular 15 반영광의 계산: • 그림과 같은 매끄러운 표면에서, • 표면을 때린 광선들 중 시점을 향한 반사 원뿔(cone of reflectance)에 속하는 광선들은 눈에 뚜렷하게 인식됨 • 이를 반영 반사(specular reflection; 거울 반사)라고 함 • 분산광과는 달리 반영광은 특정 방향으로 반사되는 빛이므로 시점에 따라 인식되지 않을 수 있 음 분산광 / 주변광 / 반영광
  • 16. 7.6 반영광 조명 specular 16 반영광의 계산: • 반영광이 반사되는 영역을 규정하는 원뿔은 반사 벡터 r에 대한 각도 Ømax로 정의된다. • 반영광의 세기는 반사 벡터 r과 시점 벡터 v (표면 점 P에서 시점 위치 E로의 벡터) 사이의 각도 Ø에 따라 변한다. • 반영광의 세기는 Ø = 0 일때 최대, Ø가 Ømax에 가까워짐에 따라 점차 0으로 감소한다. 분산광 / 주변광 / 반영광
  • 17. 7.6 반영광 조명 specular 17 • 반영 지수 p를 얼마로 두느냐에 따라 빛의 세기가 0으로 떨어지는 원뿔 각도 Ømax가 달 라진다. • 이 매개변수 p를 조정함으로써 표면이 반짝이는 정 도(shininess)를 간접적으로 조정한다. • 매끄럽고 빛나는 표면일수록 반사 원뿔이 작다. (빛을 더 날카롭게 반사한다)  p 값을 더 크게 할 수록 반짝거린다 • V와 r 둘 다 단위 벡터이므로 cos(Ø) = v•r 분산광 / 주변광 / 반영광
  • 18. 7.6 반영광 조명 specular 18 [그림 7.13] 분산광 / 주변광 / 반영광
  • 19. 7.7 중간 정리 19 하나의 광원에서 방출되는 빛 • 간접 조명을 흉내 내기 위한 주변광 • 직접광이 비교적 거친 표면에서 반사하는 현상을 본뜬 분산광 • 직접광이 비교적 매끄러운 표면에서 반사하는 현상을 본뜬 반영광 표면의 한 점이 가지는 재질 속성 • Ambient 주변광 재질: 표면이 주변광을 반사하고 흡수하는 정도 • Diffuse 분산광 재질: 표면이 분산광을 반사하고 흡수하는 정도 • Specular 반영광 재질: 표면이 반영광을 반사하고 흡수하는 정도 • 반영 지수: 반영광 계수에 쓰이는 지수(거듭제곱). 반사 원뿔의 크기를 결정하며, 결과적으로 표 면이 반짝이는 정도를 제어. 원뿔이 작을수록 표면이 더 매끄럽게 보인다(반짝인다) 조명을 이처럼 세 가지 구성요소로 분할하는 것은 유연성을 얻기 위함이다.
  • 20. 7.8 재질의 설정 20 • 같은 표면 상에서 다양한 재질 값을 설정하고 싶 다.. • 1) 정점 별로 재질값을 갖는다 • 이러한 정점별 재질은 래스터화 도중에 삼각형을 따라 보간되며, 삼각형 메시의 표면의 각 점마다 재질 값이 부여될 것 • 그러나 정점별 색상은 세밀한 세부사항을 사실적 으로 본뜨기에는 입도가 너무 크다. • 2) 재질 값을 그리기 호출마다 다르게 설정할 수 있다. • 재질 값들을 상수 버퍼의 한 멤버로 설정하면 이 후의 그리기 호출에서 그리는 기하구조들에 그 재질 값들이 적용된다.
  • 21. 7.8 재질의 설정 21 • 2) 재질 값을 그리기 호출마다 다르게 설정할 수 있다. • 재질 값들을 상수 버퍼의 한 멤버로 설정하면 이 후의 그리기 호출에서 그리는 기하구조들에 그 재질 값들이 적용된다. • 유사코드로 나타내면…
  • 22. 7.8 재질의 설정 22 • 재질 정보를 담는 Material 구조체 (예제에서 사용, LightHelper.h) • Reflect : 추후 거울 같은 반사를 위한 값으로 우선 무시. • 반영광 재질 색상의 넷째 성분으로 반영 지수p를 사용 (조명에는 알파값이 쓰이지 않으므로…) • 분산광 재질의 알파 성분 : 알파 혼합에 사용 (추후 9장 상술)
  • 23. 7.9 평행광 23 • 본격적으로 광원 이야기를 해보자 • 평행광 • 점광 • 점적광
  • 24. 7.9 평행광 24 • 평행광 (parallel light, 지향광 directional light) • 아주 멀리 있는 광원에서 오는 빛 (ex 태양) • 평행광원은 빛이 나아가는 방향을 뜻하는 하나의 벡터로 정의 • 평행광의 조명 방정식은 식 7.3과 정확히 동일 평행광 / 점광 / 점적광
  • 25. 7.10 점광 25 • 점광 (point light) • 모든 방향으로 내뿜는 빛 (ex 백열등 전구) • 임의의 점 P에 대해 광원 위치 Q로부터 그 점으로 직접 도달하는 하나의 광선이 존재 • 점광의 빛 벡터는 빛이 나아가는 방향의 반대 (즉 P에서 점광원 Q로 가는 벡터) • 평행광과의 본질적인 차이는 빛 벡터에 대한 계산 방식 뿐 평행광 / 점광 / 점적광
  • 26. 7.10.1 빛의 감쇠 26 빛의 세기 공식 • 물리적으로 빛의 세기는 역제곱 법칙에 근거한 거리 • L0은 광원에서 d = 1 만큼 떨어진 지점에서의 빛의 세기 • 단 이 공식은 항상 눈으로 보기에 좋은 결과가 나오지는 않음. • 원하는 결과물이 나올 때까지 매개변수 값을 여러가지로 바꾸어볼 수 있는 다른 공식을 사용 평행광 / 점광 / 점적광
  • 27. 7.10.1 빛의 감쇠 27 빛의 세기 공식 • 원하는 결과물이 나올 때까지 매개변수 값을 여러가지로 바꾸어볼 수 있는 다른 공식을 사용 • A0, a1, a2는 소위 말하는 감쇠 매개변수들이다. 이를 도입해서 얻은 새로운 조명 방정식 • 감쇠가 주변광 항에는 영향을 미치지 않음 (특정 광원의 빛이 아니기 때문에) 평행광 / 점광 / 점적광
  • 28. 7.10.2 범위 28 범위 (range) • 점광원에서의 범위 매개변수 • 광원과의 거리가 광원의 범위보다 큰 점은 그 광원으로부터 빛을 전혀 받지 않는다. • 감쇠 매개변수로 약하게 만들 수는 있지만, 최대 적용 범위를 명시적으로 적용하는 것이 유용한 경우가 있음. • 주어진 점이 범위 밖이면 셰이더 코드가 일찍 결과를 출력함으로써 값비싼 조명 계산과 동적 분 기를 생략할 수 있다. • 멀리있는 빛을 본뜬 평행광과는 관련 없는 이야기 평행광 / 점광 / 점적광
  • 29. 7.11 점적광 29 점적광 (spotlight) • 위치 Q에서 d 방향으로 뻗어 나가는 원뿔 형태의 빛 (ex 손전등(플래시)) • 점적광의 공식을 유도해 보자. • 시작은 점광과 비슷 • 빛 벡터는 다음과 같이 주어진다. • P : 빛을 받는 점, Q : 점적광원의 위치 • P는 오직 –L과 d 사이의 각도 Ø가 원뿔 각도 Ømax보다 작을 때에만 원뿔안에 있다. (=빛을 받는다) • 또한 점적광 원뿔 안의 모든 광선의 세기가 동일하지는 않다. • 중심에서 빛이 가장 강하고, Ø가 0에서 Ømax로 증가함에 따라 빞의 세기가 0으로 감쇠한다. • 빛의 감쇠를 Ø의 함수로서 제어하려면, 점적광 원뿔의 크기를 제어하려면… 평행광 / 점광 / 점적광
  • 30. 7.11 점적광 30 점적광 (spotlight) • 조건에 맞는 함수: • Ø가 증가함에 따라 빛의 세기가 매끄럽게 감소하게 됨 • 또한 지수 s를 조정함으로서 Ømax를 간접적으로 제어할 수 있다 (원뿔 사이즈를 줄이거나 키울 수 있다) • 점적광 방정식은 점광 방정식에 점적광 원뿔을 기준으로 한 점의 위치에 따른 빛의 감쇠를 흉내 내는 점적광 계수를 곱한 것이다. • 이를 도입하면 전체적인 조명 방정식은… 평행광 / 점광 / 점적광
  • 31. 7.11 점적광 31 [참고] 함수들의 비용 비교 • 지향광 < 점광 < 점적광 평행광 / 점광 / 점적광
  • 32. 7.12 구현 32 7.12.1 조명을 위한 구조체들 1. Ambient: 광원이 방출하는 주변광의 양 2. Diffuse: 광원이 방출하는 분산광의 양 3. Specular: 광원이 방출하는 반영광의 양 4. Direction: 빛의 방향 5. Position: 광원의 위치 6. Range: 빛의 범위 7. Attenuation: 빛의 세기가 거리에 따라 감소하는 방식을 제어하는 세 개의 감쇠 상수들을 (a0, a1, a2) 형태로 저장 8. Spot: 점적광 계산에서 점적광 원뿔을 제어하는 데 쓰이는 지수
  • 33. 7.12 구현 33 7.12.3 지향광의 구현 (HLSL 함수) • 이 HLSL 함수는 주어진 재질과 지향광원, 표면 법선, 그리고 시점 벡터 (빛을 받는 표면점에서 시 점을 향한 단위벡터)에 기초해서 표면 점의 조명 값(반사된 빛의 색상)을 계산한다. • 동적 분기?
  • 35. 7.13 조명 예제 35 지연 렌더링 (deferred rendering) • 예제 효과에서는 지향광원을 최대 세 개까지만 사용 • 지향광원을 제한하는 필연적인 이유는 없으나, 예제 응용 프로그램의 경우 몇가지 관리 작업이 편해진다. • 특히 효과 프레임워크가 생성해야 할 셰이더 조합의 개수가 줄어든다. • 또한 광원의 개수가 일정 수준을 넘으면 렌더링 비용이 아주 비싸지기 시작한다. • 책의 3부에서 수많은 광원들을 효율적으로 다룰 수 있으며 점광과 점적광을 좀 더 일관된 방식으 로 처리할 수 있는 지연 렌더링(deferred rendering)이라고 부르는 또 다른 렌더링 방법을 배우게 될 것이다.