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,334 @@
# 题目
在一个月的时间内快速完成《沙巫之旅》这款竞品的复刻,分析这款游戏的
- 玩法特色和美术风格
- 找到并阐述核心重点
- 产出一个游戏开发计划和时间安排
# 逆向分析
## UModel
使用魔改的UModel就可以对该游戏进行解包并且提取资源。
使用资产:
- UI Material Lab:https://www.fab.com/listings/69680f34-e5d2-44e6-b023-f054bbf629eb
- 插件
- 加载屏幕插件 Async Loading Screen:https://www.fab.com/listings/f8aabb9a-7c96-4f79-97ff-04bcc146e595
- 自动缩放蓝图中Comment插件 Auto Size Comments:https://www.fab.com/listings/fdb7e77d-be37-4feb-a6c9-60e317c10adf
- CreateRedirectors
- CustomPlaceActor
- CustomShortcuts
- 对话框系统 DlgSystem:https://www.fab.com/listings/419d697f-9975-4940-a3f3-fde08a61f440
- DX11AutoFallback
- 存档系统 EasyMultiSave:https://www.fab.com/listings/49f745a1-cbdd-4b18-8278-22ae1075d91d
- ElgEditorScripting
- 事件节点编辑器 FlowGraph:https://github.com/MothCocoon/FlowGraph
- 游戏音频相关 FMODSpline:
- 游戏音频相关 FMODStudo
- FoliageAudio
- FSR3-540
- InstancedMeshChunks
- 触觉反馈开发SDK Interhaptics:https://www.fab.com/listings/fbc3dd13-38d9-4625-8f09-bd07354af3d6
- 实用蓝图库 LowEntryExtStdLib:https://www.fab.com/listings/0aadd41b-c02d-4f63-9009-bffad0070ebc
- 模块化吸附插件 ModularSnapSystem:https://www.fab.com/listings/5f5ca52e-4444-4ba5-a97d-98cf05962a26
- 一个序列化插件可以序列化Actor、Object NumberskullSerialization:https://www.fab.com/listings/d466670b-3458-4cad-a294-b36c853bc53c
- OnlineSubsystemBlueprints:https://www.fab.com/listings/16baded3-b354-42b5-b7ca-e3ffaba4ae77
- 扁平化图标库 OpenIcon:https://www.fab.com/listings/4505c6be-cfeb-4fc9-859c-7679ffdcdece
- PCStoreManager
- PropsExtender
- ShareXAutoRecord
- SlateIconBrowser
- 吸附增强 SnappingHelper:https://www.fab.com/listings/fb345179-6943-46c1-aab5-460cdc16975a
- SteamDeckConfig
- Stove 提供游戏上线服务 StoveSDKPlugin
- 绳索创建工具 Tether: https://www.fab.com/listings/e5621d4c-5774-4c6e-8057-530fc5249eb9
## Renderdoc
因为本游戏使用了一个简单的防盗版措施,所以需要进行简单的逆向。
![[Launch_Cracker.png]]
在Renderdoc里修改启动路径与启动程序之后添加“-PCStore=Steam” 启动参数就可以了。
![[Renderdoc1.png|800]]
![[Renderdoc2.png|800]]
---
# 玩法特色
《Caravan SandWitch》的开放式世界以“后启示录普罗旺斯”为基调融合科幻与废土美学构建了一个充满诗意与谜题的探索舞台。其核心玩法围绕自由探索、环境叙事与动态互动展开。
## 1. 内容丰富的箱庭开放世界
- **普罗旺斯科幻风格**
游戏以类普罗旺斯的“西加罗”星球为背景,地貌涵盖广袤的沙丘、干涸的河床、废弃的工业遗迹、古老的雷内托文明遗址,以及被沙尘覆盖的未来城市废墟。色彩以黄沙、锈红、灰绿为主,搭配科幻元素(如悬浮残骸、发光植物)营造独特的视觉风格。
- **隐藏的古代文明线索**
整个世界布满雷内托文明遗留的符号、壁画和机械装置,玩家需通过观察环境细节(如岩画、废墟结构)通过解密打开隐藏通路,甚至发现隐藏的地下设施或古代实验室。
## 2. 货车系统与解谜
- **作为代步工具**除了作为自己的代步工具一些同行任务还需要玩家载上NPC同行到新的地点推动剧情发展。
- **载具升级与解谜要素解锁** 通过收集零部件制作新的解谜工具以此探索更多之前无法前往的区域进而完成NPC任务、获取更多道具最终推动剧情发展。
## 3. 社区互动与动态叙事
- **西加罗社区的动态发展**
游戏中散布多个小型定居点,玩家通过帮助居民(如修复房屋、提供资源)逐步建立信任,解锁新任务线。社区会随玩家行为变化:
- **基础设施升级**:帮助居民后,定居点会扩建(如新建医疗站、工坊),提供新功能(如制作工具、修复货车)。
- **角色关系网**NPC会因玩家选择产生情绪变化甚至触发隐藏剧情例如某居民透露姐姐失踪的线索
- **推特系统**
一个类似P5的聊天界面本质是一个附带聊天记录与任务日志的任务系统。能够更加有血有肉、立体的塑造NPC。
## 玩法循环(使用图表示)
![[CaravanSandwitch玩法循环.png|500]]
大致玩法循环NPC => 接任务 => 解锁大地图区域(关闭干扰器/使用雷达) => 解谜 => 完成任务,经过几个循环开启下一轮主线。收集图纸+元器件制作新的解谜道具。
关闭干扰器可以解锁新的交互元素、NPC对话开启新任务
指引玩家前往新地点的方式:
1. 鸟瞰点指引:在鸟瞰点让玩家观察到新的地点。
2. 任务指引在大地图上标记NPC的位置。
## 解谜点分布逻辑
在这个箱庭开发世界中分布着一些废弃建筑、山洞作为解谜点。
![[WorldMap.png|800]]
根据规模可以分为:
-野外机关或是单个建筑一般只有1~3个机关的解谜元素。
- 中:复数存在的野外机关与建筑,若干机关组合在一起的解谜元素。
- 大:地图上标注的几个图标。一般是若干大型建筑组合,开发人员着重设计具备较大的深度与复合度的解谜地点。随着剧情发展与车辆的解谜工具增加会反复前往这些解谜地点。
---
# 美术风格
属于偏向LowPoly的风格化卡通渲染。
## 角色
![[Character1.png|500]]
![[Character2.png|500]]
渲染要素:
- BaseColor高饱和度与亮度的BaseColor
- Specular无高光效果。
- RimLighting基于NoL的边缘光效果。
经过分析:
![[Character_Renderdoc.png|1000]]
1. 角色主要在Translucent阶段渲染。通过采样Lambert材质渲染结果来获取阴影渲染结果。
2. 采用顶点色RGB通道赋予基础颜色A通道用于区分身上的单肩背包部分。
3. 使用一个NoL采样Ramp贴图来控制自阴影效果。
## 场景
除了主要的LowPoly场景模型场景中的一些素材看得出是将常规资产进行了一些低频风格化的处理。
![[Scene1.png|800]]
![[LightingPass_Renderdoc.png|1000]]
- BaseColor颜色归一化降低高频信息。
- Normal抹平法线。
- Spcular大部分物体基本没有高光与反射只有较少的金属物体会有。
- Metallic绝大部分物体都是0
- Specular
- 角色、粒子0
- 地形、载具0.5
- 场景物体、金属1
- Rougness除了角色皆为高频信息。猜测通过高频Roughness再通过Lumen的GI效果提高细节。
PS. 植被采用了预积分次表面实现。
---
# 快速开发计划
## GamePlay
游戏的主要功能按照重要性排序如下:
- 3C
- [x] Locomtion: 直接套用AdvancedLococmotionV4或者[ALS-Community](https://github.com/ShadowfallStudios/ALS-Community)直接构建项目。
- Walk
- Run
- Jump
- 攀爬
- [x] 额外运动方式使用商城资源合并到LococmotionV4中。
- 使用梯子(强行混合)
- 使用滑索,第四章获取(强行混合)
- 商城方案:
- ![500](https://media.fab.com/image_previews/gallery_images/dafb522f-17e9-4de0-9aad-6276d3a447db/7e25799b-5c55-4dca-a557-234f3b860da4.jpg)https://www.fab.com/listings/ba155b30-ccb8-42c5-b136-b70933a13e32
- 备选https://www.fab.com/listings/c92c2470-6e09-4303-a532-b042c6057ca2
- 车辆(载具):使用引擎的载具模版进行修改。
- 进入/离开 载具
- 刹车
- 加速
- 模拟悬挂系统
- 载具功能:
- [x] 区域扫描。可以描边显示被遮挡的关键物品/交互式元素。并且显示物品/交互式元素名称。
- [x] UI手动实现。
- [x] 扫描效果后处理材质:
- ![500](https://media.fab.com/image_previews/gallery_images/df04d200-d12b-49c7-ab6e-468c4a99b87d/f0f419e9-cfa7-447e-91fc-079841948081.jpg)https://www.fab.com/listings/9de276bc-2200-431b-be39-23f1eada3063
- ![500](https://media.fab.com/image_previews/gallery_images/2d2bc3d3-35e8-4797-aa81-375b1d5a74d4/f960f494-e7f9-467d-a2d6-990cef0770f2.jpg)https://www.fab.com/listings/f1ea87b7-d992-4c6b-8beb-1c120b4e1c3e
- 勾爪:可以抓住可交互元素。之后可以选择:
- 用车拉开(破坏交互元素)
- 用车拖拽从XX中获取新道具或者新的可交互道具。
- 构建临时滑索,之后玩家可以上到一些之前不能上去的地方。
- 黑客:可以破解某一些无法交互的元素。
- 变压中继器:可以给某些可交互元素供电,来打开某些开关。
- 物品系统:
- 只会显示物品描述。
- 代币:主要用于制作车辆功能生成部件(拆解零部件功能)
- 普通零部件:绿色
- 特殊零部件:红色
- 稀有零部件:黄色
- 珍贵零部件:紫色
- 商城方案:[RPG Inventory Template](https://www.fab.com/listings/bd9e297c-219d-4bd9-807c-21e8746f9ebe)
- 场景交互元素
- 游戏存在的交互元素
- 电缆(显示是否通电)
- 使用梯子
- 使用滑索
- 拾取物品
- 解谜机关(可能需要某些物品才能打开)
- 重力开关(需要车持续停上去才能开启)
- 中继器2个中继器连线后即可开启
- 鸟瞰点(坐垫)
- 宝箱(直接获取物品)
-
- 传送门VR教学管卡出入口/传送到指定地点
- 商城方案
- ![500](https://media.fab.com/image_previews/gallery_images/aefd66f2-e8d1-4022-ba86-2fb9a1db1c76/d80245fd-004d-4d69-9e9f-3a52743f5d9b.jpg)https://www.fab.com/listings/16335b65-1c61-49af-8014-1ddfd3987bb1
- 对话系统
- 备选商城插件:
- ![500](https://media.fab.com/image_previews/gallery_images/d79ca2a7-aeed-4e7d-beae-c726a91fdc47/8410a6cf-6f95-4d43-b043-40c87d4fa40d.jpg)https://www.fab.com/listings/052820ab-f423-48e8-978a-eefd4087b1a4
- ![500](https://media.fab.com/image_previews/gallery_images/79cab463-107a-4aa8-b4d4-5b5168830e37/7bc5795f-1704-4a55-a4d9-adaf59da061d.jpg)https://www.fab.com/listings/60a2d531-5d43-4bcc-a758-54440dfabecc
- https://www.fab.com/listings/0efb8a75-7fd1-49ea-a07c-9aa5621334e0
- https://www.fab.com/listings/419d697f-9975-4940-a3f3-fde08a61f440
- 任务系统:
- 备选商城插件:
- ![500](https://media.fab.com/image_previews/gallery_images/a1b366ea-acd4-4998-95d3-636de111d593/d685ec5d-ce22-4381-9cbb-ea1a96d33b5b.jpg)https://www.fab.com/listings/079f4df6-f7c5-4837-982b-c19eda87aa84
- ![500](https://media.fab.com/image_previews/gallery_images/d8e855ea-0866-419f-8ef2-274936cf54c8/6c58da41-4922-4a79-b665-a97f0b60ec6f.jpg)https://www.fab.com/listings/66f81152-15e6-42e8-8ba4-6ddcf49bdb3a
- [x] 存档系统:
- 存档系统 EasyMultiSave:https://www.fab.com/listings/49f745a1-cbdd-4b18-8278-22ae1075d91d
- 解谜点可以抽象成一个Actor之后使用[NumberskullSerialization](https://www.fab.com/listings/d466670b-3458-4cad-a294-b36c853bc53c)进行序列化,再保存。
- 大地图 & 小地图:
- 备选商城插件:
- ![500](https://media.fab.com/image_previews/gallery_images/e7dc199d-bc32-4e51-9b38-6fa01abc23d6/9b909ccb-5d29-4386-b2d1-044c8521743c.jpg)https://www.fab.com/listings/9af1c512-d619-4e13-a091-2944e45ea547
- ![500](https://media.fab.com/image_previews/gallery_images/85c5855f-e217-48f0-9d1d-3c02f6dd7a76/3b9ff93c-e878-430f-bea3-e80469686ef6.jpg)https://www.fab.com/listings/201fc801-3d30-4d51-b9f0-c030de9f822e
- 堆特:手动实现。
- 显示分类
- 钉选帖子:主线 & 重要任务。
- 活动帖子:支线任务。
- 归档贴图:已完成任务。
- 商城UI资产
- https://www.fab.com/listings/5be4e83d-165a-4c1b-aa37-839619998f75
- UI
- 主要UI组件
- ![500](https://media.fab.com/image_previews/gallery_images/7f60a4a8-69ba-487c-8439-5dccff5eab27/b6db5f17-e1be-4099-934c-63b0eaf95728.jpg)https://www.fab.com/listings/e678636b-66f1-40bd-b5bb-4d937376713e
- ![500](https://media.fab.com/image_previews/gallery_images/732b051d-21ef-491f-9e75-fdd80d03203b/fff8dab9-8e53-41e7-9a90-814505834a3b.jpg)![500](https://media.fab.com/image_previews/gallery_images/732b051d-21ef-491f-9e75-fdd80d03203b/fff8dab9-8e53-41e7-9a90-814505834a3b.jpg)
- ![500](https://media.fab.com/image_previews/gallery_images/3e225483-d257-4d67-acbf-032e3932aeb2/d680ca26-98a4-4b12-80d5-deaafe3cfc25.jpg)
- ![500](https://media.fab.com/image_previews/gallery_images/822fd927-f025-4771-a57f-de7ff527e721/f0f5afda-3541-406f-82ac-957575bec5c5.jpg)
- https://www.fab.com/listings/999c85c8-9a7b-43aa-a3e5-2b3bc6bc57ff
- 主菜单:![500](https://media.fab.com/image_previews/gallery_images/f2af58f9-a317-40dc-8273-36ab2773a9e6/5d323ad7-4b54-4a43-a4b9-b1fbcc0f7f89.jpg)https://www.fab.com/listings/8fc87fae-f72c-42d7-8e87-9c88475332f6
## 风格化资产生产方式
针对PBR资产
- 贴图进行降频、颜色归一。
- Substance 3D Painter 11.0新增 Stylization滤镜详解快速打造风格化纹理
- 模型使用Blender进行LowPoly处理。
- https://github.com/JulienVanelian/lowpolyzer
- https://github.com/sakana3/PolyQuilt
## 备选风格化资产
- 风格化渲染
- 角色
- 使用UModel提取角色模型与贴图
- 渲染
- 采用不透明模型只渲染深度具体效果使用Translucent的邪道渲染方式。
- 可使用商城资源Lightweight Toon Shader (No Post Processing)https://www.fab.com/listings/063f7f81-4703-46e2-87b5-a4b859629952
- ![https://media.fab.com/image_previews/gallery_images/1d35be67-8b0c-404a-809d-aa73a840fe21/edef85eb-740a-4c65-9a13-1b0b88eef2d0.jpg|500](https://media.fab.com/image_previews/gallery_images/1d35be67-8b0c-404a-809d-aa73a840fe21/edef85eb-740a-4c65-9a13-1b0b88eef2d0.jpg)
- 天空盒
- ![1|500](https://media.fab.com/image_previews/gallery_images/998498a4-51be-4fb7-9199-9d9b4f2c1434/24834cf2-3d1d-49ca-a035-d0226117e50d.jpg)
- 综合
- https://www.fab.com/listings/23869931-3e46-4c42-b541-9f6057f12d13
- ![500](https://media.fab.com/image_previews/gallery_images/379e0119-1311-4429-8057-857d8b453452/95b57b4d-02d3-4198-a567-c6f56f926591.jpg)
- 粒子
- 烟尘
- https://www.fab.com/listings/111e39b5-5bd7-4b46-a915-2eda020a4ca2
- ![500](https://media.fab.com/image_previews/gallery_images/c71707fe-c1e1-4a31-ad66-7be19f3e50ef/ca9f0204-9f77-42bd-a3a7-dc267733c9a9.jpg)
-
- https://www.fab.com/listings/b9eeb225-77a8-4541-bf13-ba15dcb04182
- ![500](https://media.fab.com/image_previews/gallery_images/947ca2ba-f776-43ea-bd46-6a6b0d97c876/18ccba2f-bd2c-45ca-8c43-5e4477a8ec8d.jpg)
- https://www.fab.com/listings/a5d68ec0-fc5f-4f7b-8b70-dde2847b71dc
- ![500](https://media.fab.com/image_previews/gallery_images/48ed8dd4-9908-48d2-bb7e-bca5fbcabd85/e235e7ee-a691-4cf0-a282-f699dae30a77.jpg)
-
- 水面
- https://www.fab.com/listings/9527db5d-9a12-4577-9507-35bd4e20e8ad
- ![500](https://media.fab.com/image_previews/gallery_images/7ea01b5f-e048-4a0e-b700-c0a6039cf57b/d09c13fc-5d22-4b25-8183-c366d3c34cb3.jpg)
- 地形材质
- https://www.fab.com/listings/6d473ba6-f95d-45e8-8b6b-8b522ca2bf82
- ![500](https://media.fab.com/image_previews/gallery_images/b73b0233-cefd-433a-8e6a-c4471882bd68/37bc7c4a-f8ee-4fcc-9aae-f7f2d2b53c35.jpg)
- ![500](https://media.fab.com/image_previews/gallery_images/a2080386-149f-48a3-a8b2-6e4150895e2d/2f0a70db-0f9a-475e-bf7c-ff70c748a80c.jpg)
- https://www.fab.com/listings/b003cb7c-f466-478b-8a3c-61cf21d3b678
- ![500](https://media.fab.com/image_previews/gallery_images/c3cfb18a-87cf-4002-97b4-92208a78cbe2/45180dde-500f-4fea-bdc9-cb952bb66e77.jpg)
- https://www.fab.com/listings/c56b6094-d8c3-403a-8133-b73260bfa25e
- ![500](https://media.fab.com/image_previews/gallery_images/1d77dc4c-7f82-4bbd-bcd0-139df3ec12d7/016f0198-1b75-4584-bd9b-3c10de3d3e7d.jpg)
- 备选资产
- https://www.fab.com/sellers/AleksandrIvanov
- https://www.fab.com/listings/ee6d82a3-19b6-4a81-9999-79a5ce3f5f3c
- ![500](https://media.fab.com/image_previews/gallery_images/acc50030-30c4-4b21-948b-faafcbc84b4c/e4da80db-7e71-4361-94f0-ca28d6c51a87.jpg)
- https://www.fab.com/listings/3be0cc6f-df42-4646-9745-024ca945e474
- ![500](https://media.fab.com/image_previews/gallery_images/0efd64d9-16e7-4a4b-ad49-defe19e060c2/779d7139-d5c8-4a70-84b4-e25b4e4cc0ed.jpg)
- https://www.fab.com/listings/b0fb5f1c-2f92-49a3-989d-084656275e4d
- ![500](https://media.fab.com/image_previews/gallery_images/0a2693c7-eb6d-4213-9bdc-812a460e0902/83213ef0-8295-46b5-8d78-66b58f34287d.jpg)
---
# 时间表
1. 第一周
1. 第一天
1. 使用RPG Inventory Template与插件ALS-Commutiy作为基础构建项目将ALS-Commutiy的3C融合进项目。实现物品、交互系统以及基础Locomotion。
2. 将Ladders, Glides and Ziplines System加入项目实现滑索、爬梯子功能。添加滑索、梯子可交互Actor。
3. 构建版本管理系统,上传项目。
2. 第二天
1. 移植UE的载具模版到项目中并且使用从游戏中提取车辆资产完成基础载具功能。
2. 实现角色上下车的逻辑。
3. 给可交互Actor基类添加逻辑
1. 在屏幕显示对应的详细信息。
2. 被破坏、被拖拽、被破解、被车压住、被充电接口。
4. 实现扫描功能。
5. 实现车辆瞄准可交互Actor的功能。
6. 实现车辆发射钩锁的功能。
3. 第三天
1. 提取游戏资源完成被破坏、被拖拽、被破解、被车压住、被充电的交互Actor。
2. 在地图中测试。
3. 完成相关交互UI。
4. 搭建类似游戏的VR教学场景并进行测试。
4. 第四天
1. 添加游戏代币物品与UI。
2. 添加场景中拾取代币的交互Actor。
3. 添加制造新解密道具消耗代币的交互Actor。
4. 添加Quest and Dialog Kit资产
5. 添加Dialog UI完成Dialog系统。
5. 第五天
1. 提取游戏资产并且添加主角以及其他NPC模型。
2. 修改Quest and Dialog Kit资产逻辑完成任务系统。
3. 添加“堆特”UI完成堆特系统。
6. 第六~七天
1. 测试、完善、解决遗留bug。
2. 使用EasyMultiSave与[NumberskullSerialization](https://www.fab.com/listings/d466670b-3458-4cad-a294-b36c853bc53c)实现存档系统。
3. 进行打包测试。
2. 第二周
1. 第八天
1. 实现角色渲染材质。
2. 使用接近的纯色完成初步地形材质。
3. 按照游戏第一章的地形大致刷一下地形。
2. 第九~十二天
1. 使用提取资产与商城资产搭建天空盒、水面。
2. 大致构建第一章的场景并且布置解密要素、NPC。
3. 第十三~十四天
1. 添加主菜单与其他UI。
2. 测试并且解决遗留bug。
3. 第三周
1. 第十五天
1. 对RPG Inventory Template的大地图进行适配显示地形与等高线。
2. 使用World Map System资产实现小地图功能。
2. 第十六~十八天
1. 按照游戏设计,堆砌场景细节与解密要素。
2. 添加鸟瞰点、信号干扰器。
3. 第十九天
1. 交给领导与同事试玩,并且收集意见。
4. 第二十~二十一天
1. 按照收集到的意见完善游戏体验。
4. 第四周
1. 第二十二
1. 交给领导与同事试玩,再次收集意见
2. 第二十三~二十七天
1. 按照收集到的意见进一步完善游戏体验。
3. 第二十八天
1. 提交给主管最终评审。

View File

@@ -0,0 +1,22 @@
{
"nodes":[
{"id":"f3af455939c15565","type":"text","text":"到达新区域\n","x":-203,"y":-286,"width":250,"height":60},
{"id":"c6556ec9594182fa","x":-203,"y":60,"width":250,"height":60,"type":"text","text":"使用堆特"},
{"id":"2581bd493de7db9d","x":-203,"y":220,"width":250,"height":60,"type":"text","text":"接新的任务"},
{"id":"4ac8994171dfb450","x":-203,"y":340,"width":250,"height":60,"type":"text","text":"解谜"},
{"id":"01926c963790e97c","x":-540,"y":340,"width":250,"height":60,"type":"text","text":"破坏信号干扰器"},
{"id":"29ceff92ce038882","x":-540,"y":-120,"width":250,"height":60,"type":"text","text":"与NPC沟通"},
{"id":"64b852a3680c0876","x":-203,"y":480,"width":250,"height":60,"type":"text","text":"完成任务"}
],
"edges":[
{"id":"8798438ce7ca228c","fromNode":"f3af455939c15565","fromSide":"bottom","toNode":"29ceff92ce038882","toSide":"top"},
{"id":"782332fc911e051c","fromNode":"f3af455939c15565","fromSide":"bottom","toNode":"c6556ec9594182fa","toSide":"top"},
{"id":"dfc4313997588d95","fromNode":"29ceff92ce038882","fromSide":"bottom","toNode":"c6556ec9594182fa","toSide":"top"},
{"id":"916554cf03afe01c","fromNode":"c6556ec9594182fa","fromSide":"bottom","toNode":"2581bd493de7db9d","toSide":"top"},
{"id":"c338ab36f2a0ff63","fromNode":"4ac8994171dfb450","fromSide":"bottom","toNode":"64b852a3680c0876","toSide":"top"},
{"id":"ca462a6730a8296f","fromNode":"2581bd493de7db9d","fromSide":"bottom","toNode":"4ac8994171dfb450","toSide":"top"},
{"id":"e0d7dfcf441cea11","fromNode":"4ac8994171dfb450","fromSide":"left","toNode":"01926c963790e97c","toSide":"right"},
{"id":"ab26ae485f68ca1d","fromNode":"01926c963790e97c","fromSide":"top","toNode":"c6556ec9594182fa","toSide":"left"},
{"id":"39fba7b5f2ad38c9","fromNode":"64b852a3680c0876","fromSide":"right","toNode":"f3af455939c15565","toSide":"right"}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,30 @@
---
title: 未命名
date: 2025-04-09 09:57:42
excerpt:
tags:
rating: ⭐
status: inprogress
destination:
share: false
obsidianUIMode: source
---
# Offer
1. 入职 网易互动娱乐 1设1部 TA
1. 1~3部
2. Fally
2. Demo项目5个月时间制作。
3. 职位:高级美术工程师(渲染)
1. p3-3
2. 3.13w / 月
1. 12%五险一金。
3. 绩效 B+ 以上
4. 工作地点:杭州
5. 福利
1. 年度旅游、体检。
2. 休息10个工作日。
3. 年假每工作1年多1天。
4. 食堂:餐补。
6. 9:30~6:30(12:00~2:00)
7. 下周一,报道。

View File

@@ -0,0 +1,422 @@
---
title: 未命名
date: 2025-03-28 13:11:54
excerpt:
tags:
rating: ⭐
status: inprogress
destination:
share: false
obsidianUIMode: source
---
# 背景
- 项目大致背景
- 项目类型:赛车
- 制作人以前做极品飞车。
- Demo期间制作周期半年。
- 面试信息
- HR + 主管
- TODO
- [ ] 查看一些网易面试经。
- [ ] 工作经历
1. 说自己是TA 达瓦、乐华。(避免说国企经历)
2. 偏T的TA
3. 对TA很感兴趣。
4. 相关作品产品。
5. 做了什么、解决了什么问题、怎么解决怎么好表现出能Hold住全场。
- 乐华ASoul项目
- Dawa 崩坏3 音乐会。
- [ ] 技术栈说明
- 学了哪些东西,有哪些技术栈。
不要提二次元渲染技巧
风格化渲染。
风格化渲染的论文。
瓶颈是什么?
可能会问的问题
- 我是TA但什么东西都做。
- 自己的未来目标与计划都是做成一个TA的要求。
- 流程
- 工具开发
- 流程
- MultiDraw插件收到行业广泛的认可很多人都在使用。
- 简单说一下原理。
- 赛车的3C、GDC文章、道路生成。
- 【[UOD2022]极速光影-探讨《Racing Master》中的光影技术 | 网易 周潜】 https://www.bilibili.com/video/BV1sP4y1R7TV/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
# 自我介绍 & 主要技术栈
面试官您好我是楼嘉杰一名技术向TA。
首先很荣幸参加贵公司的面试,在仔细研究过岗位要求后,我认为自己能完全胜任本岗位。
## 个人优势
个人优势:
1. 熟悉UE各种常用模块可以按照需求进行Demo搭建。
2. 具备一定的图形学知识可以从更多角度分析需求并且完成。熟练使用Renderdoc、Pix、NSight、UrealInsight工具分析性能瓶颈以进行优化。可以按照需求修改渲染管线。
3. 熟悉Qt与Pyside2可以编写跨平台的工具。以及DCC软件的深度定制。
4. 具备Docker相关知识能够玩转NAS以及部署版本管理、自动化等相关服务。以及部署UE项目测试用专用服务器。
## 技术栈
首先说一下技术栈
**UE方面**
- Gameplay3C、AI、GAS、OnlineSubsystem。解析过ActionRPG、GASDocument、Lyra部分逻辑项目。
- UI熟悉UMG、Slate来编写一些自定义组件。
- 工具CommandLet、EditorUtilityBlueprint、Puerts Editor。
- 动画动画蓝图、大部分动画节点。解析过AdvancedLocomotionV4。
- Puerts熟练使用Puerts编写各种功能。
**图形学与Shader**
 熟悉UE5中的RDG、MeshDraw渲染框架以及渲染流程。能够按照需求来修改渲染管线。
• 编写基础的离线光线追踪渲染器。
 学习过UnityShader以及SRP自定义管线分析过UnityChan2.3的Shader。
 熟练使用RenderDoc、UnrealInsight、Pix、NSight等工具对性能进行分析并且对项目进行优化。
**美术相关**
 熟悉Maya的建模、动画、渲染模块能使用Python编写插件。熟悉PySide2库可以编写更多高级功能。
 熟悉UE5动画、光照相关功能与物理光照系统并撰写相关经验文章。
**项目流程管理**
 搭建Gitea平台实现协同开发。使用GitBook、Obsidian作为项目文档与知识库方便协作。
 搭建Perforce Server以及Proxy Server并设计分支以及协作流程。
 研究与使用FastBuild加快源码引擎的编译大大提高修改渲染管线的效率。
**其他技术栈**
 前端框架Vue、Vue-cli、Nuxtjs、ElementUI、Echart、Electron-vue
 后端技术Node.js、Express
 GUI框架QtQt、QtQuick
 语言C++、JavaScript、Python
# 工作与学习经历
## 国企期间
**2013.7-2022.6**
使用Qt编写各种工具与App使用VUE与Nodejs相关生态工具编写数据管理综合平台。实现数据生产、综合查询、用户终端的生产流水线。
在2013年接触到了Maya、UDK对此特别感兴趣并且使用空闲时间进行自学。在2015年UE4免费之后转而对UE4进行系统学习。
在此过程中
在此之间也做了一些东西,这里我只介绍最有代表性。
- 一些RayMarching材质溶球、2D、3D体积云。
- 一些后处理效果:描边、模糊。
- 使用GAS制作的Demo。
- Slate UI组件定制。
- 自费走完次时代外包流程并且使用Ornatrix制作角色头发。
- 制作基于Maya HumanIK的批量重定向插件。
### MultiDraw
主要解决了:
1. 在不修改引擎的情况下给模型添加Outline的功能。Outline是BackFace Outline不容易出现自遮挡问题。同时具备Fov、深度曲线适配是不修改引擎情况下挤出式Outline的最佳方案。
2. 避免使用多个模型进行渲染减少了额外的性能损耗。也因此解决了多骨骼模型渲染Outline而出现的动画不同步的问题。
3. 可以在各个平台运行,包括移动端。
目前有很多许多公司与个人使用。
同时还有其他功能:
1. 模拟Muti Pass功能使用像素偏移进行排序。
2. Cutoff 剖面功能。
3. UE材质背面渲染功能。
## 达瓦2023崩坏三音乐会、2024原神音乐会、AI、乐华技术支持
**2022.6-2024.10**
- InHouse插件维护从UE4迁移到UE5、提升使用体验、编写大纲组件并且内容与Maya场景完全对应。
- 【[UnrealOpenDay2020]MUTOOLS-虚幻引擎动画生产新流程 | 达瓦科技 朱子威】 https://www.bilibili.com/video/BV1ct4y1Y7qP/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- 难点需要对Maya 插件的C++开发以及数据逻辑DAG有向无环图以及UE的渲染逻辑有一定了解。
- 项目技术支持:
- 日常的疑难问题解决各种各样的问题DCC、模型摆放、渲染、动画、工具都会有所涉及。比如在Editor下在Sequence中K某个Actor的逻辑、角色口腔里有奇怪的光**Subsurface Profile Skin**导致的)。主要是一些外包的番剧制作或者使用商店素材快速搭建的项目。
- 难点N手包的各种糟糕资产以及地编同学在不太了解商城资产的情况下滥用。
- 优化场景性能主要是XR、虚拟拍摄类型的项目。将帧数优化到指定要求同时保证效果不会出现较大变化。比如XR项目需要达到4K50帧、虚拟拍摄要求2K50帧。
- 根据需求实现一些功能:
- 在XR拍摄中让角色具有阴影。XR拍摄使用Disguise软件会将角色与场景分开各渲染一次再与摄像机拍摄的现实结果进行合成。因为阴影是投射产生并不存在可以选中的实体所以XR拍摄中的虚拟角色会没有阴影。
- 解决方法:
1. 通过SceneCapture2D渲染与主光方向一致的方向的深度信息再在地面材质中对该信息进行空间转换判断是否大于之前的深度信息来判断是否处于阴影中。
2. 使用UE的Composure功能将当前角色与接受阴影的地面使用作为一个Pass单独输出到Disguise。这样就解决了这个问题。
- 使用第三方库分析音乐来寻找鼓点并在Sequence中在鼓点位置摆动DMX灯光。
- 工作流优化搭建SVN、Perforce服务并且手把手教会同事推广UE的Muti-Users。
- 参与项目:
1. 武庚纪
2. [燃夏](https://www.bilibili.com/bangumi/play/ss42066 "燃夏")
3. 2022 EOE米诺生日会
4. 2022 音乐盛典咪咕汇(未中标)
5. 2023 新春湖南电视 周笔畅《追星》
- 2023崩坏3音乐会
- 工作内容:提供场景优化方案与现场技术支持。
- 难点:
1. XR拍摄的帧数要求较高4k50帧
2. 现场使用的渲染机CPU是频率不到4.0的线程撕裂者非常容易出现CPU瓶颈。需要较多的UE渲染管线知识才能找到问题并解决。
3. 工期非常紧张这个项目因为前一个公司做到一半放弃了导致接手时工期非常紧张。到重庆影棚进行拍摄时相关每个场景只有70~90%的完成度。所以只能边制作边出优化方案了制作进度较快的场景会给我留1~2天时间一些比较慢只会给我留0.5~1天。
4. 在工期紧张的同时场景频繁出现较大改动进一步得增加优化负担为了尽可能得提升演出效果导演经常会改镜头与效果。往往改动的东西与添加的资产会比较多导致本来符合拍摄要求的帧数一下子又不行了。所以每个节目场景会出个3~5个版本的优化方案。
5. 部分商城资产滥用导致性能问题出现。
- DMX灯光优化
- 模型转NaniteDMX组件里的模型都改成StaticMeshInstance。
- 关闭DMX灯光组件的照明与阴影效果。对于不能关闭的照明效果的减小照明范围。
- 改进DMX Beam材质以减少RayMarching步长与不显示区域。劲量减少Beam的相互叠加。
- 资产优化:
- 修改EasyFog的材质(大纲搜索EasyFog从Translucent=>Additive。并且重新调整亮度。
- EnvEmitter调整大小并使用Cutoff工具对齐进行裁剪。覆盖范围过大。修改材质MI_Env_Inst~MI_Env_Inst22从Translucent=>Additive。并且重新调整亮度。
- Lumen根据场景舞台大小调整Lumen Scene View Distance、Max Trace Distance。在保证效果不会大变的基础上调整Quality与Detail。
- Lumen Scene Lighting Quality 2 =>0.25
- Lumen Scene Detail4=>1
- Lumen Scene View Distance20000=>1000~3000
- Max Trace Distance20000=>1000~3000
- CyberAngle
- 光影 & Lumen参数调整
- 去掉部分效果不明显灯光的阴影渲染。
- 部分阴影设置成距离场阴影。
- 使用SourceLength匹配的点光源来代替RectLight
- 其他类型的灯光是用PointLight或者SpotLight来代替。
- DMX灯光调整
- 对EasyFog粒子进行裁剪
- 粒子从CPU移植成GPU
- 远景模型根据视角角度进行Merge。
- Journey Of MoonLight
- 光影 & Lumen参数调整
- 地面的点光源照明效果使用贴花代替(数量特别多)。
- 基础没有明显效果的灯光。
- 关闭飞船模型的阴影。
- DMX灯光、DMX模型、Beam材质调整。通过距离判断来设置DMX材质质量等级以此减少步长。
- DMX模型卡空气Nanite并且调整参数使其不会有太大变形。
- 星云资产与星光调整(商城资源)
- 在保证效果不变的基础上,调整生成随机球体模型的数量以及球体大小。
- 关闭Separate Translucency渲染功能。
- The Flawless Human、Elysian Realm
- 光影 & Lumen参数调整
- 帮忙制作了一下12英杰的头框材质
- TruE
- 优化粒子
- CPU => GPU减少不能转换的粒子数量与出现频率。
- 场景与粒子材质 Translucent => Addtive顺便解决鬼影问题。
- 电视机模型Nanite & InstancedStaticMesh并且删除下方看不清的电视机模型进行Merge或者删除。
- 电视机播放视频使用Bink进行优化。
- 与特效同学协作实现最后的通道状粒子效果。并且使用Nanite & InstancedStaticMesh进行优化需要修改材质将ObjectPosition => InstancePosition节点)
- 灯光:
- 因为场景几乎没有渲染阴影的需求所有关闭若干的阴影渲染
- 调整灯光的渲染范围。
- 调整主光阴影参数:
- Dynamic Shadow Distance MovableLight20000 =>4000
- Num Dynamic Shadow Cascades5 => 1
- DistanceField Shadow Distance4000
- DistanceField Trace Distance25000 =>2000~4000
- Shadow Resolution Scale1 => 0.1
- ExponentialHeightFog1 关闭体积雾
- Dual-Ego
- 灯光阴影:关闭点光源阴影。
- 场景与粒子材质 Translucent => Addtive顺便解决鬼影问题。
- 远景雾片Cutoff
- 舞台模型 Merge
- Oaths
- 调整Lumen参数
- 灯光
- 关闭阴影效果不明显的灯光阴影。
- 调整主光阴影参数:
- Dynamic Shadow Distance MovableLight20000 =>4000
- Num Dynamic Shadow Cascades5 => 1
- DistanceField Shadow Distance4000
- DistanceField Trace Distance25000 =>2000~4000
- Shadow Resolution Scale1 => 0.1
- 解决一个屏幕出现奇怪噪点的问题一个Niagara尘土粒子因为参数问题导致速度与粒子大小
- Domineer
- 解决鬼影问题:
1. 修改材质从Masked=> Translucent并且开启材质的Responsive AA。
- 模型合并 & Nanite
- 调整Lumen参数
- 灯光阴影调整
- Rubia
- 删除场景中的PlanearReflection该用屏幕空间反射。
- VSM => ShadowMap解决因为场景都是透明物体切没有Nanite会导致VSM无法缓存使得帧数下降的问题。
- Nightglow
- **中间舞台优化**因为采用Houdini的VAT制作破碎动画逆播放负责制作的TA同事在这里使用的StaticMesh这会使得帧数降得非常厉害只有3~10fps。
- 解决方法:
1. 将这里所有模型都改成Nanite。
2. 整个舞台为六边形石柱组成的六边形舞台。按照形状可分为7种模型分别做成InstancedStaticMesh。
3. 修改材质ObjectPosition节点改成float3(0,0,0) => TransformPosition(Instance&ParticleSpace)这2个节点。
- 因为场景比较暗所以关闭几个SpotLight的阴影渲染。
- Luemn参数修改
- Lumen Scene Lighting Quality 1=>0.25
- Lumen Scene View Distance20000=>1000
- Max Trace Distance20000=>1000
- 透明物体
- EasyFog材质从Translucent=>Additive
- SM_Cloud_Single的材质从Translucent=>Additive
- geogrp的NewMaterial1_Inst从Translucent=>Additive
- Da Capo
- 粒子删除看不见的CPU粒子。
- 植被
- 将所有植被模型设置成Nanite。材质中WPO引脚中的ObjectPosition节点改成float3(0,0,0) => TransformPosition(Instance&ParticleSpace)这2个节点。
- 设置r.Nanite.AllowWPODistanceDisable 。
- 光影
- Lumen相关参数
- r.Shadow.Virtual.Cache.MaxMaterialPositionInvalidationRange 1000
- 场景整理:
- 删除场景中镜头看不到效果不明显的东西Mesh与蓝图
- 将一些渲染效率低的StaticMeshInstance => Nanite
- 粒子
- 见扫瀑布粒子数量与Life并且在Sequence中K可见性。(有较大性能影响)
- P_Wind粒子 CPU => GPU
- 2024原神音乐会
- 针对原神渲染进行分析
- 原神刚开服是可以截帧的有renderdoc分析Renderdoc文件来指导美术如何制作。
- 蒙德教堂(未播出),项目招标用。
- 因为对接方提供的场景模型缺损严重,之后有研究原神资产与场景模型的提取方式,以及还原场景的方法。
- 具体方法:
1. 使用改模版的AssetStudio来提取资产。
2. 搭建原神私服在游戏中使用Ninja Ripper截取游戏场景并在Blender加载结果。
3. 在UE中进行还原。
- 正机之神Boss模型提取+绑定分析、场景分析。
- AI项目
- AI实时添加动作、并且渲染视频。
- AI 表情、口型 Sequence。
- AI 实时动画重定向。
- AI虚拟偶像陪伴项目
- 导播台
- AIGC赋能工具以上都是一些基础功能Demo。原本还打算制作更进一步的工具
- 比如根据当前Sequence 通道的动画信息以及用户提供关键字以此在AI 专用轨道中生成动画数据。
- 根据关键词生成模型数据之后将模型数据下载到本地并在关卡编辑器中创建StaticMesh并生成Asset。
- [[4DGaussians]]
- 乐华ASoul技术支持
-
蛋仔派对AI赋能&UGC
- 【[UOD2022]让用户更快捷的创建世界- 基于UGC方法的动态世界解决方案 | 腾讯 杨拓】 https://www.bilibili.com/video/BV1384y117Zm/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- Promethean AI场景创建辅助用大模型。www.prometheanai.com
- Ludas AI针对虚幻引擎通用大模型AI。https://ludusengine.com/
## 乐华ASoul
**2024.10-2025.1**
实际上是从2024.4月开始进行技术支持的
因为乐华从字节收购Asoul业务时字节只教了基础使用方式只交付了UE工程、脱敏的美术资产源文件。
最为关键的使用文档、中台插件、版本管理工具都没有提供。
所以需要有一位技术栈宽广的人来Hold住这个项目。在我接收到项目后发现存在若干之前直播版本不存在的bug怀疑是交付时搞错了Perforce分支或是使用较早版本进行交付。
作为唯二的技术人员,我主要负责:
- 解析ASoul导播系统以进行工作流的适配与改造。
- Sequoia编辑器改造以适配流程。
- 分析ASoul的渲染管线与配套材质系统。
- 分析大气环境、道具、换装系统,并进行改造。
- 根据 运营 要求制作一些效果道具。
- 修复导播系统bug。
- 大型节目优化。
- 日常技术支持
- 技术答疑
- 日常问题解决
- 搭建协议服务与工作流
另一个位更加偏向于虚拟偶像直播,是技术负责人:
- 动捕 & 动捕棚搭建,相关问题解决。
- 网线 & 工位改造。
- 直播相关问题解决。
### 导播台架构
采用C/S分布式架构即专用服务器作为终端其他控制客户端分别控制(服务端会检测客户端身份)。
采用这种分布式架构的原因是:
1. 可以防止All in Boom的问题。控制用客户端挂掉或者电脑出现硬件问题也可以通过其他电脑打开该类型的控制客户端重新运行。该系统主要由 c++为主要底层20~30%大量Puerts50~60%蓝图5~10%)构成。
2. 满足导播切镜头的需求可以先从24个镜头中可以通过SteamDock翻页选择想要镜头之后再PVW预览觉得OK后通过切镜让PGM也开始播放这个镜头。
- 地图控制:
- 加载指定表演区域采用大世界系统提前加载UE4版本采用的是关卡流
- 控制天气、昼夜循环、天空盒。
- 添加地图道具、特效。
- 控制表演区域的特殊功能。
- 角色换装&道具:
- 角色换装
- 身体各部位的道具
- 特效
- 动捕&面部&手套控制
- 动捕、面部、手套数据ID对应。
- 脚步着地。
- 动捕时间戳同步。
- 动捕道具控制。
- 渲染机画面通过采集卡+视频线传到显示器上
### 渲染管线 & 材质系统
#### 渲染管线
为了能在其他线下场所进行直播替换官方引擎的USH与USFASoul的引擎只使用材质与修改UE Shader的方式来实现卡渲。
主要的逻辑是:
1. 在FGbufferData中添加额外的卡通渲染用变量之后在DeferredShadingCommon.ush的Encode/Decode函数从GBuffer进行Encode/Decode。
2. 在BasePassPixelShader中写入相关信息并且修改ShadingModelID输出(使用CustomNode)
1. ToonSpecularColor
2. ToonShadowColor
3. ToonShadowLocation
4. ToonShadowSmoothness
5. ToonSecondaryShadowColor
6. ToonForceShadow
3. 在ShadingModel.ush 添加对应的ToonShadingModel。
4. 修改DeferredLightingCommon.ush添加了阴影控制功能。
5. 修改DeferredLightPixelShaders.usf设定为LightChannel为2时才会进行卡通渲染。
6. 修改PostProcessCombineLUT.usf实现 NoToneMapping
#### 材质文档编写
天气系统采用纯蓝图 + DataTableCurve、Parameter+ 材质制作。
### 动捕 & 动画系统
有一个名叫MotionProcessor的客户端负责收集各种动捕&面捕&手套信息。
#### 动捕
动捕系统用的是青瞳,为了解决因为动捕系统延迟抖动问题以及其他客户端获取数据需求。这里采用这个方案:
- 在接收到原始诗句后按照时间戳进行采样。新开线程接收120ms的数据
- 发送给一个c#编写的程序,进行数据广播。
- 各个客户端在接收动捕数据后,还会根据时间戳再次采样(动画节点)
- MotionProcessor中的角色与直播角色共用同一个动画蓝图不同的逻辑与节点通过一个Bool变量进行区分。
除此之外还需要处理动捕道具的逻辑(一些道具黏上动捕反光点,可以与虚拟世界的道具同步位置)
#### 面捕
使用Unity + Arkit实现一个面捕App主要为了实现
1. 突破52个BlendShape限制。
2. 提高单个BlendShape的表现能力。举个例子吐舌演员表情被识别后使用多个BlendShape插值拼合最终得到一个不错的效果。
3. 限制一些NG表情。
可以看到这个节点可以添加一个DataAsset里面的数据都是由中台的dcc工具根据maya工程中角色的BlendShape生成csv再导入UE生成。
#### ChaosBone
使用CUDA编写的物理系统整合了KawaiiPhysical、SPCR Joint Dynamics
主要用于模拟布料以及刚体(头发)
主要解决了:
- 效率问题
- 布料穿模问题
### 除了解析之外我还做了哪些工作
- 摸索出
- 日常解决地编、动捕、建模、导播同学的问题。
- 一些效果、道具制作。
#### 日常问题解决
- 较容易解决的,通过截图,并在图上附上操作步骤与箭头指示,示意解决方案。
- 一些容易重复的问题会编写知识库文档,之后发送文档链接。
- 一些复杂问题会直接录视频告知解决方法。
#### 乐华 实时演出 / 预录制演出切换 适配
之前ASoul全都是实时直播比较容易出直播事故。乐华的方法是半直播半录制才艺、跳舞、表演这样可以大大降低失误概率。
需要用导播系统进行切换RootMotion Enable/Disable 与 Runtime修改动画蓝图中Montage Slot中动画资产
难点:
- 各种后续bug修复。比如
- 道具bug。
- 开发电脑与直播电脑效果不同。
- PVW与PGM效果不同。
- 乐华不像字节有配备测试用电脑只能卡在直播、排练、QA空隙进行测试。
#### 版本管理 & 协作
先后搭建SVN与Perforce进行版本管理与协作。
弃用SVN的原因是
1. SVN会在本地占用大量空间而直播用的电脑固态硬盘空间都比较小进而产生各种直播问题。
2. SVN的分支系统比较拉胯无法对开发版本、测试版本、直播版本进行分离需要进行手动控制容易触发直播事故。
3. 本地文件改动较多时SVN Checkout速度太慢。
采用邪道方法为公司节约成本使用免费版本的Perforce
1. 采用不同电脑同账号登录。工作区与Commit进行严格命名控制。工作区命名格式地区_职位_名字缩写。Commit标题添加名字缩写。
2. 因为开发人数在18人左右一套直播系统需要9台机器。所以开发组使用一个Perforce服务直播间使用另一个Perforce服务。由QA同学验收后切换P4V服务地址再进行上传。
#### 大型活动优化
【【A-SOUL】贝拉 2024.07.20 星之回响-贝拉生日演唱会【直播录像】】 https://www.bilibili.com/video/BV1TE421w7ae/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
# 一些成果
## 定制UE5渲染管线功能
### 2020年尝试Forward渲染
### BasePass & ToonDataAsset & OutlineDataAsset
### Shadow
### LightingPass
### Reflection
### PostProcess
# 赛车

View File

@@ -0,0 +1,189 @@
---
title: 未命名
date: 2025-03-28 13:11:54
excerpt:
tags:
rating: ⭐
status: inprogress
destination:
share: false
obsidianUIMode: source
---
# 自我介绍 & 主要技术栈
面试官您好我是楼嘉杰一名技术向TA。
首先很荣幸参加贵公司的面试,在仔细研究过岗位要求后,我认为自己能完全胜任本岗位。
## 个人优势
个人优势:
1. 熟悉UE各种常用模块可以按照需求进行Demo搭建。
2. 具备一定的图形学知识可以从更多角度分析需求并且完成。熟练使用Renderdoc、Pix、NSight、UrealInsight工具分析性能瓶颈以进行优化。可以按照需求修改渲染管线。
3. 熟悉Qt与Pyside2可以编写跨平台的工具。以及DCC软件的深度定制。
4. 具备Docker相关知识能够玩转NAS以及部署版本管理、自动化等相关服务。以及部署UE项目测试用专用服务器。
## 技术栈
首先说一下技术栈
**UE方面**
- Gameplay3C、AI、GAS、OnlineSubsystem。解析过ActionRPG、GASDocument、Lyra部分逻辑项目。
- UI熟悉UMG、Slate来编写一些自定义组件。
- 工具CommandLet、EditorUtilityBlueprint、Puerts Editor。
- 动画动画蓝图、大部分动画节点。解析过AdvancedLocomotionV4。
- Puerts熟练使用Puerts编写各种功能。
**图形学与Shader**
 熟悉UE5中的RDG、MeshDraw渲染框架以及渲染流程。能够按照需求来修改渲染管线。
• 编写基础的离线光线追踪渲染器。
 学习过UnityShader以及SRP自定义管线分析过UnityChan2.3的Shader。
 熟练使用RenderDoc、UnrealInsight、Pix、NSight等工具对性能进行分析并且对项目进行优化。
**美术相关**
 熟悉Maya的建模、动画、渲染模块能使用Python编写插件。熟悉PySide2库可以编写更多高级功能。
 熟悉UE5动画、光照相关功能与物理光照系统并撰写相关经验文章。
**项目流程管理**
 搭建Gitea平台实现协同开发。使用GitBook、Obsidian作为项目文档与知识库方便协作。
 搭建Perforce Server以及Proxy Server并设计分支以及协作流程。
 研究与使用FastBuild加快源码引擎的编译大大提高修改渲染管线的效率。
**其他技术栈**
 前端框架Vue、Vue-cli、Nuxtjs、ElementUI、Echart、Electron-vue
 后端技术Node.js、Express
 GUI框架QtQt、QtQuick
 语言C++、JavaScript、Python
# 工作与学习经历
## 国企期间
**2013.7-2022.6**
~~使用Qt编写各种工具与App使用VUE与Nodejs相关生态工具编写数据管理综合平台。实现数据生产、综合查询、用户终端的生产流水线。
在2013年接触到了Maya、UDK对此特别感兴趣并且使用空闲时间进行自学。在2015年UE4免费之后转而对UE4进行系统学习。
在此过程中~~
主要是在空余时间自学UE4
在此之间也做了一些东西,这里我只介绍最有代表性。
- 一些RayMarching材质溶球、2D、3D体积云。
- 一些后处理效果:描边、模糊。
### MultiDraw
主要解决了:
1. 在不修改引擎的情况下给模型添加Outline的功能。Outline是BackFace Outline不容易出现自遮挡问题。同时具备Fov、深度曲线适配是不修改引擎情况下挤出式Outline的最佳方案。
2. 避免使用多个模型进行渲染减少了额外的性能损耗。也因此解决了多骨骼模型渲染Outline而出现的动画不同步的问题。
3. 可以在各个平台运行,包括移动端。
目前有很多许多公司与个人使用。
同时还有其他功能:
1. 模拟Muti Pass功能使用像素偏移进行排序。
2. Cutoff 剖面功能。
3. UE材质背面渲染功能。
## 达瓦2023崩坏三音乐会、2024原神音乐会、AI、乐华技术支持
**2022.6-2024.10**
- InHouse插件维护从UE4迁移到UE5、提升使用体验、编写大纲组件并且内容与Maya场景完全对应。
- 项目技术支持:
- 日常的疑难问题解决
- 优化场景性能
- 工作流优化搭建SVN、Perforce服务并且手把手教会同事推广UE的Muti-Users。
## 2023崩坏3音乐会
- 工作内容:提供场景优化方案与现场技术支持。
- 难点:
1. 帧数要求高。XR拍摄的帧数要求较高4k50帧
2. 现场渲染机CPU主频低。现场使用的渲染机CPU是频率不到4.0的线程撕裂者非常容易出现CPU瓶颈。需要较多的UE渲染管线知识才能找到问题并解决。
3. 工期非常紧张。制作进度较快的场景会给我留1~2天时间一些比较慢只会给我留0.5~1天。
4. 场景频繁出现较大改动,进一步得增加优化负担。
5. 部分商城资产滥用导致性能问题出现。
- 主要进行了哪些优化最终达到目标性能:
- 相关模型优化。转Nanite & InstancedStaticMesh并且将材质中WPO引脚中的ObjectPosition节点改成float3(0,0,0) => TransformPosition(Instance&ParticleSpace)这2个节点。
- DMX优化。按距离减少DMX Beam的RayMarching步长。
- 灯光 & 阴影优化。关闭效果不明显的灯光阴影。使用消耗较少的灯或者贴花代替对应灯光。
- 粒子Cutoff & 透明材质优化。
- Lumen优化。根据场景舞台大小调整Lumen Scene View Distance、Max Trace Distance。在保证效果不会大变的基础上调整Quality与Detail。
## 2024原神音乐会
- 针对原神渲染进行分析
- 原神刚开服是可以截帧的有renderdoc分析Renderdoc文件来指导美术如何制作。
- 蒙德教堂(未播出),项目招标用。
- 因为对接方提供的场景模型缺损严重,之后有研究原神资产与场景模型的提取方式,以及还原场景的方法。
- 具体方法:
1. 使用改模版的AssetStudio来提取资产。
2. 搭建原神私服在游戏中使用Ninja Ripper截取游戏场景并在Blender加载结果。
3. 在UE中进行还原。
- 正机之神Boss模型提取+绑定分析、场景分析。
- ## AIGC项目
- AI实时添加动作、并且渲染视频。
- AI 表情、口型 Sequence。
- AI 实时动画重定向。
- AI虚拟偶像陪伴项目
- 导播台
- AIGC赋能工具以上都是一些基础功能Demo。原本还打算制作更进一步的工具
- 比如根据当前Sequence 通道的动画信息以及用户提供关键字以此在AI 专用轨道中生成动画数据。
- 根据关键词生成模型数据之后将模型数据下载到本地并在关卡编辑器中创建StaticMesh并生成Asset。
- [[4DGaussians]]
## 乐华ASoul
**2024.10-2025.1**
实际上是从2024.4月开始进行技术支持的
因为乐华从字节收购Asoul业务时字节只教了基础使用方式只交付了UE工程、脱敏的美术资产源文件。
最为关键的使用文档、中台插件、版本管理工具都没有提供。
所以需要有一位技术栈宽广的人来Hold住这个项目。在我接收到项目后发现存在若干之前直播版本不存在的bug怀疑是交付时搞错了Perforce分支或是使用较早版本进行交付。
作为唯二的技术人员,我主要负责:
- 解析ASoul导播系统以进行工作流的适配与改造。
- Sequoia编辑器改造以适配流程。
- 分析ASoul的渲染管线与配套材质系统。
- 分析大气环境、道具、换装系统,并进行改造。
- 根据 运营 要求制作一些效果道具。
- 修复导播系统bug。
- 大型节目优化。
- 日常技术支持
- 技术答疑
- 日常问题解决
- 搭建协议服务与工作流
### 渲染管线 & 材质系统
#### 渲染管线
ASoul卡渲方案具备兼容性将Shader文件覆盖到官方引擎中就能正常渲染ASoul的卡渲效果。
主要的逻辑是:
1. 在FGbufferData中添加额外的卡通渲染用变量之后在DeferredShadingCommon.ush的Encode/Decode函数从GBuffer进行Encode/Decode。
2. 在BasePassPixelShader中写入相关信息并且修改ShadingModelID输出(使用CustomNode)
1. ToonSpecularColor
2. ToonShadowColor
3. ToonShadowLocation
4. ToonShadowSmoothness
5. ToonSecondaryShadowColor
6. ToonForceShadow
3. 在ShadingModel.ush 添加对应的ToonShadingModel。
4. 修改DeferredLightingCommon.ush添加了阴影控制功能。
5. 修改DeferredLightPixelShaders.usf设定为LightChannel为2时才会进行卡通渲染。
6. 修改PostProcessCombineLUT.usf实现 NoToneMapping
#### 材质文档编写
天气系统采用纯蓝图 + DataTableCurve、Parameter+ 材质制作。
### 动捕 & 动画系统
#### 面捕
使用Unity + Arkit实现一个面捕App主要为了实现
1. 突破52个BlendShape限制。
2. 提高单个BlendShape的表现能力。举个例子吐舌演员表情被识别后使用多个BlendShape插值拼合最终得到一个不错的效果。
3. 限制一些NG表情。
可以看到这个节点可以添加一个DataAsset里面的数据都是由中台的dcc工具根据maya工程中角色的BlendShape生成csv再导入UE生成。
### 除了解析之外我还做了哪些工作
- 摸索出
- 日常解决地编、动捕、建模、导播同学的问题。
- 一些效果、道具制作。
#### 版本管理 & 协作
先后搭建SVN与Perforce进行版本管理与协作。
弃用SVN的原因是
1. SVN会在本地占用大量空间而直播用的电脑固态硬盘空间都比较小进而产生各种直播问题。
2. SVN的分支系统比较拉胯无法对开发版本、测试版本、直播版本进行分离需要进行手动控制容易触发直播事故。
3. 本地文件改动较多时SVN Checkout速度太慢。
采用邪道方法为公司节约成本使用免费版本的Perforce
1. 采用不同电脑同账号登录。工作区与Commit进行严格命名控制。工作区命名格式地区_职位_名字缩写。Commit标题添加名字缩写。
2. 因为开发人数在18人左右一套直播系统需要9台机器。所以开发组使用一个Perforce服务直播间使用另一个Perforce服务。由QA同学验收后切换P4V服务地址再进行上传。
异地采用Perforce Proxy Serverer。
#### 大型活动优化
【【A-SOUL】贝拉 2024.07.20 星之回响-贝拉生日演唱会【直播录像】】 https://www.bilibili.com/video/BV1TE421w7ae/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e

View File

@@ -0,0 +1,186 @@
```markmap {scale=1.1}
## 对于项目管理的了解
### PSD通用格式
灼华互娱
主要使用ABC缓存结算头发与布料但ABC缓存很可能因为过大而导致导入崩溃。所以灼华互娱对DCC的ABC导出插件进行魔改从而减少ABC缓存大小。但个人认为最佳的解决方案还是重新实现导出缓存格式不过这需要实现DCC导出插件与Unreal4导入插件引擎没有必要使用高精度数据工作相对来说会大一些。
Niagara与Houdini结合
灼华互娱采用的方案是: 使用Niagara制作普通粒子特效。 对于需要解算巨量粒子则使用Houdini生成粒子缓存导入Ue4中。在Ue4中生成模型Instance作为粒子。
#### 个人想法
- 多版本美术资产浏览与比对功能。
### 聊聊自搭建服务器以及Gitlab、Gitea
- 小巧耗资源少但功能有限。貌似邮件系统还有bug。
#### GitLFS与UE4
- 二进制文件臃肿与git清理功能
#### GitHook与WebHook
- GitHook执行Git操作所会调用的钩子。
- WebHook是GitHook的一种通过WebSocket通知其他软件与平台的钩子。
### 自动化集成系统
- 多操作系统开发需要
- 构建与发布产品(不同环境)
- 构建DLL并且上传到哨兵程序中
- 构建自定义引擎
- 运行自动测试程序(UE4内置Session Frontend或者通过自动化集成系统直接与UE4自动测试框架进行交互)
- 检测代码与分支的有效性
- 为每个设置构建对应的版本
#### 好处
- 减少不必要的加班时间
- 可以及时发现bug即使不写自动测试代码
#### 相关的CL工具
##### 因为是个人开发所以,仅仅是大致了解一下。
- TeamCity
- Jenkins
- Bamboo
#### 为单位写个一个简单的全流程数据生产平台,功能为数据录入、展示、查询、以及打包成单机版程序
## 渲染知识
- 我个人认为渲染的本质是:通过对场景与光源的采样,计算传递到摄像机与实际情况接近的光辐射量。
### 光谱
- 光通常指的是人类眼睛可以见的电磁波可见光视知觉就是对于可见光的知觉。可见光只是电磁波谱上的某一段频谱一般是定义为波长介于400至750奈nm之间的电磁波。实际生活中我们看到的光由很多不同强度和波长的光混合而成。
- PBRT中会使用光谱值进行采样与计算最后再将光谱值转化为RGB值输出。
### 采样
根据场景不同,存在不同的采样方式。
#### 采样器基本原理
事先生成若干组采样点样本,之后进行乱序操作。在进行逐像素采样时,使用伪随机的方式选取随机序号的采样点组。
#### 采样分布
##### 分层采样
对采样区域进行分割,各个子区域单独生成样本。
##### 低差异序列
- Van der Corput根据底数将指定长度的正整数序列转换为指定进制的数序列之后以小数符号为分界线将每个数左边翻转到右边去。
- HAMMERSLEY 哈默斯利:使用底数为 样本序号/样本总数 的Van der Corput序列。
- Halton 霍尔顿使用底数为质数序列的Van der Corput序列。
#### 贴图采样
- 双线性插值
- ISOTROPIC TRIANGLE FILTER 各项同性三角形过滤 然无法生成高质量的结果,但速度比较快。该滤波器因为各项同性的关系不支持非正方形或非轴对称的范围。该滤波器的主要缺点是:在斜角度观察纹理时图像容易变模糊。因为不同的角度会导致采样率不一致。
- ELLIPTICALLY WEIGHTED AVERAGE 椭圆权重均值
#### 抗锯齿
- SSAA
- MSAA
- FXAA
- TAA使用了低差异序列作为采样点
#### 采样偏差以及信号重建没看
### 材质
- 材质分为金属(导体)、非金属(绝缘体)、半导体。
#### 反射模型概念BRDF、BTDF、BSDF、BSSSDF
#### 菲尼尔
- 近似函数Schlick施利克
- 菲涅尔方程描述了光线接触到表面后反射与透射的比它实际上Maxwell方程在光滑表面上的求解。 因为在现实环境中光的偏振现象较少所以在PBRT假设光不偏振。
- 一般情况下,计算计算机图形学中的常见操作都会忽略色散现象,以此极大地简化光线传输计算(色散:折射率随着光的波长而变化)。
#### 微表面模型
与普通的着色模型的区别在于,普通的着色模型假设着色的区域是一个平滑的表面,表面的方向可以用一个单一的法线向量来定义来定义。
通过统计学方式来模拟这种微观结构分布。假设物体表面由大量微观几何表面组成,且每个表面都是绝对光滑的。必须保证每个微表面都能反射。因此只能用一个概率分布函数来计算任意方向的微小表面在着色区域中存在的概率。
#### 漫反射模型
- LAMBERTIAN漫反射辐射度/π)
- ORENNAYAR奥伦-纳亚尔)漫反射模型(基于微表面模型)
#### 半向量(位于入射法线与观察法线中间的向量)
#### 微表面分布函数(法线分布函数)
- 法线分布函数由粗糙度决定,主要影响高光
- BeckmannSpizzichino贝克曼-斯皮兹奇诺)
- Phong
- GGX
#### 几何衰减因子Shadowing和Masking
- TrowbridgeReitz特罗布里奇 瑞兹)
#### 金属微表面模型BRDF
- TORRANCESPARROW托伦斯-斯派若)
- Cook-Torrance托伦斯
- $$f(\omega_{o},\omega_{i})=\frac{D(\omega_{h})F(\omega_{o})G(\omega_{o},\omega_{i})}{4 cos\theta_o cos\theta_i}$$
#### 迪士尼PBR模型
##### 漫反射
- 用两个Fresnel项来增加入射角度低时反射的光线能量强度来模拟这种效果
float DisneyDiffuse(Vector3 In, Vector3 Out)
{
float oneMinusCosL = 1.0f - AbsCosTheta(In);
float oneMinusCosLSqr = oneMinusCosL * oneMinusCosL;
float oneMinusCosV = 1.0f - AbsCosTheta(Out);
float oneMinusCosVSqr = oneMinusCosV * oneMinusCosV;
// Roughness是粗糙度IDotH的意思会在下一篇讲Microfacet模型时提到
float IDotH = Dot(In, Normalize(In + Out));
float F_D90 = 0.5f + 2.0f * IDotH * IDotH * Roughness;
return INV_PI * (1.0f + (F_D90 - 1.0f) * oneMinusCosLSqr * oneMinusCosLSqr * oneMinusCosL) *
(1.0f + (F_D90 - 1.0f) * oneMinusCosVSqr * oneMinusCosVSqr * oneMinusCosV);
}
#### FourierBSDF
#### 曲线拟合BSDF-使用真实测量值进行曲线拟合FF15
### 光线追踪框架
#### 求交加速框架BVH、KD树、SBVH
- BVH在一个轴上对两个图元进行分割。分割过程中通过公式计算最佳分割点最佳的表面积与体积步骤1、计算每个图元的边界信息并且存储在数组中2、使用指定的方法构建树3、优化树使得树更加紧凑
- KD树经过空间分割的图元数。
- SBVHNvidia改进过的BVH结构先对图元进行空间分割最后使用BVH方式分割。 https://www.nvidia.com/object/nvidia_research_pub_012.html
#### 蒙特卡洛方法与重要性采样(忘记了)
- 逆推法、舍选法
#### 路径追踪
##### 双向路径追踪
## UE4灯光相关
### 物理灯光:使用现实世界的测量值作为标准进行灯光设置
- 之前版本中Unreal4的灯光使用的是虚幻单位这是的之前版本的灯光没有一个物理值的衡量标准。你很可能会因为后处理空间、曝光等因素影响而无法设置出正确的亮度值。例如你已经将一个区域的效果调整的很自然但是别的区域就会很奇怪bloom、阴影、光照等效果互相不匹配。 而前人已经积累了大量的摄影知识与经验,所以我们没有必要光靠感觉来设置灯光亮度与曝光度,而需要使用摄影标准来设置灯光,从而使得场景更加真实。
- 大晴天 15~16
- 多云 13
- 晚上月光 -6~-2
### UE4的曝光问题
- 因为UE4的渲染框架都是以EV100 为0设计的所以需要将经验上使用的灯光强度从当前曝光值下转换到EV100 0不然会出现若干bug比如默认的天空盒。
### 流程
#### 场景初始化
- 禁用自动曝光
- 禁用SSAO以及SSR
- 保持默认Tone Mapping
- 确认天光与方向光为默认数值。天光亮度为1 方向光亮度为3.141593(π)
- 设置测试用球(与色卡) 使用亮度为3.141593(Pi)的方向光此时灰球的亮度为0.5。使用Color Picker、或者截图使用Photoshop查看
- 确定你的材质是物理正确的。BaseColor太暗或者太亮 Metallic应该为0或者1。黑色或者白色Mask Specular应该为0~1范围的浮点数。不应该为颜色值。
#### 后续流程
- 设置曝光相关属性。
- 将所有灯光都是设置为Stationary类型。并开始设置方向光与其他主光源的基础属性方向、亮度等以及天光与反弹次数
- 设置LightMass属性使用预览级对场景进行测试渲染。
- 开启LightingOnly模式对光照进行检查。
- 给场景中的带有反射属性的物体添加反射球并调整属性。(命令行全局的反射质量、与抗锯齿质量
- 调整场景雾气
- 后处理调色
#### 静态方案
- lightMasslightMap
- VolumeLightMap二阶球谐与旧版区别在于可以使用流加载以及手机使用
#### 动态方案
- 级联阴影
- 胶囊阴影
- 接触阴影(后处理)
- 距离场GI废弃
- 距离场阴影与AO
- 4.25屏幕空间GI
```

View File

@@ -0,0 +1,173 @@
## RDG
### FrameGraph
首先需要了解Frame Graphe的设计思想为了速成看了知乎大佬 奔驰 的文章。但也因为速成必然会在一些地方有所误解还请见谅。这里说一下我的理解Frame Graphe思想可以理解为一帧中执行逻辑的图没有限定是渲染还是Gameplay逻辑但不管怎么说其重点在于图。
大致操作为将逻辑以最小功能为标准封装成单独的PassPass与Pass之间是变量或者可以理解为资源的传递的关系因此就可以把整个逻辑关系转换成一个Graphe。
UE4的RDG全名为Render Dependency Graph感觉是为了能更好的管理资源的加载回收尤其是RT拯救一下显卡上珍贵的显存以及IO带宽。同时方便程序员理解代码不会写出毛线团一样的代码。至于生成的图没有看过在哪估计在4.25加在Insight调试系统里吧。
### 大致流程
通过FRDGBuilder对象构建RDG渲染流程。之后塞入定义的RDG Uniform以及Shader后运行这个流程。RT会使用外部的IPooledRenderTarget接口取得比如各种GBuffer当然也可以自己创建之后绑定到RDG Uniform中的RenderTargets[0]数组中。最后根据是ComputShader还是PixelShader选择分发或是绘制即可。但源码里也没有RDG的PixelShader的代码95%都是ComputeShader的经过试验RDG的PixelShader的使用方法还是和旧版的GloalShader比较像的。
既然说到这个,之前我也是看了虚幻开放日的技术分享,知道了两者的区别。
### ComputeShader与PixelShader对比
ComputeShader对于PixelShader的优势
1. PixelShader只能处理当前ShaderComputeShader是任意位置可写。可以用于编写屏幕空间反射等需要将效果写入任意位置的效果。
2. 可以更好地利用显卡的并线单元。
3. 共享内存:举个例子模糊、等需要多次采样各个像素的算法,使用共享内存就可以减少采样次数与消耗。
PixelShader对于ComputeShader的优势
1. PixelShader可以预加载贴图并且缓存UV使得读取贴图的效率会非常高。而ComputeShader需要计算出UV所以做不到这点。
2. PixelShader支持FrameBuffer压缩减少带宽压力。
3. PixelShader支持更多的贴图格式。
ComputeShader还存在无法读取UAV比如把RT转化成SRV后才能读取问了EPIC的luoshuang说是历史遗留问题UE5会解决。
## 制作玉石效果
使用寒霜的FastSSS方案这里我下载了演讲的PPT。厚度贴图可以使用Substance Painter烘焙。算法是反转法线后使用AO算法在像素对应的三维坐标球形区域内生成若干采样点计算模型内部的点与总点数的比。之后就是直接套寒霜公式了。
## 光线追踪
《Ray Tracing in One Weekend》只是尝个鲜学习《Ray Tracing from the Ground Up》后拥有了一个基础的Ray Tracing框架。然后就是PBRT了相当不错的教科书。因为单线程渲染效率太低所以使用了直接使用Inter的TBB库但最后发现写的渲染器
会出现样本混乱的情况的。同时因为没有写并行库的基础所以之后的后面几章就没有去写代码了。如果有时间会去看《c++并发编程实战》的英文版来学习并行编程。
### PBRT
1. pbrt采用了FLOAT宏来调整浮点类型不过我记得VS的设置就可以直接调整。并且手动实现了EFLoat类来消除浮点数在四则运算后积累的误差。
2. pbrt采用c++11的线程编写没使用任何并行库。
3. 实现了一个场景描述文件格式可以将dcc软件制作的场景导入渲染。
### 一束光线
我们从眼睛中看到的图形可以理解为视觉细胞接收到场景中辐射与反射的光辐射信息的结果光线追踪就是计算机通过模拟这一过程所发明出的算法。根据光的波长不同将其排列成为光谱。但受限于人眼感光细胞人眼无法看到所有颜色对于可见光人们建立了不同色域范围的色彩标准。常用的是rgb、sRGB等。
#### 光源
PBRT为了将光谱值转换为RGB值实现了SampledSpectrum采样频谱与RGBSpectrumRPG频谱这里我没看懂好像是通过对3条曲线采样求积分得到3轴的比值。
#### 采样
除非直视光源不然人眼接收到的光全都是经过N次反射的因为我们可以把人眼接收到的图像理解成一个N阶多项式方程。同时这也相当于将一个自然现象模拟问题转化为一个数学问题可以用其他的数学工具来解决问题。但该方程无法直接求解所以会使用蒙特卡洛方法求近似值。
#### 蒙特卡洛方法
是一种以概率统计理论为基础的数值计算方法。它的核心思想就是使用随机数(或更常见的伪随机数)来解决一些复杂的计算问题。通过对大量抽样样本进行统计,计算出其分布规律。
概率密度函数 pdf 一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。
累积分布函数 cdf 是概率密度函数的积分能完整描述一个实随机变量X的概率分布。
有关抽样:
#### 逆转法
#### 舍选法
某些函数可能无法通过对其进行积分从而获得pdf或者无法通过计算获得逆cdf。舍选法是一种无需进行以上任意一个步骤就能根据函数分布生成样本的技术。本质上它是一种投飞镖法假设我们想从某个函数f(x)中抽取样本但是我们有一个pdf p(x)满足f(x)< c p(x),假设我们知道如何从p中获取样本
这个过程反复选取一对随机变量(X,ξ)如果点(X,ξc p(X))是在f(X)下面,那么接受样本X否则它将被拒绝并再次选取一个新的样本对这个方法的效率取决于f(x)与cp(x)的接近程度越相似收敛地越快而且适用于任意维度的函数
#### 重要性采样
选择一个与目标概率密度函数具有相同形状的分布函数进行抽样来减少方差形状越接近收敛越快Raytracing in weekend中对方形面光源运行了重要性采样
#### 分层采样
对采样区域进行分割各个子区域单独生成样本
#### 低差异序列
低差异序列可以非常高效的生成分布非常均匀的高质量样本集合相比伪随机数极大的提高蒙特卡洛积分收敛的效率并且它们的实现都不复杂
- Van der Corput根据底数将指定长度的正整数序列转换为指定进制的数序列之后以小数符号为分界线将每个数左边翻转到右边去
- HAMMERSLEY 哈默斯利使用底数为 样本序号/样本总数 的Van der Corput序列
- Halton 霍尔顿使用底数为质数序列的Van der Corput序列
UE4中的TAA好像就是用的低差异序列生成的样本
#### 使用均值样本会产生 混叠现象,也就是摩尔纹
在信号处理以及相关领域中走样混叠在对不同的信号进行采样时导致得出的信号相同的现象它也可以指信号从采样点重新信号导致的跟原始信号不匹配的瑕疵它分为时间走样比如数字音乐以及在电影中看到车轮倒转等和空间走样两种摩尔纹)。这里我们不详细展开
#### 采样器基本原理
事先生成若干组采样点样本之后进行乱序操作在进行逐像素采样时使用伪随机的方式选取随机序号的采样点组
#### 抗锯齿
因为场景的定义在三维空间中是连续的而最终显示的像素则是一个离散的二维数组所以判断一个点到底没有被某个像素覆盖的时候单纯是一个或者没有"问题丢失了连续性的信息导致锯齿
SSAA超采样抗锯齿高分辨渲染之后取平均值结果
MSAA在光栅化阶段判断一个三角形是否被像素覆盖的时候会计算多个覆盖样本Coverage sample最后根据权重样本占比所在的片元进行着色不兼容延迟渲染管线
FXAA边缘检测抗锯齿是一种后处理抗锯齿技术
TAA时间抗锯齿将采样放到时间轴上的抗锯齿技术对一个像素使用抖动效果之后再将所有的采样混合起来他需要解决判断每帧中这个像素的移动位置但在一些运动较大或者帧数较低的情况会出现 重影的问题
#### 贴图采样
- 双线性插值
- ISOTROPIC TRIANGLE FILTER 各项同性三角形过滤 然无法生成高质量的结果但速度比较快该滤波器因为各项同性的关系不支持非正方形或非轴对称的范围该滤波器的主要缺点是在斜角度观察纹理时图像容易变模糊因为不同的角度会导致采样率不一致
- ELLIPTICALLY WEIGHTED AVERAGE 椭圆权重均值
#### 偏差分析与重采样
没学过相关知识无法继续
#### 加速结构
如果光线每次与物体交互都需要遍历所有三角形那效率将会非常低为了提高求交速度我们可以在渲染前实现构建加速结构常用的有BVHKD
BVH
1. 计算每个图元的边界信息并且存储在数组中图元号包围盒以及中心点
2. 使用指定的方法构建树中间对半切的方法SAH首先计算图元位置将其分配到12个桶中并且计算每个桶最大边界盒再遍历每个桶边界盒的Min与Max坐标计算最佳切分点通过 切分后两个边界盒的表面积/当前包围盒的表面积来计算求交效率子图元中质心距离最大的轴向作为分割方向
KD树对3个轴的所有的切分方案进行尝试最终计算出最优的空间分割方案
KD树的分割每个轴遍历所有分割方案与BVHSAH分割每个轴12次分割更加精确BVH保证每个图元只有一次引用内存占用较少构建较为简单而KD树并不保证所以内存占用较多因此KD树的求交效率要比BVH好也导致了渲染时需要花费比BVH更多的时间在构建KD树上 同时KD树在求交时会计算与光线与分割面的相交位置是否在[min,max]中来判断是否需要与茎节点中的两个节点一一求交以此来减少求交计算量而BVH通过深度优先遍历树进行求交的 总结BVH是基于物体分割的KD数是基于空间分割的
早几年NVIDIA研发出将两者结合的方案SBVH这种算法可以节约因为图元分布大小不均匀而造成的BVH树求交效率低下
1. 找到一个对象分割候选者使用SAH算法构建一个BVH
2. 找到一个空间分割候选者类似构建KD树算法
3. 选择获胜者基于SAH选择消耗最小的作为最后结果如果不满足叶子节点生成条件则继续分割
我记得是前几次进行空间分割后续使用对象分割
### 材质模型
接下来就是处理光线与物体交互的结果了PBRT把材质分开金属非金属与半导体其中半导体较为复杂Pbrt里没有介绍
根据材质性质不同可以分为一下表面分布函数
BRDF双向反射分布函数在单位微表面上反射辐亮度与入射辐射照度的比值
BTDF双向透射分布函数在单位微表面上折射辐亮度与入射辐射照度的比值
与两者结合的BSDF对于半透明材质则使用BSSSDF双向表面散射分布函数
#### 微表面模型
本来对于一个不确定表面可能需要使用采样要求积分因为物体的微观表面参差不齐无法通过分析的方法精准模拟但微表面模型假定物体由大量微小的绝对光滑表面组成之后就可以根据统计学计算出模拟出看上去正确的结果
现在用得较多的Burley模型迪士尼模型也是UE4使用的就是基于这个微表面模型
#### BRDF公式
对于各项同性的BRDF公式就是 漫反射 +菲尼尔函数 * 法线分布项 D * 几何项G/(4 cos入射角 * cos出射角)
Cook-Torrance
##### 菲尼尔
- 一般都会使用近似近似函数Schlick施利克
- 菲涅尔方程描述了光线接触到表面后反射与透射的比它实际上Maxwell方程在光滑表面上的求解 因为在现实环境中光的偏振现象较少所以在PBRT假设光不偏振
- 一般情况下计算计算机图形学中的常见操作都会忽略色散现象以此极大地简化光线传输计算色散折射率随着光的波长而变化)。
##### 微表面法线分布函数 (法线分布项 D)
- 法线分布函数由粗糙度决定主要影响高光
- BeckmannSpizzichino贝克曼-斯皮兹奇诺
- Phong
- TrowbridgeReitz特罗布里奇 瑞兹ggx
- 迪士尼改进了 TrowbridgeReitz 将其命名为GTR
##### 几何衰减因子Shadowing和Masking几何项G
- Smith阴影函数
- 迪士尼对Smith 改造smith-ggx
##### 漫反射
- pbrt中使用 ORENNAYAR奥伦-纳亚尔漫反射模型基于微表面模型
Raytracing in weekend会使用LAMBERTIAN漫反射 辐射度/π 作为漫反射项即不论任何角度都会反射出一样的辐射度
Lambert漫反射模型在边缘上通常太暗Disney开发了一种用于漫反射的新的经验模型以在光滑表面的漫反射菲涅尔阴影和粗糙表面之间进行平滑过渡思路是使用了2个Schlick Fresnel近似相乘作为调节因子
##### 测量BRDF
pbrt中还介绍了一种通过测量来拟合brdf的方法ff15中用到这种方法
##### BTDF
没看过应该乘以 菲尼尔来计算的
##### BSSDF
没看过UE4好像通过生成均值采样点之后再通过距离进行近似计算的
##### 迪士尼模型
根据透明度参数对透明渲染结果与绝缘体渲染结果混合之后再根据金属度与金属渲染结果混合
### 路径追踪
从摄像机发射采样光线最后把这条光线若干次反射过程中结果累加起来
### 优化
#### 光子映射
通过让光源发射光子来生成光子贴图这样就能让收敛速度变快
#### 双向路径追踪追踪
同时从光源与摄像机发射采样光线一起构建光路之后将各个反射点直接连接起来这样就能快速构建多条光路了大大加快收敛速度当然这些光路需要进行可见性测试

132
07-Other/简历/成果.md Normal file
View File

@@ -0,0 +1,132 @@
# New
## Gameplay
## MultiDraw
实现了PC与移动端平台的Backface描边与类多Pass效果。
其中描边支持宽度对FOV、深度的自适应。
## AIGC
### AnimationRetargeting
公司开发的AI生成动画的平台通过用户输入的文字描述来给指定的角色模型生成动画。我在该项目中实现了高效的动画重定向。
我实现了3种方案
1. 使用Blender插件通过cmd调用的方式进行重定向。 缺点:转换速度比较慢,会影响用户使用体验。
2. 在服务端部署UE并将其服务化以此提供动画重定向服务。缺点部署UE服务Editor需要服务器带有GPU因为服务器的费用会比较高。
3. 移植UE5骨骼链重定向逻辑到qt中实现跨平台的重定向程序。优点效率高、准确性高。200ms左右主要消耗在读取与生成FBX文件上。
QRetargetService实现了以下功能
1. 实现UE5骨骼链重定向算法。
2. 对fbx、bvh动画进行重定向并且输出fbx文件。
3. 支持字符流输入动画数据,并进行重定向。
4. 支持NPY动画数据输入。
5. 支持FBXStream读取/写入数据。
6. 重定向Pose对齐。
### UE Docker部署
跑通了UE Docker部署流程。
### AIMotionRender
模仿2022年初的某个AI视频APP。AI端负责识别用户上传的视频中的动作数据与其他相关信息调用AIMotionRender来生成短片。除了角色其他的场景、镜头都是预制。
AIMotionRender
1. 将接受到的动画数据重定向并且应用到AI端指定的角色中。
2. 将该角色放入到指定的场景中并且进行渲染压片并且返回给APP后端。
### AIFacialRender
AI端识别用户输入的台词生成对应的表情、口型、音频文件调用AIFacialRender来生成短片。
### AIMotionAssetTaker
通过调用AIGC API获取动画数据之后再在本地进行重定向后生成UE动画资产以此提高动画制作的效率。
### AIVirtualIdol
导播台使用了Electron控制逻辑写在Puerts与LogicDriver状态机种。通过导播台主动连接来发送控制命令。
### 4DGaussian
根据3DGaussian原理使用Niagara + 扩展节点在UE5中实现的4DGaussian效果。之后因为项目被砍后续没有拿到质量合格的4DGaussian数据至使开发停止。
TODO
1. 3DGaussian LOD。虚拟贴图
2. 通过乒乓缓存以此减少显存占用。
# OLD
```markmap {scale=1.1}
## 美术流程
### Ue4中的场景物体融合方式与优化
1. World aligned texturing 世界坐标映射贴图
2. Pixel depth offset 像素深度偏移
3. Distance field mesh blending 距离场模型融合
4. Runtime virtual texturing 实时虚拟贴图
### Layered Material
1. 尝试外包一个角色并让外包以Material Mask的方式使用Substance Painter完成贴图。最后走完EPIC的Layered Material流程。
### UE4头发方案研究
1. 学习Ornatrix for Maya插件并且尝试制作头发。
2. 学习Ornatrix制作面片头发方案并且制作出成品。
3. 走通UE4 Niagara Hair流程。
### UE4物理灯光流程
1. 如何使用物理灯光系统
2. 流程包括:初始化场景(关闭若干后处理效果,并且固定曝光)=》场景检查(贴图饱和度与亮度)=》按照当前环境对应的现实状况设置曝光度与天光HDRI因为每个HDRI的亮度范围不一样还可以在环境球材质中调整=》主要自然光源完成后烘焙二阶球谐GI=》按照场景发光物体进行布光=》烘焙阴影并检查是否有错误阴影=》逐个开启后处理效果并检查(反射=》AO=》
3. 了解UE4静态光照与动态光照所有相关的功能与用法。
### 动画蓝图
1. 学习物理模拟动画节点
2. 学习AdvancedLocomotionV3/V4 项目,以此对UE4动画系统有了一定了解。FootIk、8方向运动、状态切换逻辑
3. 为了复现AdvancedLocomotionV4项目中动画的动画曲线这些曲线会控制状态机以及其他融合动画效果使用AnimModifier编写生成逻辑最终复现了Run、Walk等移动动画的曲线。
4. 学习动画蓝图的动态加载功能,解决当动画蓝图逻辑较多时的性能问题。对于每个武器拥有不同攻击动画与逻辑的情况,有很大的作用。
### UE4FaceARSample Iphone面部方案学习
## 程序
### GameplayAbilitySystem GAS
1. 学习GAS系统了解Ability、Effect、AttributeSet、Tasks等类。
1. 完全学习ActionRPG项目并且将物品系统封装成组件放在插件中以备后续使用。
2. 解决只使用一个Ability类实现一套连招技能。
3. 学习GameplayAbilitySystem中配套的Debug方法
### 编写Slate控件
1. 实现整数版本的SpinBox
2. 实现类似血源诅咒那种带有虚血的进度条
3. 实现通过函数调用C++、蓝图通用的MessageBox顺便了解了UMG、Slate、GameViewportClient之间的大致关系
### DCC插件
1. 调用Maya的HumanIK插件实现骨骼批量重定向功能将Max的Bip骨骼转换成Ue4骨骼。后续可以再加入其它定制功能。
2. 实现在选中父骨骼后批量生指向若干选中顶点的之骨骼并且生成蒙皮权重。大致作用是将低模角色的BlenderShape权重传递到高精度角色上。
### 项目管理
1. 和他人合作Demo时在租用的VPS上搭建Gitea以实现版本管理包括二进制文件
2. 学习UE4的自动测试框架。
## 图形学效果
### 渲染框架
1. 通过学习EPIC的PPT以及源代码最后撰写全网第一份RenderDependencyGraph(RDG)的使用教程以及HelloWorld案例。案例已更新至4.26版本)
2. 通过学习源代码,了解4.25版本传统渲染框架GlobalShader的变动并撰写文章。
### Shader
1. UE4后处理材质各种卷积描边、各种模糊等。
2. 在Ue4中实现对二次元模型进行透视校正让模型更加二次元顺便学习了BasePass中的顶点数据处理过程。
3. 使用Gerstner波制作海洋效果水体透射使用水面深度-水底深度来得到深度值之后对使用2种颜色差值进行得到最后颜色白沫使用基于Saturate高度的方法。后面如果再做打算使用houdini通过粒子模拟的方式来生成白沫贴图。
4. 学习EPIC TA的RayMarching 溶球效果使用了SDF
5. 学习EPIC TA的RayMarching 2D 3D云效果。
6. 修改ShaderModel以实现卡通渲染材质。
### 自定义图元类
1. 在不修改管线的情况下,以插件的方式实现物体外描边效果
2. 在不修改管线的情况下以插件的方式实现UE4剖面效果
### 离线渲染学习
1. 学习完《An Introduction to Ray Tracing》 系列3本书并且渲染出对应效果的图片。
2. 学习《Ray Tracing from the Ground Up》并且使用Qt重新实现一遍离线渲染器单核渲染
3. 学习《pbrt》至第10章后续因为没有多线程库编写能力只能大致看了看。
## 其他效果
### 面试J3时的面试题
1. 看gif图实现枪支表面的能量效果使用一张Noise贴图分别使用平移与旋转2种移动UV方式叠加到一起。2种移动方式的贴图各自乘以了不同的颜色。
2. 在不是用UE4 SSS ShaderModel情况下使用寒霜的FastSSS方案实现了玉石枪支的效果。因为家里电脑性能以及面试周期问题没有通过添加ShaderModel的方式来修改所以能量不够守恒。
3. 使用Python为Maya编写一个生成圆柱体的插件点、面、法线都是手动计算的可以任意设置大小、横纵以及圆弧段数UV采用Maya内置的映射命令。 使用Qt编写了插件界面。
4. 实现了一个在屏幕空间宽度恒定的“赛博朋克”风格网格材质,通过使用了透视矩阵 对宽度进行校正来实现。
5. 在不改变模型拓扑结构或者动态改变模型结构的情况下设计一种基于Vertex Program的算法动态改变毒圈模型的顶点位置。使得玩家走近毒圈边缘时看到尽可能平滑的弧线。——最后因为时间不够只实现了核心逻辑使用一个没有封口的圆柱体输入2个角度让圆柱体像扇子那样按照角度进行折叠也就是将顶点挤压到一起。最后只差通过摄像机方向、位置、fov、圆心位置计算2个角度以及威风口处的旋转位置将威风口藏在摄像机背后
## 代码
1. GAS
2. 网络联机
3.
```

52
07-Other/简历/技能.md Normal file
View File

@@ -0,0 +1,52 @@
## UE4
使用Custom节点实现后处理效果 (https://www.cnblogs.com/blueroses/p/6361517.html、
https://www.cnblogs.com/blueroses/p/6511751.html)
学习Ryan Brucks的溶球视频教程https://www.cnblogs.com/blueroses/p/6391995.html
学习Ue4的GlobalShader与Computer写法https://zhuanlan.zhihu.com/p/66514192、
https://zhuanlan.zhihu.com/p/66841824
在不修改源代码的情况下实现多Pass效果https://zhuanlan.zhihu.com/p/69139579、
https://zhuanlan.zhihu.com/p/69156465
学习GameplayAbility系统、ActionRPG项目https://zhuanlan.zhihu.com/p/76395757、
https://zhuanlan.zhihu.com/p/75987858等
学习UE4的灯光流程https://zhuanlan.zhihu.com/p/89270442、https://zhuanlan.zhihu.com/p/92456949等
探索UE4头发制作方法https://zhuanlan.zhihu.com/p/98751524、https://zhuanlan.zhihu.com/p/99345059
Ue4动画系统学习https://zhuanlan.zhihu.com/
### Slate
扩展Slate的进度条以实现血源诅咒中的虚血效果。
### 渲染
Shader
灯光流程
渲染框架
### 动画系统
### 编程
GAS
## 其他语言与框架
Qt、Python、JavaScript、VUE全家桶、Node.js。
## DCC
1. 对Maya比较熟悉编写过2个Maya插件分为调用HumanIK对动作文件进行批量重定向、批量生成指向选中顶点的骨骼并赋予蒙皮用于表情
2. 目前正在学习Houdini。
## 能力佐证
- 知乎https://www.zhihu.com/people/blueroseslol/
- Github: https://github.com/blueroseslol
- Bloghttp://blueroses.top
- Blog(已废弃):https://www.cnblogs.com/blueroses
## 工作经历
国家锁具产品质量监督检验中心 2013年07月~至今
- 使用Node.js为公司编写内网数据管理系统具有数据汇总、展示、打包单机版等功能。
- 使用Electron为公司编写数据查询软件。
- 使用Qt为公司编写其他工具产品。

280
07-Other/简历/方向.md Normal file
View File

@@ -0,0 +1,280 @@
# Client动捕虚拟偶像直播
- 项目需求
- 捏人系统、道具、方便的加载资产以及相关商城参考Vroid以及booth.pm。
- 【VRoid Studio新功能测试中Booth买VRCHAT衣服终于可以用在VRoid里】 https://www.bilibili.com/video/BV1Mw411G78r/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- 可以实时加载模型、贴图、视频等并且显示。
- 最好有个一键载入Fab或者Unity商城资产的功能。
- 可以适应多种风格方便迭代的卡通渲染功能。
- 场景控制(道具、灯光、环境、后处理)
- Electric + UE5(Puerts) 快速构建导播台功能。
- 动捕&面部系统接入。
- 【VRoid人狂喜速通VRM Live Viewer个人使用经验分享【附渲染滤镜配布】】 https://www.bilibili.com/video/BV1FZxCe5Ewu/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- 快速/高效迭代管线
- 初期迭代:
- 程序&TA提取其他游戏与软件的资产作为构建捏脸系统的资源并且构建捏脸系统到美术可使用的级别。提取资产来源各个资源风格都会不同建议分别独立使用。
- 基础捏脸&调整身体,可以通过简单交互创建头发。预制几个衣服模版+绘制贴图或者提供上传衣服资产功能。
- 使用笔刷工具调整身体或者脸部细节。
- 卡通风格:
- Vroid Studio
- 蓝色协议
- Honey Select2
- ~~3D定制女仆2~~
- FF14?
- 写实风格:
- DAZ3D
- MetaHumanCreator
- https://www.studocu.com/in/document/matoshri-college-of-engineering-and-research-centre/mathematics/meta-human-creator-the-starting-point-of-the-metaverse/78324723
- 自动绑定?
- 美术美术同学使用该系统给客户定制时发现缺少某个形变方向的BS时提单。之后进行制作补充。
- AI
- 使用大致的体型简笔画图片可交互的三视图可以调整三视图的体型同时会与BS的参数同步或者照片计算出大致符合体型区间的BS组合几个风格分别计算
- 使用大致的脸部简笔画图片或者正面照片计算出大致符合的脸部BS组合。
- 自动绑定?
- 中期迭代:
- 程序&TA主要完善各种捏脸细节制作物理、场景效果、构建面向用户的客户端。准备跑通整个流程。
- 实现骨骼 <=> BS互相转换工具以及混合方案。
- 将ML Cloth&Muscle
- 美术:除了制作脸部&身体,开始制作头发、衣服以及其他道具与身体细节。
- AI
- 使用大量的真人&各种卡通角色的身体截图&脸部截图来验证捏脸系统的缺少的方向给美术提供迭代方向。可以配合AI生成图片技术
- 项目对象
- **个人主播**
- **小团队主播**1个演员+2~3人。
- 中型团队1个演员+1~2导播+技术人员若干+运营若干。
- 快速迭代建议
- 场景
- 小关卡MultiUserServer多人协作+多个协作用子Level。
- 大世界:版本管理做好就行。
- USD流程
- 自动测试框架 & 可视化日志:高频迭代后,可以构建。
- CI/CD + UnrealGameSync + Unreal Zen构建打包引擎并且拉新。
- AI动捕优化思路
1. 模仿ChaosBone使用CUDA直接读取Bone动画数据并且传递给动画蓝图。CUDA具有访问指定显存的功以此节约io损耗假定用户使用双显卡渲染/直播推流将AI动捕的负荷移动到另一张卡上。
2. 使用多线程与帧采样解决数据抖动问题。同时可以略微降低ai动补的性能要求。
- 卡通渲染:
1. 兼容VRM格式。VoidHUB
1. 同时不断往里面添加自己规范成为VRM的超集
2. 兼容多种渲染风格Unity-Chan、VRM、罪恶装备等。并在此基础上尝试研发下一代卡通渲染风格。
1. 需要一种能够向渲染管线传递大量参数的功能:
1. 增加GBuffer数量。
2. 前向 + 延迟管线。Forward+
3. 低频数据查表法。
2. 插画&厚涂使用GI、反射、天光散射等多种外界因素以曝光度&时间为尺,融合在一起。
3. 需要收集插画作品PSD源文件对风格进行分类之后对图层进行分类。尝试用图形算法与AI尝试还原每个图层。
4. 参考日本动画有关 “摄影”的方法AE并且在UE中实现。
5. 以4个时间段&天气环境状态制作LookDev场景并且保证时间循环下效果平滑需要调整曲线
6. Lumen以及MageLight ReSTIR的支持。
3. AI
1. 渲染管线里5.3已经支持神经网络NNE接口。 其中一种方法使用ONNX。
4. 对c端用户来说
1. 需要一个简单出效果的东西。简单调节参数。
2. 有几个风格模版。
5. 一个角色的渲染控制资产:基础材质(参数+贴图、ToonDataAsset。方便管理与迭代。
- 面捕&VMC
1. 抖音既然是一个全球性的平台在兼容VMC与LiveLinkFace的基础。进行扩展比如VMC中增加更多的场景控制、整活互动功能。使用ARKit开发类似FaceMask的工具让用户可做出更多的表情与表演效果。
1. 考虑对VMC协议进行改造添加TCP、Protobuf支持。
2. 面捕矫正问题。
- 参考[MuRo_CG](https://www.youtube.com/@muro_cg)的作品。
1. 直播工具。
2. 辅助番剧制作工具。
- 捏脸&资产上传:
1. 捏脸如果是二次元为了实现最好的效果得选择全骨骼方案。为了直播的话得选择BS&骨骼。
2. 资产上传(资产库)
1. 考虑使用Puerts Editor服务化方法或者使用CommandLet + Server的方法处理好资产再通过Pak热更新到本地。
2. Runtime读取FBX、GLTF、MP4、Texture并且在本地显示。也可以考虑流送
- VRCha&元宇宙&VisionPro&Pico
# 工作内容
1. 根据项目需求,负责UE4引擎的功能和效果开发、性能优化等相关工作;
1. 给ASoul项目做全面的技术支持以及功能开发
1. 功能开发。
1. 比如VJ播放系统添加NDI源。
2. 给导播台添加某个特定功能道具。
3. 脱离字节的系统,做一些定制开发。比如使用镜头控制+Sequence来控制表演效果。
2. 卡通材质制作。
1. 解析渲染与材质系统并且编写文档。
3. 动画、物理、动捕、美术效果方面的支持。
4. 大活,重要表演节目的优化。
5. 解决疑难杂症。
1. 群集系统渲染错误。
2. 一些老道具功能不正常。
2. 优化方面的工作做的比较多,擅长使用各种工具定位性能瓶颈,再在综合考量后给出优化方案。
1. 2023 崩坏3线下音乐会。
1. 优化目标 2048*1080 50帧 => 3440 * 1440 50帧4K之下众生平等。
2. DMX使用的是官方插件还是有较大的优化空间。
1. DMX的灯的模型是StaticMesh而非StaticMeshInstance。
2. 禁用非重要DMX的LightComponent。可在Sequence中根据镜头变化来K帧开启。
3. 修改光束材质参数通过参数调整光束材质参数改变光束大小与RayMarching步数以此减少光束RayMarching的性能损耗。
4. 避免大量光束灯直接朝向摄像机。
3. 场景
1. 删除场景中不可见与毫无意义但占用性能较多的模型。
2. BasePass成为瓶颈的场景进行MergeActor与模型转换成Nanite的操作。
3. 远景物体关闭CastShadow。
4. 光照:在保证效果不会有太大变化的情况下,进行一下修改。
1. 关闭影响非常不明显,但性能损耗较大的灯的级联阴影或者开启距离场阴影来代替。
2. 使用调整SourceLength的点光源来代替面光源。
3. 对于需要投射阴影的点光源则使用SpotLight来代替并且调整级联阴影的参数。
4. 调整角度较大、亮度较低的SpotLight。
5. Lumen & GI针对
1. 针对那些GI对光照贡献并不明显的户外场景降低Lumen质量、减少Tracing距离。
2. ScreenSpaceGI针对镜头不怎么动的场景改用此GI。
6. 透明物体 & 粒子
1. 在不影响效果的情况下将BlendMode Translucent=>Additive。
2. 针对透明区域较大的粒子使用Cutoff功能对粒子进行裁剪来进行优化。
3. 调整带有RayMarching的商场资产参数比如Nebula在效果不不会发生大变化的情况下提升性能。
7. 特殊情况
1. 节目NightGlow。场景有使用大量StaicMesh + Nigara制作舞台破碎效果。且有80%的模型形状相同。
1. 在对相同模型进行统计之后将所有模型都替换成一个StaticMesh并且进行Nanite + StaticMeshInstance。并且修改了材质将里面的将里面的ObjectPosition节点改成float3(0,0,0) => TransformPosition(Instance&ParticleSpace)。
2. 节目L_Dacapo6。场景里有大量草地。使用上面一样的方式进行优化。
8. ASoul
1. 平面反射的错误使用。优化一些商城资源里的错误用法。
2. 角色过多造成的CPU GameThread性能瓶颈。新建一个子类干掉没用的Component与Tick逻辑来解决。
3. CPU粒子造成的性能瓶颈。
4. DMX.
5. 使用Sequence K掉一些性能影响较大的Actor。
2. 2024 ASoul 贝拉 & 乃琳 生日会 。
3. ***优化思路***
1. 首先通过Stst Unit、ProfileGPU确定瓶颈是CPUGameThread、RenderThread、GPU。之后进行进一步的分析。
2. 工具
1. Stat Unit、FPS。
2. RenderDoc + ProfileGPU。
3. UnrealInsight。
3. 程序完全没有问题,语言方面,修改渲染管线。说明现在正在开发的卡通渲染引擎与之后的路线图。
1. 接手ASoul项目。
2. c++/Puerts/蓝图项目。20% / 70% / 10%
2. 卡通渲染引擎。***TODO***
3. 后续路线图。
- ToonOutline
- SDF Outline & SDF工具没有对应16位
- RayTracing Outline
- ToonRimLighting
- ToonReflection
- 控制自定义反射
- 兼容Matcap方式。
- ToonShadow
- 阴影偏移
- 半分阴影
- CustomShadow
- Toon GILumen
- 向下采样
- 平滑法线采样
- 兼容Matcap方式的局部照明效果
- ToonTranslucent
- 睫毛眉毛偷过头发
- 透明物体描边
- ToonPostProcess
- 晕染效果
- ToonDiffusion对场景亮部进行降采样之后将亮度信息叠加到Toon物体的暗部上。
- Anti-ToneMapping
- 延迟 + 前向混合管线(原神)
4. 其他技术栈。Nodejs系列的前后端APPQt、Pyside2
4. 手游美术效果研发
- 重点就是跟项目侧对齐下探机型,以及根据最低机型来做效果对齐。
- 针对机型分档提供一套美术效果方案,最高开哪些特性,中档开哪些特性,低档开哪些特性。跟项目定好的规范再去框技术方案。之后再拆分每个模块细节,进行深入分析。
- 评估很多相对再PC上表现效果好的技术能不能在进行一些算法简化后移植到移动端。
5. 手游平台的优化
- 根据项目类型不同,侧重不同的优化方向:
- 大世界项目主要针对场景性能优化。比如定制距离加载策略、场景HLOD、植被按距离控制WPO等。
- 箱庭类ARPG项目会着重于战斗与表演效果。所以会集中于材质、特效方面的优化
- 特效粒子数。
- 材质指令数目是否超标。
- 一些渲染Pass的性能占用情况。
- 优化策略
- 一般通过延迟毫秒数去判断某个效果是否值得优化。首先会对所有效果进行排序0.2毫秒以上的重点关注0.5毫秒以上的重点处理。
2. 增强游戏的表现力与运行效率,对业务需求进行评估并进行方案的实现与落地;***TODO***
1. 多技术栈,方案会有更多的考量。
2. 针对手游平台手游是pc效果上做了效果与精度上的减法。比较差异差异之后综合考虑性能损耗与效果提升建立效果实现表。进行有计划的提升。根据手机性能开启对应的效果。
3. 比如云,以原神为例子。
3. 负责游戏中性能优化相关工作,根据项目需求定制增改Unreal4引擎底层功能;
1. 优化项目举例,参与多个项目。
2. 定制的一些引擎功能展现卡通渲染定义功能。***TODO***
4. [x] 根据项目的需求搭建高效的内容制作管线,提高团队的研发效率;
1. 版本管理相关搭建过Git、P4、SVN服务器并且熟练使用。使用P4 Trigger来解决资产大小写问题、以及实现修改新建工作区默认配置功能。
2. 熟悉UE引擎打包流程AutomaticTools BuildGraph打包Android、IOS的包。为了打包IOS还玩了AMD黑苹果。
3. 熟悉UECommandLet写过若干自动化处理工具。
4. 制作各种编辑器工具。可以根据资产制作思路制作Lookdev工具。NPR有一套独特的思路。
5. 使用Python编写Maya与Blender工具Maya批量转换Biped骨骼资产 => UE骨骼Blender重定向工具服务化、提取UE Psk、Psa => Fbx。
6. Puerts Editor服务化。
5. 关注业界新技术,根据项目的需求预研并应用到项目的后续开发中。
1. 除了关注zhihu与B站之外查看每年的uod视频。因为关注卡通渲染的关系会看cedec的一些卡通渲染相关分享主要以记录为主。
1. CEDEC 2021的蓝色协议系列文章。***TODO***
1. ToonLighting
1. 高光 Mask UV偏移。
2. 描边PostProcess(ID + Depth + Normal) + BackFace Outline。
3. 边缘光基于后处理的RimLighting。
4. 阴影偏移方案:
5. 其他方案:
1. 角色捏人、表情
1. Girls Band cry
2. 蓝色协议使用全骨骼的表情方案:
1. 眉毛37个、眼睛42个、 嘴巴53个、轮廓/鼻子18个
2. 捏脸
- 骨骼
- BlendShape
- 贴花
- 参考游戏
- DAZ3D
- 恋爱活动2
- Honey Select
- VAM
1. 身体分成多个部分,且每个部分采用公共骨骼。
- 部位
- 帽子
- 后头部
- 头发
-
-
- 上半身
- 下半身
-
- 内衣
- 身体数据使用自定义的数据资产进行管理ID
1. 身体部分与数值偏移
1. 子组件
1. 数值类型
2. 骨骼ID
3. 默认值
4. 最小最大值
- 衣服
1. 使用骨骼来控制衣服长短?
- 头发
1. 为同一个发型制作多种头发来适配不同的帽子
2. KawaiiPhysics
- 表情
1. 25种基础表情
2. 嘴部的轮廓是双层的,以此来实现漫画中的效果。
3. 脸部调整了法线,来解决面部阴影问题。
2. CEDEC 2023
1. BMG Dream。
3. CEDEC 2024
1. 学院偶像大师分享。
2. 次世代 NPR の輪郭線表現
4. 部分分享没有公开实属可惜比如2022的异度神剑3没有及时下载视频没了还好知乎有人分享心得。
6. 根据需求查看gdc的文章。
1. FastSSS。
2. GDC 2004 Marschner Hair paper的Kajiya-Kay Model
6. 捏脸
7. 最后问问题
1. 如果我没有通过面试,那可能是什么方面的原因?***TODO是否可以以及有必要问***
职位描述
1、负责技术美术相关功能**完成诸如材质/Shader开发/渲染特性/工具管线等功能的实现和调优**,提升项目表现效果;
2、发现美术制作各个环节中的需求和问题并与程序、美术等职能的同事紧密合作提供支持完善流程提升效率
3、配合美术、引擎同事**制定项目资源、性能规范和配套的自动化检测工具**,并确保规范和工具在项目中的落地。
职位要求
1、本科及以上学历, 计算机及相关专业;
2、**良好的图形学基础,熟悉常用渲染管线及渲染底层原理,熟悉至少一种常用游戏引擎**
3、良好的审美对**材质、灯光**等影响渲染效果的因素有辨识能力,了解业内顶尖效果并**制定优化**方向;
4、**熟悉HLSL和Shader开发**
5、**熟悉renderdoc等profile工具能定位和解决项目中的渲染问题**
6、熟悉常用的DCC软件例如**MAYA**、ZBrush、Substance系列、**Photoshop**、**Blender**等。
加分项:
1、熟悉UE5引擎有蓝图和c++基础;
2、有3A游戏/数字人等具有顶尖表现效果的项目经验;
3、有捏脸/角色制作系统经验;
4、~~有PCG方向经验~~***能设计基础生成能力并对接部门提供的AIGC能力***
5、熟悉角色动捕/**动画方向优化**,熟悉角色动力学/物理方向优。

View File

@@ -0,0 +1,22 @@
- 自我介绍***TODO***
- 我的卡通渲染方案有哪些优势:
1. 可以突破延迟渲染管线限制,向渲染管线传递大量的参数。
2. 相关控制参数主要集中的数据资产与材质中,集中管理适合迭代,新增功能不容易出问题。
3. 使用数据资产方便移植、后续复用以及制作预设方便c端用户使用。
- 厚涂风格思路:
1. 除了基础的shadingmodel 阴影羽化抹平多维度的数据传入作为各种ramp。反射 gi aomatcap环境光照各种晕染bloom。
2. 针对日漫不同的4个时间点以及相关环境特性制作LookDev场景最后实现效果的平滑过渡各种参数曲线大致符合物理规则。
- 接手Asoul项目这个项目的难点在哪里:
1. 逻辑遍布蓝图、c艹、puerts。
2. 网络同步的cs架构。
3. 大量使用Actor与Puerts的事件绑定解耦一些问题得靠经验判断大致出错位置后才能进行尝试性的Debug。
4. 模块众多。
- 技术栈可以满足xxx需求:
# 其他问题
- PhoneE、布林
- GI方面的算法DDGI
- DXR
- UE5 ShadingModels
- UE5渲染管线顺序
- 简历更新乐华娱乐