《Unity Shader 入门精要》学习记录
在贴纹理的shader中,我们要在Cg代码片中为纹理类型的属性声明一个float4类型的变量 _MainTex_ST。在Unity中,使用 纹理名_ST的方式来生命某个纹理的属性。
其中,ST是缩放和平移的缩写,_MainTex_ST可以让我们得到该纹理的缩放和平移值,_MainTex_ST.xy 是缩放,_MainTex_ST.zw是偏移值,我们可以在面板的纹理属性中调节
在UnityShader入门精要这本书中的例子里,定义了从应用到顶点着色器中包含的 第一组纹理坐标, float4 texcoord : TEXCOORD0; 然后又定义了从顶点着色器到片元着色器中的变量 float2 uv : TEXCOORD2;以便在片元着色器中使用该坐标进行纹理采样
uv的计算是: uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; 其中,v.texcoord.xy 是当前顶点对应的纹理坐标?,然后使用 纹理的 _MainTex_ST.xy 对坐标进行缩放,然后再使用偏移属性 _MainTex_ST.zw对结果进行偏移。不过这个式子可以使用unity自带的 uv = TRANSFORM_TEX(v.texcoord, _MainTex_ST) 进行省略计算
书中例子,注意,一下代码未放到unity中进行试验,仅将书中内容打一遍
1 | Shader "Unity Shaders Book/Chapter 7/Siginle Texture" { |