SlideShare a Scribd company logo
1 of 128
범프 매핑
2019.08.17 데브루키 발표자 이석우
참고자료
 게임 프로그래밍을 위한 3차원 그래픽스 - 저자 : 한정현 –
 https://learnopengl.com/Advanced-Lighting/Parallax-Mapping
 http://sunandblackcat.com/tipFullView.php?topicid=28
 DX SDK
LOD의 딜레마
 저해상도 모델을 사용할 경우 처리 속도는 빠르지만 퀼리티는 떨어진다.
 그렇다고 폴리곤 수를 늘리면 퀼리티는 좋아지지만 처리 속도는 느리다.
 폴리곤 수를 늘리자니 속도가 느려지고 줄이자니 퀄리티가 떨어진다…
범프 매핑의 모티브
 LOD의 딜레마를 어떻게 해결할 것인가?
 아니 잠깐?! 저해상도 모델을 사용하되,
 기하학적인 디테일을 텍스쳐에 미리 저장한 뒤,
 이 텍스처를 실시간으로 처리하면 되잖아!!
(누군진 모르지만 천재)
범프 매핑
 저해상도 폴리곤과 범프맵(텍스처)을 이용하여 울툴불퉁한 굴곡을 표현하는 컴퓨터
그래픽 기술이다.
범프(BUMP)의 의미
범프맵
 물체의 울퉁불퉁함을 저장한 맵(텍스처)을 의미한다.
 범프맵 종류
 높이맵(Height Map)
 노말맵(Normal Map)
높이맵
 2차원 그리드에 모델의 높이값을 저장한 텍스쳐이다.
 높이맵을 범프맵으로 사용하면 노말맵으로 변환한 후 사용한다.
높이맵의 색
 높이맵은 단순히 높이값만 저장하므로 1채널만 사용한다.
 보통 알파채널에 저장한다.
 따라서 높이맵은 회색조(GRAY-SCALE)를 띤다.
높이맵 -> 노말맵
 높이맵을 노말맵으로 변환하는 방법은 아래 식과 같다.
 D3DXComputeNormalMap() 함수를 사용하면 자동으로 계산해준다.
노말맵
 모델 표면에 수직인 노말 벡터를 저장해 놓은 텍스처이다.
 벡터이므로 X, Y, Z를 이용하여 3채널에 저장한다.
 노말맵의 노말벡터는 탄젠트 공간의 벡터이다.
노말맵의 색
 노말맵은 RGB 형태로 저장되는 데 벡터를 색으로 변환하므로 범위가 [-1, 1]에서 [0,
255]로 바뀌게 된다. 변환식은 아래와 같다.
 이렇게 변환한 노말맵은 파란색을 띠는 데 그 이유는 뒤에서 설명한다.
노말맵 제작
 노말맵과 높이맵은 모델링 과정에서 생성한다.
 저해상도 모델과 고해상도 모델을 만든 후, 저해상도 모델에 고해상도 모델을 덧씌운다.
 저해상도 모델 표면의 노말 벡터 방향으로 반직선을 쏘아 해당 고해상도 모델과의 교
차점에서의 노말벡터를 노말맵에 저장한다.
범프 매핑의 종류
 노말 매핑
 패럴랙스 매핑
 변위 매핑
노말 매핑
조명의 원리
 광원, 표면 특성, 카메라의 위치의 상호작용으로 조명이 표현된다는 것을 떠올려보자.
 벽돌은 왜 빛나고 어두운 부분이 있을까?
노말 벡터와 조명의 관계
 조명에서 명암을 표현하는 것은 전반사와 난반사항이었다.
 전반사, 난반사항은 노말 벡터의 영향을 받는다.
𝐿 𝑑 = max 𝑛 ∙ 𝑙, 0 𝑠 𝑑 ⊗ 𝑚 𝑑
𝑛 : 노말벡터
𝐿 𝑑 : 디퓨즈 항
𝑠 𝑑 : 디퓨즈 항의 고유색
𝑚 𝑑 : 재질의 디퓨즈 반사율
𝐿 𝑠 = max(𝑟 ∙ 𝑣, 0) 𝑠ℎ
𝑠𝑠 ⊗ 𝑚 𝑠
𝑟 : 반사벡터
𝐿 𝑠 : 스펙큘러 항
𝑠𝑠 : 스펠큘러 빛의 고유색
𝑚 𝑠 : 재질의 스펙큘러 반사율
노말 매핑의 모티브
 즉, 노말 벡터를 조작하면 저해상도 모델을 사용해도 명암으로 인해 굴곡이 진거처럼
보이게 된다!!!
노말 매핑의 기본 원리
 저해상도 모델을 사용한다.
 고해상도 표면의 노말 벡터를 노말맵에 저장한다.
 노말맵을 조명에 실시간으로 사용한다.
기존 텍스처 매핑 VS 노말 매핑
 조명의 각도를 바꿔가면서
일반 텍스처 매핑과 범프매
핑을 비교하였다.
 범프 매핑을 하였을 때 요철
이 잘 표면되어 디테일이 살
아 있음을 알 수 있다.
조명 위치 및 방향 텍스처 매핑 범프 매핑
객체공간 노말맵
 객체 공간 노말맵은 간단한 계산으로 조명을 적용할 수 있다.
객체 공간
𝑛
조명 계산
VS PS
노말맵 로드
월드 변환
월드 변환
객체공간 노말매핑
객체공간 노말매핑
객체공간 노말맵의 문제점
 기하 구조에 종속적이라 재사용하기 힘들다.
객체 공간
x
y
객체 공간
x
y
노말맵 추출 모델 추출
월드 공간
탄젠트공간 노말맵
 탄젠트 공간 노말맵은 기하구조에 독립적이므로 효율적으로 재사용할 수 있다.
객체 공간
x
y
객체 공간
x
y
노말맵 추출 모델 추출
월드 공간
탄젠트 공간
 탄젠트 공간은 3차원 메쉬를 2차원 평면에 펼친 가상의 공간이다.
Tangent space
탄젠트 공간
 텍스처도 마찬가지로 모델을 2차원 평면에 펼쳐 uv 좌표를 생성해 칼라값을 저장한다.
 탄젠트 공간 노말맵은 칼라 대신 노말 벡터를 저장하는 것이다.
탄젠트 공간 계산
 모델링 단계에서 버텍스 단위로 노말 벡터가 계산되는데 탄젠트 공간도 같이 계산된다.
Tangent space
w
u
v
탄젠트 공간 노말맵의 색
 기울기의 차이는 있지만 노말 벡터는 N 방향을 향한다.
 이 노말 벡터를 RGB 채널로 변경하면 w축은 B채널에 속한다.
 이런 이유로 탄젠트 공간 노말맵은 파란색을 띠는 것이다.
Tangent space
N
B
T
탄젠트 공간과 노말 매핑
 조명 계산에서 벡터 연산할 때 반드시 같은 공간에서 해야 한다.
탄젠트 공간과 노말 매핑
N
B
T
탄젠트 공간
𝑛
To Tangent
T
To World
조명 계산
VS
PS
월드 변환
월드 변환노말맵 로드
 노말 벡터를 탄젠트 공간에서 월드 공간으로 변환
탄젠트 공간과 노말 매핑
 빛벡터, 시야 벡터를 월드 공간에서 탄젠트 공간으로 변환
N
B
T
탄젠트 공간
𝑛
조명 계산
VS PS
월드 변환
노말맵 로드
월드 변환 탄젠트 변환
탄젠트 공간 노말 매핑
탄젠트 공간 노말 매핑
노말 매핑 초기 성공적인 상용화 사례
 Unreal Tournament3
https://www.youtube.com/watch?v=-hb3nVvGri8
패럴랙스 매핑
노말매핑의 한계
 표면 노멀을 조금씩 변화시켜 착시 현상을 주지만 실제 표면의 높이를 바꾼건 아니다.
 실제로는 오돌포돌한 앞면이 뒷면을 가려야 하지만 가리지 않고 시차(parallax)가 발생
하지 않는다.
노말매핑 하였지만 다소 입체감이 부족한 느낌이 든다.
시차(PARALLAX)의 의미
 시차는 관측 위치에 따라 물체들의 위치와 방향이 달라지는 현상을 말한다.
 아래 예와같이, 시점을 달리해서 어떤 물체들이 보이는 지 알아보자.
