【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende

文章目录

  • 一、绳/杆渲染
    • 1.1 Obi路径平滑器(ObiPathSmoother)
      • 1.1.1 抽取(Decimation)
      • 1.1.2 平滑(Smoothing)
      • 1.1.3 部分捻/扭度(Section twist)
    • 1.2 四种Rope renderers(绳的渲染组件)
      • 1.2.1 ObiRopeExtrudedRenderer (默认)
      • 1.2.2 ObiRopeLineRenderer
      • 1.2.3 ObiRopeChainRenderer
      • 1.2.4 ObiRopeMeshRenderer (最昂贵)

一、绳/杆渲染

在每一帧结束时,绳子模拟完成后,渲染就开始了。有几个渲染组件可用,具有不同的外观和性能特征。它们中的大多数并不直接使用基于原始粒子的 rope 表示。相反,一个名为 ObiPathSmoother 的附加组件生成一个基于帧的绳子的中间表示(可选择抽取(decimated),平滑(smoothed )或扭曲(smoothed )),渲染器将其作为输入进行渲染

你不需要手动添加 ObiPathSmoother 组件,所有需要的渲染器都会自己添加它。

1.1 Obi路径平滑器(ObiPathSmoother)

三个重要的属性

1.1.1 抽取(Decimation)

阈值用于根据其曲率自适应地减少绳帧的数量。在内部,它使用了Rmer - Douglas - Peucker抽取算法的迭代变体。将decimation设置为零不会执行任何缩减。更高的值将从绳子的直线部分移除帧,使渲染更轻便。

下面的图片显示了在线框模式下使用 ObiRopeExtrudedRenderer 渲染的绳子,可以清楚地看到抽取的效果:

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第1张图片

1.1.2 平滑(Smoothing)

平滑迭代应用于抽取后的绳几何。在内部,它使用了 Chaikin 的切角算法的封闭形式变体。将平滑设置为0将不执行任何平滑。更高的值将在现有帧之间插入额外的帧。将低“分辨率(粒子密度)”蓝图值与高“平滑”值相结合,可以生成由很少颗粒组成的视觉上令人愉悦的绳索。

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第2张图片

1.1.3 部分捻/扭度(Section twist)

每个绳段的捻度。例如,如果您想制作一个链,其中每个链接相对于前一个扭曲90度,则此值应该为90。
【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第3张图片

1.2 四种Rope renderers(绳的渲染组件)

在路径平滑组件生成基于帧的绳子表示后,渲染器使用它来输出可见的几何形状。绳索和杆都支持4种不同的渲染组件:

  1. ObiRopeExtrudedRenderer:沿着绳子的主轴挤压ObiRopeSection资源。这是默认的渲染器。
  2. ObiRopeLineRenderer:沿着绳子的主轴生成一个面向摄像机的三角形带,类似于Unity的TrailRenderer。这通常比ObiRopeExtrudedRenderer更加节省性能。
  3. ObiRopeChainRenderer:沿绳段生成预制件。
  4. ObiRopeMeshRenderer:沿着绳子的路径变形网格的多个实例。这是最昂贵的渲染器,不支持调整大小或撕裂。

1.2.1 ObiRopeExtrudedRenderer (默认)

通过挤压 ObiRopeSection,沿着构成绳子的粒子生成光滑的连续网格。不需要手动创建网格或几何图形。所有这些都是自动生成的。

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第4张图片

使用过程模式和默认绳索部分渲染绳索。

渲染器的参数:

  • UV锚(UV Anchor):纹理坐标原点所在的绳子上的点。它用标准化坐标表示:0是绳子的起点,1是绳子的终点。
  • UV缩放(UV Scale):缩放绳网格中的纹理坐标。
  • Normalize V(Normalize V):强制V纹理坐标在绳子开始处为0,在绳子结束处为V刻度。如果你不想让你的纹理沿着绳子平铺,而是与它一起拉伸,请启用此选项。比使用ObiRopeCursor来改变他们的长度有用。
  • 截面(Section):用于为网格横截面提供自定义形状。默认资源是一个8段圆,但您可以定义自己的形状。
  • 截面厚度刻度(Section thickness scale):根据颗粒半径缩放实际网格厚度。值为1将生成一个完全符合粒子半径的网格。较大的值将使网格比粒子表示更厚,较小的值将使网格更薄。

