diff --git "a/Docs/04-UnrealEngine/1.Slate\345\274\200\345\217\221.md" "b/Docs/04-UnrealEngine/1.Slate\345\274\200\345\217\221.md" index 46f231e..fd5fbef 100644 --- "a/Docs/04-UnrealEngine/1.Slate\345\274\200\345\217\221.md" +++ "b/Docs/04-UnrealEngine/1.Slate\345\274\200\345\217\221.md" @@ -133,7 +133,7 @@ class UGameViewportClient : public UScriptViewportClient, public FExec - **窗口的基本状态** :激活(Active),焦点(Focus),可见(Visible),模态(Modal),变换(Transform) - **布局策略及相关概念** : - 盒式布局(HBox,VBox),流式布局(Flow),网格布局(Grid),锚式布局(Anchors),重叠布局(Overlap),画布(Canvas) - - 内边距(Margin),外边距(Padding),间距(Spacing),对齐方式(Alignment) + - 内边距(Padding),外边距(Margin),间距(Spacing),对齐方式(Alignment) - **样式管理** :图标(Icon),风格(Style),画刷(Brush) - **字体管理** :字体类型(Font Family),文本宽度测量(Font Measure) - **尺寸计算** :控件尺寸计算策略 @@ -439,7 +439,7 @@ auto MyWidget = SNew(SCustomWidget) ### 控件一览 -这里主要是为了建立 `控件<--->类型` 的映射,知道有什么控件,当使用这些控件的时候,UE源码中大量的用例可供参考,此外UE还提供相应的调试工具。 +这里主要是为了建立 **控件<--->类型** 的映射,知道有什么控件,当使用这些控件的时候,UE源码中大量的用例可供参考,此外UE还提供相应的调试工具。 #### 基础 diff --git "a/Docs/04-UnrealEngine/6.\345\274\200\346\224\276\344\270\226\347\225\214\345\210\266\344\275\234.md" "b/Docs/04-UnrealEngine/6.\345\274\200\346\224\276\344\270\226\347\225\214\345\210\266\344\275\234.md" index fe31312..36ad2c8 100644 --- "a/Docs/04-UnrealEngine/6.\345\274\200\346\224\276\344\270\226\347\225\214\345\210\266\344\275\234.md" +++ "b/Docs/04-UnrealEngine/6.\345\274\200\346\224\276\344\270\226\347\225\214\345\210\266\344\275\234.md" @@ -44,7 +44,7 @@ ![image-20231130100005205](Resources/image-20231130100005205.png) -勾选 `预览网格` 能在编辑器视图下,看到场景的流送视图: +勾选 **预览网格** 能在编辑器视图下,看到场景的流送视图: ![image-20231130101753095](Resources/image-20231130101753095.png) @@ -54,8 +54,8 @@ ![image-20231201112501518](Resources/image-20231201112501518.png) -- `运行时网格`:该Actor归属于哪个世界分区网格,如果为None会被指定到 **MainGrid** 中。 -- `已空间加载`:勾选后该Actor会参与世界分区的流送,取消勾选会让该Actor在场景中永远被加载,不参加流送。 +- **运行时网格**:该Actor归属于哪个世界分区网格,如果为None会被指定到 **MainGrid** 中。 +- **已空间加载**:勾选后该Actor会参与世界分区的流送,取消勾选会让该Actor在场景中永远被加载,不参加流送。 世界分区的流送由 **流送源(Streaming Source)** 来触发。 @@ -356,7 +356,7 @@ bool UWorldPartitionRuntimeSpatialHash::GenerateStreaming(UWorldPartitionStreami 可以看到一些 “奇怪” 的现象, -- 由于`物体E`的包围盒位于世界分区的轴线上,结果被划分到了Level3,这将导致它会永远被加载,但是它的包围盒区域明明非常小。 +- 由于 物体`E` 的包围盒位于世界分区的轴线上,结果被划分到了Level3,这将导致它会永远被加载,但是它的包围盒区域明明非常小。 这个问题非常容易出现: @@ -516,16 +516,16 @@ OFPA 允许团队成员可以共同编辑同一地图的不同Actor ![image-20231027164043816](Resources/image-20231027164043816.png) - **层类型:** 使用何种策略来生成HLOD - - **实例化** :使用对应模型最低级别的LOD(如果是Nanite模型则会使用该LOD生成新的Nanite数据)。 - - **合并** :将分区内的静态网格体合并到一起。 - - **简化** :对分区内的网格体进行合并,在合并网格体的基础上执行网格体简化,它更适合几何形状比较复杂的物体,比如枝繁叶茂的树木。 - - **近似** :对分区内的网格体进行合并,在合并网格体的基础上执行网格体近似,它更适合几何形体比较圆润的物体,比如建筑,石头。 - - **自定义** :自定义HLOD生成策略。 + - **实例化** :使用对应模型最低级别的LOD(如果是Nanite模型则会使用该LOD生成新的Nanite数据)。 + - **合并** :将分区内的静态网格体合并到一起。 + - **简化** :对分区内的网格体进行合并,在合并网格体的基础上执行网格体简化,它更适合几何形状比较复杂的物体,比如枝繁叶茂的树木。 + - **近似** :对分区内的网格体进行合并,在合并网格体的基础上执行网格体近似,它更适合几何形体比较圆润的物体,比如建筑,石头。 + - **自定义** :自定义HLOD生成策略。 - **已空间加载:** 生成的HLOD是否需要开启流送,如果开启,那么会为该HLOD层创建一个 HLOD Grid,生成的HLODActor会放置在这个Grid中。 - - **单元大小:** 配置HLOD Grid的单元大小,数值最好是Main Grid单元大小的整数倍。 - - **加载范围:** 配置HLOD Grid的加载范围,数值最好是Main Grid单元大小的整数倍。 - - **父层:** 对生成的HLOD简模,使用父HLOD层再处理一遍,生成更精简的HLOD简模,通常它具有更大的加载范围。 + - **单元大小:** 配置HLOD Grid的单元大小,数值最好是Main Grid单元大小的整数倍。 + - **加载范围:** 配置HLOD Grid的加载范围,数值最好是Main Grid单元大小的整数倍。 + - **父层:** 对生成的HLOD简模,使用父HLOD层再处理一遍,生成更精简的HLOD简模,通常它具有更大的加载范围。 注意事项: @@ -589,7 +589,7 @@ UE 5 中提供了 关卡实例化(Level Instancing)的功能,旨在改善 关卡实例的本意是将一组Actor编组,这样就可以在整个世界内放置和复用的关卡实例,但由于它可以在打包时嵌入到主关卡的世界分区中,再加上目前UE5数据层的使用还未得到普及,很多习惯UE4的开发团队会喜欢将它作为 **开放世界地图的子关卡** 来使用。 -在UE5.3之前,无法为关卡实例中的Actor设置 `运行时网格` ,在5.3中,这个问题得到了解决: +在UE5.3之前,无法为关卡实例中的Actor设置 **运行时网格** ,在5.3中,这个问题得到了解决: ![image-20231129161229035](Resources/image-20231129161229035.png) @@ -609,19 +609,19 @@ UE 5 中提供了 关卡实例化(Level Instancing)的功能,旨在改善 - 开放世界项目需要更专业的制作人员(地编,策划,程序...),在设计时充分考虑到世界分区的特性。 - 人的力量是有限的,在资产制作上尽可能采用程序化,在管控流程上尽可能使用自动化,找到合适的量化指标,让制作流程变得可追溯,可迭代: - - Houdini和UE5的PCG框架: - - [『UE5 PCG』官方公开课:深入研究Electric Dreams环境项目](https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1y8411U7Hs) - - [Electric Dreams PCG技术详解(一)——术语、工具和图表介绍](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/mGWiPKvWU_NHTktIWA6LnA) - - [Electric Dreams PCG技术详解(二)——沟壑、大型Assembly](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/xHdnrFTkywF_7OjqOuALbw) - - [Electric Dreams PCG技术详解(三)——森林、岩石和场景背景](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/YWcd8l-VphNLrOlg3zkSzA) - - [Electric Dreams PCG技术详解(四)——远景、雾气、自定义节点及子图表](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/CWTUcRIBTXw8WvhX3jrcBw) - - [虚幻引擎自动化系统 | 虚幻引擎5.3文档 (unrealengine.com)](https://docs.unrealengine.com/5.3/zh-CN/automation-system-in-unreal-engine/) + - Houdini和UE5的PCG框架: + - [『UE5 PCG』官方公开课:深入研究Electric Dreams环境项目](https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1y8411U7Hs) + - [Electric Dreams PCG技术详解(一)——术语、工具和图表介绍](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/mGWiPKvWU_NHTktIWA6LnA) + - [Electric Dreams PCG技术详解(二)——沟壑、大型Assembly](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/xHdnrFTkywF_7OjqOuALbw) + - [Electric Dreams PCG技术详解(三)——森林、岩石和场景背景](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/YWcd8l-VphNLrOlg3zkSzA) + - [Electric Dreams PCG技术详解(四)——远景、雾气、自定义节点及子图表](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/CWTUcRIBTXw8WvhX3jrcBw) + - [虚幻引擎自动化系统 | 虚幻引擎5.3文档 (unrealengine.com)](https://docs.unrealengine.com/5.3/zh-CN/automation-system-in-unreal-engine/) - 开放世界场景的性能优化不同于单个资产的优化,因为本身存在着大量需要维护的资产,很难靠人力进行维护,所以应该尽可能从宏观上寻求一些统一的管理策略,并舍弃一些小的优化要求来换取更大的性能平衡,做好场景资产的分类和隔离是非常非常非常重要的,它是性能优化的重要依据,研发团队可以根据不同的分类来制定相应的LOD Group,Texture Group和HLOD生成策略。此外,对于一些确实需要进行特化处理的资产,也应该保留特化的依据(白名单)。 - 场景制作流程不会混乱的前提是每个参与者都严格遵守场景的制作规范,因此需要研发团队建立公共的文档仓库用于公布和迭代场景规范, 尽可能依靠工具而非人工进行校验,这样可以很大程度地减少人为介入产生错误的概率,如果非要增加相关人员的手动工作量,也需要尽可能地评估出最精简的数据和流程。 - 制作编辑器来优化项目的制作流程,这里有一些小建议: - - 尽可能去追溯问题产生的时机,在源头解决问题的成本是最低的,比如说 **资产创建时(AssetCreated)** , **资产保存时(AssetSaved)** , **Actor创建时(NewActorsPlaced)** ... - - 使用可忽略的 **通知(Notification)** ,而不是使用 **对话框(Dialog)** 强制阻塞用户输入。 - - 提供友好的用户体验,支持撤销,重做,批处理,自定义。 + - 尽可能去追溯问题产生的时机,在源头解决问题的成本是最低的,比如说 **资产创建时(AssetCreated)** , **资产保存时(AssetSaved)** , **Actor创建时(NewActorsPlaced)** ... + - 使用可忽略的 **通知(Notification)** ,而不是使用 **对话框(Dialog)** 强制阻塞用户输入。 + - 提供友好的用户体验,支持撤销,重做,批处理,自定义。 ## 玩法设计 @@ -641,5 +641,5 @@ UE 5 中提供了 关卡实例化(Level Instancing)的功能,旨在改善 - 塞尔达中通过底层的系统化玩法架起整个游戏的玩法体系,套用各种模板来完成各种玩法的扩充,开发者保证了 模板和系统化设计 在可管控的范围之内,艺术家和游戏创作者在这个 **限定范围之内** 去做游戏内容的衍生,才使得项目的复杂度不会随着体量变大而急剧上升。 -- 黑神话中,悟空可以通过 `72变` 变成各种精英怪,这一玩法设计,使得研发团队可以将更多的制作成本投入到精英怪的设计当中。 +- 黑神话中,悟空可以通过 72变 变成各种精英怪,这一玩法设计,使得研发团队可以将更多的制作成本投入到精英怪的设计当中。