지연된 데칼 정상 문제


11

지연된 데칼 시스템에서 작업하고 있습니다. 지금까지 투영 부분을 완성했습니다. 즉, 장면에서 무언가를 클릭하면 대상체 표면에 데칼이 제대로 투영됩니다.

이 시스템에 추가하고 싶은 다른 것들이 있습니다 : 노멀 클리핑과 노멀 매핑 데칼. 일반적인 클리핑은 날카로운 각도로 뻗어있는 조각을 버릴 때입니다. 여기에서 보았습니다 . 이를 해결하는 방법은 G 버퍼의 법선과 데칼 법선 사이에 큰 차이가있는 조각을 버리는 것입니다. 이를 위해서는 G- 버퍼의 일반 텍스처를 읽어야합니다.

데칼 노멀 매핑을 수행하려면 데칼 노멀 (노멀 맵에서)을 G- 버퍼 노멀과 블렌드해야합니다. G- 버퍼의 일반 텍스처에 기록해야합니다.

이 두 가지 기능을 지원하려면 동일한 쉐이더 패스에서 일반 텍스처를 읽고 쓸 필요가 있음이 분명합니다. 슬프게도 이것은 정의되지 않은 동작이므로 이러한 기능을 구현할 다른 방법이 있는지 궁금합니다.

답변:


1

어떤 렌더링 시스템을 사용하십니까? 다음 정보는 모든 렌더링 시스템에 유효해야하지만 DX11 이상 OpenGL 버전에서는 UAV를 사용하는 것이 더 나은 솔루션 일 수 있습니다.

-

각 패스 전에 일반 버퍼를 복사해야합니다. 데칼이 동일한 화면 공간 조각을 수정하지 않는 한 사본을 업데이트 할 필요는 없습니다.

또한 모든 데칼을 별도의 버퍼로 렌더링하고 단일 일반 버퍼 사본을 사용하여 하나의 블렌드 패스를 일반 버퍼로만 수행 할 수 있습니다. 이것은 당신이 가진 데칼의 양에 따라 훨씬 더 잘 확장됩니다.

일반 버퍼를 작성하지 않는 한 (예 : 일반 클리핑 만 수행) 호출 할 때 원본 일반 버퍼 만 샘플링 할 수 있지만 렌더링 대상으로 바인딩 할 수는 없습니다.

DX9에서 가장 가까운 점 필터링 만 사용하고 현재 쓰고있는 것과 다른 픽셀을 읽지 않는 한 동일한 텍스처에서 읽고 쓰면 예상되는 결과가 나옵니다. 정의되지 않은 동작이므로이 방식으로 작동하지 않는 드라이버 및 그래픽 카드가있을 수 있습니다. DX10은 현재 렌더 타겟으로 바인딩 된 텍스처를 바인딩 해제하여이를 방지합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.