网格转高斯泼溅
GsplatMesh 从渲染组件提取三角形,通过三角形光栅化在网格表面均匀生成高斯单元。
备注
此功能基于渲染架构。
概览
该脚本组件:
- 从实体层级的网格实例提取三角形。
- 光栅化各三角形生成位置。
- 使用自发光或漫反射材质颜色。
- 内部创建 GSplatContainer。
适合将 3D 模型转为风格化泼溅表示。
基本用法
// Import the script
const { GsplatMesh } = await import('path/to/gsplat-mesh.mjs');
// Add script component to an entity
entity.addComponent('script');
const meshSplat = entity.script.create(GsplatMesh);
// Build splats from another entity's mesh hierarchy
meshSplat.buildFromEntity(sourceEntity, {
splatSize: 0.02,
recursive: true
});
API
buildFromEntity(entity, options)
从实体网格层级构建。
参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
entity | Entity | - | 提取网格的实体 |
options.splatSize | number | 0.01 | 单元尺寸与间距 |
options.recursive | boolean | true | 是否递归查找子节点 |
options.margin | number | 0.65 | 相对 splatSize 的边距系数 |
**尺寸:**越小生成越多、密度越高,间距按此值计算。
**边距:**控制三角形边缘不放单元的距离。0 表示延伸到边缘,较高值避免共享边重叠伪影。
clear()
移除全部单元并销毁内部容器。
meshSplat.clear();
splatCount(只读)
返回当前数量。
console.log(`Generated ${meshSplat.splatCount} splats`);
颜色提取
按以下优先级取材质颜色:
- 非零自发光。
- 漫反射回退。
- 非 StandardMaterial 默认白色。
透明材质还提取不透明度,并减半以补偿重叠。
变换处理
单元生成于脚本所在实体的局部空间:
- 获取源实体世界变换。
- 求逆,将顶点转入局部空间。
- 在该空间生成单元。
因此可用实体位置、旋转、缩放放置结果。
共享容器
生成的容器可供多个 gsplat 组件共享:
// Build splats
meshSplat.buildFromEntity(sourceEntity, { splatSize: 0.05 });
// Get the container
const container = meshSplat.entity.gsplat.resource;
// Share with other entities
anotherEntity.addComponent('gsplat', {
resource: container
});
实时示例
Procedural Mesh 演示将带动画云的地形场景转为泼溅。
程序化网格示例
脚本位置
脚本位于引擎仓库:
scripts/esm/gsplat/gsplat-mesh.mjs