컴퓨터 그래픽스 3장: 모델링

2024. 7. 23.·🤓 기술 학습 & 공부 기록/컴퓨터 일반
목차
  1. 📍Polygon Mesh
  2. 📍Non-indexed vs Indexed representation
  3. 📍Surface Normals
  4. 📍Export & Import

📍Polygon Mesh

모델링: 렌더링할 물체를 만들어 내는 것

- 어떤 구체를 모델링한다고 할 때, 반지름과 원점을 이용해 구의 부피를 구하는 방정식을 사용할 수도 있지만,

- GPU는 polygon mesh를 사용하는 방법에 더 최적화되어 있음

- 즉, 구체를 이루는 정점 몇개를 샘플링해서 이들을 연결하는 방식

 

triangle mesh

- polygon mesh 중에서 가장 널리 사용되는 방법

- OpenGL은 triangle mesh만 처리함

- 정점 갯수의 대략 2배 만큼 삼각형 메쉬가 있다

 

vs 사각형 메쉬

- 모델링 시 사각형 메쉬가 유리할 때도 있다

- 사각형 메쉬 -> 삼각형 메쉬 변환 간단 (2로 나누면 됨)

 

해상도

- 정점의 갯수(resolution)

- LOD(Level of Detail)라고도 함

- 해상도 늘이기: 정점의 갯수를 늘려서 원래 퀄리티처럼 부드럽게 만듬

 

📍Non-indexed vs Indexed representation

non-indexed

- vertex array: mesh를 이루는 vertex 들로 구성하는 배열

- non-indexed 방식에서는 중복 vertex들이 존재하여 비효율적

indexed representation

- vertex array 에 정점을 중복 없이 배치

- index array: 순서대로 원소 3개씩 하나의 삼각형을 이루며 vertex array의 인덱스를 원소로 가짐

- index array에는 정수값만 담기므로 비교적 메모리를 덜 차지함

- 따라서 더 non-indexed 방법 보다 더 효율적

 

📍Surface Normals

normal: 법선

- 모든 normal vector는 물체 바깥을 향해야 함

- 따라서 반시계 방향(CCW: counter-clockwise)으로 정점을 나열 (p1 -> p2 -> p3)

- 만약 p1, p3, p2의 시계방향으로 정점들이 배열되면 정점이 구 내부를 향해버려서 안됨

 

- 모든 normal은 단위 벡터로 표현됨 (정규화 과정 필요)

예) 구의 polygon mesh

- 모두 반시계 방향으로 배치

- t1: p -> q -> r

- t2: s -> p -> q

vertex normal

- 삼각형이 아닌 정점에서 법선을 그리는 것이 더 중요

- 폴리곤 메쉬만 있을 때 normal 구하는 방법: 각 정점은 여러 개의 삼각형에 공유되므로 그 정점들의 벡터를 구한 다음 이것들의 평균을 낸다 (물론 정규화 과정도 필요)

📍Export & Import

모델링 프로그램(예 - Max)으로 모델을 만들면, 3D 엔진 프로그램(예 - Unity)으로 이를 활용할 수 있다

- 이 때 .obj 형식의 파일 등을 사용할 수 있다

 

.obj 파일의 구성

- 정점의 갯수, 정점 법선의 갯수는 같다 (아래 사진의 예시에서 26개)

- 아래 사진에서 순서대로 삼각형을 그리게 정점이 배치되어 있음

 

import 과정

- face 정보를 바탕으로 정점과 노말을 하나씩 끌어옴

 

참고

https://youtu.be/CAfdIW8M6HA?si=xV-MSFJMnM0LFMfq

  1. 📍Polygon Mesh
  2. 📍Non-indexed vs Indexed representation
  3. 📍Surface Normals
  4. 📍Export & Import
'🤓 기술 학습 & 공부 기록/컴퓨터 일반' 카테고리의 다른 글
  • <객체지향의 사실과 오해> 4.역할, 책임, 협력
  • <객체지향의 사실과 오해> 3.타입과 추상화
  • 컴퓨터 그래픽스 2장: 수학 기초
  • 컴퓨터 그래픽스 1장: 서론
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
컴퓨터 그래픽스 3장: 모델링

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.