1.2.2 ObiRopeLineRenderer

生成一个面向摄像机的三角形条,类似于轨迹渲染。这比其他方法更加节省性能,但缺点是必须为每个渲染它的摄像机生成一次绳索网格(而不是为所有摄像机生成一次)。

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第5张图片
使用线模式渲染的绳索。

该渲染器的参数:

  1. UV锚(UV Anchor):纹理坐标原点所在的绳子上的点。它用标准化坐标表示:0是绳子的起点,1是绳子的终点。
  2. 截面厚度比例(Section thickness scale):根据颗粒半径缩放实际网格厚度。值为1将生成一个完全符合粒子半径的网格。较大的值将使网格比粒子表示更厚,较小的值将使网格更薄。
  3. UV缩放(UV Scale):缩放绳网格中的纹理坐标。
  4. Normalize V(Normalize V ):强制V纹理坐标在绳子开始处为0,在绳子结束处为V刻度。如果你不想让你的纹理沿着绳子平铺,而是与它一起拉伸,请启用此选项。特别有用的绳索比使用ObiRopeCursor来改变他们的长度。

1.2.3 ObiRopeChainRenderer

在粒子之间的空间实例化自定义预制件。这就形成了一条由刚性链环组成的链条。您必须提供至少一个预制件作为链条。

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第6张图片
绳索渲染使用链模式与链接形状的网格和节扭曲45度。

该模式的参数:

  1. UV锚(UV Anchor):沿着绳子开始预制循环的点。它用标准化坐标表示:0是绳子的起点,1是绳子的终点。
  2. 链接比例(Link scale):沿绳索实例化的预制件的比例。
  3. 随机链接(Randomize links):启用此选项可以从链链接列表中随机选择每个链接。禁用它以按照列表中提供的顺序生成链接。
  4. 链扣(Chain links):用于构建链扣的链扣预制件列表。
  5. 节捻度(Section twist):施加于每一节绳上的捻度,以度表示

1.2.4 ObiRopeMeshRenderer (最昂贵)

这是最灵活的渲染方法,但也是最昂贵的。它将采用自定义网格,并沿着绳索多次布局,使其变形以遵循绳索的形状和运动。此渲染模式不支持调整大小或撕裂绳索。

在运行时修改的任何网格必须在其导入设置中启用读/写。所以如果使用ObiRopeMeshRenderer,确保网格是可读的!

【Unity】基于Obi的绳/杆渲染及ObiRopeExtrudedRenderer、ObiRopeLineRenderer、ObiRopeChainRenderer、ObiRopeMeshRende_第7张图片
绳索渲染使用自定义网格模式与Unity的默认胶囊网格。

该模式的参数:

  1. 网格(Mesh):参考将被绳索变形的网格。
  2. 轴(Axis):网格轴(在模型空间中),将与绳索对齐。
  3. 体积缩放(Volume scaling):控制当绳子拉伸超过其静止长度时,网格将变形多少以尝试保持体积。
  4. 与绳子一起拉伸(Stretch with rope):如果启用,网格将与绳子一起挤压/拉伸。如果禁用,当网格长度超过或低于剩余长度时,网格将在绳子上“滑动”。
  5. 跨越整个长度(Span entire length):如果启用,网格将跨越绳子的整个长度,即使它必须沿着绳子轴拉伸或压缩。如果禁用,网格将沿着绳子轴保持其大小,而不管绳子的长度。
  6. 实例(Instances):沿绳重复使用网眼的次数。
  7. 实例间距(Instance spacing):网格实例之间的间隙大小。
  8. 偏移量(Offset):在第一个网格实例之前留下的初始间隙。
  9. 缩放(Scale):缩放网格实例。

你可能感兴趣的:(游戏引擎,unity,游戏引擎)