Проблема с слоями

Скрипт отвечающий за прорисовку облаков (ассет TrueClouds) не хочет работать за неотрисованной шейдером частью платформы.

Вид игрока

Вид с сцены

Те объекты, что мы хотим показать задаем в WorldBlockingMask, то есть объекты на которых есть слои, что перечислены в WorldBlockingMask не будут перекрываться облаками.

Я заметил, что WorldBlockingMask используется один раз.

private void ApplyBlits(RenderTexture source, RenderTexture destination)
{
   Graphics.Blit(source, destination);

   _tempCamera.clearFlags = CameraClearFlags.Color;
   _tempCamera.backgroundColor = Color.white;

   _tempCamera.rect = new Rect(Vector2.zero, Vector2.one);

   _worldDepth.DiscardContents();
   _tempCamera.targetTexture = _worldDepth;
   _tempCamera.cullingMask = WorldBlockingMask;
   _tempCamera.RenderWithShader(depthShader, "RenderType");

   ... //Остальной код
}

Шейдер что обрезает мою платформу использует discard для этого

Pass 
{
    Cull Front
    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
    #include "UnityCG.cginc"
    struct v2f 
    {
        float4 pos : SV_POSITION;
        float4 worldPos : TEXCOORD0;
    };
    v2f vert(appdata_base v)
    {
        v2f o;
        o.pos = UnityObjectToClipPos(v.vertex);
        o.worldPos = mul(unity_ObjectToWorld, v.vertex);
        return o;
    }
    float _Val;
    fixed4 frag(v2f i) : SV_Target 
    {
        if(i.worldPos.z < _Val) discard;
        return half4(1,1,1,1);
    }
    ENDCG
}

Скажите пожалуйста, как отрисовать облака за неотрисованной частью платформы.

Если нужны еще дополнения, напишите пожалуйста в комментариях


Ответы (0 шт):