This commit is contained in:
2023-06-29 11:55:02 +08:00
commit 36e95249b1
1236 changed files with 464197 additions and 0 deletions

View File

@@ -0,0 +1,638 @@
## DMX
渲染模型&材质:
- SM_Strobe_Lens M_MI_Lens_Strobe不透明材质指令数254
- SM_Beam_RM M_Beam_Master
- BP_StaticMatrix M_MatrixBeam_Master
### Beam材质
变量:
- NSliceNearPlane 交点世界坐标
- NDepth
- FSliceFarPlane 交点世界坐标
- FDepth
MF_WSIntersection如果没有相交RelIntersectPos为IntersectDistance为。
### 优化方案
1. DMX模型改成StaticMeshInstanceGun的模型是Masked建议改成不透明。
2. 关闭DMX灯光中的照明效果因为不会对着模型照明。
1. 场景中的组件勾选**Disable Lights**
3. StaticMeshLens 组件可以按照距离进行关闭。BP_StaticStrobe_C、BP_MovingHead_C
1. 场景中的组件中的StaticMeshLens去掉**Visible**。
2. Sequence中手动设置**Visible**。
4. Beam材质
1. 给BeamRayMarch的DMX Max Light Distance 乘上一个变量倍率之后适当减少DMX Max Light Distance大小建议的倍率为1.2~1.5长度为1/1.2~1/1.5 给BeamRayMarch的DMX Zoom 乘上一个变量倍率Zoom 5=>4.5~3并且将倍率调整成合适数值。
2. 调整Zoom Quilty 1=>1.5~2并且适当调整DMX Lens Radius的数值减少断点问题。
5.
## 优化目标
XR 2k 2048*1080 50帧 => 3440 * 1440 50帧0
## 优化场景
E:\Project\yanjingdan\BengHuai\Ture\Content\UnWorld\BengHuai_True\Maps
E:\Project\yanjingdan\BengHuai\L_Dacapo\content\UnWorld\BengHuai_Dacapo\Maps\L_Dacapo5.umap
E:\Project\yanjingdan\BengHuai\BengHuai\Content\UnWorld\BengHuai_Tiantai\Maps\L_BengHuai_Tiantai.umap
步骤:
1. 场景静态模型设置成Nanite以下模型需要额外考虑是否开启Nanite
1. 带有世界位移与Masked的模型比如花 草 模型。
2. 将一些不会动的模型都设置成Static。
3. 告知拍摄镜头需求,是全景还是需要360°都有拍摄要求。
4. 确定场景之后不会进行改动之后使用MergeActor将模型中的相同材质进行合并将场景中的静态模型设置成Instance。
### L_BengHuai_Tiantai
问题:
~~1. 模型问题
1. 目前比较大的问题在于模型较多、面数较高且场景静态模型没有设置成Nanite。使得剔除与BasePass渲染延迟过高。~~
#### Model
~~1. 场景中大量巨大无异议的球名字为Sphere~SphereX~~
~~2. 图元较多的关卡
1. L_Main_AllCity_Chengbao_2~~
- dd_polySurface
- BookOpen
- Box001~Box003
-
#### Light&Shadow
1. SpotLightDingGuang
1. 去掉Cast Shadow只影响台阶的阴影)
2. 勾选Distance Field Shadows。
2. RectLight 81~93
1. 去掉Cast Shadow。
2. 将其替换成SourceLength 匹配的PointLight。
3. 将其他面光源替换成点光源或者聚光灯可以减少0.1~0.2ms,优先级低)。
#### Translucent
1. 修改EasyFog的材质(大纲搜索EasyFog从Translucent=>Additive。并且重新调整亮度。
2. 大纲搜索EnvEmitter调整大小并使用Cutoff工具对齐进行裁剪。覆盖范围过大。修改材质MI_Env_Inst~MI_Env_Inst22从Translucent=>Additive。并且重新调整亮度。
#### 2023.6.5优化建议
1. 舞台观众、荧光棒去掉CastShadow同时考虑使用Nanaite
2. 浮游炮材质重Masked=>不透明
3. 烟花材质重Translucent=>Additive
4. Sequence进入舞台镜头时对看不见的建筑物进行隐藏操作。
5. 主舞台所有模型进行Merge并且设置成Nanite。
6. 主舞台DMX灯光开启DisableLight。
7. 调整Lumen渲染参数或者后处理盒子参数
- Lumen Scene Lighting Quality 2 =>0.25
- Lumen Scene Detail4=>1
- Lumen Scene View Distance20000=>1000~3000
- Max Trace Distance20000=>1000~3000
### L_Dacapo5
问题:
1. 模型问题
1. 模型较多、面数较高且场景静态模型没有设置成Nanite。使得剔除与BasePass渲染延迟过高。
2. 花草不是Instance
3. 花卉、草的的材质有优化空间。
2. 阴影
1. 有2个方向光投射阴影关闭其中一个。并且使用距离场阴影。
3. Lumen
1. 设置Lumen参数去除草地对GI的计算。
4. 天空上的透明体积雾效果
BasePass渲染延迟较高的模型
HUABAN_toon hua 123 instances 19501-19515 4775.936
grass0 hua 123 instances 19481-19489 4387.84
MI_grass_01_Inst_gbl SM_grass_01_gbl_lv 31 instances 14016-14025 2996.224
HUABAN_PINK_toon1 hua_pink 35 instances 15286-15291 1172.416
grass0 hua_pink 35 instances 19491-19499 1107.968
HUAXIN_toon_toon1 hua 123 instances 15266-15274 572.416
MM_Grass HUA002 2 instances 14405-14415 440.32
M_plants SM_sf_flower_05 13548-13551 193.536
M_plants SM_sf_flower_05 13739-13742 191.488
M_plants SM_sf_flower_05 13734-13737 167.936
HUAXIN_toon_toon1 hua_pink 35 instances 15276-15284 164.832
M_plants SM_sf_flower_05 13669-13672 128.00
M_plants SM_sf_flower_05 3 instances 13664-13667 124.928
### L_True
1. 模型问题
1. Nanite与Instance主要是电视机
2. VolumetricSpotlightEngine 是拿来干什么的?
3. 灯光
1. 关闭投射阴影(尤其是点光源,包括天光)
1. 天光
2. SpotLight11
3. SpotLight12
4. SpotLight2
5. DirectionalLight
6. PointLight1~6
2. 调整灯光投射范围(有一些太远了)
4. 13_Mat_DianShiJi14 贴花看不出有什么作用。
5. 黑色遮罩的几个Plane是干什么的
6. 中间的几个透明片删掉
7. 中间数据库的材质重Tranlucent => Additive
8. 几个透明的粒子效果将材质从Tranlucent => Additive 鬼影问题很大)
BasePass渲染延迟较高的模型
monitorE_col_High_A_Mat2 monitorE_High_Geo_Grp 90 instances 12336-12351 2444.288
TTest monitorE_High_Geo_Grp 28 instances 12006-12014 761.856
monitorE_col_High_A_Mat2 monitorE_High_Geo_Grp 12 instances 12353-12357 337.92
monitorE_col_High_A_Mat monitorE_High_Geo_Grp 11 instances 12837-12852 308.224
monitorF_col_high_A_Mat monitorF_High_Geo_Grp 107 instances 12870-12884 197.632
TTest monitorE_High_Geo_Grp 6 instances 11961-11969 183.296
monitorG_col_High_A_Mat3 monitorG_High_Geo_Grp 66 instances 11542-11552 159.7
monitorA_col_High_Mat3 monitorA_High_Geo_Grp 168 instances 12576-12590 153.536
monitorD_col_High_A_Mat monitorD_High_Geo_Grp 27 instances 12283-12297 135.168
monitorG_col_High_A_Mat1 monitorG_High_Geo_Grp 47 instances 11448-11480 115.648
## L_XBLA xiubolian休伯利安
1. 移除没有明显投影效果的灯光。
2. 重写DMX插件CPU GPU 负载压力较大。
3. Separate Translucency去除勾选。
### 模型优化
1. 将场景中的静态模型都设置成Nanite。
2. 将BP_FeiChuan模型进行合并。
3. 如果飞船模型如果需要CastShadow则需要在模型里勾选Generate Distance Field。
#### xbla
开启Nanite以及勾选Generate Distance Field。
MininumResidency2MB
Fallback Relative Error1.0=> 0.1~0.0
#### 关闭FeiChuang蓝图中StaticMesh的Shadow
### Light&Shadow
- [ ] 远处的几个小飞船 去掉CastShadow选项。
- DirectionalLight
- Num Dynamic Shadow Cascades5=>3
- Dynamic Shadow Distance MovableLight20000=>5000
- DistanceField Shadow Distance51200=>5000
- Shadow Resolution Scale1=>0.1~0.5
- SpotLight3
- 关闭CastShadow(3与4至少关一个)
- Attenuation Radius11052.831055=> 2040
- Shadow Resolution Scale1=>0.5
- 第二次修改
- Outer Cone Angle 44=>40
- Shadow Resolution Scale0.5=>0.3
- SpotLight4
- 关闭CastShadow(3与4至少关一个)
- Attenuation Radius12052.831055=>4000.0
- 点光源
- 关闭阴影
- 降低Attenuation Radius到合适范围。
- 删除机翼处重新的点光源pointLight81
### Lumen
调整Lumen渲染参数或者后处理盒子参数
Lumen Scene Lighting Quality 2 =>1
Lumen Scene Detail4=>1
Lumen Scene View Distance20000=>5000
Max Trace Distance20000=>5000
### Translucent
#### Nebula
以下几个建议删除:
BP_NebulaProceduralGenerator
BP_NebulaProceduralGenerator2
BP_NebulaProceduralGenerator3N
BP_NebulaProceduralGeneratorMove
BP_NebulaProceduralGeneratorMove2
- BP_NebulaProceduralGenerator5
- Volumetric Sphere Amount10=>1~5推荐1
- 效果会大变
- Min Sphere Radius (Km)0.25=> 0.1~0.2
- Max Sphere Radius (Km)0.75=> 0.6~0.7
- BP_NebulaProceduralGenerator6
- Volumetric Sphere Amount10=>1~3推荐1
- QualityHight => Low~Medium
- 效果会大变
- Min Sphere Radius (Km)0.25=> 0.1~0.2
- Max Sphere Radius (Km)0.75=> 0.6~0.7
远景星云考虑使用SceneCapture渲染出来再贴到一个片上。
#### StarCluster
建议使用Niagara重做一个透明区域太多了。
## Domineer_Showcase
SequenceSeq_Seq_Domin_XR
鬼影问题:
1. 修改材质从Masked=> Translucent并且开启材质的Responsive AA。
## NightGlow
### ~~CustomDepth~~
- MI_Icelandic_Rock_Cliff_ucdmcawdy_4K_Inst2_Normal
没有特殊需要把PostProcessing-Custom Depth-Stencil Pass改成Disable。
### Shadow
- ~~SpotLight ~~
- ~~SpotLight2 ~~
- ~~SpotLight4
- ~~geogrp29下面的灯~~
- stone_Anim2
CasShadow关了。
### ~~Lumen~~
- Lumen Scene Lighting Quality 1=>0.25
- Lumen Scene View Distance20000=>1000
- Max Trace Distance20000=>1000
或者考虑换成烘焙阴影(不太合适)。
### Nanite
特效Mesh
~~- NS_Storns
- SM_Strom_piece_1884
- SM_Strom_piece_1875
- SM_Strom_piece_1900~~
### 场景模型控制 & WuTai破碎
- 在舞台模型出现后使用Sequence将wutai破碎下面的破碎模型都隐藏了。
- 将外部六棱柱与内部六棱柱分开导出并将内部六棱柱转换成Instance Static Mesh。
- 使用StaticMesh替换Landscape。
### 透明物体
- EasyFog材质从Translucent=>Additive
- SM_Cloud_Single的材质从Translucent=>Additive
- geogrp的NewMaterial1_Inst从Translucent=>Additive
### 2023.6.11
- GameThread 13.4ms
- ~~WorldTick 4.3ms =>3)~~
- ~~进地形改成StaticMesh选中地形File => Selected (1.3ms)~~
- ~~减少NiagaraActor数量。~~
- RenderThread 43.1ms
- InitViews 9.8ms
- GatherDynamicMeshElements 7.4 ms
#### 理论上WuTai优化极限
- 关闭光线追踪
- 体积云参数调节
-
删除模型测试:
- 原始状态延迟29~32
- 删除WuTai FbxScene_zhuzi 21~22
- 删除FbxScene_zhuzi2~8 28~30
- WuTai 全部删除 23~25
- Wutai1 几乎没有变化
- Wutai2 26~28
- Wutai3 26~28
替换模型之后19~21ms
##### 可以Instance的WuTai网格
删除以下网格并且使用 替换
- piece_0
- piece_1
- piece_2**
- piece_4**
- piece_6**
- piece_7
- piece_8
- piece_9
- piece_10**
- piece_13**
- piece_14
- piece_15**
- piece_18**
- piece_21**
- piece_23**
- piece_24
- piece_25
- piece_26**
- piece_28**
- piece_29
- piece_30
- piece_31
- piece_32**
- piece_35**
- piece_36**
- piece_38**
- piece_40**
- piece_41
- piece_42**
- piece_45**
- piece_46
- piece_47
- piece_48**
- piece_51**
- piece_53**
- piece_54**
- piece_56**
- piece_57
- piece_58
- piece_59
- piece_60
- piece_61
- piece_62**
- piece_64**
- piece_65
- piece_66
- piece_67
- piece_68
- piece_69
- piece_70
- piece_71
- piece_72
- piece_73
- piece_74
- piece_75
- piece_76
- piece_77
- piece_78**
- piece_81**
- piece_82**
- piece_84**
- piece_85
- piece_86
- piece_87
- piece_88
- piece_89
- piece_90**
- piece_93**
- piece_94**
- piece_97**
- piece_98
- piece_99
- piece_100
- piece_101
- piece_102
- piece_103**
- piece_105**
- piece_107**
- piece_108
- piece_109**
- piece_112**
- piece_115**
- piece_117**
- piece_118
- piece_119
- piece_120
- piece_121
- piece_122**
- piece_124**
- piece_125
- piece_126**
- piece_104
- piece_12
- piece_44
- piece_92
- piece_123
- piece_63
- piece_5
- piece_11
- piece_33
- piece_111
- piece_79
- piece_17
- piece_22
- piece_37
- piece_43
- piece_114
- piece_27
- piece_34
- piece_106
- piece_116
- piece_110
- piece_16
- piece_19
- piece_83
- piece_95
- piece_20
- piece_49
- piece_50
- piece_91
- piece_113
## L_Dacapo6
### CPU
- CPU粒子删除看不到的Fog
- NewBlueprint
- P_Wind
- BP_AddCommand
- BP_LightControl
### GPU
#### 植被
镜头:
- 1612 GPU 37ms
- 2568 GPU 38ms
- 3233 GPU 38ms
1. 删除数量为0的植被
2. 将所有植被模型设置为Nanite。~~地形启用Nanite。~~
1. 转Nanite之前需要修改材质函数MF_Grow将里面的ObjectPosition节点改成float3(0,0,0) => TransformPosition(Instance&ParticleSpace)这2个节点
3. r.Nanite.AllowWPODistanceDisable
4. r.Lumen.DiffuseIndirect.MeshSDF.RadiusThreshold 100
5. 隐藏额外的灯光006~013并且将非卡通角色照明灯光的ToonIntensity设置为0
6. 将DMX灯光相关的模型用Sequence控制隐藏一下。
7. 将建筑物都使用默认材质进行替换。不要使用卡通材质。
8. r.Shadow.Virtual.Cache.MaxMaterialPositionInvalidationRange 1000
9. SM_Beam_RM 系列用Sequence设置可见性。
### 删除额外的东西
- 删除额外Landscape2使用StaticMesh代替
### Sequence 场景可见性优化
Squence设置物体可见性
- NewBlueprint
### Lumen
PostProcessVolumn => Lumen
- Lumen Scene Lighting Quality 2 => 1
- Lumen Scene Detail2 => 1
- Final Gather Quality3 => 1
- Lumen Scene View Distance20000 => 5000
- Max Trace Distance20000 => 5000
### 2023.6.10
- 删除场景中的垃圾
- NewBlueprint系列
- 需确认用途
- SM_Clouds_346_3
- SM_Clouds_346_01
- 替换成StaticMeshInstance 并且转成Nanite
- ZhuDingHongEXP~ZhuDingHongEXP1659
- stone目录下的模型 SM_ruins_20~SM_ruins_87
- 新建文件夹1目录下的Cube~Cube18
- JuHua1244
- SHIKUAI_对象001
- SM_cliff_stone
- SM_GrassClumpFonce
- ZhuDingHongEXP2026
- 优化粒子 Fx_WaterFall
- 减少粒子数量以及生命。
- 删除所有镜头都看不到的粒子。大致可以删掉一半一些只有单个镜头可以看到的可以用Sequence手动K一下可见性。
- 替换粒子改成GPU或者面片或者直接删除
- P_Wind
- GameThread
- 删除额外的2个地形并使用一个地形进行还原。
- RenderThread
- InitViews
- 几个角色脸部表情骨骼体 CastShadow 去掉
-
## L_Rubia
- PlanearReflection 删除,因为已经使用了屏幕空间反射。
- 因为场景都是透明物体切没有Nanite会导致VSM无法缓存所以需要使用ShadowMap。
## L_LiangZiZhiHai
### 模型转Nanite
- zhuwutai_Cube25
- wutai003
- SM_BENHUAI_BOX_1
- SM_BENHUAI_BOX_2
- SM_BENHUAI_BOX_6
- SM_BENHUAI_BOX_5_DJ
- SM_BOX_HEZI_HEKUAI
- SM_BOX_HEZI_HEKUAI_GanCui
- SM_GaoSuiBox
- SM_KongZhonXuanFU
- SM_LiaBianBox
- SM_ShuiJing_box_ID3
### 灯光&Shadow
- 关闭点光源阴影
### 透明材质Translucent => Additive
- M_StaticMeshSkinParticle_Inst
- MI_Env_Inst2
- M_XuanWo_Inst1
- Stage_SeaOfQuanta_ErodedLand_UI06_Mat_Inst
- M_BP_EasyFog_2
- M_SkyWhiteJianBian_Inst1
### Lumen
PostProcessVolumn => Lumen
- Lumen Scene Lighting Quality 1 => 0.25
- Lumen Scene View Distance20000 => 1000
- Max Trace Distance20000 => 1000
### 粒子(严重影响性能!考虑删除或者优化)
- EnvEmitter_System02
- BP_EasyFog_2
### 合并模型
将场景的中的圆环状模型、Box模型合并一下。
## L_JianZhong
### Shadow
- Ultra_Dynamic_Sky中的方向光
- Dynamic Shadow Distance MovableLight20000 => 10000
- Num Dynamic Shadow Cascades5 => 1
- Distance Field ShadowsTrue => False
- 关闭阴影
- SpotLight17
- SpotLight18
- SpotLight
### 模型优化
- 将场景中的石头、后景石头、剑以及剑下面的石头都转成Instance
- 场景中的模型转成Nanite。
- 相机背后看不到的模型都删除了。
- 删除场景中的CrystalFlw模型
- 将场景中的重复模型使用单个模型重新摆放最后设置成Instance。
### Shadow
- 关闭阴影
- PointLight
- PointLight4
- PointLight5
- PointLight6
- SpotLight2
- SkyLight
- VolumetricSpotlightEngine4的SpotLight
- 删除灯光
- PointLight2
- PointLight3
- DirectionalLight
- Dynamic Shadow Distance MovableLight20000 =>4000
- Num Dynamic Shadow Cascades5 => 1
- DistanceField Shadow Distance4000
- DistanceField Trace Distance25000 =>2000~4000
- Shadow Resolution Scale1 => 0.1
### Lumen
PostProcessVolumn => Lumen
- Lumen Scene Lighting Quality 2 => 0.25
- Lumen Scene Detail2 => 1
- Final Gather Quality3 => 1
- Lumen Scene View Distance20000 => 1000
- Max Trace Distance20000 => 1000
ProjectSettings - Lumen 以下设置仅提高1~2帧
- Use Hardware Ray Tracing when available
- High Quality Translucency Reflections
- Software Ray Tracing ModeDetailTracing => GlobalTracing
- r.Lumen.TraceMeshSDFs.Allow = 0
#### 添加DefaultScalability.ini
将Hight级别的Lumen设置覆盖到Epic级别设置。
### Fog
- ExponentialHeightFog1关闭体积雾。
### 粒子 转换成GPU粒子或者尽量减少CPU粒子数量
- NS_TextRain_Copy (字符雨生成器)
- NS_Test
- NS_Test_25
- NS_STM_SkinParticle
- M_StaticMeshSkinParticle_Inst
### 模型
- SkyBox (删除)
- 透明片Plane22~Plane41使用的材质的透明度是0考虑删除。
- 隐藏电路板Plane~138
- 黑色遮罩Plane4~Plane19
- **Nanite & 转成Instance**
- box1
- monitorG_High_Geo_Grp_2
- **转Nanite & 合并 || 删除看不到**
- monitorG_High_Geo_Grp_2
- SM_DIANSHIJI_HeCheng100
### Sequence中控制隐藏粒子与看不到的模型电视机
- monitorF_High_Geo_Grp12~1516
### 材质Translucent=>Additive
- M_MovingLineTest_Inst1_TRUE
- M_MovingLineTest_Inst1_TRUE1
- M_MovingLineTest_Copy
- BengHuai_True/Material
- M_BeiJing
- M_BeiJing_Inst
- M_OP~M_OP3
### 2023.6.13
1. 电视机模型转Instance。
2. 减少字符雨数量
3. 关闭光线追踪
4. ExponentialHeightFog1关闭体积雾。
#### ~~电视机贴图有拖影问题~~
## DLSS & TSR & FSR 测试
测试场景L_True分辨率4K 100%笔记本3070镜头sequence 604 的1840帧
- TSR ScreenPercentage66 GPU帧数27~29
- TAA ScreenPercentage100 GPU帧数36~37
- FSR+TAA ScreenPercentage66 GPU帧数26~28
- DLSS+TAA ScreenPercentage66 GPU帧数26~28
可以在DefaultEngine.ini里面添加渲染分辨率
[/Script/Engine.RendererSettings]
r.screenpercentage=66
r.screenpercentage=50
## L_BengHuai_Oaths_01
### 灯光
## L_BengHuai_Oaths_Close
### 灯光
# Lumen
r.Lumen.ScreenProbeGather.AdaptiveProbeAllocationFraction =0.5 =>0.1

