Featured image of post (펌)김희선_Low 3D 그래픽 세미나

(펌)김희선_Low 3D 그래픽 세미나

  1. 인사xml:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” /

  안녕하세요. 김 희선 입니다. 저는 까페에서의 닉넴은 하늘빛이고요, 현재 주식회사 가이블에서 그래픽 팀을 맡고 있습니다.

 

  1. 강연주제………………………………………………………………………………………………….

제가 이번에 강연할 주제는

  1. 3D 리얼타임 환경 내에서의 충돌처리방식에 따른 모델링xml:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” /

  2. 게임환경 내에서의 버텍스 칼라의 개념

  3. 버텍스 칼라의 사용과 어자인 버텍스 칼라의 사용방법

 

등 입니다. 그리고 시간이 된다면 3D MAX에서의 라이트맵 생성방법에 관한 설명도 드리도록 하겠습니다. 그러나 짧은 시간 동안 모두를 설명하기엔 어려운 점이 많기에 여기서 다루지 못한 부분은 까페에서 듀토리얼 형식으로 올리거나 아니면 다음 세미나때 자세한 설명을 드리도록 하겠습니다.

먼저 이 강연은 초급이신 분들을 상대로 하였지만 일반적으로 3D 리얼타임에 대한 약간의 개념은 알고 계시는 분들을 위주로 하였습니다. 일단은 저의 까페 회원들이신 분들이기 때문에 폴리곤과 버텍스 그리고 맵핑에 대한 가장 기본적인 개념들은 충분히 알고 계실거라 생각되어 그보다는 더 부차적인 문제인 리얼타임 환경 내에서의 가장 기초가 되는 부분들을 강연의 주제로 삼았습니다.

 

리얼타임 환경 내에서 디자이너들이 알아야 할 기초적인 부분들은 여러 가지가 있는데요

가령, 리얼타임에서의 광원의 처리방식, 충돌처리 방식, 안개나 파티클의 처리방식 그리고 플랜을 사용한 특수효과의 처리방식, 캐릭터 모델링과 캐릭터 애니메이션의 처리방식, 지형 생성의 여러 가지 방식들, 아이템과 아이템의 교체에 관한 처리방식 등 우리가 게임을 만들기 위한 수많은 조건들이 있을 것입니다. 이 강연에서는 그 중에서 먼저 배경오브젝트들을 모델링 하기 전에 알아야 할 부분들을 짧게 나마 설명을 드리고자 하였습니다.

 

리얼타임 환경 에서는 충돌체크(Collision detection)의 인식 문제가 상당히 중요합니다. 일반적엔 3d애니메이션과 같은 경우는 완성된 결과 자체가 2d의 그림으로 렌더링된 결과물로서 나타나기 때문에 리얼타임에서처럼 직접적인 충돌의 인식문제는 필요 없겠지만 리얼타임 환경 내에서는 오브젝트 하나하나가 인터랙티브한 상호 관계를 가지고 있기 때문에 충돌체크는 가장 중요한 부분 중에 하나죠.

그러나 여기서, 프로그램상에서 어떤 방식으로 충돌체크를 하는가의 자세한 개념은 디자이너인 우리들로선 어려운 부분이기 때문에 우리가 자세히 공부할 필요까지는 없겠죠. 또 그렇게 까지 해야 할 필요성도 그다지 많지 않고요. 하지만 충돌체크가 이루어 지기 위해선 어떤 방식으로 모델링이 되어야 할지에 대해선 여러분들이 알고 있어야 하는 것은 중요합니다. 애니메이션 만들듯이 배경을 모델링 해 놓고 프로그래머가 리얼타임으로 돌리게 한다면 문제가 생기겠죠? 아마 상당히 궁시렁거릴 겁니다.

 

 

  1. 3D 리얼타임 환경 내에서의 충돌처리 방법에 따른 모델링

