textureSize
textureSize
在着色器内部,获取一个给定纹理在特定Mipmap层级的尺寸(以像素为单位的宽度和高度)。
核心优势
它使得创建分辨率无关的效果(如描边、像素化)成为可能,并且对于任何需要在归一化UV空间和绝对像素坐标之间进行转换以访问相邻像素的算法来说,都是必不可少的。
常见用途
计算单个像素(Texel)的大小
以像素精度生成程序化图案
实现自定义的纹理过滤与采样算法
如何调整
作为一个提供数据的节点,它的调整没有直接的视觉效果。改变 `levelNode` 输入(例如从 `int(0)` 改为 `int(2)`)会改变输出的尺寸向量(例如变为原始尺寸的1/4),这会相应地缩放任何依赖于它的效果,比如让一个像素化效果的像素块大4倍。
代码示例
1
2// 获取纹理基础Mip层级(0)的尺寸
3const texSize = textureSize( myTexture, int( 0 ) );
4
5// 计算单个像素在UV空间(0-1)中的大小
6const texelSize = vec2( 1.0 ).div( texSize );
7
8// 用它来采样右侧的相邻像素
9const rightPixelColor = texture( myTexture, uv().add( vec2( texelSize.x, 0 ) ) );