Replacement shader и ZBuffer

Шейдеры и все-все-все.

Replacement shader и ZBuffer

Сообщение kripto289 27 фев 2017, 00:25

Суть. Создаю ортогональную камеру для рендера буфера глубины. Цель - интвернуть буфер глубины (не всмысле поменять местами 0 и 1, а поменять порядок отрисовки)
По дефолту, буфер глубины рисуется не совсем корректно для моей цели. На рисунке видно что синий куб не виден и перекрывается красным.
Изображение

Как быть? Пробовал менять ZTest - не помогло. Либо отбрасывается всё, либо перетирается инфор0мация о позиции красным кубом.
Пытался ручками переписать depth:SV_Depth - дак он вообще не реагирует (11 директикс редактор)
У кого есть идеи как инвертнуть буфер?
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Replacement shader и ZBuffer

Сообщение waruiyume 27 фев 2017, 01:12

Мне кажется, что можно вывернуть P матрицу в MVP и на неё умножать вершину в вертексном блоке, но как это сделать не подскажу.
add
Синтаксис:
Используется csharp
using UnityEngine;

public class CamTest : MonoBehaviour
{

    public Camera cam;

        void Start ()
        {
            cam.projectionMatrix =
               Matrix4x4.Ortho(-cam.orthographicSize*cam.aspect, cam.orthographicSize*cam.aspect, -cam.orthographicSize, cam.orthographicSize, cam.farClipPlane, cam.nearClipPlane);   
        }
}
 

Смысл в том чтобы поменять far и near местами.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Replacement shader и ZBuffer

Сообщение kripto289 27 фев 2017, 08:12

waruiyume писал(а):Мне кажется, что можно вывернуть P матрицу в MVP и на неё умножать вершину в вертексном блоке, но как это сделать не подскажу.
add
Синтаксис:
Используется csharp
using UnityEngine;

public class CamTest : MonoBehaviour
{

    public Camera cam;

        void Start ()
        {
            cam.projectionMatrix =
               Matrix4x4.Ortho(-cam.orthographicSize*cam.aspect, cam.orthographicSize*cam.aspect, -cam.orthographicSize, cam.orthographicSize, cam.farClipPlane, cam.nearClipPlane);   
        }
}
 

Смысл в том чтобы поменять far и near местами.

Спасибо, проверю.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Replacement shader и ZBuffer

Сообщение kripto289 01 мар 2017, 15:24

waruiyume писал(а):Мне кажется, что можно вывернуть P матрицу в MVP и на неё умножать вершину в вертексном блоке, но как это сделать не подскажу.
add
Синтаксис:
Используется csharp
using UnityEngine;

public class CamTest : MonoBehaviour
{

    public Camera cam;

        void Start ()
        {
            cam.projectionMatrix =
               Matrix4x4.Ortho(-cam.orthographicSize*cam.aspect, cam.orthographicSize*cam.aspect, -cam.orthographicSize, cam.orthographicSize, cam.farClipPlane, cam.nearClipPlane);   
        }
}
 

Смысл в том чтобы поменять far и near местами.

Всё работает корректно.
Возник другой вопрос. Даже не один.
Как включить запись в буфер глубины для vert/frag шейдера? Пишу ZWrite On, но это не работает, буфер пустой. Вот начало кода, в шейдере всего 1 пасс. WTF? Казалось бы, что бы может быть проще ><
ps Даже стандартный шейдер юнити для буфера глубины не пашет. https://docs.unity3d.com/Manual/SL-CullAndDepth.html
Синтаксис:
Используется csharp
SubShader {
                Pass {
                        ZWrite On

                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag


И второй вопрос. У меня вершины меша смещается в шейдере. (волны воды) В юнити вообще можно получить у дополнительной камеры с помощью replacement shader (или как-то иначе) буфер глубины, где будет содержаться информация об этих вершинах? Ведь реплейсмент шейдер перерисовывает геометрию заного и вместо волн я вижу просто плоскость. А буфер глубины дополнительной камеры без реплейсмента вроде как не получить.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Replacement shader и ZBuffer

Сообщение kripto289 01 мар 2017, 17:10

kripto289 писал(а):
waruiyume писал(а):Мне кажется, что можно вывернуть P матрицу в MVP и на неё умножать вершину в вертексном блоке, но как это сделать не подскажу.
add
Синтаксис:
Используется csharp
using UnityEngine;

public class CamTest : MonoBehaviour
{

    public Camera cam;

        void Start ()
        {
            cam.projectionMatrix =
               Matrix4x4.Ortho(-cam.orthographicSize*cam.aspect, cam.orthographicSize*cam.aspect, -cam.orthographicSize, cam.orthographicSize, cam.farClipPlane, cam.nearClipPlane);   
        }
}
 

Смысл в том чтобы поменять far и near местами.

Всё работает корректно.
Возник другой вопрос. Даже не один.
Как включить запись в буфер глубины для vert/frag шейдера? Пишу ZWrite On, но это не работает, буфер пустой. Вот начало кода, в шейдере всего 1 пасс. WTF? Казалось бы, что бы может быть проще ><
ps Даже стандартный шейдер юнити для буфера глубины не пашет. https://docs.unity3d.com/Manual/SL-CullAndDepth.html
Синтаксис:
Используется csharp
SubShader {
                Pass {
                        ZWrite On

                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag


И второй вопрос. У меня вершины меша смещается в шейдере. (волны воды) В юнити вообще можно получить у дополнительной камеры с помощью replacement shader (или как-то иначе) буфер глубины, где будет содержаться информация об этих вершинах? Ведь реплейсмент шейдер перерисовывает геометрию заного и вместо волн я вижу просто плоскость. А буфер глубины дополнительной камеры без реплейсмента вроде как не получить.

Какого-то хрена, ZWrite игнорируется если нет "Tags{ "LightMode" = "Deferred" }" в deffered rendering моде. При этом игнорируется frag часть шейдера. Что за бред? Как это вообще работает?
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4