Skip to content

Latest commit

 

History

History
83 lines (53 loc) · 13.8 KB

1-2.elements-of-3d-graphics.md

File metadata and controls

83 lines (53 loc) · 13.8 KB

레퍼런스


1.2 페인팅과 드로잉으로 보는 3D 그래픽스의 요소

(1) 거대한 캔버스: 3D 공간과 기하 모델링

3D 그래픽스로 넘어가면, 가장 흔한 접근법이 래스터 그래픽스보다는 벡터 그래픽스와 더 많은 공통점을 가지고 있음을 발견한다. 즉, 이미지의 내용이 기하학적 객체의 목록으로 지정된다. 이 기법을 기하 모델링이라고 한다. 시작점은 단순한 기하학적 형태들을 3차원 공간에 배열하여 ‘인공 3D 세계’를 구성하는 것이다. 이 객체들은 전역 속성과 결합된 속성을 가질 수 있으며, 이는 객체의 외관을 결정한다. 기본 형태의 범위는 종종 매우 제한적이며, 점, 선분, 삼각형만을 포함할 수 있다. 다각형이나 구와 같은 더 복잡한 형태는 더 기본적인 형태의 모음으로 구축되거나 근사될 수 있다. 장면을 2차원 이미지로 만들기 위해, 장면은 3차원에서 2차원으로 투영된다. 투영은 장면의 사진을 찍는 것과 같다. 이제 이 모든 것이 어떻게 작동하는지 좀 더 자세히 살펴보자. 먼저 기하학(geometry)에 관해 알아보자. 우리는 빈 3D 공간 혹은 ‘세계’에서 시작한다. 물론, 이 공간은 개념적으로만 존재하지만, 실제로 존재하는 것처럼 생각하고 마음속으로 시각화할 수 있다는 것이 유용하다. 이 공간은 각 점을 세 개의 숫자, 보통 점의 x, y, z 좌표와 연결하는 좌표계가 필요하다. 이 좌표계를 ‘세계 좌표계’라고 한다.

  • 2D 일러스트에서 캔버스 위에 원, 사각형, 삼각형 등을 그려 넣듯 3D 세계에서도 기하학적 객체(예: 점, 선분, 삼각형)를 배치
  • 캔버스의 좌표계(x, y)가 3D에서는 (x, y, z)로 확장
  • 우리가 붓으로 찍어 그리듯, 3D에선 “어느 좌표에, 어떤 모양을 둘 것인가?”가 그림의 핵심 기초가 됨

(2) 스케치 도구: 기하학적 원시(Primitive)와 계층적 모델링

