편집 : 이것은 내 자신의 학습 경험을위한 것이며,이 질문을하는 것은 성능상의 이유가 아닙니다.
이것은 Minecraft와 같은 지형 엔진과 관련이 있습니다. 블록에 청크를 저장합니다 (청크에 16x256x16 블록). 청크를 생성 할 때 여러 절차 기술을 사용하여 지형을 설정하고 객체를 배치합니다. 생성하는 동안 전체 청크 (단단한 지 여부)에 대한 하나의 1D 배열과 단단한 블록의 별도의 1D 배열을 유지합니다.
생성 후, 나는 이웃을 확인하는 단단한 블록을 반복하여 이웃이없는 블록면 만 생성합니다. 나는 자신의 목록에 생성 할 얼굴을 저장합니다 (가능한 얼굴 / 법선 당 하나의 6 개의 목록). 청크를 렌더링 할 때 카메라의 현재 청크에있는 모든 목록을 렌더링하고 다른 모든 청크에있는 카메라를 향한 목록 만 렌더링합니다. 6 개의리스트를 모두 하나의 버퍼에 저장 한 다음, 그리는 범위를 간단히 변경합니다.
Andrew Russell이 제안한 이 작은 쉐이더 트릭 으로 2D 아틀라스를 사용하여 비슷한 얼굴을 완전히 병합하고 싶습니다. 즉, 동일한 목록에 있거나 (동일한 일반) 서로 인접하고 동일한 조명 수준을 갖는 경우 등입니다. 나는 여전히 사각형으로 끝나지만 정점 수를 50 % 쉽게 줄일 수 있다는 것을 알고 있습니다. 내 추정이 정확하면 더 좋습니다.
내 가정은 6 개의 목록을 각각 축에 따라 정렬 한 다음 다른 두 축으로 정렬하는 것입니다 (블록 상단의 목록은 Y 값, X, Z 순으로 정렬됩니다).
이것만으로도 얼굴을 쉽게 병합 할 수는 있지만 가능한 한 스트립을 병합하는 것 이상을 병합하려고합니다. 이 욕심 많은 메시 알고리즘을 읽었 지만 이해하는 데 많은 어려움이 있습니다.
내 질문 : 설명 된 것처럼 얼굴 병합을 수행하려면 (동적 지형 / 조명에 대한 나쁜 생각인지 무시) 구현하기가 더 쉬운 알고리즘이 있습니까? 또한 욕심 많은 알고리즘을 훨씬 더 간단한 방법 (링크 또는 설명)으로 안내하는 답변을 행복하게 받아 들일 것입니다.
구현하기가 쉽거나 스트립을하는 것보다 조금 나아도 성능이 약간 저하되지는 않습니다. 나는 대부분의 알고리즘이 쿼드가 아닌 삼각형에 초점을 맞추고 2D 아틀라스를 사용하는 방식을 사용한다고 생각합니다. 현재 기술을 기반으로 삼각형을 구현할 수 있는지 모르겠습니다.
추신 : 나는 덩어리 당 이미 절두체를 뽑았으며 설명 된대로 단단한 블록 사이의 면도 컬합니다. 나는 아직 폐색하지 않고 결코 못할 수도 있습니다.
* 편집 : 나는 아마도 이름이있는 내 자신의 작은 기술을 구현했지만 간단하게 축에 따라 정렬 된 6 개의 목록, 블록 유형 및 조명 수준으로 정렬합니다. 나는 그것들을 반복하면서 새 직사각형을 만들고 동시에 성장합니다 (특정 축을 향한 치우침). 확실히 최적은 아니지만 실제로 매우 빠르며 평균적으로 평균 50 % 가까이 내 정점 수를 줄입니다. Byte56의 의견은 실제 답변으로 생각되는 옷장이지만 답변 / 현상금으로 선택할 수는 없습니다.
최적화없이 많은 초기 지형을 생성 한 후이 문제를 처리하는 빠르고 간단한 방법은 다음과 같습니다. 주어진 모든 정사각형이 동일한 이미지, 조명 수준, 법선 등이라고 가정하면 각 색상은 렌더링 할 다른 쿼드입니다. 내 목록을 원래대로 정렬하면 매우 쉽고 빠르게 접근 할 수 있습니다.