2017-05-10 11 views
1

높이 맵의 개별 픽셀/값은 다양한 높이의 정점으로 이루어진 2D 그리드 만 제공하므로 쿼드로 연결해야합니다. 쿼드의 모든 4 개의 꼭지점이 동일 평면 상에 있으면 충분하지만, 그렇지 않을 때는 분할 규칙이 필요합니다. 한 가지 방법은 짧은/긴 가장자리를 선택하는 것입니다, 다른 하나는 높은 것을 사용하는 것입니다. 다른 하나는이 4 배 높이의 평균을 계산하는 것입니다. 최적의 것과는 거리가 먼 삼각형.heightmap에서 만든 지형에 대한 쿼드를 분할하는 올바른 방법은 무엇입니까?

쿼드를 분할하는 올바른 방법은 무엇입니까? 아니면 쿼드에 대한 대안이 있습니까?

답변

1

일반적으로 분할은 로컬 서페이스 곡률 컬에 정렬되어야합니다. 단순 대각선 분할은 가우스 곡률이 0 인 평면 (평면, 원통)에서 작동하지만 0이 아닌 가우스 곡률에 대해서는 중간 점 세분 분할 세분화를 권장합니다.

1

나는 쿼드를 전혀 사용하지 않을 것입니다. 실용적인 지형 하이트 맵의 경우, 높이가 결코 동일 평면 상에 있지 않을 것이며, GPU는 쿼드에서 삼각형을 선호하지 않습니다. 실제로는 내부에서 2 개의 삼각형으로 쿼드를 나눕니다.

그러나 분할 규칙에 대해서는별로 신경 쓰지 않습니다. 터 레인 렌더러에서의 작업에서 경험 한 것 중 가장 좋은 방법 중 하나는 128x128 정점과 같은 작은 2D 삼각형 메쉬 타일을 필요에 따라 반복하고 타일 당 하나의 높이 맵을 텍스처로 전달하는 것입니다.

더 일반적인 3D 메쉬 대신 동일한 2D 타일을 반복하는 이유는 3D 메쉬를 사용하면 3xFP32 값 (정점 당)이 필요할 것이기 때문에 메모리 사용량과 메모리 대역폭이 많이 줄어들 것입니다. 4xFP32 (128 비트)로 채워지 겠지만, 내 2D 타일 접근 방식을 사용하면 2xU8 (16 비트) + 1xFP16 (16 비트) = 32 비트가 필요합니다. 그것은 4 배의 메모리 대역폭 감소이며, 메모리 사용은 훨씬 더 좋아질 것입니다 : 8 배 적은 메모리 사용. 지형 렌더러에서는 불가능할 정도로 매우 복잡한 조각 쉐이더가 없으면 대부분의 GPU에서 병목 현상이 발생합니다.

쿼드 트리 (LOD 용)와 노멀 맵을 결합하면 매우 우수한 품질/성능 비율을 갖게됩니다.

+0

2D 삼각형 메쉬가 어떻게 작동합니까? 예제를 제공하거나 링크 할 수 있습니까? 또한 쿼드라고 할 때 쿼드를 구성하는 두 개의 삼각형 쌍을 의미합니다. 즉 CPU에서 쿼드 분할을 수행하고'GL_TRIANGLES'로 렌더링합니다. – Wingblade

+0

링크가 없지만 2D 삼각형 메쉬는 다음과 같은 메쉬입니다. http://photos1.blogger.com/blogger2/2483/1050461954730077/320/Mesh.0.jpg 규칙적인 메쉬이며 분할은 항상 같은 방향입니다. 각 정점의 높이는 2D 텍스처 인 하이트 맵을 샘플링하여 계산됩니다. – dv1729