floatBitsToUint
floatBitsToUint
将浮点数或浮点向量按位重解释为等尺寸的无符号整数类型;不改变任何比特,仅改变类型解释。
核心优势
无损获取浮点底层比特,便于对结果执行位运算、数据打包/解包、哈希与 GPGPU 数据通道对接。
常见用途
对浮点结果进行位掩码、移位、位计数等运算
与 uintBitsToFloat 配对用于数据打包/解包
将连续噪声/随机值重解释为稳定的无符号整数种子
把 float 结果写入需要 uint 的纹理/缓冲(同位宽存储)
如何调整
输入必须为 float 或 vecN,输出为 uint 或 uvecN。若需挑选某一比特,可用 shiftLeft 构造掩码:bitAnd( floatBitsToUint(x), shiftLeft( uint(1), n ) ).greaterThan(0)。可将 uint 转为 float 并归一化以便可视化。注意它与 uint(x) 不同,后者是数值转换而非位级重解释。
代码示例
1// 由 UV 生成一条 [0,1] 波形
2const v = sin( uv().x.mul( 32.0 ) ).mul( 0.5 ).add( 0.5 );
3
4// 按位重解释为 uint(不做数值转换)
5const bits = floatBitsToUint( v );
6
7// 取最低位,得到黑白条纹
8const mask = bitAnd( bits, uint( 1 ) ).greaterThan( 0 );
9
10// 应用到颜色
11material.colorNode = cond( mask, color( 'white' ), color( 'black' ) );