[UE5 设计模式] 设计模式一些概念


最近在开始备考下半年的高级系统架构设计师软考, 由于之前并没有系统地学习过设计模式, 在刷这部分相关的知识要点时总是云里雾里的. 实际上, UE的源码框架中融合了非常多的设计模式, 学习其使用的设计模式的同时也能够不断加深自己对于设计模式的理解. shiroe大佬在几年前写下一系列设计模式在UE4中的应用的优秀博客文章, 但很可惜的是, 并没有更新完常用的设计模式在UE中的应用, 故自己也决定站在巨人的肩膀上继续探索剩余的设计模式在UE5中的应用. 本文将汇总一系列设计模式在UE5中的应用的文章的入口, 使用的引擎版本为UE5.5.3.

继续阅读[UE5 设计模式] 设计模式一些概念

[UE5 设计模式] 代理模式Proxy Pattern


参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 代理模式
3. UE4游戏逻辑与渲染逻辑分离

1. 概述

1.1 描述

$\cdot$ 在代理模式(Proxy Pattern) 中, 一个类代表另一个类的功能, 这种类型的设计模式属于结构型模式.
$\\$ 代理模式通过引入一个代理对象来控制对原对象的访问. 代理对象在客户端和目标对象之间充当中介, 负责将客户端的请求转发给目标对象, 同时可以在转发请求前后进行额外的处理.
$\\$ 在代理模式中, 我们创建具有现有对象的对象, 以便向外界提供功能接口.

继续阅读[UE5 设计模式] 代理模式Proxy Pattern

UE5 USkinnedMeshComponent::PrecachePSOs相关调用流程梳理


最近在游戏开发工作上碰到一个问题, 过场动画中一角色的上半身在切换其某个材质时消失了一两帧, 该问题大多数出现于机器第一次打开游戏包体播放该过场动画时, 故初步结论是由于编译PSOs导致的. 经过一番排查, 确认是编译PSOs导致的问题, 故以本文梳理USkinnedMeshComponent::PrecachePSOs相关的调用流程, 方便后续在碰到类似问题时进行复习.

继续阅读UE5 USkinnedMeshComponent::PrecachePSOs相关调用流程梳理

《Shadow Caster Culling for Efficient Shadow Mapping》论文解读及对UE5 Shadow Depth Pass的性能优化


之前在学习Nanite的过程中, 发觉自己对于传统的Shadow的遮挡剔除流程亦不甚了解, 故找来该领域比较经典的一篇论文《Shadow Caster Culling for Efficient Shadow Mapping》进行学习, 同时将其算法思想应用于UE5 Shadow Depth Pass上进行性能优化.

继续阅读《Shadow Caster Culling for Efficient Shadow Mapping》论文解读及对UE5 Shadow Depth Pass的性能优化

《3D Gaussian Splatting for Real-Time Radiance Field Rendering》论文较真解读


最近开始在学习3D Gaussian Splatting, 一开始燃起兴趣是因为得知知乎的Italink大神在做一些将3D Gaussian Splatting与HLOD相结合的工作(Unreal Engine 5 — 3D Gaussian Splatting), 且在一次面试过程中也听面试官提起过3D Gaussian Splatting, 这不由让我觉得3D Gaussian Splatting未来将大有可为. 在经过一番简单入门后, 得知3D Gaussian Splatting是一个不涉及深度学习的CG算法, 背后的数学原理还是十分深刻的, 这也激发了自己更浓厚的兴趣. 由于在3D Gaussian Splatting的运行环境的配置上还不太顺利(目前主要原因是本地的VS版本太高), 故先读读论文解解馋, 同时配合B站上一个讲解得十分清晰易懂的视频解惑~

继续阅读《3D Gaussian Splatting for Real-Time Radiance Field Rendering》论文较真解读

提高Shadow Depth Maps性能的常用技术


目前项目组尚未开启Nanite, 故也一直没有好好地钻研过Nanite算法. 前段时间终于抽出业余时间, 静下心来认真学完了Games 104的Nanite一节内容, 收获颇多. 接下来打算以若干篇文章学透Nanite的技术要点, 本文先介绍提高Shadow Depth Maps性能的常用技术, 翻译自微软的技术博客文章《Common Techniques to Improve Shadow Depth Maps》.

继续阅读提高Shadow Depth Maps性能的常用技术

[UE5 AI流程探索篇] 引入深度学习实现Meshes分类 – 下篇


在上篇([UE5 AI流程探索篇] 引入深度学习实现Meshes分类 – 上篇) 中我们在外部PyTorch环境下搭建神经网络模型, 并用导出的训练数据来训练模型. 接下来在下篇中我们将编写插件将StaticMeshes信息转化为文本数据, 并将其作为外部搭建的神经网络的测试数据, 最后导出分类结果数据后在引擎中进行解析与可视化.

继续阅读[UE5 AI流程探索篇] 引入深度学习实现Meshes分类 – 下篇

《New Quadric Metric for Simplifying Meshes with Appearance Attributes》论文要点解读


最近在复习Mesh减面相关的知识点, 当初读罢Hoppe H. New quadric metric for simplifying meshes with appearance attributes[C]//Proceedings Visualization’99 (Cat. No. 99CB37067). IEEE, 1999: 59-510.这篇论文后开发了Mesh自动减面模块, 但其实并没有完全吃透这篇论文, 对许多理论细节亦是囫囵吞枣. 时隔近两年, 重新阅读这篇论文, “柳暗花明又一村”, 对于之前许多令自己迷惑的理论细节豁然开朗~

继续阅读《New Quadric Metric for Simplifying Meshes with Appearance Attributes》论文要点解读

[UE5 AI流程探索篇] 引入深度学习实现Meshes分类 – 上篇


这是前段时间阅读芝麻拌葱花在知乎上写下的一篇文章《【UE5 AI流程探索篇】引入深度学习实现PCG相关功能-上篇》 后突然冒出来的一个想法, 目前根据Meshes的拓扑不变量进行分类是一个十分具有挑战性的问题,
其本质上就是通过编写一套基于代数拓扑的算法, 根据使用者输入的Meshes, 然后去输出输入Meshes的预测分类. 怎么去设计这套逻辑算法是主要脱发点(剩下的脱发点就是怎么跟策划还有美术扯皮… 因为必然会加入许多比较Trick的分类逻辑). 那么我们有没有办法将这个白箱变成黑箱, 只需要控制输入跟输出, 然后黑箱内部会自己调整呢, 这很容易联想到机器学习. 因为机器学习的本质就是拟合, 而拟合就是根据现有的数据来构建函数去预测新的数据. 借助这个思想运用到Meshes分类上, 其本质就是根据不同输入Mesh来执行一套函数去输出输入Meshes的分类, 因此我们只需要将Meshes信息打包成训练数据来喂给神经网络, 让它自己去拟合出这个函数, 某种程度上训练后的神经网络就具备了Meshes分类的能力. 本人采用的神经网络是MeshCNN, MeshCNN是2019年提出的直接在3D Meshes上进行分类和分割的网络, MeshCNN在3D Meshes上定义了定义了卷积和池化层, 依据三维模型边的连通关系进行研究. 最终能够在来自SHREC 11数据集的30个类上达到98.6%的精度, 并且在部件和人体数据集上有很好的分割性能.

继续阅读[UE5 AI流程探索篇] 引入深度学习实现Meshes分类 – 上篇