우리는 세계 안에 기하학적 객체로 구성된 장면을 만들고자 한다. 예를 들어, 선분을 장면에 지정하기 위해 두 끝점의 좌표를 제공하고, 삼각형을 지정하기 위해 세 꼭짓점의 좌표를 제공할 수 있다. 선분과 삼각형과 같이, 우리가 작업하는 가장 작은 요소를 기하학적 원시 도형이라고 부른다. 다른 그래픽 시스템은 다양한 기본 형태 세트를 제공하지만, 많은 경우에는 선과 삼각형과 같은 매우 기본적인 형태만이 기본적으로 간주된다. 복잡한 장면은 많은 수의 기본 형태를 포함할 수 있으며, 개별 기본 형태에 대해 명시적인 좌표를 제공하여 장면을 생성하는 것은 매우 어려울 수 있다. 프로그래머라면 누구나 즉시 짐작할 수 있듯이, 해결책은 기본 요소를 재사용 가능한 구성 요소로 묶는 것이다. 예를 들어, 여러 자동차를 포함하는 장면의 경우, 우리는 바퀴의 기하학적 모델을 생성할 수 있다. 자동차는 네 개의 바퀴와 다른 구성 요소의 모델과 함께 모델링될 수 있다. 그리고 우리는 장면에 같은 자동차 모델의 여러 복사본을 사용할 수 있다. 기하학적 모델이 설계되면, 그것은 더 복잡한 모델에서 구성 요소로 사용될 수 있다. 이것은 계층적 모델링으로 언급된다.

  • 계층적 모델링이란 작은 단위의 도형들을 조합해서 더 큰 단위의 객체를 만들고, 그 객체들을 다시 모아서 더 복잡한 장면을 구성하는 방식

  • 레고 조립과 유사할지도?

  • 기본 조각 만들기: 먼저 바퀴라는 기본 모델을 한 번만 디자인

  • 재사용하기: 이 "바퀴" 모델을 4번 복사해서 자동차의 각 위치에 배치. 매번 바퀴를 처음부터 새로 만들 필요가 없음

  • 그룹화하기: 바퀴, 차체, 창문 등을 모아서 "자동차"라는 하나의 큰 객체로 묶음

  • 추가 재사용: 이제 이 "자동차" 모델을 여러 번 복사해서 도로 위에 여러 대 배치할 수 있음

  • 이런 방식의 장점은:

    • 효율성: 바퀴를 한 번만 디자인하고 여러 번 재사용
    • 일관성: 모든 바퀴가 똑같이 생김
    • 유지보수: 바퀴 디자인을 수정하면 모든 자동차의 바퀴가 자동으로 업데이트됨
  • 쉽게 말해, 계층적 모델링은 폴더 안에 폴더가 있고, 그 안에 파일이 있는 컴퓨터 파일 시스템과 같은 구조로, 작은 것들이 모여 큰 것을 이루고, 그 큰 것들이 모여 더 큰 장면을 만드는 방식

(3) 기하 변환(스케일, 회전, 이동)

바퀴의 기하학적 기본 형태로 모델을 구성했다고 가정해 보자. 자동차 모델에 바퀴를 위치시킬 때, 모든 기본 형태의 좌표를 조정해야 한다. 그렇다면 바퀴를 만드는 것으로 얻는 이점은 무엇인가? 모든 좌표가 동일한 방식으로 조정된다는 점이다. 즉, 자동차에 바퀴를 배치하기 위해서는 바퀴 전체에 적용되는 단일 조정을 지정하기만 하면 된다. 사용되는 ‘조정’ 유형을 기하 변환 (또는 기하학적 변형)이라고 한다. 기하 변환은 기하학적 객체의 크기, 방향, 위치를 조정하는 데 사용된다. 자동차 모델을 만들 때, 우리는 바퀴 한 개를 만든다. 그런 다음 바퀴 모델에 네 가지 다른 변환을 적용하여 자동차에 네 개의 바퀴 복사본을 추가한다. 마찬가지로, 같은 자동차 모델에 다른 변환을 적용함으로써 장면에 여러 자동차를 추가할 수 있다. 기하 변환의 세 가지 가장 기본적인 유형은 스케일링, 회전, 그리고 이동이라고 불린다. 스케일링 변환은 객체의 크기를 설정하는 데 사용된다. 즉, 특정 요인만큼 더 크거나 작게 만든다. 회전 변환은 특정 축을 중심으로 일정 각도로 회전시켜 객체의 방향을 설정하는 데 사용된다. 이동 변환은 원래 위치에서 주어진 양만큼 이동시켜 객체의 위치를 설정하는 데 사용된다. 이 책에서는 먼저 2차원에서 이 변환들을 만나게 될 것이며, 여기서는 더 쉽게 이해할 수 있다. 그러나 3D 그래픽에서 이들은 정말로 필수적이 된다.

  • 스케일(Scaling): 그림판에서 크기 조절을 하듯, 3D 객체의 크기를 늘리거나 줄이는 행위
  • 회전(Rotation): 종이를 90도 돌려서 그리거나, 원형 자를 원하는 각도로 회전시키듯이, 3D에서도 축을 기준으로 돌림
  • 이동(Translation): 드로잉 툴에서 이동 도구(Selection & Move)로 객체 위치를 옮기는 것과 동일하게, 3D 객체를 다른 좌표로 옮기는 것