18
02-Note/DAWA/DAWA.md Normal file
View File

@@ -0,0 +1,18 @@
# DAWA Overview
```ccard
type: folder_brief_live
imagePrefix: '08-Assets/Images/BingWallpaper'
noteOnly: false
style: card
```
[[柔体模拟开发计划]]
[[UE卡通渲染改进]]
# 流程架设计划
1. 共享DDC
2. 推广Lyra的UEditorValidator Asset有效性检测插件。
3. 联机编译Shader
4. DDNS 与 远程
5. NAS 网盘
6. 版本管理系统 PlasticSCM 与 Perforce
7. UnrealGameSync 以及 CI/CL系统

View File

@@ -0,0 +1,135 @@
## 光猫
057152243127
550743
telecomadmin
15675507
## 路由器
## Netgear
- admin
- dawa
- 上网dawa2022
## FreeNAS账号密码
- root
- dawa
## 服务
- SVN
- http://192.168.0.236:7777/svnadmin
- http://192.168.0.236:7777/svn/DAWA_SVN
- portainerhttp://192.168.0.236:9000
## FreeNAS搭建服务流程
玩转Freenas系统06——freenas下使用docker配置RancherOS/Portainer https://www.bilibili.com/video/av77422499/?vd_source=d47c0bb42f9c72fd7d74562185cee290
Docker虚拟机账号:Rancher
密码Docker
Root模式`sudo -i`
### 固定IP命令
bxe1为网卡口。所以创建虚拟机的时候需要设置成bxe1。之后在虚拟机里固定IP还是看虚拟机的局域网IP接口是啥
```c++
sudo ros config set rancher.network.interfaces.eth0.address 192.168.0.236/24
sudo ros config set rancher.network.interfaces.eth0.gateway 192.168.0.252
sudo ros config set rancher.network.interfaces.eth0.mtu 1500
sudo ros config set rancher.network.interfaces.eth0.dhcp false
sudo ros config set rancher.network.interfaces.dns.nameservers "['192.168.0.252']"
```
### 挂载宿主NFS共享文件夹
在FreeNAS里开启服务`NFS`。进入目录
```bash
cd /var/lib/rancher/conf/cloud-config.d
```
下载脚本
```bash
wget https://gist.githubusercontent.com/superseb/15aada95f6f2fbacc1af7a442c767cce/raw/158c8d0161ec6416aa558d3dad4d1e2afb026d89/cloud-config.yml
```
脚本如下:
```yml
#cloud-config
write_files:
- path: /etc/rc.local
permissions: "0755"
owner: root
content: |
#!/bin/bash
mkdir -p /mnt/nfs-1
mkdir -p /mnt/nfs-2
cloud-init-execute
rancher:
services:
nfs:
image: d3fk/nfs-client
labels:
io.rancher.os.after: console, preload-user-images
io.rancher.os.scope: system
net: host
privileged: true
tty: true
restart: always
volumes:
- /usr/bin/iptables:/sbin/iptables:ro
mounts:
- ["nfs_server_ip:/", "/mnt/nfs-1", "nfs4", ""]
- ["nfs_server_ip:/", "/mnt/nfs-2", "nfs4", ""]
```
将`- ["nfs_server_ip:/", "/mnt/nfs-1", "nfs4", ""] `修改成NAS服务器ip后面加上NFS共享目录路径:
```yml
- ["192.168.0.235:/mnt/zpool_main/DockerHost", "/mnt/nfs-1", "nfs4", ""]
```
## 服务部署
### portainer
```bash
cd /mnt/nfs-1
mkdir -vp portainer
```
```bash
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mnt/nfs-1/portainer:/data \
--restart always --name portainer portainer/portainer
```
### SVN
```c++
cd /mnt/nfs-1
mkdir -vp svn
chmod -R 777 /mnt/nfs-1/svn
```
```bash
docker run -d --name svn-server --restart=always \
-v /mnt/nfs-1/svn:/home/svn \
-p 7777:80 \
-p 3690:3690 \
elleflorio/svn-server
```
![[NAS与服务部署#SVN]]
## cloudreve
```c++
cd /mnt/zpool_main/DockerHost/cloudreve/
mkdir -vp {uploads,avatar} \
&& touch conf.ini \
&& touch cloudreve.db
```
```c++
docker run -d --restart=always \
-p 5212:5212 \
--mount type=bind,source=/mnt/nfs-1/cloudreve/conf.ini,target=/cloudreve/conf.ini \
--mount type=bind,source=/mnt/nfs-1/cloudreve/cloudreve.db,target=/cloudreve/cloudreve.db \
-v /mnt/nfs-1/cloudreve/uploads:/cloudreve/uploads \
-v /mnt/nfs-1/cloudreve/avatar:/cloudreve/avatar \
cloudreve/cloudreve:latest
```
## 北京p4v密码
- bluerose
- 123456

View File

@@ -0,0 +1,8 @@
## 参数检查
### 灯光
- [ ] 开启RayTracing之后检查所有Map的SpotLight、RectLight、SkyLight、DirectionalLight(Angle较大时)的采样值。
## 参数预设与参数文档
- [ ] MovieRenderQueue的预设以及相关参数文档
- [ ] TAA相关的参数文档

View File

@@ -0,0 +1,92 @@
## MUTools Maya部分笔记
1. AddMesh()
2. SendCommand()
### 导入Maya文件命令Mel
>file -f -o "C:/Users/admin/Desktop/test.mb";
### Maya插件获取场景数据
DBU_ScenePrimitiveCollector::AssembleData具有2个分支UpdateOutline与CollectFeedback同时负责序列化
1. AdditionalMessage
2. 写入文件头虽然这个写入步骤在UpdateOutline之后但在写Outline数据时偏移了sizeof(UPDATEMSG)
3. UpdateOutline
1. OutlineEntityList
1. NameStream中每个节点名称字符串的偏移
2. ChildNode数目
2. UPDATEMSG MSGHEAD 文件头信息。
3. NameStream 存储每个节点名称的流
4. CollectFeedback
1. UpdateEntityList
2. MeshStream->AddrList
3. MeshStream->ByteStream
UE中的反序列化根据文件头信息的HasOutline与HasFeedbackData有以下两个分支
1. 读取文件头信息
2. HasOutline
1. OutlineRootData
2. OutlineData
3. NamesData 节点名称流
3. HasFeedbackData
1. NamesData
2. UpdateEntities
3. AddrList
### 更新大纲Mesh数据
UpdateOutline只有Maya大纲的名称与当前节点的子节点数目数据。其他模型信息集中在CollectFeedback阶段。
DBU_AddMesh来管理列表监视每个Mesh状态如果entity的meshDirty=true则将其加入`vector<MeshAndID> MeshList`。最后使用
```c++
MeshStream = new AssembleMeshStream(MeshList);
```
来生成这个MeshStream。来进行顶点、UV、法线、顶点处理
```c++
bool DBU_ScenePrimitiveCollector::AssembleData(MString& Result,vector<char> &ByteStream, bool CollectFeedback,bool UpdateOutline, MString AdditionalMessage)
{
MStatus status;
//if (DBU_AddMesh::First == nullptr)
// CollectFeedback = false;
if (CollectFeedback)
{
std::chrono::steady_clock::time_point _start_time = std::chrono::steady_clock::now();
DBU_AddMesh::LastSentUpdateList.clear();
DBU_AddMesh* curr = DBU_AddMesh::First;
while (curr)
{
curr->CollectEntity();
auto Next = curr->Next;
curr = Next;
}
```
DBU_AddMesh::CollectEntity()
DBU_AddMesh节点在连接时候将srcPlug的DAG路径加入NodeRegisteredDAGPaths。
MPlug & srcPlug->MObject FromWhat->MFnDagNode FromNode->MDagPath dagPath
### MUTools UE
通过MeshList的Index进行同步。
点击Outline Import后的逻辑 为发送遍历Entiry 并且发送Mel
$indices = { XXXX };
{
int $i;
for($i=0;$i<size($indices);$i++)
{
DBU_AddSynchronize(DBU_GetSentOutlinerEntityPath $indices[$i]);
}
}
print `lsType "DBU_AddMesh"`;
调用DBU_AddSynchronize(DBU_GetSentOutlinerEntityPath)节点

View File

@@ -0,0 +1,200 @@
---
title: UE5制片流程相关想法
date: 2022-08-25 13:55:15
tags: Film
rating: ⭐️
---
## 渲染相关
1. 场景检查工具
1. 灯光
2. 贴图
2. 预渲染相关
1. GPULightMass。
2. 模型/场景距离场生成问题与查看。
3. Lumen
1. 相关参数以及命令行参数。
2. 物理灯光流程。
4. 虚拟阴影贴图
5. 性能优化建议
1. 尽可能的使用MaterialInstance而非直接复制Material。
2. 尽可能使用面光源而非灯阵。
6. 修改引擎
1. 让指定角色不接受VLM的影响
2. 定制一种灯光只对某个指定的SkeletalMesh起作用不对环境模型起作用同时不产生球谐效果
7. MassAI群集系统
8. 机器学习变形器UE5.1出)
9. 其他想法
## 地编相关
1. 虚拟贴图
2. Nanite
3. USD工作流
4. 摆放工具与其他工具链
## 其他建议
1. 中午休息时将电脑改成睡眠模式:对自己的身体、电费、空调费、硬件寿命都好。
## 具体
### 动画组
1. 学习相关基础编辑器使用。
2. **如何导入与重定向商城与动作库资源**
1. 导入与重定向HumanIK骨骼、Biped、其他动作库资产。
3. **重点学习ControlRig与Sequence**
1. 对角色、生物进行绑定。
2. 使用ControlRig与Sequence制作动画。
3. 使用Sequence的Animation轨道以类似动画层的方式来融合动画效果来制作动画。
4. 使用Sequence以录制动画的方式来制作动画资产。
4. 测试Unreal Live Link for Autodesk Maya以其他LiveLink流程
1. 测试编写文档以方便一起讨论实现新的工作流。
#### 快捷键
快捷键是可以导出与导入预设的。
- F聚焦
- Shift+F所有View聚焦
- Alt+鼠标左右键效果与Maya一样。
- Alt+鼠标中键效果与Maya相反。但可以在EditorPreferences-LevelEditor-Viewports-Control中勾选`Invert Middle Mouse Pan`
#### 基础
1. Skeletal、曲线、AnimationSequence资产编辑器。
2. Sequencd
3. 动作库使用
#### ControlRig
- ControlRig https://docs.unrealengine.com/5.0/en-US/control-rig-in-unreal-engine/
- 入门教程合集https://www.youtube.com/watch?v=RDYWbA01k60&list=PLSbIBa4Ejxt_A55gIHQs3wmj5G7VeYESv
- 案例教程https://www.youtube.com/watch?v=r1fHOS4XaeE
- IK Rig类似Maya的HumanIK的重定向系统:https://docs.unrealengine.com/5.0/en-US/unreal-engine-ik-rig/
可以在ContentExample中找到相关的教学用的资产。
##### 类似动画层的功能
https://www.youtube.com/watch?v=4ULgKXTf1jE
#### 动画蓝图
动画蓝图学习:https://docs.unrealengine.com/5.0/zh-CN/animation-blueprints-in-unreal-engine/
#### LiveLink
主要是看Unreal Live Link for Autodesk Maya插件可能地编也能用。
- EPIC Maya LiveLink https://www.unrealengine.com/marketplace/zh-CN/product/maya-livelink
- Unreal Live Link for Autodesk Maya https://www.unrealengine.com/marketplace/zh-CN/product/f2e37c4b943f4337b352e1639fa4ebe3
#### ~~MassAI~~(次要 需要编程)
https://www.youtube.com/watch?v=f9q8A-9DvPo
#### ML变形器 - Maya数据生成插件
https://docs.unrealengine.com/5.0/en-US/using-the-machine-learning-deformer-in-unreal-engine/
https://www.unrealengine.com/marketplace/zh-CN/product/ml-deformer
### 特效
1. 学习Niagara功能。可以大致看懂ContentExample等其他项目中的特效并能移植到番剧中使用。
2. 学习fluid-flux、riverology插件使用。
3. 学习Niagara的流体功能。
#### Niagara效果
学习官方案例关卡中Niagara的所有效果。并且将可复用效果分离出来并且进行资产标签分类。
https://www.bilibili.com/video/BV1Xy4y1m7QS?spm_id_from=333.337.search-card.all.click
#### FluidNinja插件
https://www.youtube.com/c/AndrasKetzer/videos
#### 其他插件(白嫖或者看一下朱总账户有没有)
https://www.unrealengine.com/marketplace/zh-CN/product/uiws-unified-interactive-water-system
https://www.unrealengine.com/marketplace/zh-CN/product/fluid-flux
https://www.unrealengine.com/marketplace/zh-CN/product/riverology
#### 流体
https://www.youtube.com/watch?v=k7WLE2kM4po&t
#### 程序化生成城市
https://www.youtube.com/watch?v=usJrcwN6T4I
### 角色
1. 解析UE5 黑客帝国Demo中角色所用用到的技术与流程。并且寻找番剧中可以使用的技术。
- 黑客帝国Demo Character制作流程https://www.youtube.com/watch?v=h_dJtk3BCyg
### 资产
1. UE5 的一些技巧比较杂什么方面的都有https://www.youtube.com/watch?v=QXuHzH0IyRE
2. 学习USD工作流如果评估为有价值则最后组织同事进行测试。
3. 学习Multi-User Editing的使用如果评估为有价值则最后组织同事进行测试。
4. 测试Unreal Live Link for Autodesk Maya插件。
- USD 工作流https://www.youtube.com/watch?v=Ddu7TAICAXw&t
- Unreal Live Link for Autodesk Maya https://www.unrealengine.com/marketplace/zh-CN/product/f2e37c4b943f4337b352e1639fa4ebe3 https://www.youtube.com/watch?v=5iTbnk5Zmak
### 地编
1. 熟悉常用快捷键以提高效率https://www.unrealengine.com/zh-CN/tech-blog/designer-s-guide-to-unreal-engine-keyboard-shortcuts
2. 熟悉UE的相关系统体积雾、昼夜系统、Cloud System 、Water System。
3. 测试虚拟贴图在地形系统中的应用。(搞明白相关参数对性能的影响)
4. **测试Nanite**搞明白相关参数对性能、Lumen与其他显示效果的影响
5. 使用UE的建模功能与雕刻工具。
6. 寻找商城里相关的快速摆放物品插件。
#### 商城插件寻找
寻找一下商城相关的快速摆放物品插件(朱总账号可以白嫖插件)
#### 虚拟贴图(需要固态硬盘支持)
https://docs.unrealengine.com/5.0/zh-CN/virtual-texturing-in-unreal-engine/
#### Nanite需要固态硬盘支持
https://www.youtube.com/watch?v=xUUSsXswyZM
https://docs.unrealengine.com/5.0/zh-CN/nanite-virtualized-geometry-in-unreal-engine/
### 渲染
1. UE5.0 几种渲染方案测试实时以及MoveRenderQueue。包括Lumen、RayTracing、PathTracing。已知的存在问题
1. Lumen的综合测试。
1. 使用自带的比色卡模型+室内与室外场景进行测试。
2. 了解材质参数、Lumen参数、后期盒子参数对反射、GI的影响。
3. 测试相关性能,以得出相关
2. 已知的Lumen的问题
- Lumen不支持双面与半透明物体5.1会支持半透明)
- 目前Lumen的反射还有一些问题反射精度
- Raytracing反射目前无法反射GI效果反射结果没有GI
- PathTracing不支持某些效果
1. 虚拟阴影贴图测试
2. 物理灯光流程测试。即使用真实环境的曝光度进行打光。选择清晨、正午、下午、黄昏、夜晚。晴天、阴天
3. 室内家装效果图流程测试。
1. GPULightMass
2. 虚拟光照贴图(需要固态硬盘)
#### LumenGI与反射
- Lumen功能与作用介绍https://www.youtube.com/watch?v=Dc1PPYl2uxA
- Lumen基础教学https://dev.epicgames.com/community/learning/courses/6Oz/unreal-engine-lumen/vyV2/lumen
- Lumen Explained - IMPORTANT Tips for UE5非官方https://www.youtube.com/watch?v=1e6oOiKh91U
- Lumen Tiphttps://www.youtube.com/watch?time_continue=267&v=wTYM9TfckOQ&feature=emb_logo
- 参考视频中调节的参数https://www.bilibili.com/video/BV1YV4y1J7Zv?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290
##### 使用软件支持跑Lumen
Lumen分硬件支持与软件支持软件支持需要用到距离场所以如果出现一些渲染错误需要检查一下距离场。大概率还会用到体积光照贴图这个可以使用GPULightMass生成。
1. 体积光照贴图。尝试使用GPULightMass生成。
2. 模型/场景距离场。生成问题与查看。
#### 局部曝光
#### MRQ的路径追踪
#### 性能优化建议
1. 尽可能的使用MaterialInstance而非直接复制Material。
2. 尽可能使用面光源而非灯阵。
#### 番剧中灯光效果在UE5中的实践与应用室内吴陆佳
尽量使用面光源、
一组UE5场景
#### 番剧中灯光效果在UE5中的实践与应用室外陈飞宇、唐登强
## 本人工作
一些自动化任务在[[远程办公与自动化逻辑]]
1. 制作In-House插件。
1. 项目缓存、引擎缓存位置检测与设定。
2. 渲染模板与参数调节面板
2. 移植Lyra的AssetValid检测插件。
3. NAS搭建。
4. DDC共享缓存与联机构建Shader。
5. 版本管理。
6. 将可复用资产归类之后封装成插件。放在服务器上。UE目前有一个功能可以远程自动下载插件。
7. 修改引擎
1. 让指定角色不接受VLM的影响
2. 定制一种灯光只对某个指定的SkeletalMesh起作用不对环境模型起作用同时不产生球谐效果
8. MRQ使用MRQ的切片渲染功能、或者联机部署

