Transcript 그래픽스고급_발표3
Ambient Occlusion 발표자 : 정광일 일 시 : 05.06 개요 • • • • Ambient Occlusion이란? Ambient Occlusion 예제 Ambient Occlusion 적용방법 기타 다른 방법의 Ambient Occlusion Ambient Occlusion? • 셰이딩의 한 방법으로서 주변광 계산에 대 한 모델 • 자기자신, 또는 주변 모델에 의해 가려지 는 빛의 정도를 나타냄 • 즉, 모델의 차폐도를 나타내는 방법 • 셀프셰도잉 가능 • 적용시 어두운 부분을 더욱더 어둡게 표현 Ambient Occlusion? • Ambient 는 전역 조명 모델 (상수값) • 모델의 정점당 Occlusion Term 할당 – 단, ( 0 <= Occlusion_Term <= 1 ) • 빛 계산 모델 – It = Ia * Occ_Term + Id + Is Ambient Occlusion 예제 Ambient Occlusion 적용방법 • Static Ambient Occlusion 방식 – 1. 정점당 Occ_Term 계산 • Ray Tracing 를 사용한 전처리 계산 – 2. Vertex Shader를 사용하여 Occ_Term적용 • Shader 의 Attribute 변수를 사용하여 정점당 Occ_Term 적용 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 한 정점에서 많은 수의 Ray를 생성 – Ray가 모델과 부딫히는지 검사 – Occ_Term = 충돌하지 않은 Ray 의 수 모든 Ray 의 수 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 컨셉 Non Occluded Area Occluded Area Occluded Area Polygon Surface Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – Ray intersect triangle – 1. 세 점 v1,v2,v3 를 가지고 평면의 방정식 L 를 만든다 – 2. 평면과 반직선의 교점 P를 찾는다 – 3. 교점 P가 삼각형 내부에 있는지 외부에 있 는지 판별한다 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 1. 평면 L • L = P∙N + d = 0 • N = ( v1 – v0 ) X ( v2 – v0 ) v0 • d = -N ∙ v0 v1 v2 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 2. 반직선 R • • • • R(t) = P0 + tV P0 : 시작위치 V : 방향벡터 t : 시간 V P0 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 3. 반직선과 평면과의 교점 P, t • t = - (P0 ∙ N + d) / V ∙ N • P = P0 + tV P0 n V P Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 4. 교점 p 가 삼각형 내부에 있는지 판별 hit miss Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 4. 교점 p 가 삼각형 내부에 있는지 판별 • 삼각형의 각 점에서 P로 연결한 작은 삼각형들의 와인딩 검사 v0 v0 ccw ccw cw ccw ccw ccw v1 v2 v1 v2 Ambient Occlusion 적용방법 • 1. 정점당 Occ_Term 계산 – 4. 교점 p 가 삼각형 내부에 있는지 판별 • ( v1 – v0 ) X ( p – v0 ) ∙ n >= 0 • ( v2 – v1 ) X ( p – v1 ) ∙ n >= 0 v0 v0 • ( v0 – v2 ) X ( p – v2 ) ∙ n >= 0 ccw ccw cw ccw ccw ccw v1 v2 v1 v2 Ambient Occlusion 적용방법 • 2. Vertex Shader를 사용한 Occ_Term적용 – Application • • • • • loc = glGetAttribLocation(p, "occ"); … glVertexAttrib4f(loc , 0, 0, 0, …occ); glVertex3fv( … ); … Ambient Occlusion 적용방법 • 2. Vertex Shader를 사용한 Occ_Term적용 – Vertex Shader • attribute vec4 occ; • • • • … ambient = gl_LightSource[0].ambient; gl_FrontColor = ambient * occ.w; … 기타 다른 방법의 AO • Ambient Occlusion Fields • SSAO (Screen Space Ambient Occlusion) – Crysis에서 처음으로 선보였음 – 순수하게 GPU 만으로 수행됨 (실시간 처리 ) – screen space에서의 각 pixel에 대하여 그 pixe l 의 주변 pixel을 샘플링하고, 샘플링된 pixel들과의 depth 차이에 의해 occl usion의 정도를 결정