렌더링하기 전에 객체 정렬


10

장면 그래프를 구현하려고하는데 내가 본 모든 기사에서 객체 정렬에 대해 이야기합니다. 예를 들어 "재료"를 기준으로 개체를 정렬합니다. 이제 내가 앉아서 그것을 구현하기 시작할 때까지, 나는 이해하기 때문에 이것을 당연한 것으로 생각했습니다. 그러나 이제 정렬이 실제로 어떻게 바뀌는 지 궁금합니다.

내 엔진에는 UBO 관리자가 있으며, 시간, 카메라 및 프로젝션 매트릭스 및 라이트 만 포함하는 현재 프로그램간에 공유 할 데이터를 저장하는 데 사용합니다 (어떤 조명이 영향을 미치는지 걱정하지 않습니다) ATM에 반대 함).

이제 각 모델마다 모델을 월드 매트릭스 유니폼으로 변경해야하지만 정렬이 변경되지 않습니다. 이 매트릭스를 바꾸는 것에서 각 객체에 대한 재료를 설정하는 것으로의 도약은 나쁜가?

파이프 라인에서 무언가를 변경할 때마다 플러시되고 성능 문제가 발생할 수 있다는 것을 어딘가에서 읽은 것을 모호하게 기억합니다. 그러나 각 드로잉 호출마다 어쨌든 월드 매트릭스에 모델을 설정하고 있습니다. 그래서 이것에 대해 어떤 의미가 있습니까?

BTW는 유니폼을 변경하고 glBufferSubData를 호출하는 것이 더 비싸거나 적은지에 대한 정보가 있습니다.


3
빠른 대답, 예. 매트릭스를 변경하는 것에서 각 객체의 재료를 설정하는 것으로의 점프는 그렇게 나쁩니다. 이 시점에서 계속 진행하기 전에 플랫폼에 맞는 OpenGL 성능 측정 도구에 대해 알아보십시오. 성능 도구를 사용하면 다양한 기술을 쉽게 측정하고 렌더러 요구에 가장 적합한 것을 찾을 수 있습니다. 게다가이 툴들은 당신의 경력 전체를 지속시켜 줄 것입니다.이 렌더러는 ... ;-)
Patrick Hughes

@PatrickHughes 굉장합니다, 고마워요, 나는
분명히

답변:


4

재료를 함께 배치하기 위해 정렬하고 싶습니다. 가능하면 인스 턴싱을 사용하여 형상을 일괄 처리 할 수도 있습니다 (예 : 동일한 객체의 X 번호가있는 경우).

깊이별로 정렬하는 것도 여전히 가치가 있습니다. 투명한 개체를 위해 앞뒤로 정렬해야합니다 (제한된 상황에서 필요를 제거하는 몇 가지 고급 기술은 무시).

초기 Z가 장면의 프래그먼트 셰이더 오버 헤드를 크게 줄일 수 있도록 불투명 한 오브젝트를 앞뒤로 정렬하는 것도 가치가 있습니다.


3
불투명 한 / 투명한 객체를 주문하는 것은 복잡한 상황에서는 쉽지 않습니다 (임의의 규칙 없이는 불가능한 시점까지). gl 호출을 줄이는 것과 동일한 목적으로 텍스처별로 그룹화 할 수도 있습니다.
Darkwings

통화를 일괄 처리하고 그리기 호출을 줄이려면 텍스처 별 순서가 필요합니다. 정렬은 그리기 호출을 줄이는 것과 아무 관련이 없습니다. 정렬은 실제로 올바른 렌더링 (투명한 객체의 경우)을 가져 오거나 조각 프로세서 오버 헤드 (불투명 한 객체의 경우)를 최소화하는 것과 관련이 있습니다. "복잡한 (complex)"이라는 것은 문제입니다. 그러나 게임 엔진 그래픽 프로그래머가 게임을 실제 하드웨어에서 실제로 재생할 수 있도록하기 위해 비용을 지불하는 것입니다. 정렬 된 불투명 오브젝트와 정렬되지 않은 불투명 오브젝트 사이의 하드웨어 효율성은 상당히 클 수 있습니다.
Sean Middleditch

opengl.org/wiki/Transparency_Sorting 이것이 '임의 규칙'의 의미입니다. 복잡한 경우에 대한 객관적인 '정확한'분류는 없습니다. OP는 '정렬'과 '순서'에 대해 '투명성에 관계없이'소재 별 분류 '를 명시했으며, 두 가지 모두 성능에 영향을 미치기 때문에 텍스처에도 동일하게 적용되었습니다.
Darkwings

솔직히 말해서, 이런 종류의 문제가 실제 게임에서 발생하는 것을 본 적이 없습니다. 이러한 예제는 투명한 물체가 일반적으로 대략 크기가 크고 충돌이 상당히 "복합"한 곳에서 실제 물체가 실제로 어떻게 작동하는지 반영하지 않습니다. 두 경우 모두 "어렵다"는 사실이 그 필요성을 바꾸지는 않습니다. 또한 재료별로 배치가 중요하다는 점을 지적했으며 "정렬이 도움이되지 않습니다"어설 션을 반대하는 인스턴스를 언급 했으므로 내 대답에 잘못 발견 된 것이 있는지 확실하지 않습니다.
Sean Middleditch

그렇다고해서 그 답이 잘못되었다는 의미는 아니며 '정렬이 도움이되지 않는다'고 말한 적이 없습니다. 나는 객관적인 올바른 해결책이 존재하지 않는 경우가 있다고 언급 했으므로 분명히 임의의 규칙을 사용하여 해결책을 찾아야합니다. 그것들은 2 개의 완전히 다른 진술입니다.
Darkwings

3

깊이별로 객체를 정렬하면 특히 비닝 또는 타일 렌더링 아키텍처에서 큰 가치가 있습니다.

투명 용지를 앞뒤로, 투명 용지를 앞뒤로 정렬합니다.

렌더링 할 때 카메라와 솔리드에 가장 가까운 항목이 먼저 렌더링되며 동일한 공간을 차지하는 다른 항목은 초기 z 버퍼 검사를 통해 거부됩니다.

그래픽 아키텍처에 어떤 종류의 계층 구조 또는 저해상도 z- 버퍼가있는 경우 어떤 것도 렌더링되기 전에도 지오메트리가 컬링 될 수 있습니다.

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