View File

@@ -0,0 +1,180 @@
# 大致步骤
使用UnrealEditor-Cmd执行资源导入、处理、输出功能。
1. 导入资产 (这段可以参考FBX)
1. 角色
2. 动画 FBX
2. 处理资产
1. IKRig
2. RetargetRig
3. ControlRig?
3. 输出资产
1. FBX
2. 使用MovieRenderQueue 渲染 MP4
## 短期需求
1. AI 动捕、或者GPT生成 BVH、FBX。
2. 特定骨骼结构。
3. UE骨骼确定。
4. 可能需要高并发(后面再考虑)
5. 输出视频。
6. 工期1~2周。
## 需要解决的问题是
- [ ] 支持多种格式的文件
- [ ] `CustomCommandFunction`编写以及生成**IKRig**、**IKRetarget**资产
- [ ] 输出FBX或者MP4
## 输出文件
- *.BVH
-
## 生产环境
使用Docker或者其他容器工具制作处理用的镜像之后使用群集系统控制运行
## CustomCommandFunction
关检测 UCommandlet
# 测试方法
```bash
D:\UnrealEngine\UE_5.1\Engine\Binaries\Win64\UnrealEditor-Cmd.exe D:\UnrealEngine\Project\AIAutomationTools\AIAutomationTools.uproject -run=AIAnimationAutomationCommandlet
```
如果带有配置文件
```bash
D:\UnrealEngine\UE_5.1\Engine\Binaries\Win64\UnrealEditor-Cmd.exe D:\UnrealEngine\Project\AIAutomationTools\AIAutomationTools.uproject -run=AIAnimationAutomationCommandlet -importsettings=C:\\Users\\BlueRose\\Desktop\\ImportJson.json
```
```json
{
"ImportGroups": [
{
"GroupName": "Group11",
//导入文件名
"Filenames": [
"C:\\Users\\BlueRose\\Desktop\\untitled2_Anim.FBX"
],
//生成资产的文件夹
"DestinationPath": "Animation",
//使用的Factory类名
"FactoryName": "FbxFactory",
"bReplaceExisting": 1,
"bSkipReadOnly": 0,
//导入动画资产的设置
"ImportSettings": {
"OriginalImportType": 2,
"MeshTypeToImport": 2,
"Skeleton": "/Game/1/untitled2_Skeleton.untitled2_Skeleton"
}
}
]
}
```
# 其他资料
## IKRig & IKRetarget=
`Engine\Plugins\Animation\IKRig`
- FAssetTypeActions_AnimationAssetRetarget
- FAssetTypeActions_IKRigDefinition:UIKRigDefinition
- FAssetTypeActions_IKRetargeter:UIKRetargeter
## Retarger
```c++
/** The runtime processor that converts an input pose from a source skeleton into an output pose on a target skeleton.
* To use:
* 1. Initialize a processor with a Source/Target skeletal mesh and a UIKRetargeter asset.
* 2. Call RunRetargeter and pass in a source pose as an array of global-space transforms
* 3. RunRetargeter returns an array of global space transforms for the target skeleton.
/
```
## UEditorUtilityLibrary
##
Python参考
`Plugins\MovieScene\MovieRenderPipeline\Content\Python`
## 渲染影片(旧版)
MovieRenderPipelineCommandLine
```bash
"D:\Program Files\UE_4.24\Engine\Binaries\Win64\UE4Editor.exe"
D:\Projects\UnrealProjects\renderMovieTest\renderMovieTest.uproject
/Game/maps/shot0010
-MovieSceneCaptureType="/Script/MovieSceneCapture.AutomatedLevelSequenceCapture"
-LevelSequence="/Game/Sequences/Shot0010"
-MovieFolder="D:\Projects\UnrealProjects\renderMovieTest\outputs"
-NoLoadingScreen -game
```
void FMovieRenderPipelineCoreModule::StartupModule() 处理CommandLine变量
```c++
// Look to see if they supplied arguments on the command line indicating they wish to render a movie.
if (IsTryingToRenderMovieFromCommandLine(SequenceAssetValue, SettingsAssetValue, MoviePipelineLocalExecutorClassType, MoviePipelineClassType))
{
UE_LOG(LogMovieRenderPipeline, Log, TEXT("Detected that the user intends to render a movie. Waiting until engine loop init is complete to ensure "));
// Register a hook to wait until the engine has finished loading to increase the likelihood that the desired classes are loaded.
FCoreUObjectDelegates::PostLoadMapWithWorld.AddRaw(this, &FMovieRenderPipelineCoreModule::OnMapLoadFinished);
}
```
通过委托调用渲染最终到void FMovieRenderPipelineCoreModule::InitializeCommandLineMovieRender()
```c++
void FMovieRenderPipelineCoreModule::InitializeCommandLineMovieRender()
{
#if WITH_EDITOR
//const bool bIsGameMode = !GEditor;
//if (!bIsGameMode)
//{
// UE_LOG(LogMovieRenderPipeline, Fatal, TEXT("Command Line Renders must be performed in -game mode, otherwise use the editor ui/python and PIE. Add -game to your command line arguments."));
// FPlatformMisc::RequestExitWithStatus(false, MoviePipelineErrorCodes::Critical);
// return;
//}
#endif
// Attempt to convert their command line arguments into the required objects.
UMoviePipelineExecutorBase* ExecutorBase = nullptr;
UMoviePipelineQueue* Queue = nullptr;
uint8 ReturnCode = ParseMovieRenderData(SequenceAssetValue, SettingsAssetValue, MoviePipelineLocalExecutorClassType, MoviePipelineClassType,
/*Out*/ Queue, /*Out*/ ExecutorBase);
if (!ensureMsgf(ExecutorBase, TEXT("There was a failure parsing the command line and a movie render cannot be started. Check the log for more details.")))
{
// Take the failure return code from the detection of our command line arguments.
FPlatformMisc::RequestExitWithStatus(/*Force*/ false, /*ReturnCode*/ ReturnCode);
return;
}
else
{
UE_LOG(LogMovieRenderPipeline, Log, TEXT("Successfully detected and loaded required movie arguments. Rendering will begin once the map is loaded."));
if (Queue)
{
UE_LOG(LogMovieRenderPipeline, Log, TEXT("NumJobs: %d ExecutorClass: %s"), Queue->GetJobs().Num(), *ExecutorBase->GetClass()->GetName());
}
else
{
UE_LOG(LogMovieRenderPipeline, Log, TEXT("ExecutorClass: %s"), *ExecutorBase->GetClass()->GetName());
}
}
// We add the Executor to the root set. It will own all of the configuration data so this keeps it nicely in memory until finished,
// and means we only have to add/remove one thing from the root set, everything else uses normal outer ownership.
ExecutorBase->AddToRoot();
ExecutorBase->OnExecutorFinished().AddRaw(this, &FMovieRenderPipelineCoreModule::OnCommandLineMovieRenderCompleted);
ExecutorBase->OnExecutorErrored().AddRaw(this, &FMovieRenderPipelineCoreModule::OnCommandLineMovieRenderErrored);
ExecutorBase->Execute(Queue);
}
```
# 多线程
https://blog.csdn.net/j756915370/article/details/122752719
Runtime\Core\Public\Async\
- FFutureState
- FTaskGraphImplementation
### 2.6 TaskGraph 系统中的 Wait
在 TaskGraph 中,无论是 Event->Wait() 还是 FTaskGraphInterface::Get().WaitUntilTaskCompletes() ,最终都是调用到 FTaskGraphImplementation::WaitUntilTasksComplete 中的。

