当前位置: 首页 > article >正文

Unreal Engine的自定义扩展思路

UE是基于C++的开源引擎,Epic官方积极进行着各种升级迭代,同时多数要求较高的项目也会有自己的深度定制。基础的直接基于UE源码进行注释和修改的方式会造成后期同官方升级代码之间大量的合并问题,并且也容易出现大量引擎的重编。为了更好的解决各种引擎定制而出现的问题,下面提出一些思路进行探索。

定制需求

官方扩展机制

最终方案

自定义渲染管线

继承官方(或者可以完全自写)FSceneRenderer的子类,根据需要重写需要定制的函数接口。

定义一个Console命令,动态切换默认管线和自定义管线

static TAutoConsoleVariable<int32> CVarDynamicSceneRenderer(
        TEXT("r.DynamicSceneRenderer"),
        0,
        TEXT("Dynamic switch different scene renderer. 0: Default UE official scene renderer; 1: Custom scene renderer."),
        ECVF_RenderThreadSafe);

使用此状态命令来使用不同的SceneRender。

另外,由于UE对于静态模型渲染存在Cache机制,切换渲染过程需要刷新下:

#if !UE_BUILD_SHIPPING
	// when swith scene renderer dynamically, we also need update static mesh caches.
	static bool bPreviousUsedDynamicSceneRendererValid = false;
	static bool bPreviousUsedDynamicSceneRenderer = false;
	if (bPreviousUsedDynamicSceneRendererValid)
	{
		if (bPreviousUsedDynamicSceneRenderer != bUseDynamicSceneRenderer)
		{
			FScene* const Scene = InViewFamily->Scene->GetRenderScene();
			Scene->bScenesPrimitivesNeedStaticMeshElementUpdate = true;
		}
	}
	else
	{		
		bPreviousUsedDynamicSceneRendererValid = true;
	}
	bPreviousUsedDynamicSceneRenderer = bUseDynamicSceneRenderer;
#endif

参考


http://www.kler.cn/news/9537.html

相关文章:

  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
  • Java File类
  • CompletableFuture详解
  • 2022国赛23:linux服务器如何添加开放端口
  • 从零开始,手把手教你实现基于 Websocket 的微服务
  • 搜索词分析工具-网站关键词挖掘
  • 从JVM 源码的角度深度剖析CAS是如何实现原子性的
  • 校区机房物联网数据采集及远程监控5G应用系统方案
  • Spring(Ioc和Bean的作用域)
  • Docker-Compose镜像仓库
  • 【云原生进阶之容器】第六章容器网络6.4.1--Flannel组网方案综述
  • ServletContext
  • 《剑指offer》——从尾到头打印链表
  • 【Python】1分钟就能制作精美的框架图?太棒啦
  • Minio上传html文件
  • 分享10个前端开发者需要掌握的DOM技巧
  • 超越辅助:分享一个基于GPT引擎的免费AI工具
  • 一文解读基于PaddleSeg的钢筋长度超限监控方案
  • 管廊隧道怎么定位人员?分享管廊隧道人员定位系统解决方案
  • ubuntu16.04搭建gitlab
  • 原油期货是什么?原油期货交易盈利技巧有哪些?
  • MyBatis动态SQL教程:灵活处理复杂SQL场景,提升性能与可维护性
  • 二叉树练习题(递归展开图详解哦)
  • 21. 合并两个有序链表(Java)
  • 坦克大战第一阶段代码
  • 电子学会2023年3月青少年软件编程python等级考试试卷(一级)真题,含答案解析
  • 6、springboot快速使用
  • USB在虚拟机中不显示以及没有访问权限
  • C程序设计-小学生计算机教学辅助系统(四则运算)
  • 磁盘移臂调度算法