拼接后的纹理:
正常的草地(不进行WRAP寻址):
WRAP = 5时的情况:
MinFilter= Linear时的情况:
shader实现:
sampler2D atlasTexture; float4 texRect; //(left, top, width, height) of uv float2 invSize; //(1/width, 1/height) float4 uvRange; //(left, top, right, bottom) of uv float4 ps_main( float2 tex : TEXCOORD0 ) : COLOR { // convert original uv to atlas uv's unit tex *= texRect.zw; float2 uv = tex - texRect.xy; // bring coordinates into normalized local texture coord [0..1] uv *= invSize; // if texture repeats then coords are > 1, use frc to bring // these coords back into [0, 1) interval. uv = frac(uv); // transform coords back to texture atlas coords uv = uv * texRect.zw + texRect.xy; // clamp to inside texture (to avoid bi-linear filter pulling in foreign texels) uv = clamp(uv, uvRange.xy, uvRange.zw); // use the original coords for mip-map calculation return tex2Dgrad(atlasTexture, uv, ddx(tex), ddy(tex)); }
Reference:
ShaderX3 : Improved Batching via Texture Atlases
本文介绍了一种利用纹理图集进行纹理拼接的方法,并通过Shader实现纹理的高效使用。文中详细展示了如何通过转换坐标、规范化纹理坐标以及避免越界等步骤来优化纹理的加载与显示过程。
7677

被折叠的 条评论
为什么被折叠?