시점 1 시점 2
A B
시차(PARALLAX) : 시점 1
 시점 1에서는 물체 B가 물체 A에 가려 물체 A만 볼 수 있다.
시점 1
A B
시차(PARALLAX) : 시점 2
 시점 2에서는 B의 크기가 물체 A를 가릴 만큼 크지 않아 두상자 모두 볼 수있다.
시점 2
A B
노말 매핑의 시차 오류
 노말 매핑의 경우 2차원 텍스처를 그저 매핑한 것이기 때문에, 시점 1에서도 물체 A,
B가 모두 보인다.
시점 1
객체 표면
매핑된 텍스처 매핑된 텍스처
A B
패럴랙스 매핑의 정의
 패럴랙스 매핑은 광선 추적법을 사용하여 시차 현상을 생성하는 방법을 말한다.
위치 a에 대한 텍스처 좌표
A B
위치 a 위치 b
위치 b에 대한 텍스처 좌표
시차 현상 생성
 기존의 노말 매핑은 빨간 직선을 향해 바라볼 때 위치 b에 대한 텍스처 좌표를 이용하여
노말맵에서 노말벡터와 텍스처에서 색상을 읽어왔다.
 패럴랙스 매핑은 위치 a에 대한 텍스처 좌표를 가져와 노말벡터와 텍스처 색상을 구한다.
(해당 텍스처에 대한 가상의 높이값은 높이맵에 저장된다.)
위치 a에 대한 텍스처 좌표
A B
위치 a 위치 b
위치 b에 대한 텍스처 좌표
알아두어야 할 것
 가장 높은 위치는 텍스처가 매핑되는 객체 표면이다.
 시선 벡터 V는 탄젠트 공간으로 변환한 벡터이다.
1.0
0.0
𝑻 𝟏: 기존 텍스처 좌표
𝑻 𝟐: 목표 텍스처 좌표
OpenGL
0.0
1.0
DX
객체 표면
𝑻 𝟏
𝑯(𝑻 𝟐)
𝑯(𝑻 𝟏)
Height Field
𝑽
𝑻 𝟐
공식 유도
 삼각형 닮음비를 이용하여 텍스처 좌표 𝑻 𝟐 에 대한 식이 다음과 같이 유도된다.
𝑻 𝟏: 기존 텍스처 좌표
𝑻 𝟐: 목표 텍스처 좌표
𝑻 𝟏
𝑽
𝑻 𝟐
𝑯(𝑻 𝟐)
𝑽 𝒙𝒚
𝑽 𝒛 𝑯(𝑻 𝟐): 𝑽 𝒛 = 𝑻 𝟐 − 𝑻 𝟏: 𝑽 𝒙𝒚
𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐)
𝑽 𝒙𝒚
𝑽 𝒛
𝑻 𝟏
𝑯(𝑻 𝟐)
𝑯(𝑻 𝟏)
𝑽
𝑻 𝟐
공식 유도
 그러나 𝑻 𝟐의 높이값 𝑯(𝑻 𝟐)는 𝑻 𝟐를 몰라 구할 수 없다. 따라서 이 값을 대체할 수 있
는 근사값을 구하는 것이 패럴랙스 매핑 알고리즘의 핵심이다.
 𝑯(𝑻 𝟐)의 근사값을 구하는 방식에 따라 다음과 같이 불린다.
Parallax mapping with offset limiting
Steep parallax mapping
Parallax occlusion mapping
𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐)
𝑽 𝒙𝒚
𝑽 𝒛
PARALLAX MAPPING WITH OFFSET LIMITING
1.0
0.0
𝑻 𝟏: 기존 텍스처 좌표
𝑻 𝟐: 목표 텍스처 좌표
𝑻 𝒑: 오프셋 텍스처 좌표
𝑻 𝟏
𝑯(𝑻 𝟏)
Height Field
𝑽
𝑻 𝒑 Offset
𝑻 𝒑 = 𝑻 𝟏 + 𝒔 ∗ 𝑯(𝑻 𝟏)
𝑽 𝒙𝒚
𝑽 𝒛
𝒔 ∗ 𝑯(𝑻 𝟏)
𝑽 𝒙𝒚
𝑽 𝒛
 𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐)
𝑽 𝒙𝒚
𝑽 𝒛
에서 𝑻 𝟐를 모르기 때문에 𝑯(𝑻 𝟐)를 모른다.
 따라서 𝑯(𝑻 𝟐) 대신 𝑯(𝑻 𝟏)에 적당한 스케일 값을 곱해 오프셋 시키는 방법이다.
𝑻 𝒑 = 𝑻 𝟏 + 𝒔 ∗ 𝑯(𝑻 𝟏)
𝑽 𝒙𝒚
𝑽 𝒛
P.M WITH O.L의 장단점
 비교적 적은 비용으로 그럭저럭 괜찮은 결과를 보여준다.
 하지만 급경사가 있는 경우에는 오차가 심하므로 사용해선 안된다.
𝑻 𝟏
𝑽𝑻 𝒑
error
offset
결과 비교
Parallax Mapping with offset limitingParallax Occlusion Mapping
STEEP PARALLAX MAPPING
 P.M with O.L에서 오프셋을 높이를 기준으로 분할하여 해당 범위에 들어왔을 때 적
용하는 방법이다.
 급경사에도 적용가능한 방법이다.
1.0
0.0
0.2
0.4
0.6
0.8
𝑻 𝟏
𝑽
𝑻 𝟒 𝑻 𝟑 𝑻 𝟐
Height Field
Layer
STEEP PARALLAX MAPPING
 조건( 현재 높이값 > 현재 레이어 )을 만족하는 좌표가 나올 때까지 반복하여 오프
셋한다.
1.0
0.0
0.2
0.4
0.6
0.8
𝑻 𝟏
𝑽
𝑻 𝟒 𝑻 𝟑
Height Field
0.21 < 0.8
0.38 < 0.6
0.69 > 0.4
Layer
𝑻 𝟐
S.P.M 쉐이더 코드
 GLSL 픽셀 쉐이더
S.P.M 쉐이더 코드
 오프셋 하기 전 레이어 나누기
S.P.M 쉐이더 코드
 다음 조건을 만족하지 않으면 루틴 종료
 DX : 현재 레이어 > 현재 높이값, GL : 현재 레이어 < 현재 높이값
S.P.M 장단점
 급경사진 구조도 적용이 가능하다.
 다만 레이어 분할에 따른 부작용으로 엘리어싱
문제(계단 현상)가 발생한다.
PARALLAX OCCLUSION MAPPING
 Steep Parallax Mapping에서 정확성을 더 높이기 위해 근접한 두 개의 텍스쳐 좌표
를 선형보간하는 방법이다.
1.0
0.0
0.2
0.4
0.6
0.8
𝑻 𝟏
𝑽
𝑻 𝟒 𝑻 𝟑
Height Field
Layer
𝑻 𝟐𝑻 𝒑
PARALLAX OCCLUSION MAPPING
 삼각형 닮음비를 이용하여 선형보간한다.
𝑻 𝒑= 𝛂 ∗ 𝑻 𝟑 + 𝟏 − 𝜶 ∗ 𝑻 𝟒
𝜶=
𝑳 𝟒
𝑳 𝟑+𝑳 𝟒
𝑳 𝟒
𝑳 𝟑
P.O.M 쉐이더 코드
 기존의 S.P.M 코드에서 추가로 두 좌표에 대하여 선형보간한다.
P.O.M 장점
 P.O.M을 통하여 폴리곤 수를 올리지 않고 시차 오류를 보정하는 게 가능하게 되었다.
P.O.M노말매핑
P.O.M 단점
 그러나 여전히 앨리어싱 문제가 존재한다.
P.O.M 단점
 또한 계산량이 늘어나다 보니 오히려 변위 매핑보다 프레임이 낮아졌다…
 폴리곤 수를 최소화한 의미가 없어짐… 허무~
P.O.M 변위 매핑
동영상 참조
 패럴랙스 매핑과 노말 매핑 비교
https://www.youtube.com/watch?v=MczUHwixPYU
 적용 사례(스카이림) : https://www.youtube.com/watch?v=c4RAG_Kn9ow
변위 매핑
변위 매핑
 노말 매핑과 패럴랙스 매핑은 실제 폴리곤 구조 자체를 바꾸진 않는다.
 변위 매핑은 높이맵을 이용해 모델의 위치를 변경하는 기법이다.
