欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Unity CommandBuffer绘制粒子系统网格显示

Unity CommandBuffer绘制粒子系统网格显示

2025/2/21 3:07:29 来源:https://blog.csdn.net/weixin_50702814/article/details/145647832  浏览:    关键词:Unity CommandBuffer绘制粒子系统网格显示

CommandBuffer是 Unity 提供的一种在渲染流程中插入自定义渲染命令的机制。在渲染粒子系统时,常规的渲染流程可能无法满足特定的渲染需求,而CommandBuffer允许开发者灵活地设置渲染参数、控制渲染顺序以及执行自定义的绘制操作。通过它,可以精确地定义如何将粒子系统的网格渲染到指定的目标纹理上,实现一些特殊的视觉效果或性能优化。

实现原理:

通过模拟粒子系统的状态,将粒子系统的网格信息烘焙出来,然后利用 CommandBuffer 自定义渲染流程,将烘焙好的网格渲染到指定的 RenderTexture 上。通过控制粒子系统的模拟频率和渲染流程,可以实现对粒子系统渲染的精确控制。

实现过程:

首先需要准备一张RT,用于显示后别好的网格

准备一个粒子系统的材质球,在项目中可根据实际选择对应的shader已后续需要设计的材质属性,选择Unlit/Texture shader,并给主贴图赋值

粒子就变成了如下的样子:

然后新建空物体,新建一个脚本,并将脚本挂载到空物体上,并设置参数如下:

新建一个RawImage用于显示RT的内容,并将RawImage的Texture赋值上述建立的RT

结果:

代码分析:

首先是在Update方法中按照一定的速率驱动粒子系统更新,然后烘焙粒子的mesh,之后调用CommadBuffer绘制

    // 模拟根粒子系统的更新_rootParticleSystem.Simulate(_updateRate, true, false, false);// 为每个渲染器烘焙网格for (int i = 0; i < _allSystemRenderers.Length; i++){_allSystemRenderers[i].BakeMesh(_meshes[i], false);}// 调用_drawNow方法进行绘制_drawNow();

在drawNow方法中,进行CommandBuffer命令的装载:

      CommandBuffer cmd = new CommandBuffer();// 设置视图矩阵,用于确定相机的位置和方向cmd.SetViewMatrix(Matrix4x4.TRS(new Vector3(0.0f, 0.0f, -10.0f), Quaternion.identity, Vector3.one));// 设置投影矩阵,用于确定相机的投影方式cmd.SetProjectionMatrix(Matrix4x4.Ortho(-_virtualCameraSize, _virtualCameraSize, -_virtualCameraSize, _virtualCameraSize, 0.1f, 10.0f));// 设置渲染目标为输出纹理cmd.SetRenderTarget(_outputTexture);// 如果需要在绘制时清除渲染目标,则清除渲染目标if (_clearOnDraw)cmd.ClearRenderTarget(true, true, _clearColor, 1.0f);

再调用DrawMesh方法绘制网格:

 for (int i = 0; i < _meshes.Count; i++){cmd.DrawMesh(_meshes[i], Matrix4x4.TRS(new Vector3(x * _wrapSize, y * _wrapSize, 5.0f),Quaternion.identity, Vector3.one),_allSystemRenderers[i].sharedMaterial, 0, 0, _mirrorBlock);}

最后执行命令缓冲区中的所有命令:

Graphics.ExecuteCommandBuffer(cmd);

参考链接:

The power of command buffers in Unity | JellyCar Worlds - YouTube

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词