创建可信的布料效果的第三步是使 nCloth 对象的碰撞尽可能精确。现实中,下落布料与其所落在的对象紧密接触,然后发生变形,反映出布料所接触对象的形状。目前桌布不会展现出这种行为。
设定 nCloth 的厚度和被动对象
选择桌布。
打开“属性编辑器”(Attribute Editor)并选择“nClothShape1”选项卡。
在“碰撞”(Collisions)区域中,从“解算器显示”(Solver Display)下拉列表中选择“碰撞厚度”(Collision Thickness)。
在场景视图中将出现桌布的碰撞厚度。
nCloth 的“厚度”(Thickness)属性确定桌布碰撞体积的半径或深度。碰撞体积是桌布曲面的不可渲染曲面偏移,由 nucleus1 解算器在计算桌布的被动对象碰撞时使用。碰撞发生在桌布的碰撞体积处,而非桌布自身曲面上。
转到播放范围的开始处。
在“碰撞”(Collisions)区域中,将桌布的“厚度”(Thickness)属性值更改为 0.066。
桌布的碰撞体积将会显著减少,现在桌布行为更像是薄的织物而非厚的曲面。这一新厚度有助于提高桌布下落到桌子上时桌布碰撞的精确度。
从“解算器显示”(Solver Display)下拉列表中选择“禁用”(Off)。
桌布的碰撞厚度不再显示在场景视图中。
播放桌布模拟。
即使调整了桌布的厚度,桌布仍然不会显示为要与桌子表面发生接触。这是因为被动碰撞对象(如桌子)也拥有碰撞体积。
若要进一步提高桌布碰撞的精确度,需要调整桌子的厚度。
转到播放范围的开始处。
在场景视图中选择桌子,然后在“属性编辑器”(Attribute Editor)中选择桌子的 nRigidShape1 选项卡。
在“碰撞”(Collisions)区域中,从“解算器显示”(Solver Display)下拉列表中选择“碰撞厚度”(Collision Thickness)。
在场景视图中将出现桌子的碰撞厚度。
将桌子的“厚度”(Thickness)属性值设定为 0.066。
桌子的碰撞体积会显著减少,现在,在播放模拟时桌布将与桌子的实际形状保持精确一致。
在“碰撞”(Collisions)区域中,从“解算器显示”(Solver Display)下拉列表中选择“禁用”(Off)。
桌子的碰撞厚度不再显示在场景视图中。
播放桌布模拟。
调整桌布 nCloth 和桌子被动对象的厚度可显著提高桌布碰撞的精确度。
转到播放范围的开始处。
场景视图中碰撞厚度的显示方式由 nCloth 的当前碰撞标志选择确定。“碰撞标志”(Collision Flag)下拉列表可用于指定参与碰撞的桌布组件,以及桌布使用的碰撞体积类型。可以使用“碰撞标志”(Collision Flag)来调整 nCloth 碰撞的速度,代价是牺牲碰撞精确度。
设定参与碰撞的 nCloth 组件
选择桌布。
在“属性编辑器”(Attribute Editor)中,选择“nClothShape1”选项卡。
在“碰撞”(Collisions)区域中,从“解算器显示”(Solver Display)下拉列表中选择“碰撞厚度”(Collision Thickness)。
默认情况下,“碰撞标志”(Collision Flag)设定为“面”(Face)。
“面”(Face)将提供最佳、最精确的碰撞,但对于碰撞计算而言速度最慢。
将“碰撞标志”(Collision Flag)选择更改为“顶点”(Vertex)。“顶点”(Vertex)将生成最不精确的碰撞,但对于碰撞计算而言速度最快。
桌布的碰撞体积从曲面更改为多个碰撞球体。
播放桌布模拟。
桌布的某些部分未与桌子正确发生碰撞。这是因为,当选择“顶点”(Vertex)作为组件类型时,只有桌布顶点周围的小碰撞球体将参与到桌布的碰撞中,而不是像“面”(Face)那样让整个曲面都参与到碰撞中。
顶点和面适用于要通过降低碰撞计算的数量来加快模拟的情况,以及布料模拟无需最大级别碰撞精确度的情况(例如,碰撞 nCloth 对象的距离快照)。
将“碰撞标志”(Collision Flag)重置为默认的“面”(Face)选择,然后从“解算器显示”(Solver Display)下拉列表中选择“禁用”(Off)。
转到播放范围的开始处。
播放桌布模拟。
桌布再次轻松、精确地与桌子发生碰撞。