1. Modeling
- scene을 구성하는 물체를 만드는 것
- 물체는 크게 두가지로 정의 된다.
- 하나는 Geometry of shape(Structural description), 다른 하나는 질감 등의 appearance와 light(surface)이다.
2. Geometry
- 70-80년대에는 spline curve로 surface를 구현했다.
- 표면의 곡률 등을 계산해서 spline patch들을 polynomial 함수로 구현했다.
- 90년대부터 triangle mesh를 생성하는 방법이 등장했다.
- 물체 표면에 lazer를 쏴서 물체 표면의 모든 점들의 3차원 좌표들을 알아내는 기법으로 사실적 모델을 생성하기 시작했다.
- Stanford bunny 는 69451개의 삼각형으로 구성되었고 다비드 상은 8백만개의 폴리곤으로 구성되었다고 한다.
Polygonal mesh
- 복잡한 실세계의 물체를 scanning한 후 triangle들을 이어 붙어 구성하는 방법이다.
Spline patch
- Spline patch를 생성해서 modeling을 하는 방법이다.
Volume data, voxel
- 이미지를 2차원 pixel로 표현하는 것처럼 3차원으로 확장해서 물체를 표현하는 방법이다. CT, MRI가 이에 해당한다.
CSG
- 부품 모델링에 종종 사용됨
- 이 방법 외에도 다양한 방법으로 3차원 물체를 modeling하게 된다.
- gpu에서 rendering의 장점 때문에 triangle mesh가 많이 사용된다. (하드웨어 support)
3. Point Cloud
- unstructured한 point들을의 list이다.
- 점들간의 연결 정보 인접 정보들이 없는 상태이다.
- scanning의 결과물인 raw data이다.
- 이 raw data를 가지고 triangle을 형성하게 된다.
- 카메라 array로 부터 다각도의 사진을 찍는다.
- 즉 한 점을 다각도로 찍은 사진들을 가지고 그 점의 좌표를 계산한다.
- 보통 카메라는 물체의 색을 저장하지만 depth camera는 물체의 depth 값을 저장한다. depth를 알면 물체의 3차원 position을 얻어낼 수 있다.
- 즉 위 그림처럼 물체를 둘러싸고 있는 depth image들을 얻고 거기서 point cloud를 얻게 된다.
- 이것도 카메라기 때문에 depth image와 더불어 texture map도 생성할 수 있다.
4. Polygon Soup
- point cloud를 가지고 polygon을 구성한다.
- unstructed set of polygon이다. 즉 특별한 구조 없이 단순히 (만약 triangle이라면) 삼각형의 vertex들을 일렬로 나열한 것이다. 이를 triangle soup이라고 한다.
- rendering에는 이정도만 해도 충분하지만 다른 operation에는 에러가 생기기 쉽다. 예를 들면 위 예시에서 t0와 t1의 vertex가 일치하는 점인지 구별할 수 없어 문제가 발생할 수 있다.
5. Mesh
- connected set of polygons
- 대부분의 경우 triangle mesh를 사용한다.
- triangle mesh를 구현하는 가장 간단한 방법은 vertex list를 만들고(point cloud) 이 점들로 triangle list를 만드는 것이다.
- 위처럼 세개의 vertex를 정의 했으면
- vertex들을 가지고 triangle을 정의하는 것이다.
- 이런 방법은 indexed representation이라고 한다.
- 즉 점들의 connectivity를 알려주는 것이다.
- vertex와 인접한 triangle들을 계산하는 연산들이 더 쉬워진다.
6. Implicit Surface (Level Set)
- 함수를 가지고 물체를 표현하는 방법이다.
- F(x,y,z) = 0인 x,y,z가 물체의 표면의 좌표들이 된다. (검정선)
- red로 갈수록 +, blue일수록 -이다. 양수값일 수록 더 더 멀리 blue일수록 더 가까운 것이다.
- triangle mesh에서는 삼각형이 하나 빠지면 모델에서 구멍이 생기는데 지금 이 방식에서는 hole-free하다.
- topology를 바꾸기 쉽다. (morphing이 쉽다. 하나의 형체가 전혀 다른 이미지로 변하는 기법) 함수만 바꾸면 되기 때문이다.
- 3차원 volumn데이터를 사용하기 때문에 속도가 느리다. 또한 stroge도 더 많이 필요하다.
7. Voxel
- 네모난 voxel에 occupancy, density를 저장하게 된다.
- CT, MRI가 이 예에 해당한다.
- 2차원 이미지를 층층이 여러장 찍고 포개서 3차원 volume 데이터를 형성하는 것이다.
8. Constructive Solid Geomety (CSG)
- 기계 부품 같은 걸 설계 할 때 자주 쓰이는 기법이다.
- 기본적인 모양으로 복잡한 모델을 만드는 기법이다.
- cad 모델링에서 자주 사용된다.
9. Scene Graph
- 이전까지 살펴본 모델링 방법들로 모델을 구성하고 나면 그 물체들을 가지고 계층구조로 Scene Graph를 만들게 된다.
- 이런 계층구조 덕에 책상에 transformation을 하면 모니터 종이 전화기를 함께 움직일 수 있다.
- 캐릭터 애니메이션에 자주 쓰인다.
10. Procedural Modeling
- 저장되어 있는 형태를 그대로 사용하는 것이 아니라 runtime에 새로운 형태를 계산해서 모델링하는 기법이다.
- fractal이 이에 해당한다.
- edge마다 operation을 적용해서 새로운 형태를 만드는 것이다.
- 나무 등을 그리는데 사용될 수 있다.
- 지도의 등고선 등의 지형 정보(height map)를 가지고 지형을 형성할 때 종종 사용된다. 높이 정도를 가지고 triangle mesh를 거쳐 실제 지형을 묘사하는 것이다.
*분야에 따라 적절한 data representation을 활용해서 모델링을 한다. 요즘에는 traingle mesh가 가장 널리 사용된다.
*영화처럼 사실적 묘사가 중요할때는 subdivision을 활용한다. 더 curve가 두드러질때는 더 작은 삼각형들로 sampling을 하는 기법이다. 좀 더 부드러운 표면을 구현할 수 있다.
'ComputerScience > Computer Graphics' 카테고리의 다른 글
CG - 11. shader programming (0) | 2021.11.03 |
---|---|
CG - 10. Triangle Mesh (0) | 2021.10.28 |
CG - 8. Texture filtering (0) | 2021.10.13 |
CG - 7. Texture (0) | 2021.10.13 |
CG - 6. Surface Rendering (0) | 2021.10.08 |