View File

@@ -0,0 +1,15 @@
---
title: 厚涂卡通渲染效果计划
date: 2022-08-25 13:55:15
tags:
rating: ⭐️
---
感觉还需要一个厚涂原画师的协助:
第一阶段:
- 开发
- 绑定
  1. 使用UE4/UE5标准绑定
- 原画
  1. 寻找合适的插画

View File

@@ -0,0 +1,23 @@
# 学习
## Game101系列
胡渊明 201
## UE编辑器扩展
FSceneViewExtensionBase
## Houdini
1. Sop(几何体、其他图元)
2. Dop
3. Cop
4. Chop
5. VS模块
## CUDE Optial
# 工作
- [x] 升级MUTool =>UE5
2. GPU合成工具 IS 扩展节点。扩展RayTracing Shader节点。 实现GI。参考结果 Color Grading
3. Houdini的功能植入UE5。面向实时交互的Houdini Engine
4. 渲染类型扩充。OpenVDB。
## 工作内容

View File

@@ -0,0 +1,25 @@
## 使用的模拟算法
FEM + 肌肉(变量):
PBDPosition Based Dynamics
MPM
## 技术路线
1. NVIDIA flex移植。
- 优点有完备的UE组件实现提供编辑器等工具
- 缺点没有UE5版本UE4版本也是民间人士实现的。
3. Niagara PBD解算。
- 优点在ContentExample中有实现PBD解算器。
- 缺点:没有其他组件的实现。
5. UE5 Chaos。
- 优点:与其他组件可以数据交互。
- 缺点没有具体的PBD柔体实现。
7. ZENO可以查看节点源码
8. Houdini xPBD Vellum学习节点的解算器代码主要是OPENCL
9. ~~AMD FEMFX库。~~
10. 保底路线:骨骼模拟。
## 开发执行计划
因为不管上述的哪个方案都无法直接制作出想要的柔体模拟效果,所以:
1. 先学习Houdini搭建可行的离线模拟方案FEM、PBD保证技术路线方向的可行性正确性。
2. 学习PBD、FEM的算法。
3. 在UE中复现出现。

