기획자가 알아야 할 Basic Game 3D Graphics by 김윤정

두 번째 시간입니다.
역시 내부 기획자용 강의자료 ㅎㅎㅎ

곧장 쉐이더 쪽으로 넘어갈까 생각도 해 봤지만...
초반 강의를 해 본 결과 미술쪽이나 3D 쪽의 용어 기본도 안 되어 있는 친구가 있어서 (내부 기획자중에서 몇 명은 이쪽에 대해 전혀 모르는 사람이 있어서 그 친구들 기준에 맞추어 작성하고 있습니다.)
아직 쉐이더 쪽으로 넘어가긴 이르겠더군요.
이 다음이 쉐이딩입니다.


* 쓰는 중이니까 좋은 의견 있으시면 조언해 주시면 감사하겠습니다.
기획자가 이 부분에 대해서는 좀 알고 있는게 좋겠다,
이 부분은 틀렸다 등등... 저도 절대 완벽하지 않고, 주워들은 지식도 많으니까요 ^^


기획자가 알아야 할 Basic Game 3D Graphics

3D 그래픽에서 기획자가 알아야 할 내용은 기본적인 용어와 개념입니다. 물론 3D툴을 적당한 수준으로 다룰 수 있는 것이 가장 좋은 방법이지만, 모두에게 기대할 수는 없겠지요. 그럴 때에는 아래 소개한 정도의 기본적인 용어와 개념 정도는 익혀 두는 것이 좋습니다. (아래 용어의 출처는 http://ko.wikipedia.org  의 도움을 받아, 보다 게임에 맞게 내용을 추가 / 수정하여 작성되었습니다.)

또한 이 지식이 유용할 때가 있는데, 그것은 프로그래머와 그래픽 디자이너가 사용하는 용어의 개념이 달라서 오해가 생기는 것을 기획자가 방지할 수 있다는 것입니다. 때문에 여기서 사용하는 용어는 프로그래머가 사용하는 용어와 그래픽디자이너가 사용하는 용어를 모두 소개시켜 놓았습니다.





게임 3D 그래픽의 기본 용어


DirectX
DirectX는 MS사가 자사의 MS Wimdows용으로 개발한 멀티미디어 API의 집합입니다. 2D/3D의 도형, 오디오, 동영상 등 여러 미디어를 사용하는 응용 프로그램이 Video ram, 사운드 카드 등 하드웨어 장치를 직접 접속하여 고속 처리할 수 있습니다. 현지 PC 게임 제작에 많이 활용하고 있으며, MS의 게임기인 X-box도 이 DirectX에 기반하고 있습니다. (그러므로 PC 게임에서 X-box 로 컨버팅 하는 것은 상대적으로 쉽지만, 나머지 게임기로는 힘듭니다) 



Polygon
3차원 컴퓨터그래픽에서 입체형상을 표현할 때 사용하는 가장 작은 단위인 다각형을 가리킵니다. 3차원 공간에서 시작점과 끝점이 선으로 연결된 폴리라인으로 곡선 위에 있는 몇 개의 점을 직선으로 이어서 곡선을 표현하는 방법입니다. 물체의 테두리를 나타내기 위해 사용됩니다.(물체의 윤곽을 결정한다는 의미입니다) 
폴리곤은 원래 사전적으로 '다각형' 이라는 뜻으로, 반드시 삼각형을 의미하는 단어는 아닙니다. 단 게임이나 3D에서는 최소 형태의 다각형이 삼각형인 관계로, Polygon이란 말이 삼각형인 것 처럼 자주 사용되는 경향이 있습니다
3D max에서는 Face란 용어를 사용하며, 3Dmax 에서 사용하는 비슷한 용어로 Poly라는 용어가 있는데 이것은 3D max에서만 사용가능한 전용구조로, 최소구조가 꼭 삼각형이 아니어도 되는 다각형의 특이한 구조이기 때문에 모델링 작업시에 유용하게 할 수 있는 구조입니다. 그렇지만 게임엔진으로 Export 되면 모두 다시 삼각형으로 바뀌게 됩니다. (주:사실상 이 Poly가 진정한 Polygon의 의미일 것입니다)


Mesh
Mesh란 사전적 의미로 '그물망' 을 의미하며, 이것은 3D 로 만든 물체들의 와이어프레임이 그물처럼 격자를 가지고 있는데에서 기인합니다.
폴리곤 메시(polygon mesh)는 3차원 컴퓨터 그래픽스에서 다면체의 형태를 구성하는 폴리곤과 정점들의 집합을 의미합니다

메시는 간단한 렌더링이 가능하도록 주로 삼각형과 사변형 또는 볼록한 다각형으로 구성되지만 구멍이 뚫려 있는 등 더 복잡한 도형을 이용하여 구성할 수도 있습니다. 즉 폴리곤들이 모여서 만드는 3D 물체를 의미한다고 할 수 있습니다.

(주: 메쉬 > 폴리곤)


UV Mapping
UV 매핑은 2차원 이미지를 3차원 모델로 표현하는 3차원 모델링의 한 과정입니다. UV맵은 3차원 물체의 이미지(흔히 텍스쳐라고 한다.)로 변환됩니다. 원래 3차원 물체에게는 X,Y,Z의 좌표계가 있는 반면에, 변환된 물체에게는 U,V의 좌표가 있습니다. 이것은 3차원 물체의 표면에 이미지를 칠하는 효과를 만듭니다.

예를 들어 아래 그림에 격자 무늬의 구가 있습니다. 첫번째 왼쪽의 것은 UV매핑이 안된것이고, 두번째 것은 UV매핑이 된것입니다. UV매핑이 안 된 구에서는 격자무늬가 XYZ공간에 놓여지고, 격자가 쪼개진것 처럼 보입니다. 하지만 UV매핑이 된 구는, 격자무늬가 UV공간에 놓여지고, 구의 점들은 위도와 경도에 따라 UV공간으로 변환됩니다. (위도와 경도가 아주 좋은 예 입니다. 물체의 표면에 따르는 좌표이니까요)
그래픽 디자이너들은 3D max와 같은 그래픽 툴을 이용하여, 각 오브젝트들을 가상으로 쪼개어 평면에 배열하는 작업을 UV의 좌표계에 오브젝트를 맞추는 작업을 합니다. 이것을 Unwrap UVW . 줄여서 "Unwrap한다" 라고 합니다.

파일:UV mapping checkered sphere.png



빛의 용어

3D 그래픽이 제대로 출력되어 '사실감' 있게 보여지기 위해서는 '빛' 이 가장 중요합니다. 같은 오브젝트라도 빛을 얼마나 효과적으로 표현했느냐에 의해 그 품질은 급격한 차이를 보이게 되며, 이 빛에 대한 기본 용어를 알고 있는 것이 좋습니다.
이 용어는 그래픽 디자이너와 프로그래머가 의미를 중복하여 쓰거나 서로 다르게 쓰는 경우도 있으며, 기술이 발전되거나 유행에 따라서 변할 수도 있습니다.
(그림출처 : http://www.huevaluechroma.com/011.php )

 (하나의 Directional light 에서 보이는 빛나는 당구공. 스페큘러와 디퓨즈 리플렉션이 보인다. Photograph by David Briggs.)

(각 부분의 용어 설명)

위의 공은 사실 흰 종이 위에 올라가 있는 당구공일 뿐입니다.
사실상, 정밀하고 포토리얼리스틱한 효과를 내기 위해서는 위의 라이트 구조를 구현해야 하지만 실제적으로는 어느 정도 '타협된' 구조로 라이트를 표현하곤 합니다. 여기서 알아두어야 할 3D 그래픽스에서 사용되는 빛의 기본적인 용어는 다음과 같습니다.




Specular : 사전적 의미는 '반사하는' 란 의미로, 번역을 해보면 Reflection과 혼동할 여지가 있습니다. 그렇지만 보통 사진이나 그래픽에서는 '광원의 직접적인 반사' 를 의미하며, 하이라이트와 같은 의미로 사용됩니다. 여기서 중요한것은 입사각과 반사각이며, 때문에 광원의 위치와 보는 사람의 시야 (카메라) 의 위치가 중요하게 작용합니다. 보통은 밝은 색상의 쨍한 빛 맺힘 효과를 얘기하는게 일반적입니다.


Diffuse : 물체가 가지고 있는 고유의 색상을 의미합니다. 사전적으로는 '확산' 으로, DiffuseMap을 '확산/ 난반사 재질 색상' 으로 번역하기도 합니다. '이것은 물체가 그 색으로 보이는 이유는 그 색상 스펙트럼 부분만 반사하기 때문이다'.. 에서 나온 말이라고 생각되지만 (근거를 못찾겠군요) 그래서 사전적 의미로 설명하면 혼동할 우려가 큽니다. 그러므로 처음에 얘기한 '물체 고유의 색' 이 이해하기 편합니다. (고유의 질감과는 다른 말입니다. 진짜 나무 재질과 나무 재질 스티커는 질감이 다르지요. )
그래서 3D max와 같은 그래픽 프로그램에서는 DiffuseMap이란 말이 물체의 기본 재질 Texture 부분을 의미합니다. 즉 나무 재질을 만들고 싶으면 여기다가 나무 사진을 붙이면 됩니다. 물론 질감수정을 하기 전이면 플라스틱에 나무재질 그림 그려놓은 것 처럼 되겠지만 말이죠. (그 질감수정을 쉐이딩이라 부릅니다)
모든 물체가 가지고 있는 색과 무늬가 전부  'DiffuseMap'이라고 생각하시면 됩니다.

Gamebryo에서는 'BaseMap' 이란 말을 사용하며, 
프로그램쪽에서는 Diffuse라는 말의 의미를 '빛을 받아 확산하는' 개념으로 인지를 하고, 거기에 Texture를 붙이는 것은 완전히 다른 일로 생각하기도 합니다. 그래서 프로그래머의 Diffuse와 그래픽 디자이너의 Diffuse는 개념이 다를 수 있습니다. 그래픽 디자이너의 Diffuse는 텍스쳐까지 포함된 것을 주로 얘기합니다.  


Ambient
만약 물체가 반사광이 없이 빛이 들어오는 방향만 있다고 생각하면 아래 이미지처럼 될 것입니다.
 
이런 모습은 주로 반사광이 없는 우주 공간에서 주로 발견됩니다.

그렇지만 우리가 살고 있는 세계에서는 들어온 빛이 주변의 사물에 흡수, 반사, 확산되어서 주변의 모든 오브젝트에 어느 정도 영향을 끼치게 됩니다. 이것을 정확히 표현한 용어는 Global illumination 이라고하며, 복잡한 조명 기술을 복합적으로 사용하여야 표현이 가능합니다.  아래 그림을 보시면 붉은 색의 오브젝트가 주변에 색 번짐 효과를 나타내며, 그 외에도 각종 조명 현상이 복잡하게 들어가 있는 것을 알아채실 수 있으실 겁니다. 여기서 사용하는 렌더링 알고리즘 Raytrace (광선 추적 효과: 빛이 반사되어 여러 경로를 거쳐 카메라까지 도달하는 경로를 계산하는 방법. 리얼한 굴절이나 반사 효과등이 정확합니다. ) Radiosity (빛 확산 효과: 빛이 오브젝트에 맞아서 그 색을 주변에 확산하는 것을 의미. 반사가 1번만 일어나는 것이 아니라서 제대로 계산하기 위해서는 거의 무한대의 시간이 걸린다) 입니다.
* redmist  님의 지적으로 일부 수정하였습니다.

(그림출처: 니시카와 젠지의 3D 그래픽)
때문에 게임과 같은 실시간 계산 방식의 렌더러에서 이 기술을 사용하는 것은 사실상 불가능하며, 때문에 가장 간단한 방식으로 화면의 모든 부분에 일정한 색을 강제로 더하는 방식으로 이러한 반사광을 흉내내고 있습니다. 이것이 가장 일반적인 방식인 AmbientColor 입니다. 이 계산은 지극히 단순하고 빠른 대신, Diffuse 나 Specular 영역까지 색상이 영향을 끼치기 때문에 이미지가 탁해지거나 과도하게 밝아지는 등, 원하지 않는 칼라가 나올 확률이 있습니다.
최근에는 이 단점을 개선한 여러 가지 Fake 기법들이 개발되어 사용되고 있습니다.


Emissive : 사전적 의미로 '방사의' 라는 의미를 가지고 있으며, 3D max에서는 'Self illumination(자기발광)' 이라고 불리기도 합니다. 전구 등을 표현할 때 사용하는 방식으로, 사실상 Ambient 칼라처럼 이 색상을 전체에 균일하게 더해주는 것과 같습니다.



빛의 종류

3D에서 사용되는 조명은 크게 아래와 같이 3가지로 분류할 수 있습니다. 반면에, 실제 광원은 면적과 체적으로 가지며, 그 때문에 부드러운 경계를 가지는 그림자가 드리워집니다. 3D 그래픽에서는 이러한 그림자를 흉내내기 위해 광원을 수정하지 않고 그림자를 수정하여 실제를 흉내내곤 합니다 (주: Real-Time Rendering 2판)                                                                   

Directional light :
'방향광' 이라고 불리우며, 어느 한 방향으로 평행하게 표현되는 라이트. 가장 기본적이며 많이 사용됩니다. 그림에서는 원통으로 표현되었지만, 프로그래머의 입장에서는 원통으로 크기가 제한되어 있는 이미지는 아니며, 단지 한 방향으로 쏘아대는 빛의 의미로 사용됩니다. 일반적인 방향성 라이트의 경우 주로 사용되며, 특히 태양빛의 표현으로 많이 사용됩니다.

Spot light :
이름 그대로의 '스포트라이트' 로'집중 조명광' 정도로 번역됩니다. 주로 특수한 경우에 사용됩니다. 하지만 기본적으로 많이 사용되는 라이트는 아닙니다.

Point light :
'점광' 이라고 불리우며, 한 점에서 주위 사방으로 방사되는 라이트입니다. 3D max에서는 'Omni light' 라구 불리우며, 전등이나 촛불, 기타 폭발의 광원 등에서 많이 사용됩니다.

Attanuation :
빛의 감쇠 현상을 의미합니다. 실제 환경에서는 빛이 멀어질수록 빛이 연해집니다. 이것을 '감쇠' 라고 부르지요. 이 이유는 무엇일까요?
그것은 빛이 공기를 통해 가면서 공기안의 수많은 먼지입자들에 의해 확산되면서 빛 입자가 사라지는 것입니다. 때문에 실제의 빛은 멀리 갈수록 연해지지만, 3D의 세계는 먼지가 없습니다. 그래서 빛은 무한대로 뻗어가며 (태양빛이 지구까지 올 수 있는 이유는 우주를 통과하기 때문이겠죠) 거리가 아무리 멀더라도 빛이 적용되는 효과는 똑같습니다.
때문에 3D 그래픽에서는 임의의 수치를 정해 감쇠 현상을 시뮬레이트 해야 합니다. (그렇지 않으면 3km 밖의 횃불이 캐릭터의 얼굴을 환하게 밝히겠죠) 이것을 Attanuation 이라고 합니다.

핑백

덧글

  • 디카스테스 2010/01/19 17:50 #

    기본중의 기본들이군요.
  • 김윤정 2010/01/19 18:03 #

    그러게 말입니다.
  • The Nerd 2010/01/19 17:58 #

    모르면 정말 안되는 것들...
  • 김윤정 2010/01/19 18:03 #

    모르면 다음 설명이 안되어서...
  • 레이지폭스 2010/01/19 19:17 #

    좋은 정보 감사합니다.~
  • 김윤정 2010/01/19 21:08 #

    감사합니다. 부족한 것 있으면 지적해 주세요 :)
  • Reiya 2010/01/19 21:28 #

    알짜배기 글이근영 "ㅆ"; 좋은 글 잘보고 갑니다~
  • 김윤정 2010/01/19 22:02 #

    감사합니다 :)
  • 앤써니 2010/01/19 21:49 #

    오 몰랐던것들도 있었네요-ㅂ-;;
  • 김윤정 2010/01/19 22:03 #

    그래픽 하는 분들은 다 아는 내용일텐데요 :)
  • 앤써니 2010/01/20 20:37 #

    몇가지를 깜빡했던걸 보고서ㅋㅋ
  • redmist 2010/01/19 22:36 #

    레이트레이싱과 라디오시티는 효과라기보다는 렌더링 알고리즘입니다.
    라디오시티의 철자는 radiosity이고, 레이트레이싱의 설명은... 많이 난감하네요;
  • 김윤정 2010/01/19 23:01 #

    효과라기보다는 기술이라고 썼습니다만. 확실하게 하기 위해 렌더링 알고리즘으로 바꿨습니다. 레디오시티는 급하게 막 쓰다 보니 오타가 났네요. 레이트레이싱 설명은 좀 더 찾아보고 수정하거나 처리하겠습니다. 감사합니다 :)
  • 미친고양이 2010/01/20 02:15 #

    래디오시티 설명으로 '빛 확산 효과: 빛이 오브젝트에 맞아서 그 색을 주변에 확산하는 것을 의미'는 불명확한듯 싶습니다.
    저건 명확하게는 Color Bleeding 이라는 용어가 있고 이것이 빛 확산 효과(Diffuse Interreflection)로 인한 영향 중 하나라고 알고 있습니다.
    래디오시티는 '빛 에너지가 각 patch의 사이에서 에너지를 흡수/전달 하면서 그 에너지가 완전히 소모될 때까지(평행상태) 계산하는 방식'이 맞지 않을까 싶습니다만... 기획자에게는 저렇게까지는 필요없는 정보군요-_-.
    전반적으로 작업하다보니 기획자가 최적화와 관련된 정보(LOD 등)나 조명에 대해서 상세히 알고 있으면 이야기 진행하기가 수월한 경우가 많았습니다. (제가 그래픽하다가 기획파트로 옮겨간 케이스라...)
  • 김윤정 2010/01/20 02:30 #

    으음 그렇게 썼다고 생각하고 있었는데... 칼라 브리딩 설명으로 읽혀지시나 보군요. 이건 고민좀 해봐야겠네요. 최적화 쪽은 아예 한 파트로 나눠서 처리해야 할 만큼 방대한 분야라 어떻게 나눠야 할지 고민스럽습니다. 조언 감사드립니다 ^^
  • 왕풍뎅이 2010/01/20 09:29 #

    래디오시티는 폐쇠 공간에서 광원의 영향을 받는 물체들의 광복사량 에너지 밀도를 계산하여 쉐이드 블랜딩을 해준다고 엔날에 어떤 책에서 본듯...

    레이트레이싱은 광원의 광자를 추적하여 해당 광자가 거치는 다양한 경로를 통해 최종 광자의 색상값과 굴절&반사값을 얻어 랜더링하는 알고리즘이라고 본듯...
  • 김윤정 2010/01/20 11:25 #

    그러니까 좀 쉬운 말로 설명하지 못하는 것은 결국 제대로 이해하지 못한 것과 마찬가지임
  • 마이즈 2010/01/20 14:35 #

    디퓨즈랑 스펙큘러가 나오면 왠지 노멀맵도 세트로 나와야 할 것 같은 미묘한 고정관념이.. ㅠ.ㅠ..
    왠지 기획자를 위한 내용이라고 하니 부끄럽고 감사해지는 것 같아요. ^^
    다음편 완전 기대 중입니다!!
  • 김윤정 2010/01/20 14:37 #

    노멀맵은 쉐이딩 할때 나오니까요 ^^ 다음 편에 나올겁니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.


MyADD

<script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>