- Home /
Question by
Naash · Jul 10, 2015 at 02:29 PM ·
unity 5rendertextureshader-replacement
Why is it that when I set my XRay shader as Camera's replacementShader , all gameobjects disappear ??
Basically for my game , I want to provide a XRay scanning feature , so that player can find gameobjects hidden inside other objects. So I made another camera render its view on a texture which is applied on a plane fixed onto main camera 'like a HUD'. Problem is when I set the camera's replacementShader to my XRay shader , all objects disappear . I guess problem lies in setting the replacement shader as XRay shader works as expected when attached on gameobjects. I attach shader as follows. Shader is attached on a material for time being so that I can modify it's uniform values.
xrayCam.SetReplacementShader(mat.shader, null);
Shader code is as follows
Shader "Custom/XRayShader" {
Properties {
_Color("_Color", Color) = (0,1,0,1)
_Inside("_Inside", Range(0,1) ) = 0.2
_Rim("_Rim", Range(0,2) ) = 1
}
SubShader {
Tags { "Queue" = "Transparent" }
LOD 80
Pass {
Name "Darken"
Cull off
Zwrite off
Blend dstcolor zero
CGPROGRAM
#pragma vertex vert_surf
#pragma fragment frag_surf
#pragma fragmentoption ARB_precision_hint_fastest
//#pragma multi_compile_fwdbase
#include "HLSLSupport.cginc"
#include "UnityCG.cginc"
struct v2f_surf {
half4 pos : SV_POSITION;
fixed4 finalColor : COLOR;
};
uniform half4 _Color;
uniform half _Rim;
uniform half _Inside;
v2f_surf vert_surf (appdata_base v) {
v2f_surf o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
half3 uv = mul( (float3x3)UNITY_MATRIX_IT_MV, v.normal );
uv = normalize(uv);
o.finalColor = lerp(half4(1,1,1,1),_Color,saturate(max(1- pow (uv.z,_Rim),_Inside)));
return o;
}
fixed4 frag_surf (v2f_surf IN) : COLOR {
return IN.finalColor;
}
ENDCG
}
Pass {
Name "Lighten"
Cull off
Zwrite off
Blend oneminusdstcolor one
CGPROGRAM
#pragma vertex vert_surf
#pragma fragment frag_surf
#pragma fragmentoption ARB_precision_hint_fastest
//#pragma multi_compile_fwdbase
#include "HLSLSupport.cginc"
#include "UnityCG.cginc"
struct v2f_surf {
half4 pos : SV_POSITION;
fixed4 finalColor : COLOR;
};
uniform half4 _Color;
uniform half _Rim;
uniform half _Inside;
v2f_surf vert_surf (appdata_base v) {
v2f_surf o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
half3 uv = mul( (float3x3)UNITY_MATRIX_IT_MV, v.normal );
uv = normalize(uv);
o.finalColor = lerp(half4(0,0,0,0),_Color,saturate(max(1- pow (uv.z,_Rim),_Inside)));
return o;
}
fixed4 frag_surf (v2f_surf IN) : COLOR {
return IN.finalColor;
}
ENDCG
}
}
//FallBack "Diffuse"
}
Any Ideas as to what might be the issue ?? Any other better approach to achieve the the feature is also welcome .
Thanks... Nishant
Comment