먼저 여타의 다른 주제들보다 리얼타임 환경의 충돌처리 방식의 개념에 대해 먼저 설명하게 된 것은 3D 게임제작에 있어서 가장 중요한 개념이면서도 의외로 이 부분을 고려하지 않고 모델링 작업을 마쳐버려 난감한 문제들이 생기는 경우를 많이 봐왔기 때문입니다. 그렇게 되면 거의 십중팔구는 면을 다시 쪼개거나 중구난방의 방식을 써서 충돌처리를 마감하게 되죠. 그러나 여러분들이 그 충돌처리에 대한 개념을 조금만 숙지하고 게임배경을 제작하신다면 좀더 이런 불필요한 과정들을 많이 줄이실 수 있을 거라 보여집니다.

 

게임상에서 충돌이 이루어져야 하는 조건 1. 캐릭터가 벽이나 장애물 그리고 기둥과 같은 물체 등과 부딪혔을 때 2. 캐릭터가 총으로 사격을 했을 때 보다 리얼한 효과를 주기 위해서 총탄자국이 남게 되는 장면을 만들기 위한 조건. 3. 몬스터나 적 캐릭터가 총이나 칼에 맞아 피가 튀거나 했을 때 주변 환경에 핏자국이 남아 리얼한 효과를 만들기 위한 조건. 4. 캐릭터가 던진 물체가 상대 캐릭터나 주변 환경에 부딪혀 부서지거나 튕겨져 나가는 효과를 만들기 위한 조건

 

충돌체크 방식의 종류

  1. AABB (Axis aligned Bounding Box)

  3차원 환경내의 좌표축(월드축)에 평행한 방식으로 바운딩 박스가 고정되어 나타나기 때문에 비교적 계산이 단순하고 빠르며 구현하기도 쉽습니다. 건물의 벽이나 천정등과 같이 직각으로 고정되어 움직이지 않는 물체에 충돌체크를 하는 경우 가장 많이 쓰이는 방식입니다. 그러나 정확한 바운딩의 경계를 얻을 수 없다는 단점이 있어 사선으로 틀어지거나 곡선과 같은 복잡한 형태의 그리고 게임환경 내에서 항상 움직이는 물체와 같은 오브젝트의 충돌체크일 경우 사용하기 힘든 단점이 있습니다.

 

장점: 계산이 단순하고 대단히 빠르며 구현하기 쉽다.

단점: 정확한 바운딩의 경계를 얻을 수 없다.

 

  1. OBB (Oriented Bounding Box)

3차원 환경 내의 물체에 좌표축을 맞춘 방식으로 게임 속에서 자주 움직이는 물체에 충돌체크를 하는 경우 쓰이는 방식입니다. 계산이 복잡해 지고 구현하기 힘든 단점이 있으나 좀더 복잡한 환경에서의 충돌체크가 가능합니다. 단순한 예로 우리가 맥스에서 오브젝트를 생성했을 때 나타나는 바운딩 박스는 모두 오브젝트에 좌표축에 고정되어 있는 OBB 방식이라고 볼 수 있습니다. 오브젝트를 잘게 나눠 가면서 모델링을 할 경우 좀더 복잡한 환경에서의 충돌체크가 가능한 장점이 있지요.

제가 강의할 부분에서 충돌처리방식 중 가장 중요한 개념의 하나로 여러분들이 이 개념을 충분히 숙지하셔야 할 부분중의 하나 입니다.

게임에서는 두 가지 방식 모두 함께 쓰이는 방법입니다. 이외에도 여러 가지의 충돌체크 방식이 있는데요, 디자이너 분들이 특별히 고려해야 할 부분은 많지 않기에 간단히 종류만 설명하고 넘어 가겠습니다.

 

 

맨 먼저 3D 게임에서 바운딩박스에 따른 충돌방식 중 OBB충돌방식에 따른 모델링 개념에 대한설명을 드리도록 하겠습니다.

