스와핑 효과의 실제 비용


16

내 프로젝트와 포럼에서 XNA를 사용합니다. 때때로 메시에 대한 효과를 교체하는 데 비용이 상대적으로 높다는 사실에 대한 언급이 종종 있습니다. 효과를 바꾸는 것이 단순히 교체 쉐이더 프로그램을 복사 한 경우라고 생각하면 놀랍습니다 적절한 매개 변수와 함께 GPU에.

누군가이 프로세스에 대해 비용이 많이 드는 것을 정확하게 설명 할 수 있는지 궁금합니다. 가능하다면 문맥에 '상대적으로'넣는가?

예를 들어, 짧은 셰이더를 사용하여 피킹을 돕고 싶다고 말하면 다음과 같습니다.

  1. 고유 한 색상을 계산하여 식별하고 쉐이더에 제공하여 모든 객체에 대한 효과를 변경하십시오.
  2. 모든 객체를 메모리의 렌더 타겟에 그립니다.
  3. 대상에서 색상을 가져 와서 선택한 객체를 찾는 데 사용하십시오.

해당 프로세스를 완료하는 데 걸린 총 시간 중 셰이더를 교체하는 데 소요되는 시간은 얼마입니까? 내 본능은 셰이더가 아무리 단순하더라도 장면을 다시 렌더링하는 것이 프로세스의 다른 부분보다 훨씬 느리게 진행될 것이라고 생각합니다.

답변:


21

설명하는 문제는 "특별한"문제가 아닙니다. GPU의 효과를 변경하는 데 특히 느린 것은 없습니다. 효과 변경, 효과 매개 변수 (변환 포함), 텍스처, 다양한 렌더 상태 및 단순히 여러 그리기 명령 전송과 관련된 문제는 다른 배치를 GPU로 보내야한다는 것 입니다.

배치는 CPU에 종속되어 있으며 프레임 당 몇 천 * 사용할 수 있습니다.

그것은 CPU와 당신이하고있는 다른 작업에 달려 있지만 프레임 당 약 1000 개의 배치가 있다고 가정 해 봅시다. 배치 당 하나의 객체를 렌더링하는 경우 문제가 발생하기 전에 화면에 약 1000 개의 객체를 그릴 수 있습니다.

갑자기 피킹을 추가하고 모든 객체를 두 번 렌더링해야하는 경우 500 개의 객체 만 그릴 수 있습니다.

(따라서 적은 수의 물체 만 가지고 있다면 걱정하지 마십시오!)

사용중인 배치 수를 줄이려면 기본적으로 "현명해야"합니다. 이를 수행하기위한 프로토 타입 방법은 여러 개체를 단일 배치로 영리하게 결합하는 것입니다. 특히, " 인스턴스화 "를 찾으십시오 . 인스턴스 번호를 사용하여 셰이더 내의 각 객체에 고유 한 색상을 할당 할 수 있습니다.

선택에 특히 적합한 다른 기술 은 소프트웨어에서 렌더링 된 객체 를 컬링 하여 선택한 픽셀을 건드리지 않는 것을 렌더링하지 않도록하는 것입니다.

다음은 NVidia에서 발표 한 프레젠테이션 슬라이드 데크의 전체 제목입니다 . (PDF) 멋진 그래프와 이것을 설명하는 것들이 있습니다. 또한 배치 수를 줄이는 몇 가지 기술이 나열되어 있습니다.


동의했다! 설명과 제안에 감사드립니다. 제가 읽은 내용이 이제 더 의미가 있습니다. NVidia 프리젠 테이션에 감사드립니다. 지금 읽어보세요. 매우 유용합니다.
sebf

1
"배치, 배치, 배치"용지에 대한 링크가 업데이트되었습니다. ce.u-sys.org/Veranstaltungen/…
Marton

1
고마워 Marton, 난 게시물에 새 링크를 편집했습니다 :)
앤드류 러셀
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.