View File

@@ -0,0 +1,135 @@
## 优化记录
1. 灯光优化
   1. 主场景(城楼、栈桥与城门部分)
      1. 主光源
         1. 将DynamicShadowDistanceMoveableLight调整到合适范围近景细节阴影40000 => 4000~15000范围
         2. 调整DistanceFieldShadowDistance远景的软阴影效果20000 => 4000~15000如果远景阴影效果有问题再调整DistanceFieldTraceDistance100000.0 => 100000.0~40000000.0
         3. 调整Num Dynamic Shadow Cascades4=> 1~3保证阴影效果变化不大的情况下
      2. 其他辅助光源
         1. 保证灯光的半径与角度刚好覆盖想要影响的物体。
         2. 补光灯可以尝试低亮度不投射阴影或者高亮度+贴花,尽可能避免高亮度加投射阴影。
         3. 如果需要投射阴影请适当调整阴影分辨率1=> 0.05~0.8
   2. 不太容易看的场景(坑底与中间浮岛下面部分)
      1. 尽量保证只有灯光效果关闭阴影效果。如果需要阴影就使用SpotLight不投射阴影可以用点光源。
      2. 尽可能减少灯光数量。即坑底部分的照明可以选择使用贴花Fake
   3. 远景山脉阴影使用Fake贴花。避免使用方向光来投射阴影。
   1. 如果需要阴影可以将Num Dynamic Shadow Cascades 4=>0并且调整调整DistanceFieldShadowDistance。直接使用距离场阴影。
