복셀 지형을 생성하려면
(a) 일반적인 방법은 Perlin 노이즈를 사용하여 하이트 맵을 생성하는 것입니다. 하이트 맵은 기본적으로 픽셀의 어두움 또는 밝음으로 다른 높이를 나타내는 단색 이미지입니다.
하이트 맵 이미지에서 해당 픽셀의 밝기에 따라이 하이트 맵의 개별 픽셀을보고 서로 다른 (x, y) 위치에서 다른 높이 (z 축)까지 복셀의 "스택"을 만듭니다. Perlin 노이즈 이미지가 매끄 럽기 때문에 (어두운 곳에서는 날카로운 가장자리가 없음) 지형이 부드럽게 굴러갑니다.
(b) 다른 다면체로 풍경을 만들어 점진적으로 구성 할 수 있습니다. 원하는 복셀 모양에 가까운 다면체 벡터 모양을 만듭니다. 3D 다면체 방법 (대부분 볼록 헐)을 사용하여 월드 그리드의 어느 지점이 해당 다면체 볼륨 내에 있는지 확인하십시오. 예를 들어, 공간에 피라미드를 정의하십시오. 피라미드 볼륨과 비교하여 월드 공간의 로컬 영역에있는 모든 지점을 확인한 후 그 지점에 속하는 지점을 알 수 있으며 해당 셀을 "현재"로 설정하여 빈 공간이 아니라 복셀이됩니다. 이제 공간에 복셀 피라미드가 있습니다. 이러한 방식으로 지형을 형성 할 때까지 모든 종류의 모양을 계속 추가 할 수 있습니다.
(c) ( b 와 동일 ) 모델링 도구를 작성하십시오. Voxatron 은 이것이 어떻게 보일지를 보여줍니다. 이것은 대체 세계 (편집자)에서 복셀 양식을 만든 다음 실제 런타임 게임 세계로 가져 오는 것입니다. Voxlap 은 복셀을위한 최초의 오픈 소스 편집기를 가지고 있다고 생각 합니다. 개별 복셀을 배치하거나 다양한 모양 / 볼륨의 복셀 "브러쉬"를 사용하여 복셀을 세상에 그릴 수 있습니다.
자신 만의 복셀 기반 게임을 구성하는 데 필요한 것
복셀 도로는 적어도 현재는 쉽지 않기 때문에이 섹션을 포함합니다. 최근에, 큰 플레이어들이 렌더링 및 물리학 응용 프로그램에 대해 복셀 엔진에 대한 많은 연구가 다시 한 번 이루어지고 있습니다.
생 복셀로부터 세계를 동적으로 구성하는 것이 세계 건설에 대한 절차 적 접근 방식이며 본질적으로 단순하지 않기 때문에 단순성 이 문제가 될 수 있습니다 . 죄송합니다. 여기에는 몇 가지 기술 용어가 있습니다. 복셀 엔진을 작성하는 것은 매우 심각한 일이며, 특히 공간 개념 측면에서 게임 엔진 개발의 여러 영역에 대한 지식이 필요합니다. 이는 3D 벡터 수학, 행렬 및 기본 미적분학을 어느 정도 합리적인 수준으로 이해하는 것을 의미합니다.
복셀 엔진이 정확히 널리 퍼져 있지 않기 때문에 "복셀 지형의 생성"에는 작동 할 컨텍스트가 필요합니다. 복셀 엔진의 작동 방식에 대한 기본 설명을 진행합니다.
복셀은 세계의 기본 빌딩 블록입니다. 이들의 위치는 (벡터 기반 3D 게임에서 사용되는) 연속 부동 소수점 공간이 아닌 정수 인덱스 3D 그리드 (배열)로 정의됩니다. 이것들은 당신의 세상의 "원자"가 될 것입니다. 그것들은 Minecraft와 같은 게임에서와 같이 3 피트가 될 수도 있고, 분자처럼 조금 더 많은 수로 묶이지 않으면 가상 캐릭터의 눈이 실제로 볼 수있는 것보다 작을 수 있습니다. 두 가지 종류가 있습니다 :
- 큐빅 메쉬 기반 복셀 ( 예 )-최신 그래픽 기술로, 단순성에 사용되며 최신 그래픽 기술과 함께 쉽게 사용할 수 있습니다. MineCrat 및 Dungeon Keeper와 같은 게임에 사용됩니다.
- 포인트 복셀 ( example , example )-원래 복셀 각 영역은 공간에서 충돌 할 수있는 개별적인 점이지만 구형 경계 볼륨으로 둘러싸여있을 수 있습니다. 그것들은 더 간단하므로, 당신은 당신의 세계에서 더 많은 것을 가질 수 있고, 따라서 당신은 그것들을 더 작게 만들 수 있습니다. 이것은 일반적으로 유리합니다. 이것을 사용한 두 게임은 Comanche와 1990 년대 자정의 주님의 리메이크였습니다.
어느 쪽이든, 세계에서 복셀을 조작하는 방법은 다음과 같습니다.
세상에서 물체를 만들고 움직이려면 위에서 언급 한 수학적 도구가 필요합니다. 예를 들어 벽을 작성하려면 : 벡터를 사용하여 3D 공간에서 적절한 치수의 상자를 구성합니다. 행렬 수학을 사용하여 상자를 3D 세계에서 원하는 회전 및 위치로 변환합니다 (연속 벡터 공간에서). 복셀 엔진의 경우 추가 단계는 이제 3D 다면체 알고리즘을 사용하여 회전 된 공간에 어떤 복셀이 들어가는 지 결정하는 것입니다.
본질적으로, 이것은 당신이 세상에서 대부분의 물건을 만드는 방법입니다. 그 외에도 Maya 또는 3DS Max와 같은 방식으로 캐릭터를 "모델링"하는 고유 한 도구를 작성할 수 있습니다. 그러나 점, 모서리 및면 대신 복셀을 사용하여 캐릭터를 모델링하므로 방법이 크게 다릅니다. 월드에서 이러한 객체를 회전하기로 결정한 경우 이와 유사하게 행렬 변환을 사용해야합니다.
파괴 가능한 지형은 선택한 방법에 따라 한 번에 하나의 복셀을 제거하거나 대량의 복셀에서 CSG (Constructive Solid Geometry) 작업을 사용하여 미리 정의 된 볼륨에 따라 제거 할 수 있습니다. 예를 들어, 바위를 통해 레이저 빔을 촬영하는 경우 빔이 바위를 통해 촬영되는 원통 볼륨을 사용하여 복셀을 뺄 수 있습니다. CSG는 복셀 세계를 형성하는 3D 공간 그리드를 사용하고 다른 그리드 (이 경우 레이저 빔)에 대해 기본 그리드 (이 경우 암석) 섹션의 모든 셀을 검사하는 비교적 간단한 프로세스입니다.
Vigil이 모래에 대한 그의 의견에서 암시 한 것처럼 물질적 흐름을 갖기 위해서는 유체 역학과 세포 자동화를 살펴 봐야합니다. 이것들은 본질적으로 복셀 세계이기도하다. 이것들은 최첨단 주제이며, 정의 된 복셀 엔진에는 필요하지 않으므로, 나는 이것을 당신의 연구를위한 "스텁"으로 남겨 두겠습니다.
CSG와 유체 역학은 마지막으로 최적화에 도움이됩니다. 현재 개발 복셀 엔진은 거의 독점적으로 알 수 있듯이, 다양한 해상도로 복셀 공간을 세분화하는 방법입니다 스파 스 복셀 옥트리 (SVOs)를 사용하게 이 비디오에 곧 Atomontage 엔진을 과시합니다. 하나의 방대하고 균일 한 그리드를 처리하는 데 필요한 처리 오버 헤드로 인해 octree / SVO를 사용하는 것이 최적화 선택보다 더 필요합니다. octree는 기본적으로 트리 (지향 비순환 그래프)로, 해당 노드가 나타내는 공간에 물리적 볼륨이 포함되어 있는지 여부에 따라 모든 노드에 8 개 또는 0 개의 자식 노드가 있습니다. 옥트리가 공간을 세분화하여 복셀을 형성하는 방법을 보여주는 다이어그램이 여기에 있습니다 .
내가 아는 최고의 오픈 소스 복셀 구현은 Voxelstein3D 에 사용 된 Ken Silverman의 Voxlap Engine 입니다. C ++로 작성되었으며 지형 변형을위한 CSG 작업을 구현합니다.