如何解决如何在Unity 2020中使用Hybrid Renderer V2从Burstable ForEach作业动态显示或隐藏网格?
我有一种生成网格和构造场景的特定方法,可以使遮挡剔除变得非常直接和最佳。现在,我需要知道的是如何使用ECS混合渲染器有效地实际显示或隐藏网格。我考虑过在RenderMesh组件中将层更改为隐藏层,但是RenderMesh组件是ISharedComponentData,因此不支持作业化或突发处理。我看到了Unity BatchRendererGroup API,它的OnPerformCulling回调看起来很有希望,但是我不知道是否有可能挂接到HybridRenderSystem内部的BatchRenderGroup。我还看到了DisableRendering IComponentData标签,我猜它禁用了实体渲染。但是,同样,这只能从主线程完成。我可以编写自己的解决方案来使用Graphics.DrawMesh或类似的东西渲染网格,但我更喜欢将其与HybridRenderer本地集成,以便还剔除与程序网格无关的网格。
这有可能吗?预期用途是什么?
解决方法
我不确定这是最好的选择,但您可以尝试并行命令缓冲区:
var ecb = new EntityCommandBuffer( Allocator.TempJob );
var cmd = ecb.AsParallelWriter();
/* job 1 executes with burst & cmd adds/removes Disabled or DisableRendering tags */
// (main thread) job 2 executes produced commands:
Job
.WithName("playback_commands")
.WithCode( () =>
{
ecb.Playback( EntityManager );
ecb.Dispose();
}
).WithoutBurst().Run();
,
还有另一种隐藏/显示实体的方法。但这需要您在空间上对相邻实体进行大块分组(您可能已经在这样做了)。然后,您将不一一一一地遮住特定的实体,而是将它们的整个大块(空间区域)封闭。这有可能要归功于:
var queryEnabled = EntityManager.CreateEntityQuery(
ComponentType.ReadOnly<RenderMesh>(),ComponentType.Exclude<Disabled>()
);
queryEnabled.SetSharedComponentFilter( new SharedSector {
Value = new int3{ x=4,y=1,z=7 }
} );
EntityManager.AddChunkComponentData( queryEnabled,default(Disabled) );
// EntityManager.RemoveChunkComponentData<Disabled>( queryDisabled );
public struct SharedSector : ISharedComponentData
{
public int3 Value;
}
,
答案是,你不能,你不应该! Unity Hybrid渲染通过按顺序排列数据来加快速度。如果每个网格都有一个布尔值,允许您显示或隐藏网格,那么Unity仍然必须对其进行评估,我想这不在其设计理念之内。正如我所发现的那样,整个设计哲学总的来说对我不起作用。
我的世界是由程序生成的地形网格块组成的(想想我的世界,但是更好;))问题是每个块都有其自己的RenderMesh,并且具有唯一的网格……这意味着每个块都有自己的。 ..块...在内存xD中。听起来适当的话,效率极低。我决定一起放弃混合ECS,并使用良好的旧游戏对象。仅凭此更改,我就看到了4倍的性能提升(从200 fps增至800fps)。我只是使用MeshRenderer.enabled属性来有效地启用和禁用渲染。为了解决这个问题,我只存储了一个网格边界数组和一个布尔值,用于确定是否可见。然后,我可以在一个作业中评估该数组,并向后吐出所有需要更改其可见性的块的索引列表。这样就只为主线程设置了几个布尔值,这一点都不是很昂贵的……这不是我正在寻找的ECS友好解决方案,但从它的外观来看,ECS并不是我的朋友。对于我的世界的每个部分都拥有唯一的网格显然不是Hybrid ECS的预期用例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。