지정된 알파를 사용하여 여러 렌더 타겟을 알파 블렌딩 할 수 있습니까?


9

렌더 타겟을 0에서 N으로하고 RT 0에서 네 번째 컴포넌트에 재질이나 마스크 또는 무언가로 지정된 알파 채널이 있다고 가정합니다.

첫 번째 렌더 타겟의 알파를 사용하여 하드웨어 컴포 지터 블렌드 렌더 타겟 1 ~ N을 가질 수 있습니까?

답변:


5

내가 아는 한 DX 또는 GL에서는 모든 블렌딩 작업에 RT 0의 알파를 재사용 할 수있는 방법이 없습니다. 불행히도 하드웨어가 지원하지 않는 것 같습니다.

각 렌더 타겟에 대해 서로 다른 블렌드 모드를 구성하거나 일부 블렌딩을 활성화하고 다른 블렌드를 비활성화 할 수 있습니다. 그러나 렌더 타겟에 블렌딩이 활성화 된 경우 항상 자체 알파를 사용합니다.

"듀얼 소스 블렌딩"( DX11 docOGL doc 참조)이라는 모드도 있는데 , 렌더링 대상의 알파 채널이 아니라 픽셀 셰이더에서 완전히 분리 된 출력과 블렌딩 할 알파를 지정할 수 있습니다. 그러나이 모드는 현재 하드웨어에서 하나의 렌더 대상에서만 작동합니다.

내가 알 수있는 한, 여러 렌더링 대상을 동일한 알파로 혼합하는 유일한 옵션은 다음과 같습니다.

  • 모든 렌더 타겟에 동일한 알파를 출력합니다 (예 : 지연된 음영 처리에서와 같이 다른 값을 알파 채널에 저장하는 기능을 희생).
  • 이중 소스 블렌딩을 사용하여 각 렌더 대상에 대해 별도의 패스로 렌더링을 반복하십시오.
  • UAV / 이미지로드 저장소를 사용하여 픽셀 셰이더에서 블렌딩을 실행합니다 (레이스 조건에 대한 보호 기능이 없기 때문에 화면 공간에서 형상이 자체적으로 겹치지 않는 경우에만 작동 함).
  • 이를 지원하는 하드웨어에서 DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock 또는 INTEL_fragment_shader_ordering (후자는 AMD GPU에 의해 노출됨). 이것들은 같은 것에 대한 세 가지 이름입니다. 기본적으로 다른 픽셀 쉐이더 호출과 관련하여 원자 적으로 텍스처를 읽고 수정하고 쓸 수있는 픽셀 쉐이더의 "중요 섹션"입니다. 본질적으로 임의의 프로그래밍 가능한 블렌딩을 가능하게하지만 아마도 느리고 최근 하드웨어에서만 사용할 수 있습니다.

그래, 나는 이것이 나의 결론이라고 생각한다. 이것이 DX12 또는 (발매되지 않은) Vulkan과 관련이 있는지 여부를 알고 있습니까? 앞에서 언급했듯이 지연 렌더링에 매우 큰 응용 프로그램이 있으며 현재 기존 대안 중 어느 것도 만족스럽지 않습니다.
jeremyong

@jeremyong 죄송합니다. DX12에서 블렌딩 작업에 변화가 없다고 생각합니다. Vulkan에 대해서는 확실하지 않지만 놀랍습니다. 블렌딩 하드웨어는 바뀌지 않았습니다. FWIW, 내가 작업 한 게임에서 지연된 데칼에 대한 글 머리 기호 # 3의 변형을 수행하고 겹치지 않는 그룹으로 분리하기 위해 형상을 사전 처리했습니다.
Nathan Reed

추천 해 주셔서 감사합니다. 연기 된 데칼은 제가 구현 한 것입니다
jeremyong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.