有没有一种方法可以确保一个对象始终显示在另一个对象的上方而没有重叠?

时间:2019-02-12 02:56:43

标签: c# unity3d blender cg shaderlab

我在化身上的衣物有些问题,如下图所示

Image 1

大多数建议我在建模软件中简单地将裤子拉离身体,直到与其他衣服组合在一起为止

Image 2

我现在可以把衬衫从裤子上拉开,但是我有很多不同的衣服,要检查/调整它们似乎并不可行。

尝试并应用某种分层系统会更好。

有人可以建议我如何实现这样的系统或如何实现目标吗?

我已经研究过尝试使用着色器执行此操作,但是没有运气能达到我想要获得的结果(但是,我不是Shaderlab / CG专家)

我还尝试过将化身分成不同的部分,并用衣服网代替它们,但这仍然留下了衣服彼此可见的问题。

我希望最好有一个系统,在其中我可以对每件衣服进行分层,以便无论它们以正确的顺序彼此重叠显示而没有重叠。

1 个答案:

答案 0 :(得分:2)

如果您真的想使用分层,则可以使用Unity的Render Layers

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

    enter image description here

  2. 添加所需的图层(顺序无关紧要)

    enter image description here

  3. 将“图层”分配给您想要由全角质素摄像机渲染的对象。

    enter image description here

    作为示例,我添加了trousers cubetrouserspillover cubepulloverOnTop cubeOnTop < / p>

  4. 创建一个新的Empty GameObject,并将其命名为CameraParent。这将包含您所有的相机,并且您应该移动此相机,而不要移动到目前为止的相机。

    如果这是一个VR / AR应用程序,则可能必须将Camera组件附加到该父对象,使其成为主摄像机,但使其不呈现任何内容

    enter image description here

  5. 创建例如4个子对象,并给它们一个Camera组件。另外,请确保只有一个摄像机标记为MainCamera,并且只有一个摄像机在场景中具有AudioListener。我以4台相机为例,分别具有TrousersCameraPulloverCameraOnTopCameraBackgroundCamera

  6. 现在设置渲染

    • BackgroundCamera
      在这里,您可以像以前一样渲染其他任何东西

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

      • ClearFlags:仅深度
      • Culling Mask:仅选择 trousers
      • Depth0(您会看到一个较大的值呈现在一个较低的值之上)
    • PulloverCamera
      用于在裤子顶部绘制套头衫

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

      • ClearFlags:仅深度
      • Culling Mask:仅选择 OnTop
      • Depth2

    enter image description here

因此,您可以看到,尽管红色多维数据集(OnTop cube)确实远远落后于其余部分,而蓝色多维数据集(Pullover cube)位于中间,但红色多维数据集将始终呈现在顶部,而不是蓝色,而不是棕色(trousers cube),最后是背景。

enter image description here