#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw) Above is the macro. This code is found in , which is included in the Built in shaders package that can be found here.TRANSFORM_TEXUnityCG.cginc 我们将对噪声纹理进行采样,并将其与我们的表面颜色相结合以渲染波浪。
TRANSFORM_TEX方法比较简单,就是将模型顶点的uv和Tiling、Offset两个变量进行运算,计算出实际显示用的定点uv。 该方法可以在UnityCG.cginc文件中找到,内容也很简单: // Transforms 2D UV by scale/bias property define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw) 配合使用时的代码:...
1. TRANSFORM_TEX(tex,name) 宏定义,输入UV坐标和纹理名称,得到贴图的纹理坐标 2. Fixed3 UnpackNormal(fixed4 packnormal) 将法线从[0,1]映射到[-1,1] 3. Half Luminance(half3 rgb) 将颜色数据转变为灰度数据 4. Float4 ComputeScreenPos(float4 pos) 输入裁切空间顶点坐标,得到屏幕空间纹理坐标,用于屏幕...
//o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag(v2f i) : SV_Target{ //计算了世界空间下的法线方向和光照方向 fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos)); //使用tex2D函数对纹理进行采样,第...
o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } //片元着色器函数的定义,接收顶点着色器传递的数据,并计算最终的像素颜色。 fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); ...
UnityCG.cginc中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.texcoord, _MainTex); return o; } //定义片元shader fixed4 frag(v2f i) : SV_Target { //unity自身的diffuse也是带了环境光,这里我们也增加一下环境光 fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * _Diffuse.xyz; ...
//o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } 在顶点着色器中,我们使用纹理的属性值_MainTex_ST来对顶点纹理坐标进行变换,得到最终的纹理坐标。计算过程是,首先使用缩放属性_MainTex_ST.xy对顶点纹理坐标进行缩放,然后在使用偏移属性_MainTex_ST.zw对结果进行偏移。unity提供了一个内置宏TRANSFORM...
(unity_ObjectToWorld,v.vertex).xyz;//等效下面 这句加上 _MainTex_ST的定义才能让shader面板上的tiling和offset起作用o.uv=v.texcoord.xy*_MainTex_ST.xy+_MainTex_ST.zw;//对纹理进行缩放平移变化 参数:纹理顶点、纹理变量 变化参数会从 _ST那个变量中提取//o.uv = TRANSFORM_TEX(v.texcoord,_MainTex)...
//顶点转裁剪空间下的坐标(即最终显示的坐标)//等同于o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);o.pos=UnityObjectToClipPos(v.vertex);//普通纹理o.uv0=v.uv0;o.uv0=TRANSFORMTEX(v.uv0,MainTexST);//LightMap UVo.uv1=v.uv1;o.uv1=v.uv1*unity LightmapST.xy+unity LightmapST.zw;o....