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) 配合使用时的代码:...
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 我们将对噪声纹理进行采样,并将其与我们的表面颜色相结合以渲染波浪。 float surfaceNoiseSample = tex2D(_SurfaceNoise, i.noiseUV).r; return waterCo...
o.uv = i.texcood.xy * _MainTex_ST.xy + _MainTex_ST.zw; 对于这一句也有相关的封装: o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 这里注意,第二个参数是要写成纹理名字的,不要写_ST了,因为内部他会帮你补上! 相关代码: Shader "unityShaderBook/chapter7/singleTexture" { Properties { _Color(...
并且,无灯光着色器中使用了一些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); return o; } fixed4 frag(v2f i) : SV_Target{ //计算了世界空间下的法线方向和光照方向 fixed3 worldNormal = normalize(i.worldNormal); fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos)); ...
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; ...
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,便可以计算真正的纹理...
(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)...