(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

这篇具有很好参考价值的文章主要介绍了(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现.

FHierarchicalStaticMeshSceneProxy的相关数据结构

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 FHierarchicalStaticMeshSceneProxy只是以FClusterNode构建了Kd-Tree, 存储以及管理的是以KD-Tree形式的Instance索引. 具体怎么管理,可以看上一篇HISM的介绍文章。

FInstancedStaticMeshRenderData

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

这个数据结构是HISMProxy和ISMProxy的核心数据类, 负责了StaticVertexBuffer, InstanceVertexBuffer(每个实例的Transform) 和VertexFactory(FInstancedStaticMeshVertexFactory)直接的绑定。

VertexBuffer

来自于UStaticMesh的渲染数据

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 InstanceBuffer

来自于 ISM组件管理的 FPerInstanceRenderData

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 FPerInstanceRenderData专门使用了FStaticMeshInstanceBuffer来管理渲染线程的InstanceVertexBuffer资源。

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

FInstancedStaticMeshVertexFactory

直接继承FLocalVertexFactory, 主要是改写了顶点格式, 因为Instance批渲染需要在VertexShader读取InstanceData(WorldTranform等),但是Instance批渲染一般有两种实现方式:

第一种是InstanceData直接作为VertexBuffer的一部分,顶点可以直接获取到其所在Instance的WorldTranform, 参考DirectX 11 学习笔记-Part2-1【Instancing】

第二种是Instance数据作为Buffer独立创建,顶点数据只包含InstanceId, 每次取InstanceData得用InstanceId从InstanceBuffer中取,这种比较多出现在GPU Driven渲染管线里,GPU Driven Rendering大量使用各种Buffer,直接读Buffer, 可以比较好的避开CPU readback, 参考Unity实现GPU Cull渲染

在UE引擎渲染中叫第二种方式叫手动顶点获取(MANUAL_VERTEX_FETCH)

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 目前UE5 Mobile端(无论是OpenEs 还是Vulkan)都不支持MANUAL_VERTEX_FETCH,在PC端延迟渲染是GPU Driven Cull Instance实现,默认支持MANUAL_VERTEX_FETCH。(题外话: Mobile端 Instance 批渲染目前还未实现GPU Driven的DrawInstancedIndirect,有兴趣的可以研究下UE5 PC端延迟渲染管线的GPUScene, 实现了完整的Instance GPU Cull和DrawInstancedIndirect。总结就是UE5 Mobile是完全基于CPU剔除的DrawInstance, UE5 PC端是基于CPU剔除和GPU剔除的DrawInstancedIndirect)

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

LocalVertexFactory.ush的InstanceData获取

代码实现,MANUAL_VERTEX_FETCH为false编译后可以看出是通过InstanceVertexBuffer来获取InstanceData. 如下所示:

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

 文章来源地址https://www.toymoban.com/news/detail-495119.html

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

到了这里,关于(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5实现模型压平效果

    模型压平 功能是GIS系统中的一个常用功能,可以用于模型的替换,数据的对比等。本文在UE5中通过 修改材质 的方式实现,实现模型压平的功能,包括常规建模的 StaticMesh ,以及CesiumForUnreal的 3DTiles ,都可以实现压平效果。并解决压平后出现的 闪面 以及高度错乱问题,使最

    2024年02月05日
    浏览(95)
  • 【虚幻引擎】UE4/UE5鼠标点击事件实现物体移动

     在UE4/UE5中,引擎有它自己的一套框架体系,虚幻就是基于这一个框架体系来实现的。其中就有PlayerController(玩家控制器),玩家控制器中就有对鼠标的一系列设置,包括显示鼠标,允许点击事件等。  1.创建PlayerController,命名为MyPlayerController 2.打开MyPlayerController,勾选参数

    2024年02月10日
    浏览(115)
  • UE5动画重定向:理解并实现动画系统

    本文详细介绍了UE5中动画重定向的概念和实现方法。文章内容包括动画系统的基本概念,动画重定向的原理和使用场景,以及如何在UE5中设置骨骼链和使用IK重定向器导出生成新动画。

    2023年04月11日
    浏览(72)
  • UE5使用Dash插件实现程序化地形场景制作

    目录 0  dash下载后激活 1 初步使用 2  导入bridge的资产路径 3 练习成果 4 参考链接 Dash插件点击蓝色的A,可以使用。 通过输入不同提示命令,来激活不同的功能。 这里需要注意是UAsserts的上一级目录。 实现程序化地形,程序化植被,日光模拟,摄像机视角等功能。 POLYGONFLO

    2024年02月07日
    浏览(41)
  • UE5- c++ websocket里实现调用player里的方法

    获取到引用了,就可以自然的调用。忽略 前置已经添加了websocket,具体步骤参考,链接 在UWebSocketGameInstance.h里新增代理,并在链接成功后进行绑定。 说明, 声明一个代理。DECLARE_DELEGATE_OneParam(JSONMessageTrigger, FString) 声明触发器。public:     JSONMessageTrigger JSONMessageTrigger; 下面到

    2024年02月10日
    浏览(47)
  • UE5、CesiumForUnreal实现多边形压平地形、3DTiles功能

    之前的文章在材质中基于顶点位置偏移实现了 StaticMesh 模型的 压平 效果,并解决了 闪面 的问题。 本文这里基于 CesiumForUnreal 插件加载在线的地形 CesiumWorldTerrain ,并实现了 任意多边形 对地形的 压平 效果,支持UE的 Editor 和 Runtime 环境,GIF动图如下: 与之前的文章“ UE5实现

    2024年02月03日
    浏览(141)
  • 【虚幻引擎UE】UE5 实现相机录制视频并导出(C++基于OpenCV生成视频合成exe)

    说明: 该功能暂不支持导出声音。 由于OpenCV3和UE5不太兼容,因此考虑制作外部exe实现视频合成。 1、实现 SavePicToFile 导出图片蓝图函数 .cpp文件

    2024年02月15日
    浏览(108)
  • 实现Vue3和UE5.2进行通信(Pixel Streaming)

    这篇文章简单讲解一下如何实现vue3和UE5进行数据的通信。 如果有同学还不清楚如何在Vue3中实现Pixel Streaming的播放器,请查看这篇文章 Vue3中集成Unreal 5.2 像素流(Pixel Streaming插件)。 1. 从UE5.2到前端页面的通信 现在我们想让UE5.2也就是后端发送给前端一些消息,然后前端接收到

    2024年02月08日
    浏览(76)
  • 如何使用UE5新功能 “打包型关卡Actor” 实现场景的性能优化

    内容分为: 简介 实操 优化结果展示 看不懂原理看看实操就大概就能明白 “打包型关卡蓝图”是UE5新功能 世界分区(World Partition) 的一部分 但 不依赖于项目是否启用了世界分区 官方文档有关世界分区中 关卡实例化 的内容 官方文档: 这个功能的原理是将场景中的 静态网

    2024年02月12日
    浏览(109)
  • UE5 UDP通信 UE4.21-UE5.1

    目录 客户端,发送数据 1.建立字符串变量UDPConnection,绑定连接事件  2.连接初始化  3.发送数据  4.关闭UDP服务  服务器,接收数据 1.绑定连接事件  2.绑定数据接收事件  3.开启UDP服务  4.返回数据  5.关闭UDP服务   需要提供远程端IP地址和端口号 0.0.0.0表示监听所有ip,端口

    2024年02月15日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包