参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 解释器模式
3. 字节码
1. 概述
1.1 描述
$\cdot$ 解释器模式(Interpreter Pattern) 提供了评估语言的语法或表达式的方式, 它属于行为型模式.
$\\$ 解释器模式给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子.
$\\$ 这种模式被用在SQL解析, 符号处理引擎等.
参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 解释器模式
3. 字节码
1. 概述
1.1 描述
$\cdot$ 解释器模式(Interpreter Pattern) 提供了评估语言的语法或表达式的方式, 它属于行为型模式.
$\\$ 解释器模式给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子.
$\\$ 这种模式被用在SQL解析, 符号处理引擎等.
参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 模板模式
1. 概述
1.1 描述
$\cdot$ 在模板模式(Template Pattern) 中, 一个抽象类公开定义了执行它的方法的方式/ 模板. 它的子类可以按需要重写方法实现, 但调用将以抽象类中定义的方式进行. 这种类型的设计模式属于行为型模式.
参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 组合模式
3. UE开发中的设计模式(四) —— 组合模式
1. 概述
1.1 描述
$\cdot$ 组合模式(Composite Pattern), 又叫部分整体模式, 是用于把一组相似的对象当作一个单一的对象. 组合模式依据树形结构来组合对象, 用来表示部分以及整体层次. 这种类型的设计模式属于结构型模式, 它创建了对象组的树形结构.
$\\$ 这种模式创建了一个包含自己对象组的类. 该类提供了修改相同对象组的方式.
参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 桥接模式
3. 游戏开发设计模式之桥接模式
1. 概述
1.1 描述
$\cdot$ 桥接(Bridge) 是用于把抽象化与实现化解耦, 使得二者可以独立变化. 这种类型的设计模式属于结构型模式, 它通过提供抽象化和实现化之间的桥接结构, 来实现二者的解耦.
$\\$ 这种模式涉及到一个作为桥接的接口, 使得实体类的功能独立于接口实现类, 这两种类型的类可被结构化改变而互不影响.
$\\$ 桥接模式的目的是将抽象与实现分离, 使它们可以独立地变化, 该模式通过将一个对象的抽象部分与它的实现部分分离, 使它们可以独立地改变. 它通过组合的方式, 而不是继承的方式, 将抽象和实现的部分连接起来.
最近在开始备考下半年的高级系统架构设计师软考, 由于之前并没有系统地学习过设计模式, 在刷这部分相关的知识要点时总是云里雾里的. 实际上, UE的源码框架中融合了非常多的设计模式, 学习其使用的设计模式的同时也能够不断加深自己对于设计模式的理解. shiroe大佬在几年前写下一系列设计模式在UE4中的应用的优秀博客文章, 但很可惜的是, 并没有更新完常用的设计模式在UE中的应用, 故自己也决定站在巨人的肩膀上继续探索剩余的设计模式在UE5中的应用. 本文将汇总一系列设计模式在UE5中的应用的文章的入口, 使用的引擎版本为UE5.5.3.
参考材料
1. 【UE4 设计模式】策略模式 Strategy Pattern
2. 代理模式
3. UE4游戏逻辑与渲染逻辑分离
1. 概述
1.1 描述
$\cdot$ 在代理模式(Proxy Pattern) 中, 一个类代表另一个类的功能, 这种类型的设计模式属于结构型模式.
$\\$ 代理模式通过引入一个代理对象来控制对原对象的访问. 代理对象在客户端和目标对象之间充当中介, 负责将客户端的请求转发给目标对象, 同时可以在转发请求前后进行额外的处理.
$\\$ 在代理模式中, 我们创建具有现有对象的对象, 以便向外界提供功能接口.
最近在游戏开发工作上碰到一个问题, 过场动画中一角色的上半身在切换其某个材质时消失了一两帧, 该问题大多数出现于机器第一次打开游戏包体播放该过场动画时, 故初步结论是由于编译PSOs导致的. 经过一番排查, 确认是编译PSOs导致的问题, 故以本文梳理USkinnedMeshComponent::PrecachePSOs相关的调用流程, 方便后续在碰到类似问题时进行复习.
之前在学习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, 一开始燃起兴趣是因为得知知乎的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》论文较真解读
目前项目组尚未开启Nanite, 故也一直没有好好地钻研过Nanite算法. 前段时间终于抽出业余时间, 静下心来认真学完了Games 104的Nanite一节内容, 收获颇多. 接下来打算以若干篇文章学透Nanite的技术要点, 本文先介绍提高Shadow Depth Maps性能的常用技术, 翻译自微软的技术博客文章《Common Techniques to Improve Shadow Depth Maps》.