많은 광원으로 효율적인 렌더링


10

퐁 쉐이딩을 사용하여 단일 광원으로 장면을 렌더링하기 위해 머티리얼과 광원의 주변 / 확산 / 반사 성분을 기반으로 프래그먼트 쉐이더에 전달 된 각 프래그먼트의 최종 색상을 계산할 수 있습니다.

각 개별 광원을 조각에 적용한 결과를 함께 추가하여 여러 광원을 수용 할 수 있도록 쉽게 확장 할 수 있습니다.

final_color = (0, 0, 0, 1)
for each light:
    final_color += apply_light(material, light)
final_color = clamp(final_color, (0,0,0,1), (1,1,1,1))

그러나 매우 많은 수의 광원을 사용하면이 프로세스가 매우 느립니다. 와 N조명,이 방법은 수행되어야 음영 퐁에 대한 계산을 필요로 N조각 당 번.

매우 많은 수의 광원 (수백, 수천 등)으로 장면을 렌더링하는 더 나은 방법이 있습니까?

답변:


15

예, 그러나 패러다임 전환이 필요합니다.

익숙한 것을 정방향 렌더링이라고합니다. 지오메트리를 제출 한 후 즉시 쉐이딩 패스를 진행합니다. 기본 정방향 렌더링에서는 각 조명에 대해 셰이더 내부를 반복하거나 조명 당 한 번의 패스를 수행하고 결과를 함께 혼합 할 수 있습니다 (추가 블렌딩 사용).

그러나 상황은 상당히 많이 발전했습니다. 입력 : 지연 렌더링

이제 그것들을 모두 자세히 설명하는 변형이 너무 많아서 여기에 대한 대답을 받아 들일 수있는 것 이상이 필요합니다. 여기서는 Deferred shading의 요지를 설명하려고합니다 .Google을 사용하여 쉽게 찾을 수있는 다른 리소스가 많이 있습니다.이를 읽은 후 필요한 키워드를 찾을 수 있기를 바랍니다.

기본 아이디어는 파이프 라인을 종료 한 후 음영을 연기하는 것입니다. 두 가지 주요 단계가 있습니다.

  1. 쉐이딩에 필요한 지오메트리와 모든 정보를 여러 렌더 타겟으로 렌더링합니다. 이것은 일반적으로 기본 구현에서 깊이 버퍼, 형상의 법선과 알베도 색상을 포함하는 버퍼를 갖게됨을 의미합니다. 머티리얼에 대한 다른 정보 (예 : 거칠기, "금속성"요소 등)가 필요하다는 것을 곧 알게 될 것입니다.

위키 백과의이 이미지는 세 가지 버퍼 (색, 깊이 및 법선)를 보여줍니다.

여기에 이미지 설명을 입력하십시오

또한 사용 된 버퍼의 양, 유형 및 내용은 프로젝트마다 상당히 다릅니다. GBuffers라는 이름의 버퍼 세트를 찾을 수 있습니다.

  1. 그 후 실제 조명을 적용 할 때입니다. 각 조명에 대한 조명 패스 동안 조명 유형에 따라 조명 볼륨을 그리려고합니다.
    • 방향성 조명의 경우 전체 화면 쿼드를 렌더링합니다.
    • 포인트 라이트의 경우 반경이 포인트 라이트의 감쇠를 기반으로하는 구를 렌더링합니다.
    • 스포트라이트의 경우 치수가 다시 빛의 특성에 따라 달라지는 원뿔을 렌더링합니다.

이 패스의 픽셀 셰이더에서는 GBuffer를 전달하고 그 정보를 사용하여 조명과 음영을 수행합니다. 이런 식으로 클래식 포워드 렌더링과 비교할 때 상당한 속도 향상을 가진 각 라이트의 영향을받는 픽셀 만 처리합니다.

또한 투명한 개체를 처리하고 대역폭과 비디오 메모리를 많이 소비한다는 다양한 단점이 있습니다. 또한 다양한 재료 모델을 처리하는 것이 더 까다 롭습니다.

사후 처리를 위해 많은 정보가 준비되어 있으므로 다른 측면의 장점이 있으며 구현하기도 쉽습니다. 그러나 이것은 더 이상 많은 조명에서 가장 멋진 것이 아닙니다.

최신 기술은 예를 들어 타일 ​​렌더링 기술 입니다. 이들의 주요 아이디어는 화면 공간 "타일"에서 장면을 세분화하고 각 타일에 영향을주는 조명을 할당하는 것입니다. 이것은 연기 된 방식과 앞으로 진행되는 방식으로 모두 존재합니다. 이러한 기술은 타일에 다양한 깊이의 불연속성이있을 때 몇 가지 문제를 야기하지만 일반적으로 기존 지연보다 빠르며 다양한 문제를 해결합니다. 예를 들어, 타 일드 디퍼 드를 사용하는 경우 장점은 조명 된 조각 당 GBuffer를 한 번 읽고 동일한 타일의 픽셀은 동일한 라이트를 일관되게 처리합니다.

이 측면의 추가 발전 은 화면 공간 타일 대신 3D 범위의 클러스터를 갖는 타일 기반 접근 방식과 개념적으로 유사한 클러스터링 음영 입니다. 이 방법은 심도 불연속 문제를보다 잘 처리하며 일반적으로 타일 방식보다 성능이 우수합니다.

중요 사항 : 유예 음영의 기본 사항을 설명했습니다. 여러 변형, 최적화 및 개선 사항이 있으므로 간단한 버전으로 실험 한 다음 위에서 언급 한 것과 같은 다른 기술에 대한 연구를 수행 할 것을 권장합니다.


1
여기에 두 개의 소스 코드 자원입니다 타일클러스터
RichieSams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.