vault backup: 2025-03-31 18:16:57

This commit is contained in:
BlueRose 2025-03-31 18:16:57 +08:00
parent d21e9acf76
commit bb387d7555
3 changed files with 113 additions and 21 deletions

View File

@ -1 +1 @@
{"PS.需要Shader添加FSceneTextureShaderParameters":{"PS.需要Shader添加FSceneTextureShaderParameters":{"currentFile":{"count":1,"lastUpdated":1740983366427}}},"和blender共同制作山脉为":{"和blender共同制作山脉为":{"currentFile":{"count":1,"lastUpdated":1741610747166}}},"BlueprintCosmetic":{"BlueprintCosmetic":{"internalLink":{"count":1,"lastUpdated":1741951657866}}},"ReflectionsColor":{"ReflectionsColor":{"currentFile":{"count":1,"lastUpdated":1742739458164}}},"主要执行了:":{"主要执行了:":{"currentFile":{"count":1,"lastUpdated":1742830096172}}},"尝试平滑Lumen中的SH。":{"尝试平滑Lumen中的SH。":{"currentFile":{"count":1,"lastUpdated":1742910977705}}},"SupportDynamicSliderMinValue":{"SupportDynamicSliderMinValue":{"internalLink":{"count":1,"lastUpdated":1743066829865}}},"4DGaussians":{"4DGaussians":{"internalLink":{"count":1,"lastUpdated":1743173207988}}},"DMX灯光优化":{"DMX灯光优化":{"currentFile":{"count":1,"lastUpdated":1743327201208}}},"Addtivte":{"Addtivte":{"currentFile":{"count":1,"lastUpdated":1743329217204}}},"Dual-Ego":{"Dual-Ego":{"currentFile":{"count":1,"lastUpdated":1743338268824}}},"Merge、":{"Merge、":{"currentFile":{"count":1,"lastUpdated":1743339455484}}},"Nightglow":{"Nightglow":{"currentFile":{"count":1,"lastUpdated":1743341217248}}},"Nanite":{"Nanite":{"currentFile":{"count":1,"lastUpdated":1743344181589}}},"另一个位更加偏向于虚拟偶像直播,主要负责:":{"另一个位更加偏向于虚拟偶像直播,主要负责:":{"currentFile":{"count":1,"lastUpdated":1743396187936}}}} {"PS.需要Shader添加FSceneTextureShaderParameters":{"PS.需要Shader添加FSceneTextureShaderParameters":{"currentFile":{"count":1,"lastUpdated":1740983366427}}},"和blender共同制作山脉为":{"和blender共同制作山脉为":{"currentFile":{"count":1,"lastUpdated":1741610747166}}},"BlueprintCosmetic":{"BlueprintCosmetic":{"internalLink":{"count":1,"lastUpdated":1741951657866}}},"ReflectionsColor":{"ReflectionsColor":{"currentFile":{"count":1,"lastUpdated":1742739458164}}},"主要执行了:":{"主要执行了:":{"currentFile":{"count":1,"lastUpdated":1742830096172}}},"尝试平滑Lumen中的SH。":{"尝试平滑Lumen中的SH。":{"currentFile":{"count":1,"lastUpdated":1742910977705}}},"SupportDynamicSliderMinValue":{"SupportDynamicSliderMinValue":{"internalLink":{"count":1,"lastUpdated":1743066829865}}},"4DGaussians":{"4DGaussians":{"internalLink":{"count":1,"lastUpdated":1743173207988}}},"DMX灯光优化":{"DMX灯光优化":{"currentFile":{"count":1,"lastUpdated":1743327201208}}},"Addtivte":{"Addtivte":{"currentFile":{"count":1,"lastUpdated":1743329217204}}},"Dual-Ego":{"Dual-Ego":{"currentFile":{"count":1,"lastUpdated":1743338268824}}},"Merge、":{"Merge、":{"currentFile":{"count":1,"lastUpdated":1743339455484}}},"Nightglow":{"Nightglow":{"currentFile":{"count":1,"lastUpdated":1743341217248}}},"Nanite":{"Nanite":{"currentFile":{"count":1,"lastUpdated":1743344181589}}},"另一个位更加偏向于虚拟偶像直播,主要负责:":{"另一个位更加偏向于虚拟偶像直播,主要负责:":{"currentFile":{"count":1,"lastUpdated":1743396187936}}},"角色换装&道具:":{"角色换装&道具:":{"currentFile":{"count":1,"lastUpdated":1743405142805}}},"Dynamics主要用于模拟布料以及刚体头发。":{"Dynamics主要用于模拟布料以及刚体头发。":{"currentFile":{"count":1,"lastUpdated":1743413286078}}},"主要解决了:":{"主要解决了:":{"currentFile":{"count":1,"lastUpdated":1743413294305}}}}

