PerInstanceColorAppearance笔记

1
2
3
4
new PerInstanceColorAppearance({
flat: true,
translucent: true,
})

PerInstanceColorAppearance 是 CesiumJS 中用于渲染具有每实例颜色的几何体的外观类。它允许为每个实例指定不同的颜色,从而实现丰富的视觉效果。以下是对 PerInstanceColorAppearance 的一些关键点和使用方法的笔记:

  1. 基本概念

    • PerInstanceColorAppearance 继承自 Appearance 类,专门用于处理每实例颜色的渲染。
    • 它通常与 InstancedGeometry(实例化几何体)一起使用,以提高渲染性能。
    • 每个实例可以通过 Instance 属性中的 color 属性来指定颜色。
      1. 属性
    • flat:布尔值,指示是否使用平面着色。如果为 true,则几何体将以平面方式渲染,没有光照效果。
    • translucent:布尔值,指示几何体是否是半透明的。如果为 true,则几何体将支持透明度。
    • 如下所示
      • flat: true 禁用基于法线的光照计算(即不做漫反射/镜面高光等照明),表面颜色直接使用材质/顶点颜色。适合平面、UI 样式或希望颜色恒定且性能更好的情况。
      • translucent: false 表示材质为不透明,Cesium 会把它放到不透明渲染通道:写入深度缓冲、无需排序,也不会进行混合。若需要半透明效果,应设为 true 并提供 alpha 值及合适的渲染状态(如关闭深度写入或启用混合)
  2. 使用场景

    • 适用于需要渲染大量具有不同颜色的实例化几何体的场景,例如点云、粒子系统等。
    • 可以用于可视化数据,其中每个数据点需要不同的颜色表示。
  3. 示例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    const instance = new GeometryInstance({
    geometry: new BoxGeometry({
    vertexFormat: PerInstanceColorAppearance.VERTEX_FORMAT,
    maximum: new Cartesian3(1.0, 1.0, 1.0),
    minimum: new Cartesian3(-1.0, -1.0, -1.0),
    }),
    modelMatrix: Matrix4.fromTranslation(new Cartesian3(0.0, 0.0, 0.0)),
    attributes: {
    color: ColorGeometryInstanceAttribute.fromColor(Color.RED),
    },
    });
    const appearance = new PerInstanceColorAppearance({
    flat: true,
    translucent: false,
    });
    const primitive = new Primitive({
    geometryInstances: [instance],
    appearance: appearance,
    });
    viewer.scene.primitives.add(primitive);
  4. 性能优化

    • 使用 PerInstanceColorAppearance 可以显著提高渲染大量实例的性能,因为它利用了 GPU 的实例化渲染技术。
    • 通过合理设置 flattranslucent 属性,可以根据需求优化渲染效果和性能。
  5. 限制

    • PerInstanceColorAppearance 主要用于简单的颜色渲染,不支持复杂的材质效果,如纹理映射或光照计算。
    • 适用于需要高性能渲染的场景,但在需要复杂视觉效果时,可能需要考虑其他外观类。
  6. 总结

    • PerInstanceColorAppearance 是 CesiumJS 中一个强大的工具,适用于需要渲染大量具有不同颜色的实例化几何体的场景。通过合理使用其属性和方法,可以实现高效且丰富的视觉效果。