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) shader代码: o.uv = TRANSFORM_TEX (v.texco...
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); o.texcoord1 = TRANSFORM_TEX(v.texcoord1,_Tex2); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.texcoord); fixed4 col2=tex2D(_Tex2, i.texcoord1...
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) shader代码: o.uv = TRANSFORM_TEX (v.texco...
并且,无灯光着色器中使用了一些UnityCG.cginc头文件中内置的宏,比如说TRANSFORM_TEX、UNITY_TRANSFER_FOG、UNITY_APPLY_FOG。接下来分别把这三个宏简单解释一下。 2.2.1 TRANSFORM_TEX宏 TRANSFORM_TEX宏的定义为: #define TRANSFORM_TEX(tex,name) (tex.xy *name##_ST.xy + name##_ST.zw) 其位于UnityCG....
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 这里注意,第二个参数是要写成纹理名字的,不要写_ST了,因为内部他会帮你补上! 相关代码: Shader "unityShaderBook/chapter7/singleTexture" { Properties { _Color("Color", Color) = (1, 1,1, 1) ...
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; } fixed4 frag(v2f i) : SV_Target{ //计算了世界空间下的法线方向和光照方向 fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos)); ...
o.uv.xy=TRANSFORM_TEX(v.texcoord,_MainTex); o.uv.zw=TRANSFORM_TEX(v.texcoord,_NormalTex); o.scrPos=ComputeGrabScreenPos(o.pos); return o; } fixed4 frag(v2f i):SV_Target { float3 worldViewDir=normalize(UnityWorldSpaceViewDir(i.worldPos)); ...
TRANSFORM_TEX宏的定义为: [cpp]view plaincopy define TRANSFORM_TEX(tex,name) (tex.xy *name##_ST.xy + name##_ST.zw) 其位于UnityCG.cginc(Unity5.2.1版本)的第266行。其可以根据uv坐标来计算真正的纹理上对应的位置(按比例进行二维变换),组合上上文中定义的float4 _MainTex_ST,便可以计算真正的纹理...
//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)); // Use the texture to sample the diffuse color ...