访问 XML3D 中的渲染管道:对象突出显示

Access to render pipeline in XML3D: Object highlightning

我想让对象在被选中时突出显示为此我需要一个自定义着色器来缩放以呈现模型轮廓 - 这部分任务我很熟悉 - XML3D 提供了一种实现方式自定义着色器。

但缺少的部分是可以访问渲染管道: 如果不复制模型并将其绘制在旧模型上,就不可能做出漂亮的突出显示 或分两次渲染场景(后处理)。 以通常的方式创建另一个模型副本(将新元素附加到 dom 树)不会解决问题,因为我还需要控制场景混合。

如何使用 xml3d 完成它? 不深入图书馆是否可行?

通常有四种实现高亮显示的方法:

  1. 可以来回交换材料(效率不是很高)
  2. 您可以对高亮对象使用material overrides,这将适应当前着色的一个或多个参数(例如自发光颜色)
  3. 您可以将自定义着色器与指示对象应突出显示的任意统一属性结合使用。在着色器中,您可以根据属性调整颜色和渲染。例如。您可以进行边缘突出显示或线框渲染。 Here is an example 用于为对象着色的着色器,如果统一 selected 具有特定值。 例如:
    <mesh id="foo"> <data src="mesh-data.json"></data> <float name="selected">0</float> </mesh>
    要突出显示此对象:$("#foo float[name=selected]").text("1");
  4. 您可以adapt the rendering pipeline渲染突出显示的对象两次并以各种方式混合

如果足以满足您的用例,我会推荐方法 3,因为它不是很具有侵入性。创建自定义渲染管线的接口还不是很稳定

正如 ksons 提到的,渲染管道接口目前正在经历一些重大变化,XML3D 4.8 是最后一个以当前形式支持它的版本。 5.0 版可能会以(希望)大大改进的形式重新引入它。

我们在我们的一个内部项目中使用自定义渲染管道在选定模型上绘制线框叠加层,我发布了一个 simplified version of this pipeline 作为要点供您查看。本质上,它使用标准内部渲染通道渲染场景,然后进行第二次渲染,以未经深度测试的粗略线框模式绘制突出显示的对象。

正如我所说,这在 v4.8 中有效,如果您在 v4.9 中需要此功能,请 open an issue 我会考虑将其作为次要版本重新启用。