Unity 3D HDRP - создание отверстия в игровом объекте с помощью шейдера - PullRequest
0 голосов
/ 16 мая 2019

Проект Unity 2019.1.2f1 HDRP.

Я пытаюсь сделать дыру в готовом игровом объекте, в котором есть материал и шейдер, который не хочет мешать, точкаЭто должно работать с любым объектом, на котором это сделано.Я нашел этот подход где-то еще, но он не работает для версии HD Render Pipeline.В основном, два дополнительных игровых объекта / формы помещаются туда, где должно быть сделано отверстие, один объект имеет подготовительный проход, а другой делает отверстие.

Пример шейдера:

Shader "Custom/HolePrepare" {
    Properties{
    }

    SubShader{
        Tags { "RenderType" = "Opaque" "Queue" = "Geometry+1"}
        ColorMask 0
        ZWrite off
        Stencil {
            Ref 1
            Comp always
            Pass replace
        }

        CGINCLUDE
            struct appdata {
                float4 vertex : POSITION;
            };
            struct v2f {
                float4 pos : SV_POSITION;
            };
            v2f vert(appdata v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }
            half4 frag(v2f i) : SV_Target {
                return half4(1,1,0,1);
            }
        ENDCG

        Pass {
            Cull Front
            ZTest Less

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            ENDCG
        }
        Pass {
            Cull Back
            ZTest Greater

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            ENDCG
        }
    }   
}

и

Shader "Custom/Hole" {
    Properties{
    }
    SubShader{
        Tags{ "Queue" = "Geometry+10" }

        ColorMask RGB
        ZWrite On

        Stencil {
            Ref 1
            Comp notequal
            Pass Zero
        }

        Pass{}
    }
}

Я полагаю, что эти значения не являются теоретически правильными, потому что это не тот пример кода, но так как он не работал для HDRP, я начал играть и посмотреть, получил ли яв любом месте.Шейдер Hole должен иметь ColorMask RGB 0 , однако ничего не происходит, кроме того, что объект отверстия становится невидимым.Это заставило меня поверить, что я не могу использовать трафаретный буфер должным образом.Я дошел до того, что смог пометить пиксели, которые хотел стереть, однако я не могу их стереть.Я хочу иметь возможность стереть эту часть первичного объекта (сыр), чтобы фон (в данном случае пол) был виден.

Есть ли способ сделать это в HDRP?

Shape to make a hole in The hole punching shape Hierarchy

Примечание: Я также пробовал очередь рендерингаПодход сценарием и шейдером в моем проекте HDRP, но безуспешно, хотя тот же самый код работал в стандартном проекте Unity.

...