100,000 개의 삼각형으로 이루어진 대형 실내 장면 렌더링을 위해 WebGL의 실용성에 대한 아이디어를 얻으려고합니다. 이 삼각형은 많은 대상에 걸쳐 분포하며 장면에 많은 재료가 있습니다. 반면에 움직이는 부분은 없습니다. 그리고 재질은 텍스처 맵을 기반으로하는 비교적 단순한 경향이 있습니다. 텍스처 맵 공유가 많이 있습니다. 예를 들어 장면의 모든 의자는 공통 맵을 공유합니다. 하나의 머티리얼에 최대 세 개의 텍스처가 중첩 된 멀티 텍스쳐가 있습니다.쉐이더/상태 변경을 최소화하여 WebGL 성능을 최적화하기위한 지침
나는 약간의 실험과 읽기를 해왔으며, 렌더링 패스 중에 스위칭 재료가 자주 느려지는 것을 모았습니다. 예를 들어, 200K 삼각형을 가진 씬은 오브젝트가 디스플레이 될 때마다 새로운 머티리얼이 설정되었다고 가정 할 때 10 개 또는 1000 개의 오브젝트가 존재하는지에 따라 중요한 성능 차이를 갖습니다.
따라서 성능이 중요하다면 장면 전환을 최소화하도록 장면을 재료별로 정렬해야합니다. 내가 찾고있는 것은 다양한 상태 변화의 오버 헤드를 생각하는 방법에 대한 가이드 라인이며, 가장 큰 장점은 어디에서 얻을 수 있습니까? 예를 들어,
- 는
gl.useProgram()
,gl.uniformMatrix4fv()
,gl.drawElements()
- 내가 쉐이더 스위칭을 최소화하기 위해 ubershaders를 작성하려고한다, 말의 상대적 성능 비용은 무엇인가?
- 나는 내가 그 주행 거리 브라우저, OS 및 그래픽 하드웨어에 따라 달라질 수 있습니다 실현
gl.drawElements()
전화
의 수를 최소화하는 형상을 집계 시도해야합니다. 그리고 저는 또한 영웅적 대책을 찾고 있지 않습니다. 이미 장면을 빠르게 만드는 경험이있는 사람들의 지침. 이전에 고정 파이프 라인 OpenGL 프로그래밍에 대한 경험이있는 동안 WebGL/OpenGL ES 2.0 방식에 익숙하지 않았다고 덧붙입니다.
감사합니다. 다소 도움이됩니다. 적어도 나는 "배치"라는 새로운 용어를 배웠다. 그리고 검색 'nvidia "일괄 처리, 일괄 처리, 일괄 처리"는 유용한 정보를 가져옵니다. 게임 커뮤니티는 분명히 오랫동안이 물건에 대해 고민하고 있습니다. – brainjam