Modeling

CuriHuS·2024년 5월 16일

Game Graphics

목록 보기
1/9
post-thumbnail

Polygon

  • polygon이란 유한한 직선으로 묘사된 평면 도형
  • 게임에서는 주로 삼각형 사용(영화 분야에선 사각형 사용)

Explicit representation

  • 게임 분야에서는 명시적 표현이 더 선호되는 편
    • GPU가 polygon 처리에 최적화되어 있기 때문
  • mesh의 vertex들은 부드러운 표면을 샘플링하는 점이므로 polygon mesh는 정확한 표현이 아니라 대략적인 표현

Implicit representation

  • 공간의 각 점을 표면의 안, 위, 바깥쪽으로 분류하는 함수에 의해 모양을 정함
  • 각 공간에 대한 확인을 해야해서 공간을 잘게 나눌 수록 Detail은 살지만 연산이 많이 필요

Polygon Mesh

  • closed mesh(구멍이 없는)는 100개의 vertex가 주어지면 200개의 삼각형을 가짐

    오일러 공식

    v: vertex e: edge f: face

정확성, 효율 Tradeoff

  • polygon mesh의 vertex 수는 resolution(삼각형)이나 LOD에 의해 묘사됨
  • resolution이 증가하면, 부드러운 표면에 가까워지지만 mesh 처리 시간도 증가함

GPU

  • GPU는 렌더링에 특화되어 있는 전기 회로임
    • GPU는 병렬 구조로 설계되어 있음.
    • 병렬 구조로 되어 있어서 뉴런 네트우크나 이미지 처리 같이 큰 데이터 블록을 병렬 처리하는 알고리즘이 사용됨
    • 그런데, GPU는 O/S를 스스로 실행시킬 수 없음
      • 왜냐면, 렌더링에 필요한 데이터는 data bus(PCI-e bus)를 통해 CPU에서부터 GPU로 전달되어야 한다.

Polygon Mesh 표현

Non-indexed 표현

  • vertex array: memory 공간에서 vertex들이 나열되는 곳
  • 3개의 vertex는 삼각형을만들기 위해 선형으로 읽힌다.
  • vertex의 순서는 사용되는 좌표계에 따라 다름: LHS or RHS
  • vertex array는 장황한 데이터를 포함하기 때문에 비효율적임
  • 설상가상, vertex array에 저장된 데이터가 vertex 위치 뿐 아니라 추가적인 정보(color, normal, etc..)도 가지고 있음

Indexed 표현

  • 더 나은 방법은 index array를 쓰는 거임
  • vertex array에 vertex가 오직 한번만 쓰임
  • 삼각형 하나 당 3개의 인덱스가 index array에 저장된다
  • 중복 데이터를 제거함으로써 절약된 vertex array 저장 공간이 index array에 필요한 추가 저장 공간보다 더 크다

LHS와 RHS를 쓸 때
엄지 손가락이 해당 면에서 바깥으로 향하게 두면 됨

Normals

  • normal은 무언가에 수직(perpendicular)인 벡터임
    • 무언가는 vertex, triangle, surface, etc.
  • Normal이 주로 사용되는 곳:
    • Lighting, Shading
    • Collision Detection
    • Backface Culling
    • Bump and Normal Mapping

Surface normal

  • Normal은 주어진 점에서 표면 접선(tangent)에 수직인 벡터임
  • 중심 점에서 물체의 표면의 밝기는 점에서의 normal과 빛의 방향 사이의 각도에 달려있다.
  • surface normal은 triangle normal과 vertex normal로 분류된다.

Triangle normal

  • (p1, p2, p3)의 삼각형이 주어졌을 때, v1을 p1과 p2를 연결한 벡터를 나타낸다 하자
  • v2는 p1과 p3를 연결하는 벡터라고 하자.
  • p1, p2 그리고 p3 순서가 CCW임.
  • 모든 normal vector는 단위 벡터로 만들어진다.

CCW vs. CW

  • normal은 반대 방향이다
  • normal 방향은 vertex 순서에 달려있다
  • 컴퓨터 그래픽스에서, surface normal은 다면체(polyhedron)의 바깥쪽을 향해야 합니다.

Vertex normal

  • vertex에 normal을 할당할 수 있으며, 이 vertex normal은 vertex가 샘플링하는 매끄러운 표면의 점의 normal을 근사합니다.
  • vertex normal은 vertex를 공유하고 있는 모든 삼각형들의 normal들의 평균으로 정의된다
  • vertex normal은 거의 항상 vertex array를 통해 GPU로 전달되는 데이터다

Normal 비교

  • flat shading에서, triangle normal은 전체 삼각형에 걸쳐 조명에 사용되는 단일 방향을 정의하기 때문에 가장 중요합니다.
  • smooth shading에서, vertex normall은 인접한 vertex들의 normal들 사이 보간(interpolating)에 의해 휜 표면의 상황을 허용할 수 있어서 중요함.
  • 물리 계산, 충돌 감지와 반사와 굴절 같은 정밀한(precise) 그래픽 효과에서,특정한 지점에서의 정확한 surface normal은 필요하다.

Export and Import

  • 오프라인 그래픽 패키지를 이용하여 제작된 Polygon mesh와 관계된 데이터들은 파일 안에 저장되어 있고 런타임 3D 프로그램에 전달됨
  • 다른 어플리케이션에 어울리는 포맷으로 데이터를 내보내는 과정을 expert라고 함.
  • 반면에 집어 넣는 것은 import
    • .obj 파일이 흔함

단위 구에서의 low-resoultion mesh 고려

  • 구 표면은 mesh가 26개의 vertex와 48개의 삼각형으로 구성되도록 45도로 균일하게 샘플링 된다.
  • 아래는 .obj 파일 내 mesh 일부이다.

Importing to the 3D application

  • 파일 내 저장된 데이터는 3D 어플리케이션의 vertex, index array 안으로 import 됨
  • mesh가 48개의 삼각형으로 구성되어 있으면, index array는 144(48 x 3)개의 요소를 가진다.
profile
공부 노트

0개의 댓글