일단, 바운딩박스란 맥스에서 오브젝트를 생성하면 볼 수 있는 바운딩박스를 얘기하는 것인데요 3d 게임엔진에서는 3차원 상에서 물체들이 충돌할 때 인식하는 방법으로 제일먼저 바운딩박스를 인식하게 되는 것이죠.

 

xml:namespace prefix = v ns = “urn:schemas-microsoft-com:vml” /오브젝트 주변을 감싸고 있는 하얀 선

 

위의 그림을 보시면 알겠지만 어떠한 복잡한 형태로 이루어지는 오브젝트들 이라고 할 지라도 바운딩박스 자체는 단순히 사각의 박스 형태로만 나타나게 됩니다. 각각 단위의 복잡한 메쉬자체를 비교적 단순한 형태의 대체물로 대신하게 되는 것이죠.

여러분들이 로폴로 배경을 만들었을 때 하나의 오브젝트를 만들어 보시면 알겠지만 아무리수없이 복잡한 물체를 모델링 한다 해도 바운딩 박스는 단순한 박스 하나의 형태로만 나타나죠. 그렇게 되면 위의 게임상에서 충돌이 이루어 지는 조건들을 표현하기는 불가능해 집니다. 프로그램 상에서는 그 사각의 바운딩박스 하나만을 충돌시킬 테니까요. 그렇기 때문에 게임상에서 모델링 되는 오브젝트 들은 바운딩 박스의 방향을 고려하여 페이스들의 충분한 분할이 이루어져 있어야 합니다. 쪼개고 쪼개고 해서 수없이 복잡한 형태로 바운딩 박스가 이루어 져야 하는 것이죠.

 

간단한 예로서 캐릭터가 돌아 다니는 복도를 모델링 했다고 봤을 때 복도의 벽이나 바닥, 천정들이 하나의 메쉬로 이루어져 있다면 바운딩박스는 그 복도 전체를 이루는 사각의 박스로만 나타나게 되죠. 그렇게 되면 프로그램은 그 바운딩박스에 충돌을 인식하게 되기 때문에 전혀 엉뚱한 결과들만이 생성될 것입니다.

통째로 인식되어지는 바운딩 박스
각각 플랜으로 나뉘어 페이스 별로 인식되는 바운딩 박스.
3. 내부 예 각각의 페이스 별로 나뉘어 바운딩 박스가 이루어져 있는 것을 볼 수가 있다. 화살표 방향으로 충돌이 이루어 진다.

*바운딩박스의 이해를 돕기 위하여 오브젝트간의 사이를 벌려놓았습니다.

 

위의 두 번째와 세 번째 그림과 같이 각각의 면들이 따로 바운딩박스를 가짐으로 해서 복잡하지만 좀더 정확한 충돌체크가 이루어 지는 것이죠.

 

OBB방식의 경우 좀더 많은 부분에서 충돌체크가 가능합니다. 우리가 바이패드를 생성했을 때 보이는 바운딩박스도 OBB방식 인데요 캐릭터의 각각 부위별로 충돌체크를 하게 되는 경우 바이패드의 바운딩박스를 이용하게 되면 정확한 충돌체크가 이루어 질 수 있겠죠. 그러나 그만큼 계산량이 많아지기 때문에 게임에서 그렇게 쓰기엔 어려운 점이 많겠지만요.

 

오브젝트의 바운딩박스를 이용하는 방법 중 AABB 방식은 고정되어 있는 물체, 건물의 내부 벽 이라던지 천정, 바닥들에 충돌체크를 할 때 사용이 되고 OBB방식은 고정되어 있지 않는 물체, 즉 건물 내부의 가구나 길거리의 자동차, 기타 여러 가지의 고정되어 있지 않는 물체에 적용되는 방식이라고 할 수 있습니다.

 

