지연 렌더링이란 무엇입니까?


답변:


55

지연 렌더링의 정의 특성은 장면 렌더링의 복잡성을 본질적으로 O (형상 * 조명)에서 O (형상 + 조명)으로 변경한다는 것입니다.

이는 (최소한) 위치 *, 보통 및 확산 색상과 같은 기본 속성을 출력하도록 설계된 쉐이더를 사용하여 장면을 먼저 렌더링함으로써 이루어집니다. 다른 속성은 픽셀 당 스페 큘러 값 및 기타 재질 속성을 포함 할 수 있습니다. 이들은 전체 화면 렌더 타겟에 통칭하여 G- 버퍼라고합니다.

(* : 깊이를 확보하는 것이 다른 많은 효과에 유용하기 때문에 개발자가 깊이를 저장하고 위치를 재구성하는 데 더 일반적으로 사용한다는 점에 주목할 가치가 있습니다. )

G- 버퍼가 생성되면 BRDF를 빛당 픽셀 당 정확히 한 번만 해결하여 화면의 모든 픽셀에 대해 완전히 조명 된 결과를 계산할 수 있습니다. 다시 말해, 각각 20 개의 조명에 영향을받는 20 개의 메시가있는 경우, 전통적인 ( "앞으로") 렌더링은 각 조명의 결과를 누적하기 위해 각 메시를 여러 번 다시 렌더링해야합니다. 최악의 경우 라이트 당 메시 당 하나의 드로우 콜이거나 400 개의 드로우 콜입니다! 이러한 각 드로우 콜에 대해 메시 정점을 중복으로 재 변환합니다. 실제로 빛의 영향을받지 않거나 최종 결과에서 보이지 않는 픽셀을 음영 처리 할 가능성도 있습니다 (장면의 다른 지오메트리에 의해 가려지기 때문에). 이러한 각 결과는 GPU 리소스를 낭비합니다.

지연 렌더링과 비교 : G 버퍼를 채우려면 메쉬를 한 번만 렌더링하면됩니다. 그런 다음 각 조명에 대해 조명의 영향 범위를 나타내는 경계 모양을 렌더링합니다. 포인트 라이트의 경우 이것은 작은 구이거나 방향성 라이트의 경우 전체 장면이 영향을 받기 때문에 전체 화면 쿼드가됩니다.

그런 다음 해당 빛의 경계 볼륨에 대해 픽셀 / 조각 셰이더를 실행할 때 G- 버퍼 텍스처의 적절한 위치에서 지오메트리 속성을 읽고이 값을 사용하여 조명 결과를 결정합니다. 최종 결과에서 보이는 장면 픽셀 만 음영 처리되며 조명 당 정확히 한 번 음영 처리됩니다. 이것은 잠재적으로 엄청난 절감 효과를 나타냅니다.

그러나 단점이 없습니다. 투명한 형상을 처리하기 위해 확장하기가 매우 어려운 패러다임입니다 (깊이 필링 참조). 실제로, 거의 모든 지연 렌더링 구현은 장면의 투명한 부분에 대한 순방향 렌더링으로 대체하기가 어렵다. 지연 렌더링은 많은 양의 VRAM과 프레임 버퍼 대역폭을 소비하므로 개발자는 G- 버퍼 속성을 가능한 한 가장 작은 / 가장 적은 구성 요소에 영리하게 압축하고 압축하기 위해 많은 시간을 투자하게됩니다.


8

Deferred Shading이라고도하는 Deferred Rendering은 중간 결과를 텍스처에 저장 한 후 나중에 중간 데이터를 샘플링하여 렌더링 방정식을 완성 할 수있는 광범위한 렌더링 경로 세트를 말합니다.

지오메트리 버퍼는 장면이 불투명 한 지오메트리의 위치, 법선 및 기본 텍스처를 포함하는 일련의 버퍼로 렌더링되는 초기 예입니다. 조명이 적용되지 않았으며 최종 색상을 알 수 없습니다. 이후 패스에서 라이트가 렌더링되고 지오메트리 버퍼가 샘플링됩니다. 이것은 많은 수의 라이트가 스크린 픽셀에 보이는 고정 된 수의 라이트로 렌더링 될 수 있음을 의미합니다. 전통적인 렌더링은 폐색되어 화면에 전혀 보이지 않는 표면의 모든 광원을 평가했을 것입니다.

예를 들어, 광 정보를 먼저 렌더링하는 것을 포함하여 많은 변형이 존재한다.

자세한 내용은 다음을 참조하십시오 : http://en.wikipedia.org/wiki/Deferred_shading http://delicious.com/aancsiid/deferred-shading


-3

지연 렌더링은 지오메트리가 모든 것을 가리기 위해 두 번째 패스를하기 전에 처리하는 것입니다. Coplexity를 O (pixels * light sources)로 변경하여 성능에 작은 타격만으로 복잡한 장면을 사용할 수 있기 때문에 유용합니다.

그것을 구현하는 것은 다소 간단합니다. 첫 번째 패스에는 최소한 거리, 법선 및 색상 렌더링이 필요합니다. 메모리를 희생시키면서 더 많은 텍스처를 추가하여 정반사 및 위치처럼 렌더링 할 수 있습니다.

렌더 한 렌더가 완료되면 고유 한 광원이 각각의 중심에있는 구를 렌더링하고, 라이트를 함께 추가하고, 장면의 지오메트리에 모두 자르고, 마지막으로 폴 오프를 적용합니다.


나는 이것이 새로운 답변을 추가한다고 생각하지 않습니다. 그것은 Neverender의 대답의 일부인 것처럼 보입니다.
HolyBlackCat

@HolyBlackCat 몇 가지 중요한 차이점이 있습니다. 먼저 올바른 복잡도 방정식이 있으며, 둘째, 훨씬 더 간결하고 실제로 실제로 구현하는 방법을 설명합니다.
hellol11

there's the correct complexity equation참된. 그러나 나는 그것이 사소한 세부 사항이라고 말하고 싶습니다. 다른 답변을 수정하여 제안하거나 평판이 충분하면 이에 대한 의견을 남길 수 있습니다. 그것 때문에 새로운 답변을 만드는 것은 약간 과잉입니다. it's much more concise개인적으로 나는 그것이 좋지 않다고 생각합니다. 답변에 유용한 정보가 많을수록 더 좋을까요?
HolyBlackCat

1
@HolyBlackCat 예, 그렇습니다. 개인적으로, 나는 간단한 질문에 답하기 위해 텍스트 벽을 통과하는 것을 좋아하지 않습니다.
hellol11
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.