diff --git a/.obsidian/plugins/various-complements/histories.json b/.obsidian/plugins/various-complements/histories.json index d19ab98..b1cf064 100644 --- a/.obsidian/plugins/various-complements/histories.json +++ b/.obsidian/plugins/various-complements/histories.json @@ -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}}}} \ No newline at end of file +{"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}}}} \ No newline at end of file diff --git a/02-Note/ASoul/导播台架构图.canvas b/02-Note/ASoul/导播台架构图.canvas index 8200062..96543d8 100644 --- a/02-Note/ASoul/导播台架构图.canvas +++ b/02-Note/ASoul/导播台架构图.canvas @@ -1,35 +1,40 @@ { "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":"2eec2fb1d3a37d06","type":"group","x":200,"y":-20,"width":360,"height":133,"label":"云服务"}, - {"id":"63e99817023a9452","x":200,"y":360,"width":360,"height":120,"type":"group","label":"其他工具"}, + {"id":"2eec2fb1d3a37d06","type":"group","x":540,"y":-20,"width":360,"height":193,"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":"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":"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":"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":"2573e7521a0b567d","x":-140,"y":-240,"width":250,"height":60,"type":"text","text":"虚拟摄像头"}, - {"id":"d4895a6dd8e8f492","type":"text","text":"OBS 推流机器","x":-30,"y":600,"width":250,"height":60}, - {"id":"b6635d1e5df0f9c5","type":"text","text":"[[ASoul#vMix Pro|vMix Pro]]","x":220,"y":400,"width":250,"height":60}, - {"id":"2f70c72b00fdbb6f","x":-125,"y":400,"width":250,"height":60,"type":"text","text":"监视器"}, - {"id":"fd18d36587eee2af","type":"text","text":"渲染机","x":-125,"y":300,"width":250,"height":60} + {"id":"2573e7521a0b567d","type":"text","text":"虚拟摄像头","x":-140,"y":-240,"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":-120,"y":620,"width":250,"height":60}, + {"id":"ddccb7a9337eac2c","type":"text","text":"RTC服务","x":560,"y":0,"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":"MultiView(24个镜头预览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":[ - {"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":"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":"16ebaec8f13d643b","fromNode":"39bafcd9161d7e0a","fromSide":"right","toNode":"2f70c72b00fdbb6f","toSide":"left"}, - {"id":"7deafcdada47affc","fromNode":"6aa20a6c6e56213d","fromSide":"bottom","toNode":"fd18d36587eee2af","toSide":"top"}, - {"id":"f2b08ba7d08b3340","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"2f70c72b00fdbb6f","toSide":"top"} + {"id":"f2b08ba7d08b3340","fromNode":"fd18d36587eee2af","fromSide":"bottom","toNode":"2f70c72b00fdbb6f","toSide":"top"}, + {"id":"9abe6e198d80985b","fromNode":"39bafcd9161d7e0a","fromSide":"bottom","toNode":"15d2538302d51394","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"} ] } \ No newline at end of file diff --git a/07-Other/简历/WY面试相关.md b/07-Other/简历/WY面试相关.md index 62c08d6..32b236e 100644 --- a/07-Other/简历/WY面试相关.md +++ b/07-Other/简历/WY面试相关.md @@ -285,12 +285,16 @@ obsidianUIMode: source **2024.10-2025.1** 实际上是从2024.4月开始进行技术支持的 +因为乐华从字节收购Asoul业务时,字节只教了基础使用方式,只交付了UE工程、脱敏的美术资产源文件。 +最为关键的使用文档、中台插件、版本管理工具都没有提供。 +所以需要有一位技术栈宽广的人来Hold住这个项目。在我接收到项目后,发现存在若干之前直播版本不存在的bug,怀疑是交付时搞错了Perforce分支或是使用较早版本进行交付。 + 作为唯二的技术人员,我主要负责: - 解析ASoul导播系统,以进行工作流的适配与改造。 - Sequoia编辑器改造以适配流程。 - 分析ASoul的渲染管线与配套材质系统。 - 分析大气环境、道具、换装系统,并进行改造。 - - 根据节目导演要求制作一些效果道具。 + - 根据 运营 要求制作一些效果道具。 - 修复导播系统bug。 - 大型节目优化。 - 日常技术支持 @@ -303,6 +307,89 @@ obsidianUIMode: source - 网线 & 工位改造。 - 直播相关问题解决。 ### 导播台架构 +采用C/S分布式架构,即专用服务器作为终端,其他控制客户端分别控制(服务端会检测客户端身份)。 +采用这种分布式架构的原因是: +1. 可以防止All in Boom的问题。控制用客户端挂掉或者电脑出现硬件问题也可以通过其他电脑打开该类型的控制客户端重新运行。该系统主要由 c++为主要底层(20~30%),大量Puerts(50~60%),蓝图(5~10%)构成。 +2. 满足导播切镜头的需求,可以先从24个镜头中(可以通过SteamDock翻页)选择想要镜头,之后再PVW预览觉得OK后,通过切镜让PGM也开始播放这个镜头。 + +- 地图控制: + - 加载指定表演区域(采用大世界系统,提前加载,UE4版本采用的是关卡流) + - 控制天气、昼夜循环、天空盒。 + - 添加地图道具、特效。 + - 控制表演区域的特殊功能。 +- 角色换装&道具: + - 角色换装 + - 身体各部位的道具 + - 特效 +- 动捕&面部&手套控制 + - 动捕、面部、手套数据ID对应。 + - 脚步着地。 + - 动捕时间戳同步。 + - 动捕道具控制。 +- 渲染机画面通过采集卡+视频线传到显示器上 + +### 渲染管线 & 材质系统 + +#### 渲染管线 +为了能在其他线下场所进行直播(替换官方引擎的USH与USF),ASoul的引擎只使用材质与修改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 + +#### 材质文档编写 +天气系统采用纯蓝图 + DataTable(Curve、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 + + # 一些成果