2. 场景优化
   1. 粒子可以调节Cut Off的裁剪系数Spawn TimeSpawn Rate等等可以在保证效果的同时来降低粒子数量的参数
   2. 模型
   1. ~~制作LOD或者HLOD。~~ 使用Nanite
   2. 考虑使用HSIM或者 UE5出的Light Weight Instances https://www.youtube.com/watch?v=QGEV8YjBGHQ
   1. 启用Light Weight Instances插件。
   2. 创建一个蓝图类LightWeightInstanceStaticMeshManager类并且拖入场景中。
   3. Manager设置RepresentedClass指定新建的Actor这里假定名字为AA里面只有StaticMeshComponent
   4. 设置InstancedStaticMeshComponentStaticMesh与Materials。
   5. 往场景里放入多个AA并且选中之后在菜单栏的Actor-Convert Actors to LightWeightinstances
   3. 远景资产
   1. 删除场景外的看不见的模型
   2. 删除多余的地形
3. Nanaite
1. 尽可能得将模型转化成
2. 使用Nanite Tools检查哪些模型的材质有问题并解决。
### 优化记录
#### 方向光
##### 2022.9.20
修改远景4个DirectionalLight 动态ShadowMap阴影可以为距离场阴影或者静态阴影。
- DirectionalLight
  - 级联4=》2
  - DynamicShadowDistanceMoveableLight 40000=》5000
  - DistanceFieldShadowDistance40000=》10000
