当前位置: 首页 > 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/a/9537.html

相关文章:

  • 从0开始学习Linux——文件管理
  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • 使用 start-local 脚本在本地运行 Elasticsearch
  • VMware虚拟机安装Win7专业版保姆级教程(附镜像包)
  • MYSQL 库,表 基本操作
  • 【go从零单排】Timer、Epoch 时间函数
  • 虹科案例 | 丝芙兰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