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); fixed4 finalCol=col*col2; UNITY_OPAQUE_ALPHA(finalCol...
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.texcoord, _...
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)); ...
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; } 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 ...
这些情况下,tex2D 函数返回的变量类型可能会有所不同,例如 float3 类型的向量。在这种情况下,我们可以通过查看着色器程序代码中变量的定义来确定纹素值的类型和通道数。 一般使用 1.顶点着色器中,先使用TRANSFORM_TEX 转换成UV 2.片段着色器中,对纹理图,uv进行采样,使用tex2D...
o.uv_Illum = TRANSFORM_TEX(v.texcoord, _Illum); o.uvScroll = TRANSFORM_TEX((v.texcoord.xy+_Time.x*_ScrollingSpeed.xy), _Tex); o.uvLM = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; returno; } float4 frag (v2f i) : COLOR ...