unity屏幕空间坐标shader

46 篇文章 2 订阅
14 篇文章 0 订阅

屏幕坐标效果不受物体在空间位置的影响,

只受到物体本身和视口的影响,有时候可以做一些特殊效果

比如2D游戏平铺纹理,调试屏幕位置,屏幕特效等等


下面是根据官方例子修改的

http://docs.unity3d.com/Manual/SL-ShaderSemantics.html

Shader "Unlit/Show UVs"
{    Properties
{
	[NoScaleOffset]_MainTex("Texture", 2D) = "white" {}
}
SubShader
{
	Pass
{
	CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0

struct v2f {
	float2 uv : TEXCOORD0;
	//out float4 outpos2 : SV_POSITION;
	//float4 pos : SV_POSITION;
};
sampler2D _MainTex;
struct ccc {
	float4 vertex : POSITION; // vertex position input
	float2 uv : TEXCOORD0;// first texture coordinate input

};

v2f vert(ccc c,
	out float4 outpos : SV_POSITION // clip space position output
	)
{
	v2f o;
	//o.outpos2 = mul(UNITY_MATRIX_MVP, vertex);
	outpos = mul(UNITY_MATRIX_MVP, c.vertex);
	o.uv = c.uv;
	return o;

}
   
 
然后是测试代码 

可以通过改动红色代码看到效果

Shader "Unlit/Show UVs"
{    Properties
{
	[NoScaleOffset]_MainTex("Texture", 2D) = "white" {}
}
SubShader
{
	Pass
{
	CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0

struct v2f {
	float2 uv : TEXCOORD0;
	//out float4 outpos2 : SV_POSITION;
	//float4 pos : SV_POSITION;
};

sampler2D _MainTex;
struct ccc {
	float4 vertex : POSITION; // vertex position input
	float2 uv : TEXCOORD0;// first texture coordinate input

};

v2f vert(ccc c,
	out float4 outpos : SV_POSITION // clip space position output
	)
{
	v2f o;
	outpos = mul(UNITY_MATRIX_MVP, c.vertex);
	o.uv = c.uv;
	return o;
}
//screenPos.xy就是讲像素点0.5具象化
//每个格子相当于一个像素 这是其他博主的理解 我再次理解下就是说半像素问题0.5像素是半透明的
//整个不再边缘的像素才是原本设置的颜色
//像素坐标的类型是不同的,所以为了方便使用 UNITY_VPOS_TYPE 类型

fixed4 frag(v2f i,
	UNITY_VPOS_TYPE screenPos : VPOS
	) : SV_Target
{
//clip(checker);//停止渲染负值部分,0和正的会被渲染
fixed4 c = fixed4(screenPos.x-2, screenPos.y -2,0,0);
return c;
}
ENDCG
}
}
}



可以看到如上面设置的时候,在边缘可以看到半透明的红色和绿色的像素线,这个就是
screenPos.x  和 screenPos.y的具像化

其他地方是黄色因为其他地方的值超过了1也就是说绿色和红色都是1,所以加起来是黄色

如果你使用

fixed4 c = fixed4(screenPos.x-1 , screenPos.y-1,0,0);
会看到下面效果(注意这是放大了的结果)


发现有红色和绿色偏移了

但是通过取色,发现颜色并不准确,因为最边缘一个像素会被窗口边界上色(大概)

如果偏移2个像素就会发现中间的一行是正常的颜色


另外说下默认状态可能ps取色有色彩,需要改一下取色器的采样设置






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值