(4) 색채와 질감: 재질(Material)과 텍스처(Texture)

다음으로 외관(appearance)에 관해 알아보자. 기하학적 형태 자체만으로는 별로 흥미롭지 않다. 그것들의 외관을 설정할 수 있어야 한다. 이는 기하학적 객체에 속성을 할당함으로써 이루어진다. 명백한 속성은 색상이지만, 각 기본 형태에 색상을 단순히 지정하는 것보다 현실적인 외관을 얻는 것이 훨씬 더 복잡하다. 3D 그래픽에서는 색상 대신 일반적으로 재질에 대해 이야기한다. 여기서 재질이란 표면의 고유한 시각적 외관을 결정하는 성질을 의미한다. 본질적으로, 이는 표면이 표면에 도달하는 빛과 어떻게 상호 작용하는지를 의미한다. 재질 속성에는 기본 색상뿐만 아니라 광택, 거칠기, 투명도와 같은 다른 속성도 포함될 수 있다. 가장 유용한 종류의 재질 속성 중 하나는 텍스처다. 가장 일반적인 용어로, 텍스처는 표면의 재질 속성을 점별로 다양하게 하는 방법이다. 텍스처의 가장 흔한 사용은 다른 점마다 다른 색상을 허용하는 것이다. 이는 종종 2D 이미지를 텍스처로 사용하여 수행된다. 이미지를 표면에 적용하여 이미지가 표면에 ‘도색된’ 것처럼 보이게 할 수 있다. 그러나 텍스처는 투명도나 ‘요철’과 같은 값을 변경하는 것을 의미할 수도 있다. 텍스처를 사용하면 많은 수의 기하학적 기본 형태를 사용하지 않고도 장면에 세부 사항을 추가할 수 있다. 대신, 텍스처가 적용된 적은 수의 기본 형태를 사용할 수 있다.

  • 2D 페인팅에서 붓 색상뿐 아니라 붓의 질감(붓 모양, 농도) 등을 세팅하듯, 3D 객체에도 색상 + 거칠기 + 반사율 + 투명도 등을 정해줌
  • **텍스처(Texture)**는 캔버스 위에 다른 이미지를 붙여 넣기 하는 것과 비슷
  • 객체 표면에 특정 이미지를 입혀서 나무, 금속, 돌처럼 보이게 만드는 것
  • 굳이 삼각형 메쉬(기본 도형)를 너무 많이 그리지 않고도, 텍스처를 통해 다양하고 세밀한 표현을 할 수 있음

(5) 조명(Lighting)

재질은 객체의 고유한 속성이지만, 객체의 실제 외관은 객체가 보이는 환경에도 의존한다. 실제 세계에서는 환경에 어느 정도의 빛이 없으면 아무 것도 볼 수 없다. 3D 그래픽에서도 이 원리는 마찬가지로 적용되며, 장면에는 시뮬레이션된 조명이 필요하다. 장면에는 여러 광원이 있을 수 있다. 각 광원은 자신만의 색상, 강도, 방향 또는 위치를 가질 수 있다. 그 광원에서 나오는 빛은 장면의 객체의 재질 속성과 상호 작용할 것이다. 그래픽 시스템에서 조명에 대한 지원은 상당히 단순한 것에서부터 매우 복잡하고 계산 집약적인 것에 이르기까지 다양할 수 있다.

  • 2D 그림을 그릴 때 광원을 어떻게 잡느냐에 따라 그림자의 방향, 명암이 달라지듯, 3D 그래픽에서는 **광원(Light)**을 설정해야 비로소 장면이 살아남
  • 광원이 여러 개면, 여러 방향에서 빛이 들어와 색이 겹치거나 빛이 반사되는 효과도 표현할 수 있음
  • 조명 설정에 따라 동일한 3D 모델도 완전히 다른 느낌을 줄 수 있음 (예: 무서운 분위기 vs 밝고 따뜻한 분위기)

