8

현재 OpenGL 렌더링 엔진을 업그레이드하고 구조 조정하는 중입니다. 엔진은 건축 데이터 (건물이있는 건물)의 큰 장면을 시각화하는 데 사용되며 물체의 양이 다소 커질 수 있습니다. 어떤 건물의 경우와 마찬가지로 벽에는 많은 폐색 된 물체가 있으며 자연적으로는 같은 방에있는 물체 만 보거나 외부에있는 경우 외부 물체 만 볼 수 있습니다. 이렇게하면 많은 수의 물체가 가려져 가려움과 절두체 컬링 (culling and frustum culling)을 통해 가려져야합니다.렌더링의 최신 기술 컬링 및 일괄 처리 기술

동시에 렌더링 배치에서 일괄 처리 할 수있는 많은 반복 형상과 인스턴스 렌더링으로 렌더링 할 수있는 많은 객체가 있습니다.

내가 보는 방식대로 렌더링 배치와 컬링을 최적의 방식으로 결합하는 것은 어려울 수 있습니다. 동일한 VBO에서 너무 많은 객체를 배치하면 해당 배치 렌더링을 건너 뛰기 위해 CPU에서 객체를 제거하는 것이 어렵습니다. 동시에 CPU에 대한 도용을 건너 뛰면 많은 객체가 보이지 않는 동안 GPU에 의해 처리됩니다. CPU를 더 쉽게 추월하기 위해 일괄 처리를 건너 뛰면 원치 않는 많은 양의 렌더링 호출이 발생합니다.

나는 현대의 그래픽에서 이러한 문제가 어떻게 해결되는지에 대한 기존의 기술과 이론에 대한 연구를 해왔지만 구체적인 해결책을 찾지 못했습니다. 동료와 내가 생각해 낸 아이디어는 일괄 적으로 서로 가까이있는 물체로 배치를 제한하는 것이 었습니다. 이것은 oct-tree를 사용하여 단순화되고 최적화 될 수 있습니다.

사람은 최신 그래픽 엔진의 상태에서 장면 관리, 컬링, 일괄 처리 등에 사용되는 기술에 대한 지침이 있습니까?

+0

나는 현대 그래픽 엔진에 대한 지식이 없다는 말로 시작하겠습니다. 그러나 이것은 단일 솔루션이없는 문제처럼 들리지만 대신 패치 적용과 여러 시나리오를 함께 전환하여 주어진 시나리오에 대해 최상의 품질/성능을 제공함으로써 해결할 수 있습니다. 압박을받을 때 품질과 성능이 항상 상호 배타적이기 때문입니다. 저는 대개 다차원 친화적 인 블록 (당신을 위해 : rooms)에 함께 모든 것을 배치하여 (!) 텍스쳐 배열을 사용하여 그리기 콜을 해결합니다. 그리고 겹침 선은 정적 아키텍처 환경에서 매우 유용 할 수 있습니다. –

답변

5

인터넷에서 절두체 및 폐색에 관한 많은 정보가 있습니다. 대부분 게임 개발자가 제공합니다. 다음은 시작하는 몇 가지 기사의 목록은 다음과 같습니다

내 (꽤 빨리) 렌더러는 이와 유사한 작동합니다

  1. 컬렉션는 : 렌더러에, 당신이 렌더링 할 모든 소품을 보냅니다.
  2. Frustum Culling : 렌더러는 여러 스레드를 병렬로 사용하여 보이지 않는 소품을 목록에서 제거합니다.
  3. occlusion culling : 이제는 CPU를 폐색 할 수 있습니다 (아직 구현하지 않았습니다. 지금은 필요 없기 때문에). 효율적으로 수행하는 방법에 대한 자세한 정보는 Killzone 및 Crysis 슬라이드에서 찾을 수 있습니다. 한 가지 해결책은 GPU에서 이전 프레임의 깊이 버퍼를 다시 읽은 다음 그 위에 객체의 경계 상자를 래스터 화하여 객체가 표시되는지 확인하는 것입니다.
  4. 나누기 : 실제로 볼 수 있기 때문에 어떤 개체를 실제로 렌더링해야하는지 알았으므로 각 메쉬가 다른 재질이나 텍스처를 가지고 있기 때문에 메쉬로 분할해야합니다 (그렇지 않으면 단일 개체로 결합됩니다). 망사).
  5. 일괄 처리 : 이제 렌더링 할 메시 목록이 있습니다. 당신은 그들을 정렬 할 수 있습니다 :
    • (이것은 메쉬 레벨 대신에 프로퍼티 레벨에서 수행 할 수 있습니다), fillrate를 저장하기 위해 (나는 당신의 프래그먼트 쉐이더가 매우 단순하다면 이것을하는 것을 권장하지 않습니다).
    • 메쉬 (동일한 메쉬의 인스턴스가 여러 개있을 수 있으며 인스 턴싱을 쉽게 추가 할 수 있기 때문에). 텍스쳐 스위치는 매우 고비용이기 때문에 질감에 의해
    • 이됩니다.
  6. 렌더링 : 분할 된 메시를 반복하여 렌더링하십시오.

"Full Frontal Nudity"가 이미 말했듯이 완벽한 해결책은 없습니다.