모든 지오메트리를 통해 구멍을 "절단"하는 쉐이더


11

모든 지오메트리를 "잘라내는"쉐이더를 생성하고 Unity에서 클리어 배경 만 렌더링하려면 어떻게해야합니까? 예를 들면 :

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

거대한 흰색 상자 모양의 방에있는 프리즘입니다. 프리즘의 표면은 장면의 스카이 박스 (별이 빛나는 하늘)를 렌더링하는 것입니다. 여러 대의 카메라를 사용했는데 매우 비효율적입니다 ... 셰이더 만있는 방법이 있어야합니다.

어떻게해야합니까?

답변:


15

좋아, 마침내 알아 냈습니다!

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

구 메시가 원통과 평면을 통해 스카이 박스까지 완전히 "잘리는"방법을 볼 수 있습니다. 이것은 이것을 알아내는 데 예상보다 오래 걸렸지 만 위키 페이지 ( http://wiki.unity3d.com/index.php/DepthMask ) 덕분에 모든 것이 정렬되었습니다.

위키 페이지에서 셰이더 설정을 사용하기 전에 동일한 결과를 얻기 위해 다른 지우기 / 깊이 플래그가있는 세 가지 카메라를 사용했습니다. 그것은 작동했지만 Ouya에 완전히 질식했습니다. 위의 솔루션은 하나의 카메라 만 필요하며 훨씬 빠르게 작동합니다.

그래서 저는 그런 장면을 설정했습니다…

  1. 현실적인 스카이 박스 추가 (NASA)

  2. 몇 가지 모양을 추가

  3. 평면, 구 및 실린더에 SetRenderQueue 스크립트를 추가했습니다.

  4. 구의 대기열 순서를 2999로 설정합니다 (다른 개체는 3000입니다)

  5. 그런 다음 DepthMask 셰이더를 구에 추가했습니다

그게 다야. 질문은 알려주세요!


2
D' oh, 나는 위의 게시물에서 문제를 완전히 과도하게 생각하고있었습니다 (실제로 벽 / 바닥의 평평한 구멍 메쉬에 대해 생각하고있었습니다). 링크 된 솔루션은 3D 구멍 객체를 보여 주며이 경우 표시된 솔루션은 매우 간단합니다. 실제로 색상을 쓰지 않고 z 구멍에 '구멍'을 쓰고 구멍이 있는지 확인하십시오. 일찍 그려졌습니다.
bluescrn

@bluescrn 걱정 마세요! 자세한 게시물에 감사드립니다. :)
CalebHC

2

원하는 효과를 얻을 수있는 몇 가지 옵션이 있지만 비용이 많이 듭니다.

  • 구멍을 스텐실 버퍼 또는 대상 알파 채널에 쓴 다음 적절한 스텐실 테스트 또는 알파 블렌드를 사용하고 z 테스트없이 스카이 박스를 마지막으로 그립니다.

또는

  • 프레임 시작시 스카이 박스를 텍스처로 렌더링하고 '홀 지오메트리'에 투영합니다.

z- 버퍼를 사용하거나 사용 하여이 작업을 수행 할 수있는 방법이 있어야한다고 생각합니다. 그러나 실제 Z를 사용하여 '구멍 다각형'을 z 테스트하고 다른 Z를 작성하고 싶을 것입니다. 여러 패스와 스텐실 버퍼-다음과 같이 renderstate가 설정된 상태에서 구멍을 3 번 그리십시오.

  • 패스 1 : Z- 테스트 없음, 홀 폴리스 아래 스텐실 지우기
  • 패스 2 : 노멀 z- 테스트, 증분 스텐실 값 (깊이 테스트가 통과하는 위치)
  • 패스 3 : 스텐실> 0 인 Z 지우기

그래도 특정 순서로 그리기가 필요합니다. 먼저 환경, 구멍, 마지막으로 스카이 박스.

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