我的相机存在问题,它正在剪切我的3D模型之一(参见下图)。
我的相机近剪裁平面已经处于最低值,我的所有着色器都有不透明的渲染模式。
只有我用Fuse CC生成的3D模型才能做到这一点。我用Blender做的那个不剪辑!有任何想法吗?谢谢!
答案 0 :(得分:4)
实际问题似乎是你的模型的界限不正确。 Frustrum剔除允许您的GPU通过测试相机截头的边界来跳过不可见的渲染模型。如果您想要良好的渲染性能,这一点很重要。因此,如果只是解决一个像错误边界这样的简单问题,那么禁用它并不是最好的主意。
如果在场景中选择网格渲染器,则应该看到它被线框立方体包围。该立方体可视化您的网格边界。您应该看到它们在您的Blender型号上非常适合,并且可以在您的Fuse CC型号上使用。
一旦您确认Fuse CC型号的边界已关闭,您可以手动或通过更改导入设置来尝试修复它们。
可以关闭边界的原因:
所有这些都可以通过在编辑器中调整网格上的边界来修复,这样它们就可以为运行时动画/修改留下足够的空间。
当满足以下所有条件时,选择的界限很好:
答案 1 :(得分:1)
感谢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);
}
将此脚本放在导致问题的GameObject上。
注意:用游戏对象所具有的网格渲染器类型替换SkinnedMeshRenderer。