【问题标题】:Is there a way to ensure that an object is always displayed on top of another with no overlaps?有没有办法确保一个对象始终显示在另一个对象之上而没有重叠?
【发布时间】:2019-07-05 15:12:42
【问题描述】:

如下图所示,我对头像上的衣服有一些问题

大多数人会建议我在建模软件中简单地将裤子从身体上拉开,这很好,直到它与其他衣服相结合

我现在可以把衬衫从裤子上扯下来,但我有很多不同的衣服,检查/调整每件衣服似乎不太合适。

最好尝试应用某种分层系统。

谁能告诉我如何才能实现这样的系统或如何实现我的目标?

我已经考虑过尝试使用着色器来做到这一点,但没有运气达到我想要得到的结果(但我承认我不是 Shaderlab/CG 专家)

我也尝试将化身分成不同的部分并用衣服网格替换它们,但这仍然存在衣服相互可见的问题。

我希望最好有某种系统,我可以将每件衣服分层,这样无论它们以正确的顺序相互叠加显示,没有任何重叠。

【问题讨论】:

  • 很多游戏会完全用裤腿代替裸腿,而不是试图同时渲染腿和裤子。同样,对于衬衫,您可以将整个躯干换成衬衫和手臂网。
  • 谢谢你,里奥。我现在将尝试这个,因为我认为这需要在建模级别而不是渲染级别解决。尝试在渲染级别修复它会在运行某些动画时产生一些问题。

标签: c# unity3d blender cg shaderlab


【解决方案1】:

如果你真的想使用分层,你可以使用 Unity 的 Render Layers,它实际上就是为此而设计的。

  1. 转到图层 -> 编辑图层

  2. 添加你想要的图层(顺序无关紧要)

  3. 将图层分配给您希望由某个角相机渲染的对象。

    作为示例,我添加了一个带有层 trouserstrousers cube,带有层 pulloverpillover cube 和带有层 OnTop cubeOnTop cube

  4. 创建一个新的 Empty GameObject 并调用它,例如CameraParent。这将包含你所有的相机,你应该移动这个而不是你到目前为止移动的相机。

    如果这是一个 VR/AR 应用,您可能需要将 Camera 组件附加到此父对象,使其成为主摄像头但不渲染任何内容

  5. 创建例如4 个子对象并给它们一个Camera 组件。还要确保只有一台摄像机被标记为MainCamera,并且只有一台摄像机在您的场景中具有AudioListener。我以 4 个摄像头为例,有一个 TrousersCamera 一个 PulloverCamera 一个 OnTopCamera 和一个 BackgroundCamera

  6. 现在设置渲染

    • 背景相机
      在这里,您可以像以前一样渲染任何其他内容

      • ClearFlags:例如SkyBox
      • Culling Mask:选择所有图层除了 trouserspulloverOnTop
      • Depth: -1
    • 裤子相机
      用于渲染裤子(在其他任何东西之上)

      • ClearFlags: 仅深度
      • Culling Mask:选择 trousers
      • Depth: 0(您会看到较大的值呈现在较低的值之上)
    • 套头衫相机
      用于在裤子上渲染套头衫

      • ClearFlags: 仅深度
      • Culling Mask:选择 pullover
      • Depth: 1
    • OnTopCamera
      在一切之上渲染其他东西

      • ClearFlags: 仅深度
      • Culling Mask:选择 OnTop
      • Depth: 2

结果您可以看到,虽然红色立方体 (OnTop cube) 确实远远落后于其他立方体,而蓝色立方体 (Pullover cube) 位于中间,但红色立方体始终呈现在顶部,而不是蓝色立方体,而不是棕色 (trousers cube),最后是背景。

【讨论】:

  • 感谢您提供如此详细的解释。我想过这样做,但不认为它会起作用,因为头像包含各种动画,例如手可能会在顶部移动。无论哪种方式,我都这样做是为了测试它,看来我是正确的。我们最终会通过一些动画得到不希望的结果。 Image 我可以试试 Leo 的建议(上图),看看效果如何。该模型将具有各种服装项目和动画,因此这可能需要在建模级别而不是渲染级别解决 - 仍然可以接受想法
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 2022-11-22
  • 2015-02-20
  • 1970-01-01
  • 2019-11-05
  • 2022-11-26
  • 2021-01-27
  • 2021-02-07
相关资源
最近更新 更多