최신 GPU에서 정점 데이터를 구성하는 가장 효과적인 방법


9

내가 정점으로 구성 모델, 각 말해봐 position, normal, tangent, 그리고 texcoord삼각형은 인덱스 트리플에 의해 지정되는 속성을.

정점 속성에만 중점을두면 배열의 구조와 구조의 두 가지 광범위한 전략을 알고 있습니다. 또한 주어진 배열에 대한 속성의 메모리 지역 (및 캐시 지역)을 증가시키기 때문에 구조 배열이 선호된다고 들었습니다.

이것이 실제로 성능을 향상시키는 경우입니까? 내가 생각할 수있는 주요 방법은 래스터 라이저가 캐시에서 오랫동안 제거 된 정점 데이터를 획득 해야하는 정점 색인입니다. 정점 데이터 액세스가 이와 같이 임의적이라면, 동일한 캐시 라인에서 정점에 대한 모든 속성을 유지하면 확실히 더 빨라질 것이지만 삼각형 사양의 순서를 최적화하여 대부분 완화 할 수있는 문제는 아닌가?

또한 현대 GPU가 여러 유형의 구조 벡터보다 동일한 유형의 긴 벡터를 언 패킹하는 것이 더 나을 수 있다는 것을 이해합니다. 그러면 인덱스 순서가 최적화 된 경우 배열 구조 레이아웃이 동일한 정점 데이터의 배열 배열 레이아웃을 지속적으로 능가 할 수 있습니까?


4
당신은 단순히 그것을 시도하고 귀하의 경우에 가장 빠른 것을 볼 수 없습니까?
user1118321

정점 셰이더에 모든 정점 속성이 제공되므로 메모리에 그룹화하면 캐시가 더 쉬워 지므로 인덱스 메시에 대해 배열 배열이 더 효율적이라고 생각했을 것입니다.
PaulHK

구조의 데이터 유형에 따라 vec4s와 floats는 서로 잘 어울립니다. 다른 유형은 그다지 좋지 않습니다
PaulHK

2
@ user1118321 개별 벤치마킹 실험은 훌륭한 관행이지만, 더 광범위한 이론적 논의에서 더 장기적인 가치가있을 수 있으며 아마도 버텍스 풀링 하드웨어가 어떻게 작동하는지에 따라 일반적인 관행이 확립 될 수 있습니다.
Christian Rau

답변:


2

죄송합니다, 귀하의 질문 스레드에 의견을 추가하려고했지만 너무 정교 해졌습니다. 내 개발 경험은 DX 11 관점에서 봤으므로 OpenGL에서 일부는 유지되지 않을 수 있습니다.

데이터의 메모리 위치는 확실히 중요한 역할을합니다. 그러나 아시다시피 데이터 너비와 관련하여 몇 가지 다른 항목이 있습니다. 나는 몇 개의 GPU를 가지고 있으며 특정 티핑 포인트를 기반으로 일부 성능에서 현저한 성능을 발휘했습니다. 예를 들어, 이전의 AMD r290에서 내가 기억한다면, 기본적으로 1 이상의 추가 비용없이 정점 버퍼에 최대 4 개의 float4를 전달할 수 있지만,> 4를 게시하면 측정 가능한 하락이 발생합니다 (프레임) 율). 이것은 순전히 나의 추억을 벗어난 것이므로 일화가 최고입니다. 그러나 GPU 아키텍처는 항상 변화하고 있으며 오늘날 성능을 향상시키는 틈새 기술은 내일의 성능 저하를 초래할 수 있습니다. 나는'

말했듯이 정점 순서에 대한 질문을 받았으며 분명히 도움이 될 것입니다. 이를 인덱스 버퍼와 결합하면 하드웨어가 이미 계산 된 정점을 최적화하고 캐시 할 수 있습니다. 당신은 확실히 당신의 생각에 따라 주문 된 삼각형 스트립 등에서 더 많은 이익을 얻을 수 있습니다. 내가하는 대부분의 모델 렌더링은 인스턴스화가있는 indice / vertex 기반 최적화 모델이며 순환 모션 효과 (예 : 나뭇 가지)에 대해 소량의 조회를 사용합니다.이 경우 트리의 전체 분기가 동일한 값을 찾습니다. 캐싱도 여기서 활용할 수 있습니다.

내가 요약해서 말할 수있는 것은 :

  • 게임 / 애플리케이션을 아직 개발하고있는 동안 초기에 최적화를 지나치게 생각하지 말고 조기에 최적화하지 마십시오. 돌아와서 새로운 기능을 추가해야하는 경우 모든 노력을 잃을 수 있습니다. 당신은 내 습관일지도 모릅니다.
  • GPU 아키텍처는 다양하며 하나의 장점은 다른 부분의 약점을 반영 할 수 있습니다. AMD와 Nvidia는 개발자가 게임을 아키텍처에 맞게 최적화하도록하는 것으로 유명합니다. 그 이유는 각각 장점과 단점이 있습니다. 중간 단계의 개발이 가장 좋은 방법 일 수 있습니다. 하드웨어 공급 업체 기반 기능을 사용하지 마십시오 (여기서 의견). (또한 일부 압축 형식은 AMD에만 존재합니다).

이것들은 내가 가진 몇 가지 생각과 경험입니다. 이 주제에 대해 많은 책을 가지고 있습니다. 나는 당신이 제안하는 것을 많은 사람들이 처방하는 것을 보지 못했지만 그것이 잘못되었음을 의미하지는 않습니다. 행운을 빕니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.