builtin
builtin
创建一个节点,以字符串方式直接引用/写入底层着色器的内建变量(如 gl_FragDepth、gl_PointSize、gl_ClipDistance[i])。常用于硬件加速裁剪、深度覆写等场景。
核心优势
零样板、直达底层:无需声明 uniform/varying,也不必封装专用节点,即可对可写的内建变量赋值;可解锁硬件级裁剪(clip distance)等能力。
常见用途
硬件加速的平面/体裁剪:写入 gl_ClipDistance[i](或目标后端的等价内建)
自定义片元深度:写入 gl_FragDepth 以实现深度偏移/排序控制
控制点精灵大小:写入 gl_PointSize 以实现点云/粒子尺寸调制
其他后端暴露的可写内建(视平台支持而定)
如何调整
唯一参数是内建变量名字符串。此节点默认按 float 处理,建议选择标量内建(如 gl_FragDepth、gl_PointSize),或对数组/向量使用索引/分量(如 gl_ClipDistance[0])。不同后端内建名可能不同(GLSL 以 gl_ 开头;其他后端可能有等价名称),请按目标运行环境传入正确标识符。注意部分内建在特定阶段为只读,写入仅在平台支持时生效。
代码示例
1// 1) 平面裁剪(写 gl_ClipDistance[0])
2const clip0 = builtin('gl_ClipDistance[0]');
3clip0.assign( dot( vec4( positionWorld, 1.0 ), planeWorld ) );
4
5// 2) 自定义片元深度(写 gl_FragDepth)
6const fragDepth = builtin('gl_FragDepth');
7fragDepth.assign( viewZToPerspectiveDepth( positionView.z, cameraNear, cameraFar ) );
8
9// 3) 控制点大小(写 gl_PointSize)
10const pointSize = builtin('gl_PointSize');
11pointSize.assign( materialPointSize.mul( 1.5 ) );