Baking
• Radiosity 알고리즘을이용, Lightmap의 각
각의 픽셀에 Irradiance를 계산해서 저장하는
과정.
• 차례
– Radiosity 소개
– 용어 설명
– Radiosity 알고리즘 소개
19.
Radiosity
• Diffuse 머티리얼을가지는
서피스와 광원, 혹은 두
Diffuse 서피스 사이의 빛의
상호 작용을 계산하는 방식.
• Diffuse Material만 다루기
때문에 카메라에 독립적이다.
• Direct Lighting과
Indirect Lighting 계산
20.
Direct Lighting
• 태양이나전구 같이 직접
빛을 내어 물체를 비추는
광원에 대해서 계산을
하는 것
• 장면에 가장 밝은 빛을
제공하고 그림자를 생성
한다.
21.
Indirect Lighting
• 다른오브젝트를 비추기
전에 이미 반사되거나
다른 표면에서 부딪혀서
나온 빛을 계산한다.
• 장면의 구석구석을 밝히거나
공간을 채우는 빛을 만든다.
• Color Bleeding 효과
22.
용어설명
• Flux
• Solid Angle
• Radiance
• Irradiance
• Radiosity
• Form Factor
• Monte Carlo Method
• Russian Roulette
23.
Flux
• 단위 시간 동안 표면을 통과하는 총 에너지 량
• 단위 : J/s, W(watt)
• 보통 Φ 표현
• 다른 말로
Radiant Power
Monte Carlo Method
•통계 확률 이론에 기반을 둔 개념으로 난수를 발생
시켜 원하는 값의 확률적 분포나 수치를 구하는 방
법
• 예1) π 구하기
N = 전체 찍힌 점의 수
Nc = 부채꼴 안의 점의 수
A = 1(사각형 면적)
Ac = π /4(부채꼴의 면적)
Ac /A = π /4 =Nc /N
Π = 4Nc/N
31.
Monte Carlo Method예2
• 광원에서 발사되는 Ray나
Photon의 발생 위치와 발사
방향을 랜덤하게 결정하는데
사용하거나 반사면에서 생존
여부를 가릴 때 사용한다.
32.
Monte Carlo Estimator
•Monte Carlo 방법을 이용해서 적분의 근사치
를 구할 수 있다.
적분
Estimator
• 샘플링 개수(N)가 많을수록 실제 해에 가까워진
다.
33.
Importance Sampling
• MonteCarlo Estimator을 구할 때 표본을 실제
피적분 함수 모양에 가깝게 샘플링 하면 더 적은 수
의 샘플링으로 실제 해에 가까운 값을 얻을 수 있다.
• 예1) 직접광에 의한 라이팅을 계산할 때 패치에서
광원 방향으로 더 많은 Ray를 생성한다.
• 예2) 간접광에 의한 라이팅을 계산할 때 패치의 노
멀과 가까운 방향으로 더 많은 Ray을 생성한다.
34.
Russian Roulette
• IndirectLighting 계산에서 Ray나 Photon
을 몇번이나 반사시킬지 정할 수 있어야 한다.
– 반사 횟수로 제한
– Power가 일정 수치 이하로 내려갈 경우 소멸
• 위 두 가지 방식은 장면 내의 전체 에너지를 보존시켜주
지 못한다.
– 매번 반사될 때마다 Russian Roulette 이용
• 에너지를 보존시켜준다.
35.
Russian Roulette
• q에의해서 살아남은 샘플에 가중치가 부여되어서
총 에너지의 손실이 없는 결과를 얻을 수 있다.
• q에 의해서 Ray나 Photon의 Bounce 횟수를 조
절할 수 있다.
36.
Russian Roulette
// Possiblyterminate every light path
if( nIntersections > 2 )
{
float q = 0.5f;
if( RandomFloat() > q )
break;
irradiance /= q;
}
어두운 씬에서는 반사가 적게 이뤄져도 되기 때문에
q를 크게 설정해서 반사가 적게 이뤄지도록 하고
밝은 씬에서는 q를 크게 셋팅해서 많은 수의 반사가
이뤄지도록 할 수 있다.
37.
Radiosity 알고리즘 분류- 1
Scene
Monte Carlo Method Rendering
Ray-tracing 방식 방식
Final Gathering
Path-tracing 방식
Classic Stochastic Jacobi
Radiosity Radiosity
Irradiance Cache
Photon mapping
Instant Radiosity
38.
Classic Radiosity
• 모든패치 사이의 Form Factor를 미리 구해줘야 한다.
• 많은 저장 공간이 필요하고 시간이 오래 걸리기 때문에 비효율적
• n개의 패치가 있을 때 n2 * 0.5 번의 Form Factor 연산을 미리 해줘
야 한다.
• 계산 도중 중간 결과를 보기 힘들다.
39.
Monte Carlo Method
•Form Factor를 미리 구할 필요가 없다.
• Classic 방식에 비해서 더 적은 저장 공간과 짧
은 계산 시간으로 괜찮은 퀄리티의 결과물을 얻
을 수 있다.
• 중간에 결과를 확인해 볼 수 있다.
40.
Scene Rendering 방식
•패치에서 노멀 방향으로 보이는 씬을 렌더링 한 다
음 렌더링 된 텍스쳐의 각각의 픽셀을 패치로 들어
오는 Radiance로 간주하고 Irradiance를 구하
는 방식.
• Ray-tracing 같은 복잡한 알고리즘을 알 필요가
없고 별도로 Form Factor를 구하지 않아도 된다.
• 모든 패치를 광원으로 간주한다.
Scene Rendering 방식
•Hemisphere map 대신
Hemicube map사용
Distance Map Lambert's Cosine Map
44.
Radiosity 알고리즘 분류- 2
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-tracing 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
45.
Shooting
• 한 패치에서발산된 에너지에 영향을 받는 다른
주변 패치의 에너지 상태를 업데이트 한다.
• 계산 결과를 빨리 볼 수 있지만 작은 패치에 대해
서 노이즈 결함을 발생 시킨다.
46.
Gathering
• 한 패치에서보이는 다른 패치로부터 발산되는
에너지를 모아서 패치의 에너지 상태를 업데이트
한다.
• 노이즈 결함을 없애서 렌더링 퀄리티를 올리는데
사용될 수 있다.
47.
Ray-traced 방식
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-tracing 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
48.
Ray-tracing 방식
• DirectLighting
– 각각의 패치에서 광원을 향해 Ray을 발사, 1차
Lighting 정보를 생성한다.
– 그림자 생성
• Indirect Lighting
– Final Gathering 단계, 패치 주변으로 Ray을
발사해서 Radiance 정보를 수집한다.
49.
Direct Lighting 의사코드
directIllumination(x)
estimateRadiance = 0;
for all shadow rays
{
generate point y on light source
estimateRadiance += Le(y, yx) *
Reflectance * G(x,y) * V(x,y) / pdf(y);
}
extimateRadiance = estimateRadiance /
#shadowRays;
return(estimateRadiance)
V(x,y) : 패치 x에서 패치 y가 보이는지 여부
G(x,y) =
Final Gathering
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-traced 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
52.
Final Gathering
• 이미계산된 Radiosity를
Ray-tracing을 이용해서
더 정확하고 부드러운 결과를
만들어 냄.
• Indirect Lighting계산하기
위해 사용되거나
Shooting, Photon mapping
계산 후 2pass에서 Rendering
퀄리티를 높이기 위해서 사용
53.
Sampling
• Hemisphere Sampling을
이용, 패치에서 반구 방향으로
무작위로 Ray 발사.
• 충돌된 가장 가까운 지점의
Radiance을 가져온다.
• Importance Sampling을
이용해서 패치의 노멀 방향에 가까운 방향의 Ray를 더
많이 발사하면 더 적은 연산으로 동일한 결과를 얻을 수
있다.
Path-tracing 방식
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-tracing 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
56.
Path-tracing 방식
• 실질적으로반사가 수행하는 Ray는
하나만 생성하고 나머지 Ray는 주변의
Radiance를 수집하는 역할만 한다.
• Ray-tracing 방식은 bounce될 때에도
여러 개의 반사Ray가 생성된다.
• Path-tracing 방식은 Final Gathering을
수행 한 후 간접광을 빠르게 한번 더
계산할 때 주로 사용된다.
한 방향으로만 브랜칭 되기 때문에
Ray-Tracing 방식보다 속도는 빠르지만
최종 렌더링 퀄리티는 떨어진다.
57.
Stochastic Jacobi Radiosity
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-traced 방식
Irradiance
Photon mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
58.
Stochastic Jacobi Radiosity
•처음pass에서는 광원에서 Ray를 발사해서
주변 패치의 에너지 상태를 업데이트 시키고 이후 pass
에서는 각각의 패치에서 반사되는 빛을 고려해서 주변
패치의 에너지 상태를 업데이트 한다.
• 패치와 광원사이의 Form Factor는 광원에서 발사된
전체 Ray수와 패치가 받은 Ray수의 비율로 나타낸다.
Fij = Nij/Ni
Ni는 패치i 에서 발사된 Ray 수,
Nij는 패치 i에서 발사된 Ray중 패치 j에 도달한 Ray 수
Irradiance Cache
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-tracing 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
62.
Irradiance Cache
• 인접한패치의 Irradiance를 보간해서 Patch
의 Irradiance를 구한다.
• Direct Lighting의 경우 패치사이의
Irradiance 변화량이 큰 곳이 많이 존재하지만
Indirect Lighting의 경우에는 상대적으로 인
접한 패치끼리의 변화량이 적은 곳이 대부분이기
때문에 이러한 보간 연산이 가능하다.
63.
가중치 부여
• 보간에참여하는 각각의 패치에 가중치를 부여한다.
• 거리가 작고 노멀 벡터의 내적과 주변 지오메트리와
거리가 클수록 높은 가중치를 갖게 된다.
64.
버림 조건
• 다음과같은 조건을 갖는 인접한 패치는 무시된
다.
– 노멀 벡터의 차이가 너무 크다.
– 주어진 패치보다 앞에 존재한다.
n
n E(p,n) E(p,n)
p p’
p
p’
65.
Irradiance 계산 -1
• 패치 사이 변화가 큰 부분에서는 Irradiance를 직접
계산하고 계산된 값을 Octree 구조를 갖는
Irradiance Cache에 저장한다.
http://www.rorydriscoll.com/2009/01/18/irradiance-caching-part-1/
66.
Irradiance 계산 -2
• 변화량이 작은 부분에서는 Irradiance Cach
e를 이용, 주변의 패치를 검색 한 후 아래 식으로
Irradiance를 보간한다. 이 결과 역시 Cache
에 저장한다.
67.
Photon Mapping
Gathering Shooting 속도개선
Scene Rendering Stochastic Jacobi
Radiosity
Ray-tracing 방식
Irradiance
Photon Mapping
Cache
Final Gathering
Path-tracing 방식 Instant Radiosity
68.
Photon Mapping
• Two-Pass알고리즘
– 1Pass
• 광원에서 Photon 발산
• 서피스와 충돌, 반사
• 충돌된 Photon을 Photon map에 저장
• 패치 별로 주어진 반경 안에 있는 Photon을 검색해서 Irradia
nce 계산(검색된 Photon의 Flux을 모두 더한 후 원의 면적
으로 나눠준다.)
– 2Pass
• Final Gathering
• 적은 비용으로 Caustic 효과를 낼 수 있다.
69.
Photon Mapping
• Photon: Flux 운반체
• Photon map
– 서피스와 부딪힌 지점의 Photon 정보 저장
– Balanced Kd-Tree
– Global Photon Map(Direct, Indirect)
– Caustic Photon Map
70.
Photon State Machine
Specular
Caustic Nonspecular
Specular
Emission
Direct Specular/ Caustic
Nonspecular
Nonspecular Indirect Specular/
Nonspecular
Stretch - 1
•Chart를 어느 정도로 펼 것인가?
• 0~1 사이 값. 0.16667이 기본값.
0 0.1 0.1667 이상
80.
Stretch – 2
CSG맵은Stretch가 0에 가까 일반 Mesh로 이루어진 맵은
울수록 결과가 좋았음 0.16정도 했을 때 괜찮았음.
81.
Gutter Width
• Chart사이 너비
• Padding이라도고 함.
• Multi Sampling시 인접한 Chart의 색을 침범하지 못하도록
하는 역할.
2 30
82.
Integrated Metric Tensors- 1
• Texture-space에서 삼각형을 어떻게 펼 것인지 정의
• 픽셀의 색 변화량이 큰 부분에 더 많은 공간을 할당하는
것이 가능(Lightmap compression in halo3)
83.
Integrated Metric Tensors- 2
• D3DX IMT 관련 함수를 이용해서 IMT 생성
– D3DXComputeIMTFromPerVertexSignal
– D3DXComputeIMTFromPerTexelSignal
– D3DXComputeIMTFromSignal
– D3DXComputeIMTFromTexture
• 유저가 임의로 생성한 IMT도 Chart를 생성할
때 사용 가능함.
Mesh와 Instance
• Mesh는Vertex, Face, Material 정보
• Instance는 Mesh ID와 Transform 정보를
가지고 있음.
• 한 씬에 동일한 Mesh가 여러 개 존재할 때
Instance로 관리하면 자원을 효율적으로 관리
할 수 있음.
87.
Instancing
• 동일한 Mesh가여러 개 존재 할 때 오직 한 Mesh에 대해서만
Chart를 만들고 다른 Instance는 이미 만들어진 Chart사용.
• Instance는 Lightmap에서의 UV 시작위치만 저장.
88.
Baking 차례
• Radiosity 미들웨어 소개
• Beast 소개
• 렌더링 샘플
• 퀄리티를 높이기 위한 팁
• 동영상
Beast 소개
• Baking전용 미들웨어
• Illuminate Labs에서 개발
• 대표작 : Mirror’s Edge
• Montel Carlo 방식에 기반한 렌더러
– Final Gathering, Path tracing,
Photon mapping, Irradiance Cache 등을 지원