使用 OpenSubdiv

本主题一开始显示如何使用 OpenSubdiv 修改器平滑对象,以及如何在基础对象层级引入边和顶点的锐化。然后,它将继续显示 CreaseSet 修改器与 OpenSubdiv 如何配合使用以极大地简化管理模型中子对象的不同折缝值的任务。

开始使用 OpenSubdiv:

  1. 创建或加载一个要应用平滑的模型。

    为获得最佳结果,模型应具有相对锐角(小于或等于 90 度)以实现更好的平滑效果。下图显示了合格的示例:

  2. 将 OpenSubdiv 修改器应用到模型。

    使用默认的迭代次数值 1 时,平滑效果很明显,因为其分辨率低。在评估修改器的效果时,它还有助于查看网格细分。

  3. 激活明暗处理视口时,如果边面开关处于禁用状态,按 F4 键可激活边面。

    在第一次迭代时,会将原始对象中的每个四边形分为四个多边形。

    要改善平滑质量,请增加迭代次数值。

  4. 禁用边面,然后在 OpenSubdiv 修改器的“常规控件”卷展栏中,单击迭代次数微调器的向上箭头将值增加到 2。

    随着网格拓扑细分渐增,模型的曲面变得越来越平滑。

  5. 继续增加“迭代次数”值,直至达到 5。

    如果此时再次启用边面,您可以看到模型已进行非常均匀地细分。在大型、复杂的模型中,增加网格分辨率可能会减慢视口交互的速度。如果发生这种情况,并且您已安装足够强大的显示卡,则您可以将运行模式设置切换为“GPU 显示”。此操作会将几何体处理负载转移给图形卡,这样便可显著改进视口反馈。

    通常,迭代次数值为 5 即可满足对平滑要求最低或不要求折缝的对象的需求。默认情况下,它对于视口中和渲染时的平滑均适用。

    如果您需要更平滑的效果,则可以设置单独的渲染迭代次数值。其效果仅在渲染输出中有所体现。我们将在以下任务中对其进行说明。

通过可编辑多边形设置应用折缝:

    该步骤从上一步骤继续。您将在可编辑多边形层级设置折缝。OpenSubdiv 修改器会识别这些设置并利用其将锐边添加到平滑曲面。

  1. 从对象中删除 OpenSubdiv 修改器。如果模型的基础层级不是可编辑的多边形或“编辑多边形”修改器没有应用,请将其转换为可编辑的多边形对象。

    这样可以访问“顶点”和“边”子对象层级的“折缝”设置。

  2. 重新应用 OpenSubdiv 修改器;保留默认的迭代次数值 1。
  3. 在修改器堆栈中,访问可编辑多边形项的边子对象层级,然后禁用“显示最终结果开/关切换”。

    未经平滑处理的基础几何体现在显示在视口中。这样便可更轻松地选择边以进行折缝。

  4. 选择要进行折缝的边。
    提示: 相邻多边形之间的角度越大,边折缝效果就越明显。因此,对共面多边形(即,位于平面内)之间的边应用折缝几乎没有任何效果。
  5. 重新启用“显示最终结果”,然后在“编辑边”卷展栏中增加折缝值。

    随着您对设置的调整,折缝的锐度会在明暗处理视口中逐渐增加。

    左侧:折缝 = 0.0;右侧:折缝 = 0.5

    注: OpenSubdiv 不支持对可编辑多边形对象中的边和顶点进行“权重”设置。

    但是,为了实现明显折缝,可能需要增加迭代次数值。这将增加细分程度,提供更好的网格分辨率,从而支持明显折缝。

  6. 在修改器堆栈中,访问 OpenSubdiv 条目,然后在“常规控件”卷展栏中,单击一次迭代次数微调器的向上箭头将迭代次数更改为 2。注意区别,然后继续缓慢单击,直至达到 5。请注意每次单击时折缝发生的变化。

    在下图中,折缝设置为 0.5,迭代次数从 1 增加到 5(从左到右)。

    OpenSubdiv 修改器迭代次数设置允许的最大值为 6,该值通常支持的最大折缝值约为 0.5。如果需要深度折缝,您可以按如下方式实现:

  7. 在可编辑多边形对象的边层级上,增加折缝值。然后,在 OpenSubdiv 修改器中,启用渲染迭代次数,并将其设置为较高的值,例如 7。渲染图像。

    折缝为 0.7;渲染迭代次数为 7

