3. 평면의 방정식 개요
• 평면의 방정식 (Plane Equation)
– a*x + b*y + c*z + d = 0
– a*x + b*y + c*z = d’ (같은 공식 다른 표현)
• 점과 평면과의 거리 (Point to Plane)
– Distance(V) = a*Vx + b*Vy + c*Vz + d
– 즉
• a*Vx + b*Vy + c*Vz + d > 0 : V는 평면보다 위에 있다
• a*Vx + b*Vy + c*Vz + d = 0 : V는 평면위에 있다
• a*Vx + b*Vy + c*Vz + d < 0 : V는 평면보다 아래에 있다
• 구성요소
– 노멀방향 N = (a, b, c)
• 평면의 방정식 구하기
– 평면의 방향과 평면위의 임의의 점 (VN, VP) = [VN,-Vn·Vp]
– 평면위의 임의의 점 3개 (V1, V2, V3) = N:(V2-V1) x (V3-V1), [N, N·V1]
• 기타연산
– 뒤집기
– 정규화(Normalize)
4. 교차검사
• 유한라인(Segment)와 평면 방정식
– Segment 임의의 두 점을 연결하는 라인
– 점의 쓸기 검사(SweepTest)
• 시작점에서 임의의 위치로 이동
– 툴상에서 카메라이용
• 카메라위치, 피킹 벡터, 바닥평면을 이용 화면의 피킹한 월드위치
• 카메라의 방향, 픽킹 위치를 이용, 카메라를 바라보는 평면의 방정식을 구해서 드래그처리
5. 컬링에 응용
• AABB(AxisAlignBoundingBox) vs 평면
– AABB 가 평면위에 있는 지, 평면 아래에 있는 지 검사
• 가장 가까운 위치 / 가장 먼위치 이용
• 가장 가까운 위치가 평면 위에 있으면 AABB는 평면 위에 있다
– 뷰프러스텀 컬링에 사용
• 가장 먼 위치가 평면 아래에 있으면 AABB는 평면 아래에 있다
– 어클루젼 컬링에 사용
• 구(Sphere) Vs 평면
6. 컨벡스
• 볼록 도형 (Convex Polytope)
– 임의의 평면으로 이등분됨
• 분할된 두 다면체는 여전히 Convex !!
– N개의 점으로 표현가능
– N개의 평면으로 표현 가능
• 반복적인 평면과의 연산으로 표현 가능
– 대표적인 볼록 다면체
• 절두체 (프러스텀 Frustum)
• 박스 (Box)
– 물리처리 기본단위
• Convex이면서 단순화된 형태 Box
– 컨벡스의 반대 : 오목 (Concave)
• 평면상의 컨벡스 도형
– 폴리곤 (Polygon)
– 가장 작은 단위 도형(Unit Shape) = 삼각형 (triangle)
– 폴리곤 = 삼각형의 집합으로 표현 가능
– 레스터라이제이션(Rasterization)
7. 클리핑(1)
• 볼록한 평면도형을 평면으로 클리핑
– 볼록한 평면도형 (TriangleFan의 형태)
– N각형 (V1 -> V2 -> .. -> VN)
– 알고리즘
• 각 Edge를 순회하면서 테스트
– VN-1 과 VN이 평면에 충돌하면 충돌 버텍스추가
– VN이 평면위에 있으면 버텍스 추가
• 예) 그림
– [4->0] -> 0 -> [0->1] -> 1 -> [1->2] A -> 2 -> [2->3] -> 3 -> [3->4] B -> 4
9. 물리파괴
• Convex 무한 평면으로 자르기를 물리에 적용
– 각 폴리곤에 대해서 Split
– 평면위의 폴리곤과 아래의 폴리곤으로 구분
– 새로 생긴 Edge 정보를 이용 내부 채우기
– 메시는 Convex가 아닐 수 있으나 물리 모델은 무조건 Convex
• 물리엔진에는 버텍스 리스트만 올리면 OK
• 메시 모델이 Convex가 아닌 경우 분할된 Edge로 채울 면
만들때 주의 필요
– 미리 분할하는 파괴랑은 다른 매력~ (E32010 메탈기어솔리드)
– 테스트예
http://www.youtube.com/watch?v=Tt0WNPeqd70
10. BSP
• BSP (Binary Spatial Partitioning)
– 씬매니징
• 객체를 최적으로 효과적으로 분할 가능 (옥트리, 쿼드트리, Kd 트리와 비교)
– BSP 메시모델
11. CSG에 응용(1)
• CSG (Constructive Solid Geometry)
– 속이 찬 볼록다면체(Convex Polyhedron)를 더하기 빼기 블린연산을 통해 메시정의
– 둠, 하프라이프, 언리얼등에서 레벨 디자인에 사용되고 있음
• 빠른 레벨 제작과 테스트
12. CSG에 응용(2)
• 두 컨벡스 다면체에 대해서 면 분할
– 컨벡스 = 평면 집합 = 각 평면에 대해서 Solid와 Solid 아님으로 나뉘는 BSP트리
– A, B 연산시 A를 B의 각면에 대해서 분할 (분할시 완전 위의 면와 평면에 있거나 아래에 있
는 그룹으로 나누고 평면에 있거나 아래에 있는 면들은 다음 면으로 순차적으로 분할)
– 최종적으로 (A-B)와 (A&B) 의 그룹이 남음
– 이 정보를 이용하여 블린연산
13. 메시 파팅
• 메시 파팅 (from 마비노기 영웅전 캐릭터 커스터마이징 시스템)
– 장착될 코스춤을 추가하기 전에 이전 메시의 일정 영역을 클리핑
• 알고리즘 (그냥 나름의 추측임)
– 컨벡스로 정의된 자를 영역을 준비한다.
– 메시의 간단한 계층 구조를 통해 컨벡스에 포함 안될 메시를 미리 제외시킨다
– 서더랜드호지먼 방식처럼 미리 버텍스에 대해서 각 평면의 Up/Down 체크해서
비트로 저장해둔다
• 이 단계에서 비트 연산으로 포함 안될 face들을 추가로 추려낼 수 있음 (페이스안의 버
텍스 모두 임의의 평면 위에 존재)
• 클리핑할 필요없도 없이 제외되는 face들도 추려낼 수 있음 (펜이스 안의 버텍스 모든
평면의 아래에 존재)
– 각 평면에 대해서 순차적으로 분할 작업