그 다음의 충돌체크 방법으로는 맥스에서 오브젝트에 자동으로 생성되는 바운딩 박스를 이용한 충돌이 아닌 맥스의 기즈모와 같은 개념의 다각형 상자를 이용하는 방식들이 있습니다. 구(Sphere)나 마름모, 실린더, 타원체, 삼각형등이 있는데 각각의 정해진 형태로 게임환경 내의 복잡한 형태를 단순한 다각형의 형태로 감싸 충돌체크를 하는 방식이죠.

이들은 다양한 형태의 오브젝트들은 단순한 다각형 안에 집어 넣어 충돌체크를 하는 방식이기 때문에 물체의 모양과 일치하지 않아 충돌의 판정이 정확하지 않다는 단점이 있죠.

 

보통의 캐릭터와 같은 복잡한 형태의 경우 캐릭터의 모든 부분에서 충돌체크를 하는 방법이 아닌 이와 같은 다각형의 박스 안에 집어 넣어 주변환경의 오브젝트 상호간에 충돌만을 검사하는 방법을 쓰게 됩니다. 그래서 여러분들이 게임을 하다 보면 몸뚱이는 벽과 충돌체크가 이루어 지는 반면 팔이나 발과 같이 길게 튀어 나오는 부위는 벽을 뚫고 들어가는 상황을 볼 수 가 있는 거죠.

이와 같은 다각형을 이용한 충돌방식은 보통의 온라인 게임의 아웃도어에서 많이 쓰이는 방식입니다. 온라인 게임에서는 fps게임처럼 복잡한 구조의 실내에서의 총탄자국이나 피가 튀어 벽에 남는 등의 리얼한 효과는 많이 쓰이지 않기 때문이죠.

 

그 외에 다른 여러 가지의 충돌방식이 있는데 그 중에서 우리 디자이너들이 가장 편한 충돌체크 방식으로 페이스 충돌체크 방식이 있습니다. 맥스에서의 가장 기본단위인 삼각형의 폴리곤 하나하나에 모두 충돌체크를 하는 방식인데 그 방식을 사용하게 되면 우리들이 복잡한 형태를 고려하지 않고 면을 나눈다거나 하는 그런 노가다를 하지 않아도 되는 방식이죠.

그러나 물론 그 방법을 게임환경에서 모두 사용하게 되면 엄청난 계산량 때문에 정말 고가의 하드웨어가 필요로 하겠죠?  아직까지는 그렇게 쉽게 사용할 수 있는 기술은 아니라고 보여집니다. 페이스 충돌을 사용하는 곳은 지형에서 지면에 충돌체크를 하는 경우 일반적으로 쓰인다고 보면 되겠죠.

이상으로 디자이너가 알아야 할 충돌체크 방식에 대해서 설명을 해봤습니다.

이 내용을 프로그래머가 본다면 웃을지도 모르는데요 일단은 그래픽 디자이너의 관점에서 쓴 거라 부족한 점이 많습니다. 그런 점을 이해를 해 주셨으면 합니다.

 

그럼 두 번째의 주제에 대해서 강연을 하겠습니다.

 

  1. 게임환경 내에서의 버텍스 칼라의 개념

먼저 알아야 할 것은 우리가 알고 있는 일반적인 개념의 광원, 즉 Omni, spot, ambient, direct 와 같은 개념의 라이트들 과 게임환경 내에서의 라이트의 처리 방식은 많이 다르다는 사실입니다. 일반적인 광원의 경우 직접적인 라이팅에 의해서 그 결과물이 나오지만 게임에서는 그 광원에 의한 라이팅의 정보 값을 다시 한번 저장해서 2차적인 맵핑에 의해 라이트의 결과가 나오기 때문입니다. 그래서 게임에서는 버텍스칼라와 버텍스 라이트 그리고 라이트 맵이 따로 존재하는 것이죠. 시간이 충분하다면 세 가지의 방식 모두를 설명 드리겠지만 짧은 시간 동안 설명하기엔 너무 광범위한 부분이라 간단히 버텍스 칼라의 개념과 사용방법에 대한 설명만을 드리도록 하겠습니다.

 