使用 CreaseSet 修改器创建折缝集:

    在前面的步骤中,您创建了一组折缝边。即,将相同的折缝值分配给模型中的多个边。但如果要为不同的边分配不同的折缝值,要执行哪些操作?可以手动进行此项操作,但 CreaseSet 修改器可以轻松管理多个折缝集。

  1. 从上一步骤继续,删除 OpenSubdiv 修改器。但不取消选择边。
  2. 应用 CreaseSet 修改器,然后应用 OpenSubdiv 修改器。
    重要: 在堆栈中,OpenSubdiv 修改器应始终高于 CreaseSet 修改器。
  3. 访问堆栈中的 CreaseSet 修改器,然后展开“选项”卷展栏,在“自动生成折缝集”组中单击“自动生成”按钮,然后在打开的“确认”对话框中单击“是”按钮。

    新条目将显示在“折缝集”卷展栏中。其名称为 EdgeSet01,并且显示的折缝值即先前为边分配的折缝值。

    这是因为您已具有包含堆栈可编辑多边形层级的折缝值的边。不需要选择边自动生成即可运行。单击每组具有相同折缝值的边和顶点的新折缝集条目的自动生成结果。下一步会说明这一点。

    提示: 如果不确定子对象所属的折缝集,请右键单击其在列表中对应的条目,然后选择“在集中选择元素”。您还可以编辑设置内容,例如,通过选择一些其他子对象,右键单击集列表项,然后选择“将当前选择添加到集”。
  4. 转到修改器堆栈的可编辑多边形层级,然后访问边子对象层级(如有必要)。
  5. 选择多个新边并分配不同的折缝值。
  6. 访问“顶点”层级,选择某些顶点,然后为其分配任意折缝值。
  7. 转到 CreaseSet 堆栈级别,然后再次单击“自动生成”。

    “折缝集”卷展栏列表中现在显示已创建的所有集合。

    您还可以在 CreaseSet 修改器中创建折缝集,如以下任务中所示:

创建一个完全位于 CreaseSet 内部的折缝集:

    该步骤从上一步骤继续。

  1. 在修改器堆栈中,展开 CreaseSet 条目并单击“顶点”或“边”。
    注: 这些子对象层级引用原始几何体,而不是细分的对象。CreaseSet 修改器处于活动状态时,您可以将原始几何体视为封闭细分对象的线框框架。
  2. 选择某些子对象,然后单击“折缝集”列表下的“创建集”按钮。
    提示: 您可以通过双击某一条边来选择边循环,还可以通过选择一条边,然后按住 Shift 键的同时单击同一环形中的另一条边来选择环形边。

    新集将显示在列表中并使用默认名称和折缝值。您将在下一步骤中了解如何更改折缝值;要了解如何更改集名称,请继续往下阅读。

    注: 如果选定的任何子对象已属于现有集,则会在创建新集时自动将其从现有集中删除。每条边和每个顶点只能属于一个折缝集。
  3. 要更改集名称,请右键单击列表条目并选择“重命名”,然后使用打开的对话框编辑名称并单击“确定”。

    您还可以为要创建的下一个集指定名称:

  4. 编辑“创建集”按钮旁边的文本字段的内容,然后选择一些顶点或边并单击“创建集”。

    新集将显示在列表中,并使用您指定的名称再加上一个附加数字。

    之前在此任务中提到过 CreaseSet 修改器的一个重要方面,即,一个子对象一次只能属于一个集:

  5. 选择一些子对象并创建一个集。
  6. 如果不进行任何更改,请再次单击“创建集”。

    新集将显示在列表中,而旧集的名称现在括在方括号内(例如,[CornerVerts])。括号表示集为空,您可以通过右键单击其名称并选择“在集中选择元素”来轻松进行验证。这会导致取消选择所有子对象。

使用 CreaseSet 修改器调整折缝:

    CreaseSet 修改器允许您直接调整折缝值,可以一次调整一个,也可以与其他相关项一起调整:

  1. 选择已应用 CreaseSet 修改器的对象,然后激活 CreaseSet 修改器。
  2. 如有必要,创建一些折缝集。
  3. 要修改单个集的折缝值,请在集名称右侧的数字字段中编辑该值。
  4. 要修改多个集的折缝值,请先选择要修改的所有集。选定集的背景颜色为蓝色。然后输入选定的折缝值应在“相对调整”字段中更改的数量。输入值之后,相对调整值(正或负)将添加到所有选定集的折缝值中。
  5. 提示: 要查看更改折缝值的结果,请应用 CreaseSet 修改器上方的 OpenSubdiv 修改器,然后启用“显示最终结果”。

将多个对象与 CreaseSet 配合使用

CreaseSet 修改器专门用于同时管理多个对象中的折缝,这有助于加速包含大量数据的场景中的几何体编辑。

同时调整多个对象中的折缝:

  1. 创建一个场景,其中包含一个或多个对象的多个非实例化副本。

    例如,场景可能包含多个卡车副本。由于它们是副本,而不是实例,您可以通过较小的建模差异区分车辆。

  2. 选择将受折缝和 OpenSubdiv 影响的所有对象的副本。
  3. 应用 CreaseSet 修改器。

    将修改器的实例化副本应用到每个对象。

  4. 将 OpenSubdiv 修改器应用到每个对象。
    提示: 如果要在每个对象中使用不同的平滑值,请单独为每个对象应用 OpenSubdiv。否则,应用一个实例化版本,如 CreaseSet。
  5. 选择所有对象,然后转到 CreaseSet 修改器的“边”或“顶点”子对象层级,并选择将获得相同折缝值的子对象。

    例如,您可以选择每辆卡车引擎盖上凸起区域的边。

  6. 命名该集,然后单击“创建集”。
  7. 为每个集设置折缝值。所有指定区域均会采用更改的值。