Bumped Distort shader Unity 5.6.1 VR Single pass stereo rendering

Seems like shader does not work as intended even with
#if UNITY_SINGLE_PASS_STEREO
i.uvgrab.xy = TransformStereoScreenSpaceTex(i.uvgrab.xy, i.uvgrab.w);
#endif

Unity 5.6.1 VR Single pass stereo rendering Win 10 Oculus VC1

Thanks

Gentlemans, what should i fix in GlassStainedBumpDistort.shader

// Per pixel bumped refraction.
// Uses a normal map to distort the image behind, and
// an additional texture to tint the color.

Shader "FX/Glass/Stained BumpDistort" {
Properties {
    _BumpAmt  ("Distortion", range (0,128)) = 10
    _MainTex ("Tint Color (RGB)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
}

Category {

    // We must be transparent, so other objects are drawn before this one.
    Tags { "Queue"="Transparent" "RenderType"="Opaque" }


    SubShader {

        // This pass grabs the screen behind the object into a texture.
        // We can access the result in the next pass as _GrabTexture
        GrabPass {
            Name "BASE"
            Tags { "LightMode" = "Always" }
        }
       
        // Main pass: Take the texture grabbed above and use the bumpmap to perturb it
        // on to the screen
        Pass {
            Name "BASE"
            Tags { "LightMode" = "Always" }
           
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"

struct appdata_t {
    float4 vertex : POSITION;
    float2 texcoord: TEXCOORD0;
};

struct v2f {
    float4 vertex : SV_POSITION;
    float4 uvgrab : TEXCOORD0;
    float2 uvbump : TEXCOORD1;
    float2 uvmain : TEXCOORD2;
    UNITY_FOG_COORDS(3)
};

float _BumpAmt;
float4 _BumpMap_ST;
float4 _MainTex_ST;

v2f vert (appdata_t v)
{
    v2f o;
    o.vertex = UnityObjectToClipPos(v.vertex);
    o.uvgrab = ComputeGrabScreenPos(o.vertex);
    o.uvbump = TRANSFORM_TEX( v.texcoord, _BumpMap );
    o.uvmain = TRANSFORM_TEX( v.texcoord, _MainTex );
    UNITY_TRANSFER_FOG(o,o.vertex);
    return o;
}

sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
sampler2D _BumpMap;
sampler2D _MainTex;

half4 frag (v2f i) : SV_Target
{
    #if UNITY_SINGLE_PASS_STEREO
    i.uvgrab.xy = TransformStereoScreenSpaceTex(i.uvgrab.xy, i.uvgrab.w);
    #endif

    // calculate perturbed coordinates
    half2 bump = UnpackNormal(tex2D( _BumpMap, i.uvbump )).rg; // we could optimize this by just reading the x & y without reconstructing the Z
    float2 offset = bump * _BumpAmt * _GrabTexture_TexelSize.xy;
    #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5)
        i.uvgrab.xy = offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(i.uvgrab.z) + i.uvgrab.xy;
    #else
        i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
    #endif

    half4 col = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(i.uvgrab));
    half4 tint = tex2D(_MainTex, i.uvmain);
    col *= tint;
    UNITY_APPLY_FOG(i.fogCoord, col);
    return col;
}
ENDCG
        }
    }

    // ------------------------------------------------------------------
    // Fallback for older cards and Unity non-Pro

    SubShader {
        Blend DstColor Zero
        Pass {
            Name "BASE"
            SetTexture [_MainTex] {    combine texture }
        }
    }
}

}

We have the same problem.
Unity 5.6.1 VR Single pass stereo rendering broken everything…

Yep. There are definite shader problems in Unity 5.6.1p3 and single pass stereo rendering (and the Vive).

I’ve opened:
(Case 921280) Single Pass renderinng not working with Particle Systems that have been upgraded

The QA team is looking at the bug report I submitted. Sunyifeng, have you filed your own bug report for this? Can you provide any more specific information about what problem you are having (are you using the Vive or the Rift?). Was the issue you are having working in any previous versions of unity? 5.6? 5.5?

VR SPSR in Unity 5.5 works fine.

Having the same issue in 2017.1.0p5; GlassStainedBumpDistort.shader from the standard assets is not working in SPSR (inversely rotates the reflections/refractions along with the camera) despite the #IF UNITY_SINGLE_PASS_STEREO fragment. @Konst , did you manage to resolve this?

OK. If you simply remove these three lines from the shader, it works in SPSR. It seems the “fix” is no longer applicable.

#if UNITY_SINGLE_PASS_STEREO
   i.uvgrab.xy = TransformStereoScreenSpaceTex(i.uvgrab.xy, i.uvgrab.w);
#endif

I’ve opened case 946318 specifically for the glass stained bump distort shader so hopefully it will be fixed in future standard asset releases.

2 Likes