Unity3d 难以理解tex2Dlod的工作原理

Unity3d 难以理解tex2Dlod的工作原理,unity3d,shader,textures,geometry-shader,Unity3d,Shader,Textures,Geometry Shader,我不熟悉着色器编程。我只是参考一些博客来了解这方面的更多信息。我偶然发现了这篇文章 根据他们的说法,他们正在使用置换纹理来计算风的贡献 “我们通过采样位移来计算风的贡献 纹理。“ 以上代码的解释如下所示 风纹理的采样发生在第113-114行,它是 这和我们已经见过很多次的方法差不多 要置换纹理:对纹理进行采样,请偏移UV(此处 它是世界位置的x和z分量),然后映射 从-1到1,再乘以 效果 中点此处表示三角形的中点。 据我所知,在mul(unity_ObjectToWorld,middpoint

我不熟悉着色器编程。我只是参考一些博客来了解这方面的更多信息。我偶然发现了这篇文章

根据他们的说法,他们正在使用置换纹理来计算风的贡献

“我们通过采样位移来计算风的贡献 纹理。“

以上代码的解释如下所示

风纹理的采样发生在第113-114行,它是 这和我们已经见过很多次的方法差不多 要置换纹理:对纹理进行采样,请偏移UV(此处 它是世界位置的x和z分量),然后映射 从-1到1,再乘以 效果

中点
此处表示三角形的中点。 据我所知,在
mul(unity_ObjectToWorld,middpoint)中我们正在获得中点的世界位置

我真的不明白发生了什么事

  float2 windTex = tex2Dlod(_WindTexture, float4(worldPos.xz * 
    _WindTexture_ST.xy + _Time.y * _WindSpeed, 0.0, 0.0)).xy;
我真的不明白.xz和.xy是如何工作的!我到处都找了,还是抓不住


有人能解释一下吗?谢谢大家!

它叫
worldPos.xz*\u WindTexture\u ST.xy+\u Time.y*\u风速
相当于
float2(worldPos.x,worldPos.z)*float2(\u WindTexture\u ST.x,\u WindTexture\u ST.y)+float2(\u Time.y*\u风速,\u Time.y*\u风速)
@Pluto非常感谢!你对tex2Dlod也有什么想法吗?你可以看看。
tex2Dlod(s,t)
使用mipmap LOD
t.w
在uvs
t.xy
处采样
s
。在该
float4(worldPos.xz*..,0,0)
t.w中,最后一个组件是0。这里也使用tex2Dlod而不是tex2D,因为它位于顶点着色器侧,没有坐标的屏幕空间导数可用于自动确定mipmap级别
  float2 windTex = tex2Dlod(_WindTexture, float4(worldPos.xz * 
    _WindTexture_ST.xy + _Time.y * _WindSpeed, 0.0, 0.0)).xy;