View File

@ -1,35 +1,40 @@
{ {
"nodes":[ "nodes":[
{"id":"300a2e3e614685a2","type":"group","x":-500,"y":-20,"width":660,"height":500,"label":"导播台程序"}, {"id":"300a2e3e614685a2","type":"group","x":-500,"y":-20,"width":1000,"height":560,"label":"导播台程序"},
{"id":"035350cfe6c5a215","type":"group","x":-500,"y":-400,"width":660,"height":275,"label":"外部数据输入"}, {"id":"035350cfe6c5a215","type":"group","x":-500,"y":-400,"width":660,"height":275,"label":"外部数据输入"},
{"id":"2eec2fb1d3a37d06","type":"group","x":200,"y":-20,"width":360,"height":133,"label":"云服务"}, {"id":"2eec2fb1d3a37d06","type":"group","x":540,"y":-20,"width":360,"height":193,"label":"云服务"},
{"id":"63e99817023a9452","x":200,"y":360,"width":360,"height":120,"type":"group","label":"其他工具"}, {"id":"63e99817023a9452","type":"group","x":-140,"y":580,"width":360,"height":120,"label":"其他工具"},
{"id":"9c4c9310461193d8","type":"text","text":"舞台角色控制","x":-125,"y":113,"width":250,"height":60}, {"id":"9c4c9310461193d8","type":"text","text":"舞台角色控制","x":-125,"y":113,"width":250,"height":60},
{"id":"6aa20a6c6e56213d","type":"text","text":"[[ASoul#各机位画面预览|各机位画面预览]]","x":-125,"y":206,"width":250,"height":60},
{"id":"39bafcd9161d7e0a","type":"text","text":"导播台程序","x":-480,"y":20,"width":250,"height":60}, {"id":"39bafcd9161d7e0a","type":"text","text":"导播台程序","x":-480,"y":20,"width":250,"height":60},
{"id":"5b68848d0ae9aef3","type":"text","text":"数据接收&动作数据重定向","x":-125,"y":20,"width":250,"height":60}, {"id":"5b68848d0ae9aef3","type":"text","text":"数据接收&动作数据重定向","x":-125,"y":20,"width":250,"height":60},
{"id":"ddccb7a9337eac2c","type":"text","text":"RTC服务","x":220,"y":0,"width":250,"height":60},
{"id":"64c78f2c7f900857","type":"text","text":"青瞳动捕输入","x":-460,"y":-360,"width":250,"height":60}, {"id":"64c78f2c7f900857","type":"text","text":"青瞳动捕输入","x":-460,"y":-360,"width":250,"height":60},
{"id":"3100f1c53b772812","type":"text","text":"[[ASoul#FaceMask|FaceMask]]","x":-460,"y":-240,"width":250,"height":60}, {"id":"3100f1c53b772812","type":"text","text":"[[ASoul#FaceMask|FaceMask]]","x":-460,"y":-240,"width":250,"height":60},
{"id":"6024a903f9025bbf","type":"text","text":"动捕手套","x":-140,"y":-360,"width":250,"height":60}, {"id":"6024a903f9025bbf","type":"text","text":"动捕手套","x":-140,"y":-360,"width":250,"height":60},
{"id":"2573e7521a0b567d","x":-140,"y":-240,"width":250,"height":60,"type":"text","text":"虚拟摄像头"}, {"id":"2573e7521a0b567d","type":"text","text":"虚拟摄像头","x":-140,"y":-240,"width":250,"height":60},
{"id":"d4895a6dd8e8f492","type":"text","text":"OBS 推流机器","x":-30,"y":600,"width":250,"height":60}, {"id":"15d2538302d51394","type":"text","text":"导播台专用服务器\n","x":-480,"y":206,"width":250,"height":60},
{"id":"b6635d1e5df0f9c5","type":"text","text":"[[ASoul#vMix Pro|vMix Pro]]","x":220,"y":400,"width":250,"height":60}, {"id":"b6635d1e5df0f9c5","type":"text","text":"[[ASoul#vMix Pro|vMix Pro]]","x":-120,"y":620,"width":250,"height":60},
{"id":"2f70c72b00fdbb6f","x":-125,"y":400,"width":250,"height":60,"type":"text","text":"监视器"}, {"id":"ddccb7a9337eac2c","type":"text","text":"RTC服务","x":560,"y":0,"width":250,"height":60},
{"id":"fd18d36587eee2af","type":"text","text":"渲染机","x":-125,"y":300,"width":250,"height":60} {"id":"42bf522a819d47f0","type":"text","text":"弹幕服务","x":560,"y":83,"width":250,"height":60},
{"id":"6aa20a6c6e56213d","type":"text","text":"[[ASoul#各机位画面预览|PVW预览View]]","x":-480,"y":460,"width":250,"height":60},
{"id":"2f70c72b00fdbb6f","type":"text","text":"PGM输出结果View","x":-125,"y":460,"width":250,"height":60},
{"id":"f72bf493de6576c9","type":"text","text":"MultiView24个镜头预览View","x":220,"y":460,"width":250,"height":60},
{"id":"fd18d36587eee2af","type":"text","text":"Rendering多台","x":-125,"y":320,"width":250,"height":60},
{"id":"4b3e00a7f02c7d52","type":"text","text":"场景舞台控制","x":-125,"y":206,"width":250,"height":60},
{"id":"d4895a6dd8e8f492","type":"text","text":"OBS 推流机器","x":-120,"y":740,"width":250,"height":60}
], ],
"edges":[ "edges":[
{"id":"50384075226d46f4","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"5b68848d0ae9aef3","toSide":"left"},
{"id":"7330916171b51d83","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"9c4c9310461193d8","toSide":"left"},
{"id":"f1bcfe8881d914d1","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"6aa20a6c6e56213d","toSide":"left"},
{"id":"e15305c8aa918dac","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"fd18d36587eee2af","toSide":"left"},
{"id":"8cac5632ec79bc5f","fromNode":"035350cfe6c5a215","fromSide":"bottom","toNode":"5b68848d0ae9aef3","toSide":"top"}, {"id":"8cac5632ec79bc5f","fromNode":"035350cfe6c5a215","fromSide":"bottom","toNode":"5b68848d0ae9aef3","toSide":"top"},
{"id":"5868048a50b5a58f","fromNode":"5b68848d0ae9aef3","fromSide":"bottom","toNode":"9c4c9310461193d8","toSide":"top"}, {"id":"5868048a50b5a58f","fromNode":"5b68848d0ae9aef3","fromSide":"bottom","toNode":"9c4c9310461193d8","toSide":"top"},
{"id":"e29f2faceec273b4","fromNode":"9c4c9310461193d8","fromSide":"bottom","toNode":"6aa20a6c6e56213d","toSide":"top"},
{"id":"4efa1ed45a9bf2e6","fromNode":"300a2e3e614685a2","fromSide":"bottom","toNode":"d4895a6dd8e8f492","toSide":"top"},
{"id":"7803dd9c4b820e03","fromNode":"b6635d1e5df0f9c5","fromSide":"bottom","toNode":"d4895a6dd8e8f492","toSide":"top"}, {"id":"7803dd9c4b820e03","fromNode":"b6635d1e5df0f9c5","fromSide":"bottom","toNode":"d4895a6dd8e8f492","toSide":"top"},
{"id":"16ebaec8f13d643b","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"2f70c72b00fdbb6f","toSide":"left"}, {"id":"f2b08ba7d08b3340","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"2f70c72b00fdbb6f","toSide":"top"},
{"id":"7deafcdada47affc","fromNode":"6aa20a6c6e56213d","fromSide":"bottom","toNode":"fd18d36587eee2af","toSide":"top"}, {"id":"9abe6e198d80985b","fromNode":"39bafcd9161d7e0a","fromSide":"bottom","toNode":"15d2538302d51394","toSide":"top"},
{"id":"f2b08ba7d08b3340","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"2f70c72b00fdbb6f","toSide":"top"} {"id":"267b808f74c75bf5","fromNode":"15d2538302d51394","fromSide":"right","toNode":"9c4c9310461193d8","toSide":"left"},
{"id":"93536d243befa03f","fromNode":"9c4c9310461193d8","fromSide":"left","toNode":"15d2538302d51394","toSide":"right","fromEnd":"arrow"},
{"id":"1604450697d995c7","fromNode":"5b68848d0ae9aef3","fromSide":"left","toNode":"15d2538302d51394","toSide":"top"},
{"id":"369c9efd6310be10","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"6aa20a6c6e56213d","toSide":"top"},
{"id":"ac7f688b0b8c7faa","fromNode":"2f70c72b00fdbb6f","fromSide":"bottom","toNode":"b6635d1e5df0f9c5","toSide":"top"},
{"id":"19c630f3b1a8d958","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"f72bf493de6576c9","toSide":"top"},
{"id":"93756fbfe027d071","fromNode":"4b3e00a7f02c7d52","fromSide":"left","toNode":"15d2538302d51394","toSide":"right","fromEnd":"arrow"},
{"id":"828363663f0ad9fa","fromNode":"15d2538302d51394","fromSide":"bottom","toNode":"fd18d36587eee2af","toSide":"left"}
] ]
} }

View File

@ -285,12 +285,16 @@ obsidianUIMode: source
**2024.10-2025.1** **2024.10-2025.1**
实际上是从2024.4月开始进行技术支持的 实际上是从2024.4月开始进行技术支持的
因为乐华从字节收购Asoul业务时字节只教了基础使用方式只交付了UE工程、脱敏的美术资产源文件。
最为关键的使用文档、中台插件、版本管理工具都没有提供。
所以需要有一位技术栈宽广的人来Hold住这个项目。在我接收到项目后发现存在若干之前直播版本不存在的bug怀疑是交付时搞错了Perforce分支或是使用较早版本进行交付。
作为唯二的技术人员,我主要负责: 作为唯二的技术人员,我主要负责:
- 解析ASoul导播系统以进行工作流的适配与改造。 - 解析ASoul导播系统以进行工作流的适配与改造。
- Sequoia编辑器改造以适配流程。 - Sequoia编辑器改造以适配流程。
- 分析ASoul的渲染管线与配套材质系统。 - 分析ASoul的渲染管线与配套材质系统。
- 分析大气环境、道具、换装系统,并进行改造。 - 分析大气环境、道具、换装系统,并进行改造。
- 根据节目导演要求制作一些效果道具。 - 根据 运营 要求制作一些效果道具。
- 修复导播系统bug。 - 修复导播系统bug。
- 大型节目优化。 - 大型节目优化。
- 日常技术支持 - 日常技术支持
@ -303,6 +307,89 @@ obsidianUIMode: source
- 网线 & 工位改造。 - 网线 & 工位改造。
- 直播相关问题解决。 - 直播相关问题解决。
### 导播台架构 ### 导播台架构
采用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
主要用于模拟布料以及刚体(头发)
主要解决了:
- 效率问题
- 布料穿模问题
### 除了解析之外我还做了哪些工作
- 摸索出
- 日常解决地编、动捕、建模、导播同学的问题。
- 一些效果、道具制作。
#### 乐华 实时演出 / 预录制演出切换 适配
难点:
Bug修复
#### 版本管理 & 协作
解决:
#### 大型活动优化
【【A-SOUL】贝拉 2024.07.20 星之回响-贝拉生日演唱会【直播录像】】 https://www.bilibili.com/video/BV1TE421w7ae/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
# 一些成果 # 一些成果