- Home /
Question by
raulrsd · Mar 14, 2015 at 01:56 AM ·
shadersuv coordinates
Shaders: How can I get the UVs of an object that is partially offscreen?
Hello,
First of all let me say I'm pretty noob with shaders.
I'm trying to make a shader to bend the sprites in screen, like this:
The problem comes when a sprite is partially out of camera. It seems like if the shader can't get the UVs that are offscreen and it replies the last pixel until the edge of the screen:
I would like to know if there's a way to get the missing UVs. I know that with a vertex shader I can get the vertices that are offscreen, so I wonder why I can't do the same with the UVs.
This is the code of my shader:
Shader "Custom/AnimalCrossing" {
Properties {
_MainTex ("Base (RGB)", 2D) = "" {}
}
CGINCLUDE
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float2 intensity;
v2f vert( appdata_img v )
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord.xy;
return o;
}
half4 frag(v2f i) : SV_Target
{
half2 coords = i.uv;
half2 realCoordOffs;
realCoordOffs.x = 0.0f;
float halfScreen = (_ScreenParams.x/2.0f);
float xOffset = abs(halfScreen - (coords.x*_ScreenParams.x));
float yOffset = (xOffset * xOffset) / intensity.y;
realCoordOffs.y = yOffset/halfScreen;
float2 newCoord = (i.uv + realCoordOffs);
half4 color = tex2D (_MainTex, newCoord);
return color;
}
ENDCG
Subshader {
Pass {
ZTest Always Cull Off ZWrite Off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDCG
}
}
Fallback off
}
ejemploko.png
(35.9 kB)
ejemplook.png
(66.5 kB)
Comment