쉐이더 모델5
 쉐이더 모델 3 : 정점을 새로 만들지 못해 변위 매핑이 자체가 불가능하다.
 쉐이더 모델 4 : GS가 추가 되어 변위 매핑이 가능하게 되었지만 느리다.
 쉐이더 모델 5 : 마침내 테셀레이션 단계가 추가되어 변위 매핑을 구현할 수 있다.
테셀레이션의 등장
 테셀레이션은 그래픽 카드에 테셀레이터라는 장치가 포함되면서 부터 가능해졌다.
 테셀레이션이란 주어진 기하구조를 더 작은 삼각형들로 분할하고, 새로 생긴 버텍
스들의 위치를 적절한 방법으로 조정하는 것을 말한다.
테셀레이션의 등장
 그래픽 파이프 라인에는 헐쉐이더, 테셀레이터, 도메인 쉐이더 추가되었다. 이 단
계에서 테셀레이션이 진행된다.
 헐쉐이더와 도매인 쉐이더는 개발자가 각각 입력과 출력에 대한 제어할 수 있도록
프로그래밍이 가능하다.
Vertex Shader
Geometry Shader
Hull Shader Tessellator Domain Shader
RasterizerOutput Merger Pixel Shader
Hull Shader
HULL SHADER
 Hull Shader는 테셀레이터에서 패치를 어떻게 쪼갤 지 설정하는 쉐이더이다.
 Constant Hull Shader와 Control Point Hull Shader 두 개의 쉐이더로 구성된다.
Constant Hull
Shader
Control Point Hull
Shader
Vertex Shader Tessellator
CONSTANT HULL SHADER
 Constant Hull Shader는 버텍스 쉐이더에서 제어점(Control Point)을 입력받아 테셀
레이션 계수(tessellation factor)를 출력하여 테셀레이터에 보낸다.
 이 Shader는 패치 단위로 호출된다.
Hull Shader
Constant Hull
Shader
Control Point Hull
Shader
Vertex Shader Tessellator
tessellation factor
Control Points
제어점(CONTROL POINT)
 테셀레이션을 하는 경우, 버텍스 쉐이더의 출력은 버텍스가 아니라 제어점이다.
 제어점은 패치의 버텍스들의 위치를 결정하는 역할을 한다.
 제어점이 패치의 정점인 경우도 있으나 꼭 그런 것은 아니다.
Control point
패치(PATCH)
 버텍스 쉐이더에서 나온 제어점들은 패치 단위로 묶이게 된다.
 여기서 패치는 테셀레이션 작업이 진행되는 최소 단위의 기하 구조를 의미한다.
 패치 타입은 삼각형(tri), 사각형(quad), 선(isoline)중에 선택할 수 있다.
TESSELLATION FACTOR
 테셀레이션 계수는 패치를 얼마나 세분화하여 쪼갤 것인지 결정하는 요소이다.
TESSELLATION FACTOR
 패치에 대한 테셀레이션 계수는 다음 두 종류이다.
① 변 테셀레이션 계수(edge tessellation factor) : 변에 따른 세분 정도를 제어한다.
② 내부 테셀레이션 계수(interior tessellation factor) : 패치 내부의 세분 정도를 제어한다.
TESSELLATION FACTOR
 패치에 대한 테셀레이션 계수는 다음 두 종류이다.
① 변 테셀레이션 계수(edge tessellation factor) : 변에 따른 세분 정도를 제어한다.
② 내부 테셀레이션 계수(interior tessellation factor) : 패치 내부의 세분 정도를 제어한다.
CONTROL POINT HULL SHADER
 Control Point Hull Shader는 제어점을 수정하거나 추가하는 역할을 한다.
 출력된 제어점들은 도매인 쉐이더로 보내진다.
Hull Shader
Constant Hull
Shader
Control Point Hull
Shader
Vertex Shader
Tessellator
tessellation factor
control points
Domain Shader
contorl points
tessellator mode
declation
CONTROL POINT HULL SHADER
 또한 테셀레이터 세분 모드(integer, fractional_even, fractional_odd)를 지정한다.
Hull Shader
Constant Hull
Shader
Control Point Hull
Shader
Vertex Shader
Tessellator
tessellation factor
control points
Domain Shader
contorl points
tessellator mode
declation
TESSELLATION PARTITIONING
 integer 모드는 테셀레이션 계수의 분수부를 무시하기 때문에 테셀레이션 수준이 변할
때 파핑 현상이 발생한다.
 fractional_even, fractional_odd을 선택하면 파핑 현상 없이 매끄럽게 전이된다.
 https://www.youtube.com/watch?time_continue=7&v=KXmV9o4VtOk
 https://www.youtube.com/watch?time_continue=5&v=6sTI4yiAQEg
 https://www.youtube.com/watch?time_continue=6&v=vtvvYEhRKcQ
PN TRIANGLES
 제어점 헐 쉐이더에서 제어점을 추가하여 더 세분화된 테셀레이션을 하는 방식을
PN패치 방안(PN-patches scheme) 또는 PN 삼각형 방안(PN triangles scheme)이
라고 부른다.
컨트롤 포인트 3개 컨트롤 포인트 10개 테셀레이션
테셀레이터
 테셀레이터는 헐 쉐이더에서 설정한 것을 토대로 하드웨어가 테셀레이션한다.
 도메인 쉐이더에 패치에 대한 매개변수 좌표를 보내고 Primitive Assembly에 기하
구조를 보낸다.
Hull Shader Tessellator Domain Shader
tessellation factor 매개변수 좌표(u,v)
tessellator mode
declation
기하구조(to primitive assembly)
control points + tessellation factor
DOMAIN SHADER
 테셀레이터는 새로 생성된 삼각형 버텍스을 모두 출력한다.
 도메인 쉐이더는 테셀레이터 단계가 출력한 각 버텍스마다 호출된다.
Hull Shader Tessellator Domain Shader
tessellation factor
control points + tessellation factor
매개변수 좌표(u,v)
tessellator mode
declation
기하구조(to primitive assembly)
버텍스
DOMAIN SHADER
 도메인 쉐이더는 테셀레이션된 패치에 대한 버텍스 쉐이더 역할을 한다.
 즉, 테셀레이션된 패치의 버텍스들을 동차 절단 공간(homogeneous clip space)으
로 변환한다.
Hull Shader Tessellator Domain Shader
tessellation factor
control points + tessellation factor
매개변수 좌표(u,v)
tessellator mode
declation
기하구조(to primitive assembly)
버텍스
DOMAIN SHADER
 한가지 유의할것은 버텍스 위치의 매개변수화된 좌표(u,v)를 입력 받는다.
 따라서 도메인 쉐이더에서 프로그래머가 이 uv좌표를 실제 3차원 버텍스 위치로 유
도하고 동차 절단 공간으로 변환한다.
 도메인 쉐이더가 출력한 버텍스는 기하쉐이더 혹은 래스터라이저에 보내진다.
Hull Shader Tessellator Domain Shader
tessellation factor
control points + tessellation factor
매개변수 좌표(u,v)
tessellator mode
declation
기하구조(to primitive assembly)
버텍스
사각형 패치와 삼각형 패치의 차이
 사각형 패치의 경우, 도메인 쉐이더는 정점의 매개변수 좌표 (u,v)를 입력 받는다.
 반면 삼각형 패치는 무게중심 좌표 (u, v, w)가 입력된다.
테셀레이션 파이프라인
사각형 하나의 테셀레이션
버택스 버퍼 생성
 제어점 4개를 담는 버텍스 버퍼 생성코드
사각형 하나의 테셀레이션
기하구조를 사각형 패치로 설정
 사각형 패치를 입력 조립기 단계에 제출
사각형 하나의 테셀레이션
그리기
 제어점 버퍼로 설정하고 DRAW
사각형 하나의 테셀레이션
버텍스 쉐이더
사각형 하나의 테셀레이션
테셀레이션 계수 선언
 사각형 패치는 외각 계수 4개, 내부 계수 2개가 필요하다.
사각형 하나의 테셀레이션
CONTANT HULL SHADER
 거리에 따라 테셀레이션 계수를 조절한다.
사각형 하나의 테셀레이션
CONTROL POINT HULL SHADER
 제어점을 추가하거나 변경하지 않고 그대로 넘겨준다.
사각형 하나의 테셀레이션
도메인 쉐이더
 uv 좌표를 3차원 좌표로 변환한 후 변위
