Шейдер, який "прорізає" отвір у всій геометрії


11

Як я можу створити шейдер, який "прорізає" всю геометрію, лише надаючи фон очищення в Unity? Приклад:

введіть тут опис зображення

Ось призма у величезній білій кімнаті у формі коробки. Поверхня призми просто відображає небосхил сцени (зоряне небо). Я використовував кілька камер, що є досить неефективним ... Має бути спосіб із просто шейдерами.

Як я можу це зробити?

Відповіді:


15

Гаразд, нарешті зрозумів це!

введіть тут опис зображення

Ви бачите, як сферична сітка «прорізається» через циліндр і площиною аж до небесної коробки. Це зайняло у мене більше часу, ніж очікувалося, щоб зрозуміти це, але завдяки вікі-сторінці ( http://wiki.unity3d.com/index.php/DepthMask ) я все розібрав.

Перш ніж використовувати налаштування шейдера на сторінці вікі, я використовував три різні камери з різними прапорами очищення / глибини, щоб досягти однакового результату. Це спрацювало, але повністю захлинулося на Ouya. Вищезазначене рішення вимагає лише однієї камери і працює багато фастів.

Тож я налаштовую сцену як таку ...

  1. додав реалістичний skybox (nasa)

  2. додав деяких форм

  3. додав сценарій SetRenderQueue до площини, сфери та циліндра

  4. встановіть порядок черги у сфері на 2999 (інші об'єкти - на 3000)

  5. потім додав шейдер DepthMask до сфери

Це воно. Будь-які питання дайте мені знати!


2
О, я повністю переосмислював проблему в своєму пості вище (я дійсно думав про плоскі сітки з отворами на стінах / підлогах, насправді). Зв'язане рішення показує об'єкт 3D-лунки, і рішення, показане для цього випадку, дуже просте - все, що вам потрібно зробити, це написати «дірку» в z-буфер, не записуючи жодного кольору, і переконайтеся, що отвір є намальовано рано.
bluescrn

@bluescrn Не хвилюйтесь! Я ціную докладний пост. :)
CalebHC

2

Кілька варіантів, щоб отримати потрібний ефект - але вони дійсно коштують:

  • Запишіть отвори у буфер трафарету або цільовий альфа-канал, а потім намалюйте програму skybox останнім, використовуючи відповідний трафаретний тест або альфа-суміш, і без z-тесту?

або

  • Надайте skybox текстурою на початку кадру та запроектуйте його на "геометрію отворів"

Я підозрюю, що повинен бути спосіб це зробити і за допомогою / зловживання буфером z - але ви, мабуть, хочете z-протестувати 'діри багатокутники', використовуючи їх справжній Z, а потім написати інший Z. Ви, ймовірно, можете використовувати кілька проходів і буфер трафарету - прорисування отвору 3 рази з налаштованим рендерестатом так:

  • Пропуск 1: Немає z-тесту, очистіть трафарет під отвором полі
  • Пропуск 2: Нормальний z-тест, значення трафарету збільшення (там, де проходить глибинне випробування)
  • Пропуск 3: Очистити Z, де трафарет> 0

Вам все одно доведеться малювати в певному порядку - спочатку середовище, потім дірки, і, нарешті, небо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.