在Unity中避免某个对象的剔除Culling

在Unity中避免某个对象的剔除Culling

解决办法是Unity工程师给的。
原帖地址 http://forum.unity3d.com/threads/can-i-disable-culling.43916/

Hi,

I ran into a problem: Unity decides to cull one of my objects event if part of that object is still in camera view (I can see it clearly in scene view). It’s a skinned mesh and one of the bones and part of the mesh is still in view. I’m not doing any custom shader stuff.

Is there a way to force Unity to render my object? Disable culling or expand bounding box or something like that?


ASteer, May 17, 2016 #5
karl.jones
Unity Technologies

Is this a procedural mesh? If its being culled then you probably need to update the Bounds.
http://docs.unity3d.com/ScriptReference/Mesh-bounds.html

解决办法就是修改Bound,最大化,使得无法被剔除.

mesh.bounds = new Bounds(transform.position, new Vector3(float.MaxValue, float.MaxValue, float.MaxValue));

### Unity 中遮挡剔除的使用方法及解决问题 在 Unity 中,遮挡剔除是一种优化渲染性能的技术,通过消除隐藏在其他对象后面的对象,减少必要的渲染开销。以下是对 Unity 遮挡剔除的详细说明以及使用教程。 #### 1. 静态遮挡剔除(基于 Umbra 的烘焙方式) Unity 提供了一个内置的遮挡剔除工具,基于 Umbra 中间件实现。这种技术需要对场景进行烘焙,以生成遮挡数据[^1]。以下是具体步骤: - **启用遮挡剔除**:在 Unity 编辑器中,依次选择 `Window -> Rendering -> Occlusion Culling` 打开遮挡剔除窗口。 - **设置静态对象**:将需要参与遮挡剔除对象标记为 `Static`,确保它们在烘焙过程中被正确处理。 - **调整视锥体范围**:在 Occlusion Culling 窗口中,可以调整摄像机的视锥体范围,以控制哪些区域会被考虑在内。 - **执行烘焙**:点击 `Bake Occlusion` 按钮,开始生成遮挡数据。烘焙完成后,Unity 将根据这些数据动态决定哪些对象需要渲染。 #### 2. 实时遮挡剔除(无需烘焙) 对于需要频繁变化的场景,可以使用实时遮挡剔除插件。这类插件通常通过射线检测的方式判断对象是否可见,并关闭可见对象的 `MeshRenderer` 组件[^5]。一个典型的例子是资源地址为 `https://gitcode.com/open-source-toolkit/93200` 的实时遮挡剔除解决方案[^2]。 以下是其实现原理和使用方法: - **工作原理**:插件会以摄像机为原点,向视锥体范围内的所有方向发射射线。如果射线与某个对象发生碰撞,则该对象被认为是可见的;否则,关闭其 `MeshRenderer` 组件以避免渲染。 - **集成到项目**:下载并导入插件后,将其附加到摄像机或相关管理脚本中。通过配置参数(如射线数量、检测频率等),可以平衡性能和效果。 #### 3. 动态遮挡物体(Occlusion Portal) Unity 还提供了一种更灵活的方式——动态遮挡物体(Occlusion Portal)。这种方式允许开发者自定义遮挡区域,而是依赖于单个对象的大小[^4]。例如,可以通过创建一个门户(Portal)来定义两个房间之间的可见性关系。 以下是实现动态遮挡物体的基本步骤: ```csharp using UnityEngine; public class OcclusionPortalExample : MonoBehaviour { void Start() { // 获取 Occlusion Portal 组件 OcclusionPortal portal = GetComponent<OcclusionPortal>(); // 设置遮挡状态 portal.state = OcclusionPortal.State.Closed; // 关闭遮挡 // 或者 portal.state = OcclusionPortal.State.Open; // 打开遮挡 } } ``` #### 4. 遮挡剔除的未来发展趋势 随着神经渲染和硬件加速技术的发展,遮挡剔除再仅仅是渲染优化的工具,而是逐渐演变为连接图形学、人工智能和硬件架构的核心技术之一[^3]。这为开发者提供了更多可能性,尤其是在元宇宙和数字孪生等领域。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值