找回密码
 立即注册
查看: 372|回复: 0

[简易教程] 【unity Shader 菜鸡教程】3-3 纹理采样

[复制链接]
发表于 2022-9-29 06:32 | 显示全部楼层 |阅读模式
纹理采样,就是通过uv获取贴图对应位置的颜色。
fixed4 col = tex2D(_MainTex, i.uv);

比如一张512*512的贴图,uv值是(0.5,0.5),此时采样到的就是中心点的颜色值。
大多数情况下,贴图的使用大都应用在3D物体上,那这些3D物体,是怎么和这张图贴上的uv对应起来的呢?这里就有一个纹理映射的概念。
纹理映射可以看下Games101,第八章 55分左右开始 【GAMES101-现代计算机图形学入门-闫令琪】 GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili
tex2D(_MainTex, i.uv);
// tex2D(贴图变量名,uv)这里补充一下uv的解析。
_MainTex ("Texture", 2D) = "white" {}
....
sampler2D _MainTex;
float4 _MainTex_ST;
.....
o.uv = TRANSFORM_TEX(v.uv, _MainTex);定义一张贴图,除了变量命名 _MainTex,还有一个_MainTex_ST 的定义。这里的 ST 表示的应该是缩放和位移的意思。通过查找 TRANSFORM_TEX 函数,看看它实际干了啥。
// Transforms 2D UV by scale/bias property
#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)那么实际操作就是
//o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.uv = v.uv.xy * _MainTex_ST.xy + _MainTex_ST.zw这个时候,回到材质球的面板上


通过修改面板上的 Tiling和Offset,可以修改纹理的缩放和偏移。_MainTex_ST.xy 对应的就是Tiling,_MainTex_ST.zw 对应的就是 Offset。如果不需要修改贴图的缩放和偏移,那么 TRANSFORM_TEX 这个函数是可以不调用的,所以会常看到一些uv的写法是
o.uv = v.uv;回到纹理本身,讲下纹理的格式。这里提 wrap Mode 这个比较常用的属性


官方文档 Texture Import Settings
Wrap Mode
选择纹理平铺时的行为方式。默认选项为 Repeat。
Repeat在区块中重复纹理。
Clamp拉伸纹理的边缘。
Mirror在每个整数边界上镜像纹理以创建重复图案
Mirror Once镜像纹理一次,然后将其钳制到边缘像素。注意:某些移动设备不支持 Mirror Once 模式。在这种情况下,Unity 将改用 Mirror 模式。
Per-axis选择此选项可单独控制 Unity 如何在 U 轴和 V 轴上包裹纹理。



                Repeat (左)                                           Clamp     (中)                                        Mirror   (右)                              

举例,贴图的偏移能做什么呢?
比如常见的老虎机数字滚动效果


em,效果看起来不太好看,但是就是差不多这样的思路,通过修改偏移来达到自己的效果。像特效中的一些动画,比如流光,爆炸的一些序列帧动画,都可以使用贴图偏移来实现。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-25 00:42 , Processed in 0.091837 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表