- DirectionalLight2
  - 级联4=》2
  - DynamicShadowDistanceMoveableLight 40000=》25000
  - DistanceFieldShadowDistance10000=》1000000.0
  - DistanceFieldTraceDistance  =>2500000.0
- DirectionalLight4
  - 级联5=》0
  - DynamicShadowDistanceMoveableLight 40000000.0=》4000.
  - DistanceFieldShadowDistance1000000.0 =》1000000.0
  - DistanceFieldTraceDistance  100000.0=》40000000.0
##### 2022.9.21
- [x] DirectionalLight2
  - 删除
- [ ] PointLight3
- 亮度150=》50
- 关闭CastShadow
- [ ] SpotLight11
- ShadowResolutionScale1=》0.1
- 或者考虑降低角度,只对着城楼。
- [ ] RectLight7
- 建议调整范围 =》降低至能刚好包裹城门的区域。
- 亮度 500=>100
- 关闭阴影
- 或者删了
- [ ] SpotLight25
- 降低半径2000 角度 60
- 阴影分辨率1=>0.5
- [ ] SpotLight26
- 降低半径到2500角度降低到45亮度提高=》10000 Shadow分辨率 1=》0.5
- [ ] SpotLight27
- 降低半径到2300角度降低到45亮度提高=》12000Shadow分辨率 8=》0.5
- [ ] PointLight56
- 关闭CastShadow
- 降低半径到1600
- [ ] PointLight57
- 关闭CastShadow 或者降低阴影分辨率 0.1=》0.01
- 降低半径到700
- [ ] PointLight74
- 关闭CastShadow
- 或者换成SpotLight
- [ ] RectLight14
- 降低半径到2860
- 关闭CastShadow
- 或者换成SpotLight
### 后处理
- AmbientCubeMapIntensity 1=》0
- Ambient OcclusionIntensity 0.7=>0
### 粒子优化
- Niagara Cutout
- https://www.youtube.com/watch?v=_T-BTiMF7XA
- https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/RenderModules/
- 4层 雾气=> 3层
- 粒子系统的 LifeTime 25=>14
### 场景优化
- 删除场景外看不到的模型
- 删除多出的Landscape2
- 给树木等物体制作Impostors
## 优先级顺序
- [x] Stat数据查看
- 查看Stat Unit 数值确定是GPU还是CPU瓶颈
- 查看Stat SceneRendering
- ctrl+shift+ r.showmaterialdrawevents -1 r.rhicmdbypass 1 r.rhithread.enable 0
- [x] 动态灯光阴影尝试增加级联数与其他参数。使用低分辨率贴图来渲染阴影使用RenderDoc查看分辨率
- [x] 远景模型距离场检查。使用DFAO关闭SSAO
- [x] 尝试干掉点光源制作Fake灯光 贴花来代替各种灯光与阴影效果
- [x] 检查材质复杂度
- 烘焙材质,将复杂材质烘焙结果到贴图
- [x] ~~检查模型面数以及LOD碰撞盒~~ 改用Nanite来解决
- [x] 草地使用HISM或者UE5出的Light Weight Instances
- https://www.youtube.com/watch?v=QGEV8YjBGHQ
- [x] 粒子优化工具:剪裁粒子面积。
- Unreal4引擎对粒子系统半透明渲染的Overdraw做了优化。在ProjectSetting->Rendering > Optimization中有一个渲染Enable Particle Cutouts by Default选项
- [x] MergeActor工具合并DrawCall
- ~~开启DLSS插件~~
- ~~设置Dynamic分辨率~~
## 制作流程改变
对于性能要求的项目。
1. 制作前先让TA知道目标硬件帧数。
2. 美术摆放场景后检查**距离场**。
3. 美术手动合并材质。
4. 吃透Nanite以及LOD属性设置
5. 搭建VPN、版本管理等方便远程协作的服务。
## 优化笔记
![[UE5优化方法与实践笔记]]