2012-12-18 3 views
2

삼각형에서 삼각형 스트립 또는 삼각형 팬으로 형상을 병합하면 많은 정점을 처리해야하기 때문에 3D 렌더링의 성능을 향상시킬 수 있다는 것을 여러 번 읽었습니다 ... VBO 사용시 이러한 모든 고려 사항이 관련되어 있습니다. 인덱싱 된 렌더링?줄무늬 기술로 성능이 향상됩니까?

예를 들어 나는 삼각형으로 구성된 프리미티브 (구)를 가지고 있습니다. 나는 유일한 정점만을 저장하는 VBO를 가지고 있으며 VBOX (GL_ELEMENT_ARRAY_BUFFER에 바인딩 됨)를 사용하여 정점에서 프리미티브를 구성하는 인덱스를 저장합니다. 모든 렌더링은 glDrawElementsInstanced()을 통해 수행됩니다. 일부 스트라이핑 기술을 적용하고 프리미티브를 GL_TRIANGLE_STRIP으로 렌더링 한 후 성능이 향상됩니까?

OpenGL 파이프 라인은 모든 버텍스 작업 후 및 래스터 화 이전에 프리미티브를 어셈블합니다. 짐작할 수 있듯이, 드라이버가 모든 꼭지점에 대한 꼭지점 (기하학 등) 쉐이더를 먼저 호출하고 그 후에 만 ​​삼각형을 얻기 위해 인덱스 배열을 사용하기 시작한다는 것을 의미합니다. 사실이라면 스트라이핑은 기본 다시 시작에 대한 추가 검사가 적용되므로 프로세스 속도를 저하시킬 수 있습니다.

나는 몇 개의 줄무늬 라이브러리를 찾으려고했지만, 몇 년 전에 버려진 모습을 발견했습니다. 그래서 사람들은 갑자기이 지역에 관심을 잃었습니다 ...

이러한 모든 고려 사항을 감안할 때 스트라이핑 할 필요가 없습니다. 나는 맞습니까? 아니면 중요한 것을 놓쳤습니다. 현대 하드웨어에서 스트리핑해야합니까?

답변

2

일반적으로 아니오라고 말하면 트라이 스트립을 사용하지 않을 것입니다. 최신 하드웨어는 인덱싱 된 데이터를 기대하며 최적화되어 있습니다.

인덱스를 임의로 액세스 할 수 있다는 것은 아닙니다. 데이터가 캐시 될 때 위치가 중요합니다. 삼각형을 스트립 순서로 배열하면 약간의 개선이있을 수 있습니다.

성능은 삼각형 설정 및 정점 처리에 대해 실제로 소비되는 시간과 실제 음영 처리량에 따라 달라집니다.

모든 것과 같이 - 자신의 경우에 맞는 것을보기 위해 퍼포먼스를 분석 해보세요.하지만 PS2 이후 스트라이핑 삼각형을 사용하지 않았습니다.

+0

감사합니다. 좋은 인덱싱 된 배열을 생성하는 방법에 대해 알려줄 수 있습니까? 예를 들어 삼각형 수프가 있고 데이터의 지역성을 고려하여 모든 중복 된 삼각형을 제거해야합니다. 좋은 알고리즘이 있습니까, 아니면 가장 좋은 방법은 줄무늬를 만들고 결과로 지역성을 얻는 것입니까? –

+3

@OlegTitov 모든 정직한면에서 우리는 우리 데이터에 아무 것도하지 않습니다. 나는 수출 된 모델 데이터가 완전히 무작위 인 경우가 드물기 때문에 우연히 충분한 지역을 얻을 수 있다고 생각합니다. 나는 거기에 실제 성능 병목 현상이 있다는 것을 알지 못한다면 생각조차하지 않을 것입니다. – JasonD

+2

@JasonD : 그 외에도 데이터를 실제로 현지화해야하는 경우, 얼굴을 8 진수로 채우고 트리의 깊이 우선 탐색에서 작성하십시오. – datenwolf

관련 문제