# TODO 1. [x] 项目目录中的EditorTools\\Python\\MaterialSetCharacter\\SetCharacter.py 是否是不需要使用的? 1. 以前使用的工具脚本,可以不用。 2. [ ] 思诺生日会 1. [ ] 道具衣服导入流程。 2. [ ] 直播流程跑通 4. [ ] Sequence播放逻辑跑通。 1. [ ] 使用c++实现一个新轨道,以此来捕捉当前的对应角色Actor的引用。 2. [ ] 在播放最后放置Cut/Take逻辑 3. [ ] 将这个播放功能放到4级里。 5. [ ] DCC插件 - [ ] 角色、衣服重新绑定。以及重定向。 - 角色裸模,骨骼权重传递给衣服。之后修改轴向脚本。 - [ ] 动画蓝图中的ASoul自研修形插件匹配。也就是在Maya中输出一个骨骼以及BlendShape信息JSON,之后导入UE。 6. [ ] ChaosBone 1. 参考资产,KawaiiPhysics与ChaosBone混用:`Content\ResArt\CharacterArt\BeiLa\BeiLa_SwimSuit\Animations\ABP_SK_BeiLa_Swimsuit_PostProcess.uasset` 7. [ ] 考虑将Sequence TakeRecord功能移植到导播台项目中(先确定可能性) # Console 1. run0: 2. run3:运行三级导播。 3. # 直播流程 PS. 1. 码率12000、1080p 一个画面 35Mbps上下行。外部直播需要准备主备路2条,ASoul主线路200M上下行对等。 2. ## 导播台Server/Client启动流程 1. 渲染机机房 1. Server先开,桌面找到`ue5 - 直播Server`或者`ue4`,启动bat。 2. 其他几台渲染机再开,`ue5直播用`。StartClient_win,启动bat。 2. 导播台Client顺序随意 1. 桌面找到`ue5直播用`文件夹,启动bat。 2. StartClient_MotionProcessor.bat、MotionServer.bat,右上一。 3. StartClient_MapEnvironment开启4级导播台,右上二 4. StartCline_win,开启3级导播台,输入命令Run3。右下二。 3. 启动青瞳客户端。右下一。 1. 开启动捕数据测试工具Qingtong_Record,选择一个数据进行连通性测试。确定右上有输入动捕数据输入。 2. 关闭Qingtong_Record,启动CMTracker,桌面有快捷方式。 3. 在MotionProcessor中确认青瞳机器的IP正确。 4. 动捕棚设备确定。 4. 动捕设备确认,确认是否正常输入数据到MotionProcessor。 5. 推流机开启,打开OBS填写推流地址,ping一下内网以及网页在线测速确认网络环境正常。左上二,左下一。(左下上一二都可以) 6. vMix开启,连接OBS。(左下上一二都可以) 7. 使用B站、抖音直播的私密测试账号,推流私密画面确定推流以及音频输出没有问题。 8. 确认设备 1. 确认使用的平板、iphone等设备的摄像头是胶布贴住的。 9. 动捕演员就位,动捕设备就位后,重新开启MotionProcessor。 10. 检查 1. 检查虚拟偶像模型是否贴地(贴地、浮空) 2. 换套衣服,检查肩膀是否有问题。如果有问题使用MotionProcessor修正肩膀效果。 3. PVW PGM 时间同步,点击StartCline_win中的时间同步按钮。 ## 导播台使用 1. 播放VJ视频 1. 远程放置一个远程VJ播放用Actor。 2. 远程连麦 1. 手机连接。 2. 走声卡,传递到调音台。 ## StreamDock - 第一行第一个按3下切换成下一页。 - 镜头分专用镜头(LiveArea中设定的镜头)、通用镜头(所有场景都可以使用) - 添加镜头的方法(也可以用于播放特效以及其他Sequence中可以制作的效果) 月哥有记录 1. 新建一个Sequence,并且K好镜头。 2. 创建CameraGroup DataAsset资产。 3. 将该资产加入到场景中的LevelArea下面的XX数组就。 4. 点击导播工具按钮。 ## 添加道具、物品、场景、特效 1. 添加物品道具。 1. 目录:Content-Props-CharacterProps-Items,找到对应类型的道具,复制后修改模型资产即可。 2. 添加道具类:TsIdelPropActor 3. 具有描边、骨骼模型、静态模型、Niagara组件。 4. 属性 1. 骨骼模型Socket设置,类属性的MountPointToTransform来设置。 2. Prop 1. DisplayName:导播那里的显示的名称。 2. 添加场景 3. 添加角色 4. 添加衣服 ## 相关Bat作用 1. StartListenServer:服务器。 2. 导播台 1. StartClient_Win:PVW(预览屏)、PGW(推流机)、Preview(小窗口)* 2 2. StartClient_Win_VideoProcess:视频处理,将视频推到另外2个View上。 3. StartClient_MapEnvironment:导播台,控制地图场景。(4级、1级,视图-Layout处切换) 4. StartClient_IdolController_Master:导播台,角色控制相关。(3级) 5. StartClient_HandHeldCam:导播台,手持相机。 6. StartClient_MotionProcessor:导播台,动捕 7. 线下的 1. PGM2 2. PGMCameraRenderer 8. Pico 1. StartClient_PicoClient_0 2. StartClient_PicoClient_1 3. StartClient_PicoClient_2 4. StartClient_PicoClient_3 3. 启动编辑器:项目目录中的StartEditor_Win.bat 4. MotionServer:动捕相关。 ## 修改配置 1. MotionServer:通过修改源码来指定IP。 2. 上述StartClient_MapEnvironment.Bat修改Server IP。 3. 切身份、调试:StartClient_IdolController_Master、PVW(预览屏)、PGW(推流机)、Preview(小窗口),ChangeNetTag Operator.IdolController.Master # Project 1. Designer:StreamDock插件相关,包括SreamDock插件工程(直接连接UE打包工程读取相关配置,之后自动生成图标预设并且加载)、若干预设文件。 2. **Engine**:编译版引擎。添加过ShaderModel、修改过Shader、添加过若干Editor代码。 3. **LiveDirector**:导播台项目工程。 4. StartLiveDirector:启动Bat文件。 5. StartLiveDirectorCluster:分布式启动方案,带一个库。 6. Tools:一些第三方库, 1. JS加密,加密代码方便给第三方。 2. MotionReplayer:动捕数据回放工具。 3. **MotionServer**:动捕数据处理Server。主要用于转发青瞳的动捕数据给其他Client。 MotionServer - Server - DirectorLive Client,使用动画蓝图中的IsMotionProcess变量判断身份。 1. 还包括自研的面部App FaceMask的数据转发。 4. obs-studio:OBS源码,添加了若干插件,但用不了,因为技术服务属于字节。 5. PixelStream:移植自UE官方,UE4版本有若干小改动。UE5版本不用。 6. Protobuf:动捕数据传输,google的那个协议。 7. VCluster:未完成,用于拉起所有机器的导播台程序。 ## 重定向逻辑 1. MotionProcessor关卡中每个角色的动画蓝图负责重定向。 1. 使用一个Control Rig节点进行重定向。接收MotionScale、SpineScale、ArmScale、HipsDiff以及MocapData、ShoulderDiff、ZOffset。之后进行自定义计算。优势就是非常灵活。 2. TsMotionRetargetComponent.ts 3. 挂载在BP_IdolController中。 肩校准左边的滑块,用于调整动捕角色与游戏模型的比例。 - 默认:默认比例是计算出来,对于角色(Motion,走路效果)最佳的比例。 - 对齐:团舞,所有连接角色的比例统一设置成一个数值(互相匹配,针对腿)。 - 对齐(道具模式,不建议使用,半废弃):团舞,所有连接角色的比例统一设置成一个数值(互相匹配,针对手)。 ## 渲染管线 1. 添加ShaderModel。 1. ToonLit:通过CustomDatas传入阴影给Diffuse与Specular 2. ToonCustomBxDF:只有Diffuse 阴影过渡,Specular靠Matcap。 2. 改了ShadingModels.ush. 3. Encode/Decode GBuffer. 4. UE5 Encode/Decode GBuffer. # Plugins 1. AssetProcess:自研?资源规范性检测、安全性检测。 2. AVAudioUE4:商城,公用库,音频播放库。 3. ChaosBone:自研,骨骼物理模拟插件。 4. ChingReciver:青瞳的插件。 5. DataTableEditorUntilit:数据表插件。商城。 6. DirectAssistanter:辅助工具。 7. DTWebBrower:移植自UE、网页浏览器内嵌。 8. ControlRig:移植自UE。 9. FacialExpression:自研面捕驱动插件。 10. FFMepg:移植自FFMEPG。 11. GFurPro:毛发插件。 12. GloveProcess:自研,手套数据后处理插件。手套数据后处理插件。机器学习算法,姿势会进行匹配选择一个最好的姿势输出。 13. JNAAniamtion:自研,动画编辑相关。 14. KantanChert:商城,图表插件。 15. KawaiiPhysics 16. LDAssist:商城,美术编辑工具。 17. MotionCapture:青瞳的插件。 18. NDIO:NDIO 19. PixelCapture:官方 20. PixelStream: 21. Protobuf: 22. puerts 23. ReactUMG 24. RuntimeImportAudio:商城 25. RuntimeEditor:ASoul导播台的实时编辑器模块。 26. SerialComPLugin:串口插件。一些灯,现在不用了。 27. SimpleTCPServer:移植官方加修改,有在用。 28. SimpleUDP:移植官方加修改,有在用。 29. SPCR 布料插件 30. StreamDockLink: 31. TextureShare:自研,Pico相关插件,现在没用。 32. VRCapture:自研,Pico相关 33. VRPlaybackUE:自研,Pico相关。 34. VRTrack: 自研,VR手套相关。 ## JNAAniamtion 字节自研的蒙皮角色蒙皮修形插件,实现了LinearPsdSlover、PsdSlover、TwistSlover、ComposeDriver、SkinWeightDriver。 需要使用中台研发的Maya插件导出角色的基础结构JSON文件,并将后缀名改成**UJSON**后导入。 1. [x] JNAnimation:空。 2. [x] JNAnimationEd:定义动画节点**AnimGraphNode_JNPoseDriver**。 3. [x] JNCustomAssetEd:定义角色蒙皮修形资产。定义数据格式位于**UJNPoseDriverAsset** 4. [x] JNCustomAsset:定义JSON数据载体UJNPoseDriverAsset(UBaseJsonAsset -> UObject)。 5. [ ] [[#JNAnimationTools]]: 1. FAnimNode_JNPoseDriver 2. FComposeDriver 3. FLinearSolver 4. FPoseDriverUtils 5. FPSDSlover 6. FSkinWeightDriver 7. FSolverDriver 8. FTwistSolver ### JNCustomAsset ```c++ USTRUCT(BlueprintType) struct FDrivenInfos { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray BlendShape; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray Joint; }; USTRUCT(BlueprintType) struct FAniCruveInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray Input; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FDrivenInfos DrivenInfos; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray Tangent; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray OutTangent; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray InTangent; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray Value; }; USTRUCT(BlueprintType) struct FPSDAniCurveInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray B; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray U; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray D; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray F; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray DF; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray UF; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray DB; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray UB; }; USTRUCT(BlueprintType) struct FPSDSloverInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FPSDAniCurveInfo aniCurveInfos; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString driver; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray matrix; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString parent; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray aimAxis; }; USTRUCT(BlueprintType) struct FLinearSolverInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) float coefficient; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString attribute; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray aniCurveInfos; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString driver; }; USTRUCT(BlueprintType) struct FComposeDriverInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray curveName; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray blendshape; }; USTRUCT(BlueprintType) struct FSkinWeightDriverInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) int index; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString joint; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray influenceObjects; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray weights; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray initPoint; }; USTRUCT(BlueprintType) struct FTwistSloverInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FString inputJoint; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) int twistAxis; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray twistJoints; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) bool isReverse; }; USTRUCT(BlueprintType) struct FPoseDriverSolversInfo { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray psdSolvers; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray linearSolvers; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray composeDrivers; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray skinWeightDrivers; UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) TArray twistSolvers; }; UCLASS(BlueprintType) class JNCUSTOMASSET_API UJNPoseDriverAsset : public UBaseJsonAsset { GENERATED_BODY() public: virtual bool ParseFromJsonObject(const TSharedRef& JsonObjectRef) override; public: UPROPERTY(BlueprintReadWrite, EditDefaultsOnly) FPoseDriverSolversInfo SloversInfo; }; ``` ### JNAnimationTools # Script 1. DirectorCam:与24个镜头相关。 2. Editor:RuntimeEditor相关。 3. LiveDirector: 1. [ ] Character/TsIdolActor.ts:[[角色流程#TsIdolActor.ts]] 4. Camera 5. Characrer: 6. Danma:弹幕相关,View以及控制。 7. DeckLinkViewProcess:视频处理,叠加UI之类的操作。 8. Decoration:UI UMG类定义。 9. DeviceINputActor:Media以及串口控制器(Actor) 10. DirectorFrameWork:GameMode、Contorl、 UIManage之类的通用框架。 11. DirectorToolMenu:编辑器UI相关。 12. Level:场景切换控制器。 13. LiveArea:直播区域。 14. MapEnvironment:Level里的效果以及相关逻辑。天气控制。 15. Pico相关。 16. Prop:道具相关道具。 17. QuickControl:简单UI控制器。 18. ScreenPlayerTextureRenderer:将视频渲染成贴图之后再场景中渲染。 19. SeiSender:OBS Sei信息。 20. VideoStreamTransition:转场功能,闪白、转视频啥的。 21. Python:小工具 22. Sequoia:运镜录制剪辑工具。自研类似Sequence的 runtime editor,控制镜头。控制灯光。 23. SimpleLiveDirector:提供给外部供应商的简单版程序。 ## Source 1. AppShells:做了一半,还没用。 2. Editor/HotKeyManager:快捷键相关,可以通过配置实现。 3. LiveDirector 4. LiveDirectorEditor 5. Module: 1. BlackMagicInput:UE官方移植,视频采集卡。 2. BlackMagicOutput:UE官方移植,视频采集卡。 3. DeckLinkOuput:UE官方移植,视频采集卡。 4. GameCluster:未完成 6. MultiViewRenderer:20个View的UI相关。 7. UIModule:UI样式定义,功能。 ### HotKeyManager 实现UI控件SHotKeyEditor、SHotkeyInput。主要的功能是注册名为HotKeyManager的Tab,里面塞了前面2个UI控件。 TODO:找到在哪使用 ### LiveDirector #### AIACao(后续大概率不会再用) AI NLP相关,需要自己接入服务。 #### AIgo(一欧元滤波器) TODO:找到在哪使用 #### Animation - FAnimNode_FullBody:动画蓝图中**非MotionProcessor** LiveDirector Client使用该节点。 - FSequenceMotionSource:一个单例类(没有继承),猜测与Sequoia系统记录数据有关。 #### Camera - DirectorCamera - CameraCopySettings - CamTarget - CamTargetManagerActor - DroneCamera ## Material ResArt-CommonMaterial-Material,M_ToonHair_v01。v02为新版。 - CommonMaterial-Functions:ShadingModel的骚操作。 ## Character - BP_Idlo_Base - 继承=> ## LightChannel 1. 角色为LightChannel2。 ## 资源 - Characters:角色蓝图类。 - 命名规则`BP_角色名_XXX` - 由技术同学进行配置, - 主要配置Outline材质。 - DressName(导播软件会) - 动画蓝图:服装布料效果。 - ResArt - CharacterArt - Material - Mesh - Animations - Dissolve:溶解材质,个数与名称需要与角色材质一一对应。 - MakeDissolveMaterial.py生成对应的溶解材质。 - 场景: - BP_ASoulSky:天空盒控制。 - 场景变体:使用UE官方的SceneVariantManager。 - LiveDirector - Editor- SceneVariant :SceneVariantTool - 使用一个工具蓝图来创建场景变体以此来实现场景溶解切换效果。 ### 添加资产流程 #### 角色流程 如果只是修改若干资产数值,需要点击全量生成。(或者直接去修改JSON文件IdolPropAesstConfig) #### 道具流程 Tag可以控制: 1. 谁可以拿 2. 拿的手势 3. 道具类型 4. 左右手的MountPoint数据 #### 场景流程 1. 角色需要`LiveArea`Actor 2. Sequence与Camera需要`CameraRoot`Actor(需要与LiveArea完全重叠) 1. ~~FollowMovementComponent编写各种相机跟踪物体(IdolName、Socket、Bone)~~ 2. 摄像机挂载FollowingComponment。 3. # 实现Sequence控制角色与镜头 1. Sequence镜头控制:屏蔽ASoul系统的镜头控制,屏蔽DirectorCam相关功能。 1. DirectorCam C++目录着重看Subsystem以及CameraManager。 2. 只要的耦合在Puerts脚本中 DirectorCam目录中,TsDirectorCamManagerActor、以及目录下面的StreamDock。 3. 1个LiveArea - 1个WorkShop - 多个CameraGroup - 24个镜头 2. 录制动画/动捕动画切换:修改动画蓝图。将录制的动画塞入。 3. 新添加功能实现24个镜头与Sequence镜头切换,位于DirectorCam - StreamDcok。 # 修型 在动画蓝图节点中,既控制BlendShape也有骨骼。 # StreamDock 1. 有了相关操作后刷新StreamDcok。 2. 配置蓝图。EUWBP_ 1. 与LiveArea有关。 1. Dock实时读取BP_DefaultCamPlacem的目标Serup。 2. 生成LiveArea模板需要使用工具,DirectorTool-生成LiveArea。 # FaceMask位置 P4V - Trunk - tools - ARFaceCap - 版本为Unity2020.1.16 # MotionServer 青瞳 -》 UE版MotionServer 重定向、过滤 -》.net MotionServer转发。 # UE5版本改动 1. 程序方面多了大世界系统逻辑,世界分区(WorldComposition)。其他逻辑是一样的。 2. 材质、渲染:使用一些trick技巧强行在材质中塞入一个宏强行打开CustomData来塞ShadowColor。 ## 版本升级 1. 程序:升级代码后,QA负责测试。 2. TA:效果美术、QA负责观察。 # Content ## Maps ### 开发相关 - Maps - Scenes - Map_LookDev - Map_Hide - Map_Lightt - Map_LookDev:角色LookDev - Map_LookDev_WZY - Map_Props: ### 大世界 - Maps - Map_SeasideCity - Map_SeasideCity - Map_CHNature - Map_CHNature - Map_Stylized_Vilage - Map_Stylized_Vilage - Map_WorlddEnd - Map_WorldEnd 其他用了大世界技术的小型地图: - Maps - Map_GreenScreen:绿幕效果。 - Map_Live:Live场景。