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) 输入裁切空间顶点坐标,得到屏幕空间纹理坐标,用于屏幕...
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...
并且,无灯光着色器中使用了一些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....
// TRANSFORM_TEX 得到初始纹理坐标,加上偏移坐标。frac为获取小数部分的值。 o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) + frac(float2(_ScrollX, 0.0) * _Time.y); o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex) + frac(float2(_Scroll2X, 0.0) * _Time.y); ...
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); ...
//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.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)...