매핑을 적용한다.
 변위 매핑을 적용한 후에는 기존 버텍스
쉐이더 수행하던 공간 변환을 수행한다.
사각형 하나의 테셀레이션
픽셀 쉐이더
 모든 픽셀에 대한 칼라값은 간단히 흰색으로 통일한다.
사각형 하나의 테셀레이션
 렌더링 결과
normal mapping
parallax mapping
displacement mapping
변위 매핑 장점
 테셀레이션은 고해상도 폴리곤 사용 시에 발생하는 느린 데이터 로드 문제를 피할
수 있다.
CPU
데이터 VRAM
GPU 렌더링
변위 매핑 장점
 고해상도 폴리곤을 사용하는 경우와 비교하였을 때, VS에서 저해상도 폴리곤에 대
한 월드변환만 하면 되므로 잘만 활용하면 필요한 연산이 줄어들 수 있다.
Vertex
Shader
Tessellation
월드 변환 변위 매핑 + 시야 투영 변환
Vertex
Shader
월드 변환 + 시야 투영 변환
(a) 고수준 폴리곤: VS에서 11개의 버텍스에 대해 월드 변환과 시야 투영 변환을 해야 한다.
(b) 저수준 폴리곤: VS에서 버텍스가 4개의 버텍스에 대해서만 월드 변환하면 된다.
변위 매핑 장점
 고수준 폴리곤 대신 변위 매핑을 이용한 좋은 예시
변위 매핑 장점
 카메라 위치에 따라 LOD를 조절할 수 있다.
 멀리 떨어져 있는 객체는 단순한 형상으로, 가까이 있는 객체는 디테일이 살아있게
조정이 가능하다.
변위 매핑 장점
 P.O.M보다 더 빠르고 P.O.M에서 발생하는 앨리어싱 문제가 발생하지 않는다.
P.O.M 변위 매핑
변위 매핑 단점
 테셀레이션을 통해 추가된 폴리곤 영역은 충돌 감지가 힘들다.
 P.O.M을 제외한 다른 매핑들과 비교하면 메모리와 속도에서 불리하다.
 핸드폰은 아직까지 테셀레이터 장치가 없어 적용이 불가능하다.
동영상
 노말 매핑 vs 변위 매핑 : https://www.youtube.com/watch?v=FWwUp7Oz1Lw
테셀레이션 최적화
헐 쉐이더 프러스텀 컬링
 뷰 프러스텀 컬링을 통해 시야 밖에 있는 패치들은 테셀레이션에서 제외한다.
테셀레이션 팩터를 0으로 설정한다.
0~30% 정도의 속도 향상을 기대할 수 있다.
프러스텀 평면 구하기
 컬링을 하기 위해선 먼저 평면 방정식을 알아야 한다. 투영 공간으로 변환한 버텍스
v’가 있다고 가정해보자.
 투영 공간에서 버텍스의 범위는 다음과 같다. 이것으로 프러스텀 면이 있는 위치를
알 수 있다.
프러스텀 평면 방정식 유도
 x'의 마이너스 범위는 프러스텀의 왼쪽 평면의 위치를 암시한다.
 이를 토대로 아래와 같이 왼쪽 평면방정식을 유도할 수 있다.
프러스텀 평면 방정식 유도
 나머지 평면도 유사하게 유도가 가능하다.
소스코드
 cpu 단에서 평면방정식을 유도하여 gpu에 넘겨준다.
평면 방정식의 특징
 평면 방정식을 통해 우리는 점의 위치를 알 수 있다. 점이 프러스텀 안에 있는 지 아
닌 지 알 수 잇다.
프러스텀 컬링
 평면 방정식의 a, b, c 성분은 노말 벡터의 x, y, z 값
을 의미하는데 노말 벡터의 방향은 모두 프러스텀
안쪽을 향한다.
 따라서 모든 평면 방정식이 0보다 큰 경우에 버텍스
는 프러스텀 내에 존재한다는 것을 알 수 있다. 이
특성을 이용하여 컬링을 진행한다.
소스코드
 프러스텀 컬링 테스트는 HS에서 패치의 점들을 가지고 진행한다.
ADAPTIVE TESSELLATION TECHNIQUES
 테셀레이션을 최적화 시키기 위해 HS에서 할 수 있는 Adaptive tessellation 기법들
이 있다.
Distance Adaptive Tessellation
Density Adaptive Tessellation
Screen Space Adaptive Tessellation
DISTANCE ADAPTIVE TESSELLATION
 시점에서 버텍스까지의 거리를 기반으로 테
셀레이션 계수를 계산한다.
 카메라에 가까울수록 조밀하게, 멀어질수록
듬성듬성하게 설정한다.
소스코드
 VS에서 시점에서 정점까지 거리를 계산하고 이를 기반으로 [0,1] 범위의 계수를 만
든다.
소스코드
 HS에서는 버텍스에서 계
산한 거리 계수를 평균하
여 테셀레이션 계수를 할
당한다.
DENSITY ADAPTIVE TESSELLATION
 높이맵을 이용하여 테셀레이션 계수를 미리 계산하는 방법이다.
 테셀레이션 계수를 저장한 맵을 밀도맵(Density map)이라 한다.
 고주파수 영역은 촘촘하게 저주파수 영역은 듬성듬성하게 테셀레이션이 된다.
DENSITY MAP 생성
 현재 픽셀과 현재 픽셀을 둘러싸고 있는 픽셀들의 높이값을 가지고 밀도값을 계산한다.
Height Map
수평 변화량 = (𝐻 𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻𝐿)
𝐻 𝐶 𝐻 𝑅𝐻𝐿
𝐻 𝑇𝐿 𝐻 𝑇 𝐻 𝑇𝑅
𝐻 𝐵 𝐻 𝐵𝑅𝐻 𝐵𝐿
수직 변화량 = (𝐻 𝐵−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝑇)
대각선 변화량(1) = (𝐻 𝑇𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝐵𝐿)
대각선 변화량(2) = (𝐻 𝐵𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝑇𝐿)
If(수평 변화량 >= 임계값) density += a * 수평 변화량
If(수직 변화량 >= 임계값) density += a * 수직 변화량
If(대각선 변화량(1) >= 임계값) density += b * 대각선 변화량(1)
If(대각선 변화량(2) >= 임계값) density += b * 대각선 변화량(2)
a와 b: 프로그래머가 조정가능한 상수
소스코드
 CPU 영역에서 밀도맵을 한다.
 매개변수 fDensityScale에 밀도의 스케일 값, fMeaningfulDifference는 임계값을 의
미한다.
소스코드
 CreateDensityMapFromHeightMap 함수의 주요 코드
소스코드
 최종적으로HS에서 Density map을 패치별로 로드하여 테셀레이션 계수를 설정한다.
DENSITY ADAPTIVE TESSELLATION
ON/OFF
on off
SCREEN SPACE ADAPTIVE TESSELLATION
 스크린 공간에서 삼각형이 차지하는 정도
를 가지고 테셀레이션 계수를 계산한다.
 8픽셀 이하의 작은 영역을 차지하는 삼각
형을 테셀레이션하는 것은 비효율적인 것
을 유의한다.
소스코드
 여기서는 간단히
화면공간에서 삼각
형의 변의 길이를
더하여 테셀레이션
의 계수를 정하였
다.
기타
 테셀레이션하는 메쉬는 같이 한꺼번에 드로우 한다.
 테셀레이션 on/off 변경은 의외로 큰 부하로 작용한다.
기타
 쉐이더 뒤로 갈수록 계산이 많아지므로 가능한 앞의 단계에서 계산을 한다.
VS 에서 가능한가?
HS 에서 가능한가?
DS 에서 가능한가?
모두 아니라면, PS에서 진행
 픽셀 쉐이더에서 하는 계산을 되도록 최소화 한다.

More Related Content

What's hot

물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용JP Jung
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리changehee lee
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기동석 김
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018devCAT Studio, NEXON
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflectionBongseok Cho
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현MinGeun Park
 

What's hot (20)

물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
Ssao
SsaoSsao
Ssao
 

Similar to Bump Mapping

Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
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
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑MoonLightMS
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...종빈 오
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?Jungsoo Park
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2jdo
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트강 민우
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법강 민우
 
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
 
Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space민웅 이
 

Similar to Bump Mapping (20)

Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
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
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?
 
Uncharted4 part1
Uncharted4 part1Uncharted4 part1
Uncharted4 part1
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
[IGC 2017] 에픽게임즈 최용훈 - 밤낮으로 부수고 짓고 액션 빌딩 게임 만들기 - 포트나이트
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
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
 
