This commit is contained in:
2025-08-02 12:09:34 +08:00
commit e70b01cdca
2785 changed files with 575579 additions and 0 deletions

View File

@@ -0,0 +1,206 @@
---
title: LookDev流程
date: 2022-12-21 11:25:40
excerpt:
tags: LookDev
rating: ⭐⭐⭐
---
# 前言
## 工作内容
- [[#流程解析]]
- [x] [[#从拍摄真实环境照片到UE复现流程]](可选)
- [ ] [[#材质检查]]
- [[#配套的UE插件]]
- [ ] 材质等窗口中的PreviewScene设置位于Windows- PreviewSceneSettings中
- [ ] PBR 灯光
- [ ] PBR Camera
- [ ] OpenColorIO 与sRPG、Tonemapping(ACES)
- DCC软件配套设置
- [ ] UE
- [ ] Maya
- [ ] SubstancePainter
- [ ] 配套的规范文档与检测工具
- [ ] PPT与教学视频
## 相关资料
- LookDevelopment
- UnrealEngine
- [x] [Enabling a Look Development Workflow for UE4](https://www.youtube.com/watch?v=70uNXZbUJVE)
- [x] [Learn About Exterior Rendering and Vegetation Look Development in Unreal Engine](https://www.youtube.com/watch?v=Ehg4sLxOH1o)
- [ ] 李文磊:[关于建立资产统一审查预览环境的一些说明](https://www.unrealengine.com/zh-CN/tech-blog/a-few-tips-for-building-unified-assets-reviewing-enviroment)
- [ ] [安柏霖物理正确的lookdev[1/2]--光照环境](https://zhuanlan.zhihu.com/p/338352699)
- [ ] [安柏霖物理正确的lookdev[2/2]--物理矫正](https://zhuanlan.zhihu.com/p/338352994)
- [ ] [陈浮生Unreal Engine 4 Look Dev制作浅析分享](https://zhuanlan.zhihu.com/p/394608910)
- [ ] [日天UE5引擎LookDev场景](https://zhuanlan.zhihu.com/p/500774794)
- [ ] 基于ACES 达芬奇调色流程
- [ ] 【[UFSH2024]《三角洲行动》,诠释新一代游戏开发方式 | 王理川 天美Y1工作室技术美术组负责人/专家】 https://www.bilibili.com/video/BV18F2oYAEp2/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- Maya
- [在maya中还原substance painter材质效果视频教程](https://zhuanlan.zhihu.com/p/22741348)
- 材质检查
- [PBRBaseColor表](https://physicallybased.info/)
- SubstancePainter
- https://substance3d.adobe.com/tutorials/courses/the-pbr-guide-part-1-zh
- https://substance3d.adobe.com/tutorials/courses/the-pbr-guide-part2-zh
- Other
- [Lighting and LookDev environment with physical units](https://www.slideshare.net/KurumiUranishi/lighting-and-lookdev-environment-with-physical-units)
- 其他人的LookDev预设
- Swats tuts
- https://www.youtube.com/watch?v=OnbZvAO4enU
- https://www.youtube.com/watch?v=YDFElKTs-Qk
- [Dušan Ković的Maya Arnold LookDev工具](https://www.youtube.com/watch?v=VgkF3AsRAYo)
- https://www.youtube.com/watch?v=oII26qMdpK8
- https://www.youtube.com/watch?v=jyq11xOp-B4
## 概念整理
开发LookDevelopment流程主要目的是**建立一套流程,统一的资产评估标准,使得生产出来的资产符合物理规律**的同时保证资产**看起来漂亮**。
不同的人对于LookDevelopment的考虑与需求也不同个人的方案如下
1. 构建一个矫正用关卡与配套蓝图工具。
1. 用作XR拍摄、三维扫描、PBR流程等光照环境矫正。
2. 构建一套多光照的室内外与影棚环境关卡与配套蓝图工具。
1. 用作资产检查。
3. 相关DCC的矫正工作
4. 构建一个,类似李文磊视频中的图表。
1. 方便在以后的创作进行环境参考。
5. 以上方案都需要设置色彩管理,保证所有的显示设备(不同色域)看起来效果一样。
参考:
1. [[#从拍摄真实环境照片到UE复现流程]](可选)
备注:
1. 建立LookDev Neutrally 场景,***建立UE调试场景最终应该让场景中的色卡呈现矫正后的标准颜色。***
1. 关键的一点就是通过Gray球的亮度确定HDR贴图的亮度。
2. 比色卡最好能贴在UI上。
3. 在其他DCC软件中还原。
# 流程解析
## 从拍摄真实环境照片到UE复现流程
视频地址:[Enabling a Look Development Workflow for UE4](https://www.youtube.com/watch?v=70uNXZbUJVE)
主要过程是通过在现实世界拍摄比色卡照片与8方向照片再使用8方向照片制作一个带有色彩管理数据的HDR Cubemap。最后再使用矫正环境关卡与内置蓝图工具进行手动环境矫正。但该流程中有部分步骤较为繁琐如果不追求极致的准确性其实是可以省略或者改进。
为什么不去网上下载HDR图片再进行矫正呢因为你没办法了解到所有的细节也无法保证颜色的正确性。所以有条件还是现场去做一下。
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Example.png)
### 所需工具
1. Full frame DSLR with good AEB features (具有良好AEB功能的全画幅数码相机)
2. Remote trigger (遥控触发器)
3. General purpose lens, e.g 24-105 Macro (通用镜头如24-105 Macro)
4. 8mm fisheye, e.g Sigma EX DG fisheye (8毫米鱼眼镜头如适马EX DG鱼眼镜头)
5. Good quality tripod & head (优质的三脚架和云台)
6. Nodal Ninja
7. Nodal EZ-Leveller
8. 18% Grey/White balance card (18%灰/白平衡卡)
9. X-Rite ColorChecker
10. 18% grey calibration ball (18%灰色校准球)
11. Chrome calibration ball (铬制校准球)
12. Lightweight tripod & clamp (轻型三脚架和夹具)
一些额外省钱方式:
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Cheat.png)
### 拍摄ColorCkecker与8方向矫正球照片
主要是获取所有动态范围光照信息之后再UE中进行还原。下面2个图主要介绍HDR的重要性
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_DynamicRangePhoto.png)
户外场景:
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_DynamicRangePhoto_OutDoor.png)
8方向拍摄以保证可以获得所有的信息。**注意在拍摄过程中不能修改EV值。**
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_EightDirectionPhotos.png)
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_EightDirectionPhotos_GraySphere.png)
GraySpher、ChromeSphere与比色卡需要放在中心点上。切保证摄像机正对着球的中心所以得每个球各拍一次。
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_EightDirectionPhotos_GraySphereChromeSphere.png)
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_ColorCkeck.png)
### 拍摄并且制作全景图
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_PanoramaPhoto.png)
#### 操作步骤
1. 拍摄比色卡以此来获得颜色变换矩阵取得色彩管理文件并对色差进行neutrally。
2. “标准”包围式拍摄矫正球与地面照片,并且应用上述取得的色彩管理文件。
3. 拍摄全景贴图并在PtGUI中拼接。
4. 在全景图中将主要光源与支架Mask掉通过PS的仿制图章……我认为这个不太完美![500](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Cubemap.png)
![500](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Cubemap_PS.png)
该团队还编写一个自动化工具对之前拍摄的8方向照片进行矫正大致用到一下库
- OpenimagelO: image read/write/processing
- Colour: (colour science lib) reference Macbeth values & space conversion
- DCRAW wrapper: RAW to TIFF conversion
- Exiftool wrapper: read/write image Exif & ICC metadata
- Pyzbar: QR code decoding
- OpenCV: simplified image read/write & image rectification
### 颜色矫正
相关软件
- Adobe LightingRoom
- Photoshop
- ColorChecker Camera Calibration
- 达芬奇
软件操作参考视频:
- https://www.youtube.com/watch?v=4DOXXhMgQAs
- https://www.youtube.com/watch?v=GD-0H_38vrM&t=390s
- https://www.bilibili.com/video/BV1p54y1B77j/?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
### UE部分
场景里需要有这2个蓝图Actor蓝图相关逻辑位于视频28:29左右位置。
- BP_LightStudioHDR环境球模型与天光
1. 能够设置HDR Image的旋转与亮度材质实例控制
2. SkyLight Capture
3. 模拟场景中的主要光源视频中演示了面光源与聚光灯视频34:00
- 色卡、矫正球模型
#### ChromeSphere矫正
这一步主要复现场景中的灯光。
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Scene_ChromeSphereAndPhoto1.png)
![700](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Scene_ChromeSphereAndPhoto2.png)
这一步需要确定关闭所有后处理效果。
![500](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Scene_DisablePostProcess.png)
#### GraySphere
GraySphere 矫正需要进入HDR Eye Adaptation。主要是为了匹配照片与场景GraySphere的亮度。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/LookDev_Scene_GraySphere_HDR.png)
需要分别矫正环境光IBL与场景内主要光源。矫正环境光时需要关闭场景内其他光源比较球体暗面亮度来调节环境球HDR亮度材质
PS.但这样其实有问题,因为这些灯光亮度是直接可以测算出来的……
## 线性空间 => sRGB => Tonemapping
## Lighting and LookDev environment with physical units
## 材质检查
摘自Substance教学。
![800](https://cdn.allegorithmic.com/images/academy/7b04d72d-432f-48b3-a1b6-efd0e75f2108)
图60表面是金属吗金属/粗糙度工作流程
![800](https://cdn.allegorithmic.com/images/academy/d2eb04b9-4a7e-4ed9-aca8-949c193b8723)
图61表面是金属吗高光反射/光泽度工作流程。
# 配套的UE插件
对于美术来说只需要了解基础的概念以及掌握对应的矫正工具用法即可生产出正确的资产,对此需要开发一些插件以满足需求:
## LookDev环境模板
1. LookDev Neutrally场景
2. LookDev 模型预览场景(室内/室外)
1. 设置近剪裁面 10=>1
2. 方向光勾选Atomosphere/Fog Sun Light 与LightShaftOcclusion
3. AtomosphericFog勾选Atomopshere Affect Sun Illumination
4. 光线追踪相关控制选项。
1. 使用AutomaticMaterial 包中的比色卡
2.
### 环境
晴天、阴天和室内
室外晴天,室外阴天和室内
# DCC软件中的环境调整
- Maya
- Substance Painter

View File

@@ -0,0 +1,9 @@
---
title: MovieRenderQueue命令行渲染
date: 2022-12-21 11:28:53
excerpt:
tags: MovieRenderQueue
rating: ⭐
---
https://zhuanlan.zhihu.com/p/177696943

View File

@@ -0,0 +1,85 @@
## 前言
突然想起几个月前在Quixel发布的一篇技术文章里面归纳了几个场景物体融合方式主要是与地形融合甚是不错。隧简单翻译并分享给大家。
原文地址https://quixel.com/blog/2020/1/22/blending-megascans-assets-in-ue4?utm_campaign=Tutorials&utm_source=youtube&utm_medium=social&utm_content=Goddess%20Temple%20in%20UE4:%20Lighting%20%26%20Blending
这里使用MegaScans中的"Damp Soil"、"Cut Grass 2×2 M"与"Grass Clumps"资产。
## World aligned texturing
![](https://blog.megascans.se/wp-content/uploads/2020/01/image14-1.jpg)
直接译为**世界坐标映射贴图**。通过模型顶点的世界坐标将贴图映射到模型上。大致原理如下:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image19.gif)
官方的AutomotiveMaterialPack与TwinmotionMaterialsPack材质包使用这个方法。这个方法广泛用在CAD、建筑等方面。这里介绍的主要是与地形融合的思路.
大致用法如下:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image25.jpg)
上图展示了通过控制x、y值来控制贴图平铺效果。
映射到球体模型的效果如下:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image16-min.gif)
一个完整的PBR材质大概是这个样子的
![](https://blog.megascans.se/wp-content/uploads/2020/01/image17.jpg)
材质实现https://blueprintue.com/blueprint/101g7t_k/
>这个方法的缺点在于平面与模型的接缝处过度十分突兀。但它的性能十分的好,配合其他方法使用能得到很好的效果。
## Pixel depth offset
![](https://blog.megascans.se/wp-content/uploads/2020/01/image5.gif)
为了解决过度突兀的问题,我们可以通过**像素深度偏移**(Pixel depth offset)配合DitherTemporalAA节点来解决这个问题。
大致用法如下:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image22.png)
效果如下:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image15.gif)
>仔细观察过度处可以看得出过度非常自然了。同时因为这个方法主要用到了TAA的抖动算法通过视觉暂留现象来实现半透明过度所以性能十分的好。缺点是材质Alpha较低时交界面容易产生错误的混合效果。当Alpha较高时容易产生TAA特有的鬼影现象。
![](https://blog.megascans.se/wp-content/uploads/2020/01/image13.gif)
材质实现https://blueprintue.com/blueprint/bwa_kbpc/
## Distance field mesh blending
![](https://blog.megascans.se/wp-content/uploads/2020/01/image9.gif)
该文作者认为这个可能是最佳方案。因为**距离场模型融合**是直接修改地形顶点,属于真实的过度效果。所以不会出现任何抖动问题。
大致效果如下:
https://www.bilibili.com/video/BV1ef4y1X7QZ/
{% raw %}
<iframe src="//player.bilibili.com/player.html?aid=287028163&bvid=BV1ef4y1X7QZ&cid=234182542&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
{% endraw %}
使用之前需要执行以下步骤:
1. 在Settings-Project Settings中搜索distance fields确保Generate Mesh Distance Fields选项处于勾选状态。
2. 在想要融合到地面的物体的属性中取消勾选Affect Distance Field Lighting选项。
![](https://blog.megascans.se/wp-content/uploads/2020/01/image20.png)
接下来就创建材质了:
![](https://blog.megascans.se/wp-content/uploads/2020/01/image10-1.jpg)
右边的粉色框中节点将会连入Normal槽你可以用一个参数变量来控制混合强度。因为当前材质没有混合地形与模型物体的纹理只是平滑了交接面附近的法线。所以为了得到更好的效果我们使用WorldAlignedTexture工作流程并给它们与地形接近的纹理这会达到一个更好的融合效果。
由于我们禁用了Affects Distance Field Lighting这使得该融合物体无法使用距离场AO以及距离场阴影。这个方法性能消耗较大用了曲面细分以及置换虽然会有很好的效果但如果你对性能优化以及场景的把控不足还是不建议使用。
材质实现https://blueprintue.com/blueprint/bqo9vg8i/
## Runtime virtual texturing
实时虚拟贴图RVT这个文档上都有就不翻译了。
材质实现https://blueprintue.com/blueprint/md12pcb5/
## 另一个视频中的优化技巧
这里我再追加另一个Quiexl视频中的性能技巧
- 使用Ue4的MergeActor将多个Mesh进行合并。视频2:00
- 使用MegaScans的Ue4插件将多个材质合并到一起。视频2:50
具体操作请参考https://www.bilibili.com/video/BV1Zv41117xB/
{% raw %}
<iframe src="//player.bilibili.com/player.html?aid=244561268&bvid=BV1Zv41117xB&cid=233968254&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
{% endraw %}

View File

@@ -0,0 +1,202 @@
---
title: World Partition(世界分区)
date: 2024-04-26 14:18:36
excerpt:
tags:
rating: ⭐
---
# 前言
文档地址: https://dev.epicgames.com/documentation/en-us/unreal-engine/world-partition-in-unreal-engine?application_version=5.3
- 知乎文章:
- UE5
- UE5 World Partition不完全指南:https://zhuanlan.zhihu.com/p/687020988
- UE4
- UE4旧版方案WorldComposition https://zhuanlan.zhihu.com/p/270172506
- UE4场景流送机制场景加载 https://zhuanlan.zhihu.com/p/269493281
- UE4场景流送机制LevelStreamingVolume&WorldComposition https://zhuanlan.zhihu.com/p/270172506
PS.可以使用Tools-Convert Level或者World Partition Convert Commandlet对普通关卡来进行转换。
## 调试命令
- 图形化Debug显示
- wp.Runtime.ToggleDrawRuntimeHash2D
- wp.Runtime.ToggleDrawRuntimeHash3D
| | |
|---|---|
|**wp.Runtime.ToggleDrawRuntimeHash2D**|开关世界分区运行时哈希的2D调试显示。|
|**wp.Runtime.ToggleDrawRuntimeHash3D**|开关世界分区运行时哈希的3D调试显示。|
|**wp.Runtime.ShowRuntimeSpatialHashGridLevel**|选择在显示世界分区运行时哈希时显示的网格级别。|
|**wp.Runtime.ShowRuntimeSpatialHashGridLevelCount**|选择在显示世界分区运行时哈希时要显示多少个网格级别。|
|**wp.Runtime.ShowRuntimeSpatialHashGridIndex**|显示世界分区运行时哈希时,显示指定的网格。无效的索引将导致显示所有网格。|
|**wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance**|取0到1之间的值用于调节"流送源-单元网格"向量和"流送源-单元网格"向量之间的角度对单元网格重要性的贡献。该值越接近于0角度对重要性的贡献就越小。|
|**wp.Runtime.OverrideRuntimeSpatialHashLoadingRange**|设置运行时加载范围。接受以下参数:<br><br>- `-grid=[index]`:设置你想影响的运行时网格。<br>- `-range=[override_loading_range]`: 设置新的运行时加载范围|
|**wp.Runtime.MaxLoadingLevelStreamingCells**|限制并发加载的世界分区流单元的数量。|
|**wp.Runtime.HLOD 0**|使用 `wp.Runtime.HLOD` 显示没有HLOD的世界。|
# 关卡实例化
这2个选项在Actor右键菜单中ActorSelection
- **Level Instance**
- 可以将任意Actor塞进去
- 采用**OFPA**系统保存关卡信息
- **Packed Level Actor**
- 继承自Level Instance
- 将所选的Actor变为component在创建Level的同时创建一个Blueprint
- 内部Actor不再使用**OFPA**的方式同时意味着整个Packed Level Actor只会按整体流送
- 在Pack时只会打包场景资产类型功能性的蓝图会被排除
***相关说明文章***:https://dev.epicgames.com/community/learning/knowledge-base/r6wl/unreal-engine-world-building-guide
# 官方文档阅读笔记
## 概念
- **流送源**[[#PlayerController]]是一种流送源,其他流送源可以使用 **世界分区流送源组件UWorldPartitionStreamingSourceComponent** 添加到关卡中使得加载指定位置的Grid。
- [[#DataLayer]]是世界分区系统中的一个子系统用于将Actor划分到单独的层中。通过加载和卸载数据层
## 将现有关卡转换为使用世界分区
 可以使用**工具Tools> 转换关卡Convert Level** 菜单选项或使用世界分区转换命令:
`UnrealEditor.exe 项目名称 -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering`
## 相关设置
### WorldSettings
- **启用流送Enable Streaming**: 选项启用和禁用网格单元流送。
- 使用MovieRenderQueue进行渲染时需要关闭这个选项不然场景不会加载。
- ***Use External Actors***为整个Level启用每个Actor per File存储方式。
- Preview Grid可以在Viewport中大致预览一下每个Grid对应的Cell Size和Loading Range的设置是否合理。Preview Gird Level可以修改预览层级。
| | |
| ------------------------------------- | ----------------------------------------------------------------- |
| **网格名称Grid Name** | 包含运行时网格的名称。 |
| **单元大小Cell Size** | 确定用于生成流送关卡的网格单元的大小。在示例中, **单元大小Cell Size** 是256平方米。 |
| **加载范围Loading Range** | 确定与流送源距离多远的范围之内会加载单元。在上图中, **加载范围Loading Range** 是流送源周围768米的半径。 |
| **在缓慢流送时阻止Block on Slow Streaming** | 在网格单元加载速度不够快的情况下阻止加载。 |
| **优先级Priority** | 确定流送源的优先级。如果某个网格单元与多个流送源相交,其优先级将是所有流送源中最高的。 |
| **调试颜色Debug Color** | 确定启用 **预览网格Preview Grids** 时显示的网格线颜色。 |
| **预览网格Preview Grids** | 启用时,将在视口中显示网格线。 |
### Actor
- Runtime Grid用于指定Actor的分区Grid名称如果**没有指定则会自动选择**。
- Is Spatially Loaded
- 如果启用此Actor在未分配到禁用的数据层且在任何流送源的范围内时加载。
- 如果禁用此Actor在未分配到禁用的数据层时加载。
- Packaging Mode选择是否将Actor设置成Actor Per File存储方式。
### PlayerController
- Enable Streaming Source将控制器作为作为**流送源**。
### UWorldPartitionStreamingSourceComponent
| | |
| ------------------------------------------------ | -------------------------------------------------------------------- |
| **默认可视化器加载范围Default Visualizer Loading Range** | 确定启用可视化器时调试可视化器网格的大小。 |
| **目标网格Target Grid** | 确定此源影响的流送网格。 |
| **调试颜色Debug Color** | 确定用于调试的颜色。 |
| **目标HLOD层Target HLOD Layer** | 确定流送源影响的HLOD层。 |
| **形状Shapes** | 确定用于为此流送源构建自定义形状的形状列表。如果为空,将使用半径等于网格加载范围的球体。 |
| **优先级Priority** | 确定流送源的优先级。如果某个网格单元与多个流送源相交,其优先级将是所有流送源中最高的。 |
| **流送源已启用Streaming Source Enabled** | 确定此组件是否已启用。 |
| **目标状态Target State** | 确定相交的网格单元应该处于的状态(已加载或已激活)。如果某个网格单元与多个流送源相交,目标状态将是最高的目标值(其中已激活高于已加载)。 |
蓝图函数 **Enable Streaming Source** 和 **Disable Streaming Source** 将启用和禁用此组件的流送。
### ALocationVolume
一种用于**加载/卸载** 指定区域的Volumn。可以在WorldPartition编辑器上点击来进行控制。也有三个蓝图函数用于控制加载与卸载
- void Load()
- void Unload()
- bool IsLoaded() const
## 构建WorldPartition编辑器小地图
Build - Build Minimap
## DataLayer
官方文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/world-partition---data-layers-in-unreal-engine?application_version=5.2
![[WorldPartition_LayerData.png|400]]
| | |
| ----- | ----------------------------------------------------------------------------------------- |
| **1** | 在关卡编辑器中切换关卡的可视性。仅当某个Actor所有关联数据层都隐藏时它才能被隐藏。 |
| **2** | 表示"动态加载Is Dynamically Loaded"的状态。动态加载的层将会影响运行时的Actor加载。可以使用蓝图或C++代码激活这些层。 |
| **3** | 切换"编辑器动态加载Editor Dynamically Loaded"标记。在关卡编辑器中如果Actor启用了数据层并且在世界分区中加载了编辑器单元格将加载Actor。 |
| **4** | 切换此数据层中所有Actor的可见情况 |
| **5** | 决定启动时数据层是否在编辑器中显示。 |
| **6** | 决定是否应该为此数据层中的Actor生成HLOD。仅当启用"动态加载Is Dynamically Loaded"时可用。 |
| **7** | 决定启用了"动态加载Is Dynamically Loaded"的数据层在运行时加载、卸载还是激活。 |
| **8** | 决定数据层是否影响Actor的运行时加载。 |
***默认只在Editor下生效可以将其类型切换为Runtime从而使其在游戏过程中也可以通过逻辑控制某一Layer的显隐。***
### 使用蓝图或者c++控制DataLayer加载
通过**UDataLayerSubsystem**的SetDataLayerState()来控制DataLayer的加载与卸载。
相关的Runtime加载控制可以参考:https://youtu.be/LI6TsZf5hh0?si=nwqz-S6DDR7MgSBT
直接通过蓝图的DataLayerSubsystem进行控制加载与显示。
# 相关CommandLet
- 烘焙WorldPartitionUnrealEditor.exe QAGame -run=cook -targetplatform=WindowsNoEditor -Unversioned -map=Playground
- HLOD Build`UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionHLODsBuilder`
- WorldPartition重命名复制`UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionRenameDuplicateBuilder -NewPackage=/Game/ThirdPersonBP/Maps/NewPackage`
- WorldPartition重新保存Actor`UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionResaveActorsBuilder`
- WorldPartition植被构建`UnrealEditor.exe QAGame Playground.umap -run=WorldPartitionBuilderCommandlet -Builder=WorldPartitionFoliageBuilder -NewGridSize=Value`
- WorldPartition Nav构建`UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionNavigationDataBuilder -SCCProvider=None`
- WorldPartition智能对象构建 `UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -builder=WorldPartitionSmartObjectCollectionBuilder`
- 转换子关卡为WorldPartition`UnrealEditor.exe -run=ConvertLevelsToExternalActorsCommandlet -nosourcecontrol -convertsublevels "Game/Maps/TestMaps/ExternalActors/MainMap`
# 修改WorldPartition场景中出现已删除物体的物体问题
猜测执行WorldPartitionBuilderCommandlet -builder=WorldPartitionResaveActorsBuilder。还未经过测试。
```bash
cd /d D:
cd D:\Projects\ASoul_UE5\Engine\Engine\Binaries\Win64
UnrealEditor.exe "D:\Projects\ASoul_UE5\LiveDirector\LiveDirector.uproject" "/Game/Maps/Map_WuTai_WP/Map_WuTai_WP" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionResaveActorsBuilder
```
统计文件数量
p4 sizes -s //Project/Development/LiveDirector/Content/__ExternalActors__/Maps/Map_WuTai_WP/Map_WuTai_WP/...
# WorldPartition Runtime Sequence驱动物体问题
1. WorldSettings关闭 EnableStreaming。所有场景Actor都会一直加载。
2. 对应Actor关闭Is Spatially LoadedActor会一直加载。
3. ~~使用WorldPartitionRuntimeStateVolumn设置DataLayer加载即可。~~ 经过测试无效
4. ~~Sequence使用DataLayerTracker设置为Activated无效。~~
PS.UE大纲视图中的白色Actor是您自己放置在世界中的物品黄色Actor是您玩游戏时由引擎生成的物品。
***UE-173838 Actors in Level Sequence in a World Partitioned level do not move***
https://issues.unrealengine.com/issue/UE-173838
但5.2已经修复这个问题。
https://github.com/EpicGames/UnrealEngine/commit/51d38831de4da7df196eecaf13f3d4b5a517f1f0
## 最终结论
1. Sequence不能控制DMX是因为大世界存在垃圾需要使用上面的重新构建命令重新构建一下问题就解决了。
2. 舞台DMX可以考虑加一个Runtime DataLayer之后塞进LiveArea中。
1. 有关DataLayer的Runtime设置可以参考:https://youtu.be/LI6TsZf5hh0?si=nwqz-S6DDR7MgSBT
2. 这样可以保证看不到的Actor也会被加载。
3. 在异世界地图中也用到了WorldPartitionRuntimeStateVolumn。BP_LiveArea_12_1
4. AWorldPartitionRuntimeStateVolume是字节自己实现的。Puerts与C++没有任何调用,不知道该如何使用。
### ASoul的做法
1. 几个通用DataLayer
1. DL_AlwaysActive
2. DL_DMXStageAll
3. DL_EditorOnly
4. DL_LiveArea
2. 按照需要设置大世界专用DataLayer主要面对的是***占用区域较大,需要全部加载的。***
3. 通过TS脚本在进如LiveArea的时候通过DataLayerSubsystem来加载显示对应DataLayer
## 笔记
1. 枝江地图针对小房间、DMX、巨蛋DMX、舞蹈室以及舞台分别使用了DataLayer。
2. ***LvieArea***可以关联DataLayer并让其一起加载。比如乃琳卧室的LiveArea Map_SceneBedroom_Nailin以及BP_LiveArea_11关联了DL_SeasideCity_StageA。
- 加载
-  TsAreaListItemView.ts
- widget.IsLoad.OnCheckStateChanged.Add((bChecked)=>{this.OnLoadStateChanged(bChecked);});
- 加载manager.LayerManager.AddViewTarget(this.preset.LevelAreaPreset.AreaGuid, this.preset.LevelAreaPreset.Description);
- ***创建ADirectorReplicationViewTarget一个带有UWorldPartitionStreamingSourceComponent的Actor。*** 之后Attach到LiveArea上并且重合。
- class TsDirectorViewTarget extends UE.DirectorReplicationViewTarget。里面有一个定时器判断是否加载完加载完调用OnLoadComplete()(客户端加载逻辑。)
- ***在游戏状态下把TsDirectorViewTarget删除4级会显示没有加载这个场景。***
- ***TsLevelAreaManager.tsLoadAreaLayer()***
- 遍历LiveArea的CareLayers将LiveArea对应的DataLayer的状态设置为Actived。
- 销毁manager.LayerManager.RemoveViewTarget(this.preset.LevelAreaPreset.UUID);
- 切换
- TsAreaListItemView.ts SwitchLevel()
- TsMapEnvironmentLayerManagerEnterLevelArea()
TsMapEnvironmentAsset.ts读取JSON缓存所有的道具与资产路径之后异步加载。