면당 법선 만 필요하고면의 texcoord가 엄격하게 0/0, 0/1, 1/0, 1/1 (또는 레이아웃에 적합) 인 경우 8 개의 정점으로 큐브를 구성 할 수 있습니다 30 (다시 시작한 스트립) 또는 36 (목록) 인덱스 중 하나입니다. 정점 셰이더의 SV_VertexID를 기반으로하는 상수 배열 조회를 사용하여 법선과 텍스 코치를 가져옵니다.
이렇게하면 정점 버퍼에 texcoord 또는 법선을 포함 할 필요가 없으므로 훨씬 더 많은 메모리를 절약 할 수 있습니다.
더 나아가서 큐브 당 24 버트로 계속 갈 수 있지만 인스턴스를 사용할 수도 있습니다. 각 큐브는 정점 버퍼 (1x1x1)에서 고정 크기가되며 인스턴스 별 데이터로 스케일링 계수와 위치 (큐브가 회전하지 않는 것으로 가정)를 갖게됩니다. 비 회전의 경우 일회성 비용은 24 버트이지만 각 큐브는 완전히 지정하기 위해 6 개의 플로트가 필요합니다. 회전하는 경우 16 개의 부동을보고 있지만 상당한 절약입니다 (이 경우 매트릭스 변환에서 CPU 측 병목 현상이 발생할 가능성이 높습니다)-비 회전 케이스는 즉시 매트릭스를 구성합니다 정점 셰이더-정점마다 수행 되더라도 너무 멍청해서 걱정할 필요가 없습니다.)
면별 텍스처의 경우 텍스처 배열을 사용하십시오. 물론 배열의 각 텍스처가 동일한 크기인지 확인해야하며 배열 자체를 변경 해야하는 경우 여전히 현재 배치를 중단해야하지만 그렇지 않으면 제대로 작동합니다. 각면에 사용할 배열 슬라이스를 정의하는 정점 정의에 세 번째 texcoord를 추가하십시오.
GS가 필요하지 않으며 지오메트리 쉐이더 스테이지를 활성화하면 자체 오버 헤드가 추가되므로 GS를 사용하는 것보다 빠르게 실행해야합니다.
나는이 방법을 사용하여 많은 큐브를 그리는 엔진에 벤치 마크 코드를 작성했으며 프로세스를 최적화하기 위해 다른 작업을 수행하지 않고 60fps를 지우면서 60fps를 지우면서 쉽게 씹을 수 있습니다. . 분명히 나는 그것들을 조명하거나 텍스처링하지는 않지만, 알파 블렌딩을 활성화하고, 뒷면 컬링을 비활성화하고, 전체적으로 "최적화를 위해 다른 것을하지 않는"부분과 균형을 유지하므로, 당신은 종류의 합리적인 아이디어를 제공해야합니다 이 방법으로 볼 수있는 야구장.