Unity 相机剪辑问题

Unity Camera Clipping Issue

我的相机出现问题,它正在剪裁我的一个 3D 模型(参见下图)。

我的相机 Near Clipping Planes 已经处于最低值,我所有的着色器都有不透明渲染模式。

它只对我使用 Fuse CC 生成的 3D 模型执行此操作。我用 Blender 做的那个不剪辑!有任何想法吗?谢谢!

感谢 Draco18s 带领我进行了截头体剔除。我发现 this post 演示了如何停用特定游戏对象上的平截头体剔除,我的问题已解决!该脚本有点过时,所以这里是更新版本。

// Update is called once per frame
void Update () {
    // boundsTarget is the center of the camera's frustum, in world coordinates:
    Vector3 camPosition = Camera.main.transform.position;
    Vector3 normCamForward = Vector3.Normalize(Camera.main.transform.forward);
    float boundsDistance = (Camera.main.farClipPlane - Camera.main.nearClipPlane) / 2 + Camera.main.nearClipPlane;
    Vector3 boundsTarget = camPosition + (normCamForward * boundsDistance);

    // The game object's transform will be applied to the mesh's bounds for frustum culling checking.
    // We need to "undo" this transform by making the boundsTarget relative to the game object's transform:
    Vector3 realtiveBoundsTarget = this.transform.InverseTransformPoint(boundsTarget);

    // Set the bounds of the mesh to be a 1x1x1 cube (actually doesn't matter what the size is)
    SkinnedMeshRenderer mesh = this.GetComponent<SkinnedMeshRenderer>();
    mesh.localBounds = new Bounds(realtiveBoundsTarget, Vector3.one);
}

将此脚本放在导致问题的游戏对象上。

注意:将 SkinnedMeshRenderer 替换为您的游戏对象拥有的网格渲染器类型。

实际问题似乎是您的模型边界不正确。 Frustrum 剔除允许您的 GPU 通过针对相机平截头体测试边界来跳过视线之外的渲染模型。如果您想要良好的渲染性能,这一点很重要。所以禁用它不是最好的主意,如果它只是解决一个简单的问题,比如不正确的边界。

如果您 select 场景中的网格渲染器,您应该会看到它被线框立方体包围。该立方体可视化您的网格边界。您应该会发现它们非常适合您的 Blender 模型,而与您的 Fuse CC 模型相去甚远。

一旦您确认您的 Fuse CC 模型的边界已关闭,您可以尝试手动或通过更改导入设置来修复它们。

边界可以关闭的原因:

  • 您正在导入没有动画的模型。如果 Unity 不知道模型将如何动画,它很可能会将边界设置得太紧
  • 您使用的顶点着色器扭曲了模型,使其超出了边界
  • 您在运行时通过 IK、Ragdolls 或类似方式以编程方式四处移动骨骼

所有这些都可以通过在编辑器中调整网格的边界来解决,以便它们为您的运行时留出足够的空间animations/modifications。

当满足以下所有条件时,边界选择得很好:

  • 网格永远不会越界(如线框立方体所示)
  • 在不违反第一条规则的情况下,边界越小越好