2-1. 버텍스 라이트의 개념

일단 버텍스를 광원으로 삼아 표현하는 방법에는 버텍스 라이트와 버텍스 칼라가 있습니다.

버텍스 칼라와 버텍스 라이트는 거의 같은 방식으로 이루어 지지만 실제론 적용 과정에서는 많은 차이가 있기 때문에 다른 개념으로 분류 했는데요, 버텍스 라이트와 같은 부분은 디자이너 혼자서 표현하기엔 어려운 부분들이 많기 때문에 약간의 개념정도만 설명드리겠습니다. 먼저 버텍스라이트가 가장 많이 쓰이는 부분이 실시간 라이팅 기법에서 사용되어지고 있는데요 간단한 개념을 설명하자면 각 버텍스 노말벡터와 라이트의 방향 연산에 의해 버텍스 라이트값를 결정하는 방법을 쓰고 있습니다.

즉 광원의 방향과 노말의 방향을 계산해서 시야에 보여지는 광원의 값을 계산하는 방식이죠.

버텍스 라이트의 경우 폭탄이 터지거나 할 때 번쩍이는 효과, 그리고 총을 쏠 때 총구 화염에 의해 주변이 번쩍이는 효과, 그리고 흔들리는 가로등 불빛에 의해 일렁이는 효과 같은 부분에 많이 쓰이고 있죠. 참고해야 할 부분은 버텍스 간의 간격이 지나치게 넓을 경우 즉 광원이 들어간 버텍스의 광원의 범위 밖으로 버텍스의 간격이 벌어질 경우 그 라이팅의 품질은 상당히 저하되어 버립니다. 즉 지나치게 넓은 범위가 밝아지는 일이 생기는 거죠. 그래서 버텍스 간의 광원의 범위안에 충분한 간격을 유지해야 합니다.

그렇다고 버텍스 간의 간격을 아주 촘촘히 한다면 광원의 품질은 좋아 지겠지만 시스템사양엔 엄청난 무리가 가겠죠? 그래서 적당한 간격의 버텍스를 정하는 것도 상당히 중요한 부분입니다. 이 부분에 대한 것은 다음에 시간이 되면 자세히 다루도록 하겠습니다.

 

2-2. 버텍스 칼라의 개념

그리고 버텍스 칼라의 개념에 대해서 설명을 드리도록 하겠는데요, 버텍스 칼라또한 사용범위가 상당히 넓습니다. 간단한 예를 들어보면……

 

1. 빛이 들어오는 창문이나 형광등, 가로등이나 방안의 램프와 같은 광원에 버텍스 칼라를 지정해 광원의 효과를 준다. 2. 실내의 음영에 따른 분위기 연출에 사용된다. 3. 어두운 분위기의 창고에 가느다란 빛이 흘러 들어 오거나 창문에 빛이 흘러 들어와 바닥 에 비치는 효과. 2. 플랜이나 기타 오브젝트를 사용하여 이펙트를 표현할 때 보다 강렬한 효과를 주기 위해 버텍스에 칼라값을 준다. 3. 헬기의 서치라이트나 자동차의 라이트를 표현할 때 사용된다 4. 게임환경내에서 캐릭터의 양감을 증가시키는데 사용되어진다. 5. 캐릭터 모델링 후 맵좌표 펼친 후 적용하면 맵핑소스 제작시 광원의 방향을 알기 쉽게하여 맵소스 그리는데 도움이 될 수 있다.

등 이 있습니다.

5번과 같은 경우 버텍스 칼라를 디자이너들이 편법으로 사용하여 편의를 도모한 경우 입니다.

 

 

 

 

 

목록

Hugo로 만듦
JimmyStack 테마 사용 중