Closed ytgui closed 5 years ago
tex2D(textureMap, texCoord, ddx(texCoord), ddy(texCoord))
is equivalent to your tex2D, though of course you could use something else as the derivative. tex2Dlod(textureMap, float4(texCoord.xy, 0, lod))
tex2D(sampler2D tex, float4 uv)
{
float lod = CalcLod(ddx(uv), ddy(uv));
uv.w = lod;
return tex2Dlod(tex, uv);
}
float mipmapLevel(float2 uv, float2 textureSize)
{
float dx = ddx(uv * textureSize.x);
float dy = ddy(uv * textureSize.y);
float d = max(dot(dx, dx), dot(dy, dy));
return 0.5 * log2(d); // 0.5是技巧,本来是d的平方。
}
https://zhuanlan.zhihu.com/p/26393153 https://blog.csdn.net/u010468553/article/details/80572641 https://blog.csdn.net/chy555chy/article/details/80177015