[한정현 컴퓨터 그래픽스] 3장 모델링

이한결·2025년 1월 3일
0

[KUOCW]Computer Graphics

목록 보기
3/16

출처: https://www.youtube.com/watch?v=CAfdIW8M6HA&list=PLYEC1V9tJOl03WLDoUEKbiYW_Xt4W6LTl&index=4
한정현님의 컴퓨터그래픽스 3장 강의를 기반으로 제작한 블로그입니다.

Polygon Mesh

Implicit representation: 데이터를 수식이나 함수를 사용해 연속적이고 압축된 형태로 표현

explicit representation: 데이터를 명확하고 직관적으로 표현하며 모든 요소가 직접적으로 정의

  • Polygon Mesh: 객체를 표현하기 위해 다각형들의 집합으로 구성된 그래픽 구조
    • GPU는 Polygon mesh를 사용하는데 최적화 되어 있다.

Triangle mesh: 삼각형으로만 구성된 polygon mesh

  • 일반적으로 꼭짓점의 2배 개수만큼 삼각형이 존재합니다.

삼각형을 사용하는 방법이 더 유리하지만 일반적으로 사각형을 사용하는 quad 방식도 널리 사용됩니다.

Level Of Detail(LOD): Polygon mesh에서 점의 개수로 나타내는 해상도

  • 개수가 많을수록 성능이 좋아지겠지만, 복잡한 요소들이 많아집니다.

vertex array: 각 삼각형에 대응하는 꼭짓점들을 저장한 배열

  • 중복되는 요소들이 많다.

Index array: vertex array에 꼭짓점에 대응되는 번호를 저장하고, 저장된 번호를 이용해서 꼭짓점들을 기록하는 배열

Surface Normals

삼각형의 각 꼭짓점에서 Normal(법선 벡터) 구하는 방법

  1. 한 점에서 서로 다른 두점에 대해서 그은 벡터 v1, v2 구하기
  2. 두 벡터의 외적을 통해서 1번점에서의 Normal 구하기
  • 삼각형 (p1,p2,p3)가 아닌 (p1,p3,p2) 순으로 시계방향으로 나타난다면 외적의 결과가 반대 방향으로 나타날 것입니다. 따라서 컴퓨터 그래픽스에서 점의 순서는 (p1,p2,p3) 점 순서대로 시계 반대방향으로 작성해야 합니다.

실제로 t1을 작성할 때 (p,r,q)가 아닌 (p,q,r) 반시계 방향으로 작성해야합니다. 단 삼각형의 시작점은 중요하지 않습니다.

일반적으로 구의 normal을 구한다고 했을 때, 하나의 점을 구로부터 sampling해서 해당 점으로부터의 normal을 구하게 됩니다.

Polygon mesh에서의 vertex normal을 구하기 위해서는 여러가지 삼각형의 normal을 이용해서 구할 수 있습니다.

Export and Import

하나의 application(max, unity)에서 만든 파일을 다른 application에서 실행할 때 일반적으로 .obj 파일을 기반으로 공통되게 사용할 수 있습니다.

obj 파일

하나의 구가 26개의 꼭짓점과, 48개의 삼각형으로 구성되어있다고 가정해 보겠습니다.

  • 맨왼쪽에 v(vertex)가 26개 있는 것을 알 수 있는데 이 v 옆에 숫자 3개는 x,y,z로 나타나 있습니다.
  • 다음으로 vn(vertex normal)은 왼쪽의 점에서의 normal(법선 벡터)를 나타냅니다. 이 역시 x,y,z로 나타나 있습니다.
  • 마지막으로 삼각형 정보는 맨오른쪽에 나타나있고 f는 face(면)을 나타냅니다. f옆에 나타낸 숫자들은 vertex//vertex normal을 나타내는 정보입니다.

마지막 f(face)를 이용해서 vertex array와 index array를 쉽게 만들 수 있습니다. 단 중복되는 내용은 기록하지 않도록 주의해야 합니다.

참고로 위의 그림처럼 2개의 점이 같은 normal vector를 가질 경우 하나만 저장하도록 되어있습니다.

profile
열정으로 가득할 페이지

0개의 댓글