(6) 최종 캔버스에 담기: 투영(Projection)과 렌더링(Rendering)

끝으로, 이미지(image)에 관해 알아보자. 일반적으로 3D 그래픽의 최종 목표는 3D 세계의 2D 이미지를 생성하는 것이다. 3D에서 2D로의 변환은 뷰잉(viewing)과 투영(projection)을 포함한다. 세계는 다른 관점에서 볼 때 다르게 보인다. 시점을 설정하기 위해서는 관찰자의 위치와 관찰자가 바라보는 방향을 지정해야 한다. 또한 최종 이미지에서 위쪽을 가리킬 방향인 ‘위’ 방향을 지정하는 것도 필요하다. 이는 장면에 ‘가상 카메라’를 배치하는 것으로 생각할 수 있다. 시점이 설정되면, 그 관점에서 본 세계는 2D로 투영될 수 있다. 투영은 카메라로 사진을 찍는 것과 유사하다. 3D 그래픽의 최종 단계는 2D 이미지의 개별 픽셀에 색상을 할당하는 과정이다. 이 과정은 래스터화(rasterization)라고 하며, 이미지를 생성하는 전체 과정을 ‘장면을 렌더링( rendering)한다’라고 한다.

  • 우리가 정성껏 3D로 스케치한 세계는 결국 2D 화면(캔버스)에 내려앉아야 비로소 보임
  • 투영(Projection) → 카메라 위치나 시야 각도, 화면에 그려질 비율 등을 설정하는 단계
  • 렌더링(Rendering) → 모든 3D 정보(모델, 텍스처, 조명 등)를 종합해 2D 픽셀 이미지로 실제 그려내는 작업
  • 완성된 그림(최종 이미지)을 얻는 마지막 단계

(7) 움직이는 그림: 애니메이션

많은 경우 최종 목표는 단일 이미지를 생성하는 것이 아니라, 서로 다른 시간에 세계를 보여주는 일련의 이미지로 구성된 애니메이션을 생성하는 것이다. 애니메이션에서는 시퀀스의 하나의 이미지에서 다음 이미지로 넘어갈 때 작은 변화가 있다. 장면의 거의 모든 측면이 애니메이션 동안 변경될 수 있으며, 기본 형태의 좌표, 변환, 재질 속성, 그리고 시점을 포함한다. 예를 들어, 애니메이션 과정에서 객체를 점차적으로 성장시키기 위해 객체에 적용된 스케일링 변환에서 스케일 요인을 점진적으로 증가시킬 수 있다. 그리고 애니메이션 동안 시점을 변경하면 장면을 통해 이동하거나 날아가는 효과를 줄 수 있다. 물론 필요한 변경 사항을 계산하는 것은 어려울 수 있다. 계산을 돕기 위한 많은 기술이 있다. 가장 중요한 기술 중 하나는 물리 법칙에 기반한 객체의 운동과 상호 작용을 계산하는 ‘물리 엔진’을 사용하는 것이다. (하지만 이 책에서는 물리 엔진에 대해 다루지 않는다.)

  • 2D 페인팅에서 프레임 단위로 그림을 여러 장 그리고, 이를 빠르게 넘겨 애니메이션을 만드는 전통적인 방식이 있듯, 3D도 마찬가지
  • 3D에서는 위치·회전·크기뿐 아니라 빛의 변화, 재질 변화 등 거의 모든 요소를 시간에 따라 움직일 수 있음
  • 이렇게 얻은 연속된 이미지(프레임)를 이어 붙여 애니메이션으로 감상하면, 정적인 조형물이 움직이고 살아 있는 느낌을 줄 수 있게 됨

마치며

  • 3D 그래픽스 세계는 2D 캔버스를 확장한 거대한 입체 드로잉판.
  • 3차원 공간(캔버스)에 기하 도형(브러시)과 색·재질(물감), 광원(조명)을 적절히 배치하고, 마지막 렌더링(작업물 완성)으로 2D 이미지나 애니메이션을 얻는다.