shader代码学习1

sampler2D _MainTex;
float4 _MainTex_TexelSize;
half3 BoxFilter(float2 uv)
{
      half2 upL,upR,downL,downR;
                
      upL =_MainTex_TexelSize.xy * half2(-1,1);
      upR =_MainTex_TexelSize.xy * half2(1,1);
      downL =_MainTex_TexelSize.xy * half2(-1,-1);
      downR =_MainTex_TexelSize.xy * half2(1,-1);

      half3 col = 0;

      col += Sample(uv+upL)*0.25;
      col += Sample(uv+upR)*0.25;
      col += Sample(uv+downL)*0.25;
      col += Sample(uv+downR)*0.25;

      return col;
}

首先看 _MainTex_TexelSize;
在这里插入图片描述
https://docs.unity3d.com/cn/current/Manual/SL-PropertiesInPrograms.html

所以_MainTex_TexelSize 其实是那个纹理的相关信息
upL =_MainTex_TexelSize.xy * half2(-1,1);
这个就是取得当前坐标的 左上uv偏移量
col += Sample(uv+upL)*0.25;
再加上真实uv坐标就是取这个uv的左上的颜色

注意几点
_MainTex_TexelSize.y < 0.0是用于判断是否开启了抗锯齿,在Direct3D平台下,如果我们开启了抗锯齿,则xxx_TexelSize.y 会变成负值,好让我们能够正确的进行采样。

顺便提一句
UV坐标 Direct3D 和 OpenGL 不同
Direct3D 是左上角
OpenGL 是左下角

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值