UnityCG.cginc中TRANSFORM_TEX(纹理转换)定义如下: // Transforms 2D UV by scale/bias property #define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw) 凹凸映射 两种方法: - 切线空间下计算光照:光照方向、视角方向需要变换到切线空间计算。 - 世界空间下计算光照:把采样得到的法线...
在vert函数新增代码,TRANSFORM_TEX是Unity内置的uv处理函数,内部原理是v.uv * _EmissionTex_ST.xy + _EmissionTex_ST.zw,这里o.uv2也可以直接等于v.uv,只不过_EmissionTex就没有办法调整它的Tiling与Offset参数值了。 o.uv2=TRANSFORM_TEX(v.uv,_EmissionTex); frag函数的处理。 half_EmissionStrength;sampler2...
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) 配合使用时的代码:...
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.uv,_MainTex); return o; } float4 frag(v2f i):COLOR{ //float3 texCol = tex2D(_MainTex,i.uv).rgb; //float4 outp = texcol; //fade作为alpha fixed3 worldnormal = normalize(i.worldnormal); fixed3 worldLight = normalize(UnityWorldSpaceLightDir(i.worldPos))...
// 简单来说,TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算, // 确保材质球里的缩放和偏移设置是正确的 o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); returno; } // SV_Target可以视为COLOR ,虽说他也是作为输出值输出给系统的 ...
//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)); ...
// 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); ...
并且,无灯光着色器中使用了一些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) ...
;v2f vert(a2v v){v2f o;o.pos=UnityObjectToClipPos(v.vertex);o.scrPos=ComputeGrabScreenPos(o.pos);o.uv.xy=TRANSFORM_TEX(v.texcoord,_MainTex);o.uv.zw=TRANSFORM_TEX(v.texcoord,_BumpMap);float3 worldPos=mul(unity_ObjectToWorld,v.vertex).xyz;fixed3 worldNormal=UnityObjectToWorldNormal...