Gamma and linear color-space
Gamma and linear color-spaceGamma and linear color-space
Gamma and linear color-space
 

More from Sukwoo Lee

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -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 (6)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
행동 트리
행동 트리행동 트리
행동 트리
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -
 
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
 

Bump Mapping

  • 2. 참고자료  게임 프로그래밍을 위한 3차원 그래픽스 - 저자 : 한정현 –  https://learnopengl.com/Advanced-Lighting/Parallax-Mapping  http://sunandblackcat.com/tipFullView.php?topicid=28  DX SDK
  • 3. LOD의 딜레마  저해상도 모델을 사용할 경우 처리 속도는 빠르지만 퀼리티는 떨어진다.  그렇다고 폴리곤 수를 늘리면 퀼리티는 좋아지지만 처리 속도는 느리다.  폴리곤 수를 늘리자니 속도가 느려지고 줄이자니 퀄리티가 떨어진다…
  • 4. 범프 매핑의 모티브  LOD의 딜레마를 어떻게 해결할 것인가?  아니 잠깐?! 저해상도 모델을 사용하되,  기하학적인 디테일을 텍스쳐에 미리 저장한 뒤,  이 텍스처를 실시간으로 처리하면 되잖아!! (누군진 모르지만 천재)
  • 5. 범프 매핑  저해상도 폴리곤과 범프맵(텍스처)을 이용하여 울툴불퉁한 굴곡을 표현하는 컴퓨터 그래픽 기술이다.
  • 7. 범프맵  물체의 울퉁불퉁함을 저장한 맵(텍스처)을 의미한다.  범프맵 종류  높이맵(Height Map)  노말맵(Normal Map)
  • 8. 높이맵  2차원 그리드에 모델의 높이값을 저장한 텍스쳐이다.  높이맵을 범프맵으로 사용하면 노말맵으로 변환한 후 사용한다.
  • 9. 높이맵의 색  높이맵은 단순히 높이값만 저장하므로 1채널만 사용한다.  보통 알파채널에 저장한다.  따라서 높이맵은 회색조(GRAY-SCALE)를 띤다.
  • 10. 높이맵 -> 노말맵  높이맵을 노말맵으로 변환하는 방법은 아래 식과 같다.  D3DXComputeNormalMap() 함수를 사용하면 자동으로 계산해준다.
  • 11. 노말맵  모델 표면에 수직인 노말 벡터를 저장해 놓은 텍스처이다.  벡터이므로 X, Y, Z를 이용하여 3채널에 저장한다.  노말맵의 노말벡터는 탄젠트 공간의 벡터이다.
  • 12. 노말맵의 색  노말맵은 RGB 형태로 저장되는 데 벡터를 색으로 변환하므로 범위가 [-1, 1]에서 [0, 255]로 바뀌게 된다. 변환식은 아래와 같다.  이렇게 변환한 노말맵은 파란색을 띠는 데 그 이유는 뒤에서 설명한다.
  • 13. 노말맵 제작  노말맵과 높이맵은 모델링 과정에서 생성한다.  저해상도 모델과 고해상도 모델을 만든 후, 저해상도 모델에 고해상도 모델을 덧씌운다.  저해상도 모델 표면의 노말 벡터 방향으로 반직선을 쏘아 해당 고해상도 모델과의 교 차점에서의 노말벡터를 노말맵에 저장한다.
  • 14. 범프 매핑의 종류  노말 매핑  패럴랙스 매핑  변위 매핑
  • 16. 조명의 원리  광원, 표면 특성, 카메라의 위치의 상호작용으로 조명이 표현된다는 것을 떠올려보자.  벽돌은 왜 빛나고 어두운 부분이 있을까?
  • 17. 노말 벡터와 조명의 관계  조명에서 명암을 표현하는 것은 전반사와 난반사항이었다.  전반사, 난반사항은 노말 벡터의 영향을 받는다. 𝐿 𝑑 = max 𝑛 ∙ 𝑙, 0 𝑠 𝑑 ⊗ 𝑚 𝑑 𝑛 : 노말벡터 𝐿 𝑑 : 디퓨즈 항 𝑠 𝑑 : 디퓨즈 항의 고유색 𝑚 𝑑 : 재질의 디퓨즈 반사율 𝐿 𝑠 = max(𝑟 ∙ 𝑣, 0) 𝑠ℎ 𝑠𝑠 ⊗ 𝑚 𝑠 𝑟 : 반사벡터 𝐿 𝑠 : 스펙큘러 항 𝑠𝑠 : 스펠큘러 빛의 고유색 𝑚 𝑠 : 재질의 스펙큘러 반사율
  • 18. 노말 매핑의 모티브  즉, 노말 벡터를 조작하면 저해상도 모델을 사용해도 명암으로 인해 굴곡이 진거처럼 보이게 된다!!!
  • 19. 노말 매핑의 기본 원리  저해상도 모델을 사용한다.  고해상도 표면의 노말 벡터를 노말맵에 저장한다.  노말맵을 조명에 실시간으로 사용한다.
  • 20. 기존 텍스처 매핑 VS 노말 매핑  조명의 각도를 바꿔가면서 일반 텍스처 매핑과 범프매 핑을 비교하였다.  범프 매핑을 하였을 때 요철 이 잘 표면되어 디테일이 살 아 있음을 알 수 있다. 조명 위치 및 방향 텍스처 매핑 범프 매핑
  • 21. 객체공간 노말맵  객체 공간 노말맵은 간단한 계산으로 조명을 적용할 수 있다. 객체 공간 𝑛 조명 계산 VS PS 노말맵 로드 월드 변환 월드 변환
  • 24. 객체공간 노말맵의 문제점  기하 구조에 종속적이라 재사용하기 힘들다. 객체 공간 x y 객체 공간 x y 노말맵 추출 모델 추출 월드 공간
  • 25. 탄젠트공간 노말맵  탄젠트 공간 노말맵은 기하구조에 독립적이므로 효율적으로 재사용할 수 있다. 객체 공간 x y 객체 공간 x y 노말맵 추출 모델 추출 월드 공간
  • 26. 탄젠트 공간  탄젠트 공간은 3차원 메쉬를 2차원 평면에 펼친 가상의 공간이다. Tangent space
  • 27. 탄젠트 공간  텍스처도 마찬가지로 모델을 2차원 평면에 펼쳐 uv 좌표를 생성해 칼라값을 저장한다.  탄젠트 공간 노말맵은 칼라 대신 노말 벡터를 저장하는 것이다.
  • 28. 탄젠트 공간 계산  모델링 단계에서 버텍스 단위로 노말 벡터가 계산되는데 탄젠트 공간도 같이 계산된다. Tangent space w u v
  • 29. 탄젠트 공간 노말맵의 색  기울기의 차이는 있지만 노말 벡터는 N 방향을 향한다.  이 노말 벡터를 RGB 채널로 변경하면 w축은 B채널에 속한다.  이런 이유로 탄젠트 공간 노말맵은 파란색을 띠는 것이다. Tangent space N B T
  • 30. 탄젠트 공간과 노말 매핑  조명 계산에서 벡터 연산할 때 반드시 같은 공간에서 해야 한다.
  • 31. 탄젠트 공간과 노말 매핑 N B T 탄젠트 공간 𝑛 To Tangent T To World 조명 계산 VS PS 월드 변환 월드 변환노말맵 로드  노말 벡터를 탄젠트 공간에서 월드 공간으로 변환
  • 32. 탄젠트 공간과 노말 매핑  빛벡터, 시야 벡터를 월드 공간에서 탄젠트 공간으로 변환 N B T 탄젠트 공간 𝑛 조명 계산 VS PS 월드 변환 노말맵 로드 월드 변환 탄젠트 변환
  • 35.
  • 36. 노말 매핑 초기 성공적인 상용화 사례  Unreal Tournament3 https://www.youtube.com/watch?v=-hb3nVvGri8
  • 38. 노말매핑의 한계  표면 노멀을 조금씩 변화시켜 착시 현상을 주지만 실제 표면의 높이를 바꾼건 아니다.  실제로는 오돌포돌한 앞면이 뒷면을 가려야 하지만 가리지 않고 시차(parallax)가 발생 하지 않는다. 노말매핑 하였지만 다소 입체감이 부족한 느낌이 든다.
  • 39. 시차(PARALLAX)의 의미  시차는 관측 위치에 따라 물체들의 위치와 방향이 달라지는 현상을 말한다.  아래 예와같이, 시점을 달리해서 어떤 물체들이 보이는 지 알아보자. 시점 1 시점 2 A B
  • 40. 시차(PARALLAX) : 시점 1  시점 1에서는 물체 B가 물체 A에 가려 물체 A만 볼 수 있다. 시점 1 A B
  • 41. 시차(PARALLAX) : 시점 2  시점 2에서는 B의 크기가 물체 A를 가릴 만큼 크지 않아 두상자 모두 볼 수있다. 시점 2 A B
  • 42. 노말 매핑의 시차 오류  노말 매핑의 경우 2차원 텍스처를 그저 매핑한 것이기 때문에, 시점 1에서도 물체 A, B가 모두 보인다. 시점 1 객체 표면 매핑된 텍스처 매핑된 텍스처 A B
  • 43. 패럴랙스 매핑의 정의  패럴랙스 매핑은 광선 추적법을 사용하여 시차 현상을 생성하는 방법을 말한다. 위치 a에 대한 텍스처 좌표 A B 위치 a 위치 b 위치 b에 대한 텍스처 좌표
  • 44. 시차 현상 생성  기존의 노말 매핑은 빨간 직선을 향해 바라볼 때 위치 b에 대한 텍스처 좌표를 이용하여 노말맵에서 노말벡터와 텍스처에서 색상을 읽어왔다.  패럴랙스 매핑은 위치 a에 대한 텍스처 좌표를 가져와 노말벡터와 텍스처 색상을 구한다. (해당 텍스처에 대한 가상의 높이값은 높이맵에 저장된다.) 위치 a에 대한 텍스처 좌표 A B 위치 a 위치 b 위치 b에 대한 텍스처 좌표
  • 45. 알아두어야 할 것  가장 높은 위치는 텍스처가 매핑되는 객체 표면이다.  시선 벡터 V는 탄젠트 공간으로 변환한 벡터이다. 1.0 0.0 𝑻 𝟏: 기존 텍스처 좌표 𝑻 𝟐: 목표 텍스처 좌표 OpenGL 0.0 1.0 DX 객체 표면 𝑻 𝟏 𝑯(𝑻 𝟐) 𝑯(𝑻 𝟏) Height Field 𝑽 𝑻 𝟐
  • 46. 공식 유도  삼각형 닮음비를 이용하여 텍스처 좌표 𝑻 𝟐 에 대한 식이 다음과 같이 유도된다. 𝑻 𝟏: 기존 텍스처 좌표 𝑻 𝟐: 목표 텍스처 좌표 𝑻 𝟏 𝑽 𝑻 𝟐 𝑯(𝑻 𝟐) 𝑽 𝒙𝒚 𝑽 𝒛 𝑯(𝑻 𝟐): 𝑽 𝒛 = 𝑻 𝟐 − 𝑻 𝟏: 𝑽 𝒙𝒚 𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐) 𝑽 𝒙𝒚 𝑽 𝒛 𝑻 𝟏 𝑯(𝑻 𝟐) 𝑯(𝑻 𝟏) 𝑽 𝑻 𝟐
  • 47. 공식 유도  그러나 𝑻 𝟐의 높이값 𝑯(𝑻 𝟐)는 𝑻 𝟐를 몰라 구할 수 없다. 따라서 이 값을 대체할 수 있 는 근사값을 구하는 것이 패럴랙스 매핑 알고리즘의 핵심이다.  𝑯(𝑻 𝟐)의 근사값을 구하는 방식에 따라 다음과 같이 불린다. Parallax mapping with offset limiting Steep parallax mapping Parallax occlusion mapping 𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐) 𝑽 𝒙𝒚 𝑽 𝒛
  • 48. PARALLAX MAPPING WITH OFFSET LIMITING 1.0 0.0 𝑻 𝟏: 기존 텍스처 좌표 𝑻 𝟐: 목표 텍스처 좌표 𝑻 𝒑: 오프셋 텍스처 좌표 𝑻 𝟏 𝑯(𝑻 𝟏) Height Field 𝑽 𝑻 𝒑 Offset 𝑻 𝒑 = 𝑻 𝟏 + 𝒔 ∗ 𝑯(𝑻 𝟏) 𝑽 𝒙𝒚 𝑽 𝒛 𝒔 ∗ 𝑯(𝑻 𝟏) 𝑽 𝒙𝒚 𝑽 𝒛  𝑻 𝟐 = 𝑻 𝟏 + 𝑯(𝑻 𝟐) 𝑽 𝒙𝒚 𝑽 𝒛 에서 𝑻 𝟐를 모르기 때문에 𝑯(𝑻 𝟐)를 모른다.  따라서 𝑯(𝑻 𝟐) 대신 𝑯(𝑻 𝟏)에 적당한 스케일 값을 곱해 오프셋 시키는 방법이다.
  • 49. 𝑻 𝒑 = 𝑻 𝟏 + 𝒔 ∗ 𝑯(𝑻 𝟏) 𝑽 𝒙𝒚 𝑽 𝒛
  • 50. P.M WITH O.L의 장단점  비교적 적은 비용으로 그럭저럭 괜찮은 결과를 보여준다.  하지만 급경사가 있는 경우에는 오차가 심하므로 사용해선 안된다. 𝑻 𝟏 𝑽𝑻 𝒑 error offset
  • 51. 결과 비교 Parallax Mapping with offset limitingParallax Occlusion Mapping
  • 52. STEEP PARALLAX MAPPING  P.M with O.L에서 오프셋을 높이를 기준으로 분할하여 해당 범위에 들어왔을 때 적 용하는 방법이다.  급경사에도 적용가능한 방법이다. 1.0 0.0 0.2 0.4 0.6 0.8 𝑻 𝟏 𝑽 𝑻 𝟒 𝑻 𝟑 𝑻 𝟐 Height Field Layer
  • 53. STEEP PARALLAX MAPPING  조건( 현재 높이값 > 현재 레이어 )을 만족하는 좌표가 나올 때까지 반복하여 오프 셋한다. 1.0 0.0 0.2 0.4 0.6 0.8 𝑻 𝟏 𝑽 𝑻 𝟒 𝑻 𝟑 Height Field 0.21 < 0.8 0.38 < 0.6 0.69 > 0.4 Layer 𝑻 𝟐
  • 54. S.P.M 쉐이더 코드  GLSL 픽셀 쉐이더
  • 55. S.P.M 쉐이더 코드  오프셋 하기 전 레이어 나누기
  • 56. S.P.M 쉐이더 코드  다음 조건을 만족하지 않으면 루틴 종료  DX : 현재 레이어 > 현재 높이값, GL : 현재 레이어 < 현재 높이값
  • 57. S.P.M 장단점  급경사진 구조도 적용이 가능하다.  다만 레이어 분할에 따른 부작용으로 엘리어싱 문제(계단 현상)가 발생한다.
  • 58. PARALLAX OCCLUSION MAPPING  Steep Parallax Mapping에서 정확성을 더 높이기 위해 근접한 두 개의 텍스쳐 좌표 를 선형보간하는 방법이다. 1.0 0.0 0.2 0.4 0.6 0.8 𝑻 𝟏 𝑽 𝑻 𝟒 𝑻 𝟑 Height Field Layer 𝑻 𝟐𝑻 𝒑
  • 59. PARALLAX OCCLUSION MAPPING  삼각형 닮음비를 이용하여 선형보간한다. 𝑻 𝒑= 𝛂 ∗ 𝑻 𝟑 + 𝟏 − 𝜶 ∗ 𝑻 𝟒 𝜶= 𝑳 𝟒 𝑳 𝟑+𝑳 𝟒 𝑳 𝟒 𝑳 𝟑
  • 60. P.O.M 쉐이더 코드  기존의 S.P.M 코드에서 추가로 두 좌표에 대하여 선형보간한다.
  • 61. P.O.M 장점  P.O.M을 통하여 폴리곤 수를 올리지 않고 시차 오류를 보정하는 게 가능하게 되었다. P.O.M노말매핑
  • 62. P.O.M 단점  그러나 여전히 앨리어싱 문제가 존재한다.
  • 63. P.O.M 단점  또한 계산량이 늘어나다 보니 오히려 변위 매핑보다 프레임이 낮아졌다…  폴리곤 수를 최소화한 의미가 없어짐… 허무~ P.O.M 변위 매핑
  • 64. 동영상 참조  패럴랙스 매핑과 노말 매핑 비교 https://www.youtube.com/watch?v=MczUHwixPYU  적용 사례(스카이림) : https://www.youtube.com/watch?v=c4RAG_Kn9ow
  • 66. 변위 매핑  노말 매핑과 패럴랙스 매핑은 실제 폴리곤 구조 자체를 바꾸진 않는다.  변위 매핑은 높이맵을 이용해 모델의 위치를 변경하는 기법이다.
  • 67. 쉐이더 모델5  쉐이더 모델 3 : 정점을 새로 만들지 못해 변위 매핑이 자체가 불가능하다.  쉐이더 모델 4 : GS가 추가 되어 변위 매핑이 가능하게 되었지만 느리다.  쉐이더 모델 5 : 마침내 테셀레이션 단계가 추가되어 변위 매핑을 구현할 수 있다.
  • 68. 테셀레이션의 등장  테셀레이션은 그래픽 카드에 테셀레이터라는 장치가 포함되면서 부터 가능해졌다.  테셀레이션이란 주어진 기하구조를 더 작은 삼각형들로 분할하고, 새로 생긴 버텍 스들의 위치를 적절한 방법으로 조정하는 것을 말한다.
  • 69. 테셀레이션의 등장  그래픽 파이프 라인에는 헐쉐이더, 테셀레이터, 도메인 쉐이더 추가되었다. 이 단 계에서 테셀레이션이 진행된다.  헐쉐이더와 도매인 쉐이더는 개발자가 각각 입력과 출력에 대한 제어할 수 있도록 프로그래밍이 가능하다. Vertex Shader Geometry Shader Hull Shader Tessellator Domain Shader RasterizerOutput Merger Pixel Shader
  • 70. Hull Shader HULL SHADER  Hull Shader는 테셀레이터에서 패치를 어떻게 쪼갤 지 설정하는 쉐이더이다.  Constant Hull Shader와 Control Point Hull Shader 두 개의 쉐이더로 구성된다. Constant Hull Shader Control Point Hull Shader Vertex Shader Tessellator
  • 71. CONSTANT HULL SHADER  Constant Hull Shader는 버텍스 쉐이더에서 제어점(Control Point)을 입력받아 테셀 레이션 계수(tessellation factor)를 출력하여 테셀레이터에 보낸다.  이 Shader는 패치 단위로 호출된다. Hull Shader Constant Hull Shader Control Point Hull Shader Vertex Shader Tessellator tessellation factor Control Points
  • 72. 제어점(CONTROL POINT)  테셀레이션을 하는 경우, 버텍스 쉐이더의 출력은 버텍스가 아니라 제어점이다.  제어점은 패치의 버텍스들의 위치를 결정하는 역할을 한다.  제어점이 패치의 정점인 경우도 있으나 꼭 그런 것은 아니다. Control point
  • 73. 패치(PATCH)  버텍스 쉐이더에서 나온 제어점들은 패치 단위로 묶이게 된다.  여기서 패치는 테셀레이션 작업이 진행되는 최소 단위의 기하 구조를 의미한다.  패치 타입은 삼각형(tri), 사각형(quad), 선(isoline)중에 선택할 수 있다.
  • 74. TESSELLATION FACTOR  테셀레이션 계수는 패치를 얼마나 세분화하여 쪼갤 것인지 결정하는 요소이다.
  • 75. TESSELLATION FACTOR  패치에 대한 테셀레이션 계수는 다음 두 종류이다. ① 변 테셀레이션 계수(edge tessellation factor) : 변에 따른 세분 정도를 제어한다. ② 내부 테셀레이션 계수(interior tessellation factor) : 패치 내부의 세분 정도를 제어한다.
  • 76. TESSELLATION FACTOR  패치에 대한 테셀레이션 계수는 다음 두 종류이다. ① 변 테셀레이션 계수(edge tessellation factor) : 변에 따른 세분 정도를 제어한다. ② 내부 테셀레이션 계수(interior tessellation factor) : 패치 내부의 세분 정도를 제어한다.
  • 77. CONTROL POINT HULL SHADER  Control Point Hull Shader는 제어점을 수정하거나 추가하는 역할을 한다.  출력된 제어점들은 도매인 쉐이더로 보내진다. Hull Shader Constant Hull Shader Control Point Hull Shader Vertex Shader Tessellator tessellation factor control points Domain Shader contorl points tessellator mode declation
  • 78. CONTROL POINT HULL SHADER  또한 테셀레이터 세분 모드(integer, fractional_even, fractional_odd)를 지정한다. Hull Shader Constant Hull Shader Control Point Hull Shader Vertex Shader Tessellator tessellation factor control points Domain Shader contorl points tessellator mode declation
  • 79. TESSELLATION PARTITIONING  integer 모드는 테셀레이션 계수의 분수부를 무시하기 때문에 테셀레이션 수준이 변할 때 파핑 현상이 발생한다.  fractional_even, fractional_odd을 선택하면 파핑 현상 없이 매끄럽게 전이된다.  https://www.youtube.com/watch?time_continue=7&v=KXmV9o4VtOk  https://www.youtube.com/watch?time_continue=5&v=6sTI4yiAQEg  https://www.youtube.com/watch?time_continue=6&v=vtvvYEhRKcQ
  • 80. PN TRIANGLES  제어점 헐 쉐이더에서 제어점을 추가하여 더 세분화된 테셀레이션을 하는 방식을 PN패치 방안(PN-patches scheme) 또는 PN 삼각형 방안(PN triangles scheme)이 라고 부른다. 컨트롤 포인트 3개 컨트롤 포인트 10개 테셀레이션
  • 81. 테셀레이터  테셀레이터는 헐 쉐이더에서 설정한 것을 토대로 하드웨어가 테셀레이션한다.  도메인 쉐이더에 패치에 대한 매개변수 좌표를 보내고 Primitive Assembly에 기하 구조를 보낸다. Hull Shader Tessellator Domain Shader tessellation factor 매개변수 좌표(u,v) tessellator mode declation 기하구조(to primitive assembly) control points + tessellation factor
  • 82. DOMAIN SHADER  테셀레이터는 새로 생성된 삼각형 버텍스을 모두 출력한다.  도메인 쉐이더는 테셀레이터 단계가 출력한 각 버텍스마다 호출된다. Hull Shader Tessellator Domain Shader tessellation factor control points + tessellation factor 매개변수 좌표(u,v) tessellator mode declation 기하구조(to primitive assembly) 버텍스
  • 83. DOMAIN SHADER  도메인 쉐이더는 테셀레이션된 패치에 대한 버텍스 쉐이더 역할을 한다.  즉, 테셀레이션된 패치의 버텍스들을 동차 절단 공간(homogeneous clip space)으 로 변환한다. Hull Shader Tessellator Domain Shader tessellation factor control points + tessellation factor 매개변수 좌표(u,v) tessellator mode declation 기하구조(to primitive assembly) 버텍스
  • 84. DOMAIN SHADER  한가지 유의할것은 버텍스 위치의 매개변수화된 좌표(u,v)를 입력 받는다.  따라서 도메인 쉐이더에서 프로그래머가 이 uv좌표를 실제 3차원 버텍스 위치로 유 도하고 동차 절단 공간으로 변환한다.  도메인 쉐이더가 출력한 버텍스는 기하쉐이더 혹은 래스터라이저에 보내진다. Hull Shader Tessellator Domain Shader tessellation factor control points + tessellation factor 매개변수 좌표(u,v) tessellator mode declation 기하구조(to primitive assembly) 버텍스
  • 85. 사각형 패치와 삼각형 패치의 차이  사각형 패치의 경우, 도메인 쉐이더는 정점의 매개변수 좌표 (u,v)를 입력 받는다.  반면 삼각형 패치는 무게중심 좌표 (u, v, w)가 입력된다.
  • 87. 사각형 하나의 테셀레이션 버택스 버퍼 생성  제어점 4개를 담는 버텍스 버퍼 생성코드
  • 88. 사각형 하나의 테셀레이션 기하구조를 사각형 패치로 설정  사각형 패치를 입력 조립기 단계에 제출
  • 89. 사각형 하나의 테셀레이션 그리기  제어점 버퍼로 설정하고 DRAW
  • 91. 사각형 하나의 테셀레이션 테셀레이션 계수 선언  사각형 패치는 외각 계수 4개, 내부 계수 2개가 필요하다.
  • 92. 사각형 하나의 테셀레이션 CONTANT HULL SHADER  거리에 따라 테셀레이션 계수를 조절한다.
  • 93. 사각형 하나의 테셀레이션 CONTROL POINT HULL SHADER  제어점을 추가하거나 변경하지 않고 그대로 넘겨준다.
  • 94. 사각형 하나의 테셀레이션 도메인 쉐이더  uv 좌표를 3차원 좌표로 변환한 후 변위 매핑을 적용한다.  변위 매핑을 적용한 후에는 기존 버텍스 쉐이더 수행하던 공간 변환을 수행한다.
  • 95. 사각형 하나의 테셀레이션 픽셀 쉐이더  모든 픽셀에 대한 칼라값은 간단히 흰색으로 통일한다.
  • 98. 변위 매핑 장점  테셀레이션은 고해상도 폴리곤 사용 시에 발생하는 느린 데이터 로드 문제를 피할 수 있다. CPU 데이터 VRAM GPU 렌더링
  • 99. 변위 매핑 장점  고해상도 폴리곤을 사용하는 경우와 비교하였을 때, VS에서 저해상도 폴리곤에 대 한 월드변환만 하면 되므로 잘만 활용하면 필요한 연산이 줄어들 수 있다. Vertex Shader Tessellation 월드 변환 변위 매핑 + 시야 투영 변환 Vertex Shader 월드 변환 + 시야 투영 변환 (a) 고수준 폴리곤: VS에서 11개의 버텍스에 대해 월드 변환과 시야 투영 변환을 해야 한다. (b) 저수준 폴리곤: VS에서 버텍스가 4개의 버텍스에 대해서만 월드 변환하면 된다.
  • 100. 변위 매핑 장점  고수준 폴리곤 대신 변위 매핑을 이용한 좋은 예시
  • 101. 변위 매핑 장점  카메라 위치에 따라 LOD를 조절할 수 있다.  멀리 떨어져 있는 객체는 단순한 형상으로, 가까이 있는 객체는 디테일이 살아있게 조정이 가능하다.
  • 102. 변위 매핑 장점  P.O.M보다 더 빠르고 P.O.M에서 발생하는 앨리어싱 문제가 발생하지 않는다. P.O.M 변위 매핑
  • 103. 변위 매핑 단점  테셀레이션을 통해 추가된 폴리곤 영역은 충돌 감지가 힘들다.  P.O.M을 제외한 다른 매핑들과 비교하면 메모리와 속도에서 불리하다.  핸드폰은 아직까지 테셀레이터 장치가 없어 적용이 불가능하다.
  • 104. 동영상  노말 매핑 vs 변위 매핑 : https://www.youtube.com/watch?v=FWwUp7Oz1Lw
  • 106. 헐 쉐이더 프러스텀 컬링  뷰 프러스텀 컬링을 통해 시야 밖에 있는 패치들은 테셀레이션에서 제외한다. 테셀레이션 팩터를 0으로 설정한다. 0~30% 정도의 속도 향상을 기대할 수 있다.
  • 107. 프러스텀 평면 구하기  컬링을 하기 위해선 먼저 평면 방정식을 알아야 한다. 투영 공간으로 변환한 버텍스 v’가 있다고 가정해보자.  투영 공간에서 버텍스의 범위는 다음과 같다. 이것으로 프러스텀 면이 있는 위치를 알 수 있다.
  • 108. 프러스텀 평면 방정식 유도  x'의 마이너스 범위는 프러스텀의 왼쪽 평면의 위치를 암시한다.  이를 토대로 아래와 같이 왼쪽 평면방정식을 유도할 수 있다.
  • 109. 프러스텀 평면 방정식 유도  나머지 평면도 유사하게 유도가 가능하다.
  • 110. 소스코드  cpu 단에서 평면방정식을 유도하여 gpu에 넘겨준다.
  • 111. 평면 방정식의 특징  평면 방정식을 통해 우리는 점의 위치를 알 수 있다. 점이 프러스텀 안에 있는 지 아 닌 지 알 수 잇다.
  • 112. 프러스텀 컬링  평면 방정식의 a, b, c 성분은 노말 벡터의 x, y, z 값 을 의미하는데 노말 벡터의 방향은 모두 프러스텀 안쪽을 향한다.  따라서 모든 평면 방정식이 0보다 큰 경우에 버텍스 는 프러스텀 내에 존재한다는 것을 알 수 있다. 이 특성을 이용하여 컬링을 진행한다.
  • 113. 소스코드  프러스텀 컬링 테스트는 HS에서 패치의 점들을 가지고 진행한다.
  • 114.
  • 115. ADAPTIVE TESSELLATION TECHNIQUES  테셀레이션을 최적화 시키기 위해 HS에서 할 수 있는 Adaptive tessellation 기법들 이 있다. Distance Adaptive Tessellation Density Adaptive Tessellation Screen Space Adaptive Tessellation
  • 116. DISTANCE ADAPTIVE TESSELLATION  시점에서 버텍스까지의 거리를 기반으로 테 셀레이션 계수를 계산한다.  카메라에 가까울수록 조밀하게, 멀어질수록 듬성듬성하게 설정한다.
  • 117. 소스코드  VS에서 시점에서 정점까지 거리를 계산하고 이를 기반으로 [0,1] 범위의 계수를 만 든다.
  • 118. 소스코드  HS에서는 버텍스에서 계 산한 거리 계수를 평균하 여 테셀레이션 계수를 할 당한다.
  • 119. DENSITY ADAPTIVE TESSELLATION  높이맵을 이용하여 테셀레이션 계수를 미리 계산하는 방법이다.  테셀레이션 계수를 저장한 맵을 밀도맵(Density map)이라 한다.  고주파수 영역은 촘촘하게 저주파수 영역은 듬성듬성하게 테셀레이션이 된다.
  • 120. DENSITY MAP 생성  현재 픽셀과 현재 픽셀을 둘러싸고 있는 픽셀들의 높이값을 가지고 밀도값을 계산한다. Height Map 수평 변화량 = (𝐻 𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻𝐿) 𝐻 𝐶 𝐻 𝑅𝐻𝐿 𝐻 𝑇𝐿 𝐻 𝑇 𝐻 𝑇𝑅 𝐻 𝐵 𝐻 𝐵𝑅𝐻 𝐵𝐿 수직 변화량 = (𝐻 𝐵−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝑇) 대각선 변화량(1) = (𝐻 𝑇𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝐵𝐿) 대각선 변화량(2) = (𝐻 𝐵𝑅−𝐻 𝐶) − (𝐻 𝐶−𝐻 𝑇𝐿) If(수평 변화량 >= 임계값) density += a * 수평 변화량 If(수직 변화량 >= 임계값) density += a * 수직 변화량 If(대각선 변화량(1) >= 임계값) density += b * 대각선 변화량(1) If(대각선 변화량(2) >= 임계값) density += b * 대각선 변화량(2) a와 b: 프로그래머가 조정가능한 상수
  • 121. 소스코드  CPU 영역에서 밀도맵을 한다.  매개변수 fDensityScale에 밀도의 스케일 값, fMeaningfulDifference는 임계값을 의 미한다.
  • 123. 소스코드  최종적으로HS에서 Density map을 패치별로 로드하여 테셀레이션 계수를 설정한다.
  • 125. SCREEN SPACE ADAPTIVE TESSELLATION  스크린 공간에서 삼각형이 차지하는 정도 를 가지고 테셀레이션 계수를 계산한다.  8픽셀 이하의 작은 영역을 차지하는 삼각 형을 테셀레이션하는 것은 비효율적인 것 을 유의한다.
  • 126. 소스코드  여기서는 간단히 화면공간에서 삼각 형의 변의 길이를 더하여 테셀레이션 의 계수를 정하였 다.
  • 127. 기타  테셀레이션하는 메쉬는 같이 한꺼번에 드로우 한다.  테셀레이션 on/off 변경은 의외로 큰 부하로 작용한다.
  • 128. 기타  쉐이더 뒤로 갈수록 계산이 많아지므로 가능한 앞의 단계에서 계산을 한다. VS 에서 가능한가? HS 에서 가능한가? DS 에서 가능한가? 모두 아니라면, PS에서 진행  픽셀 쉐이더에서 하는 계산을 되도록 최소화 한다.