BlueRoseNote/02-Note/ASoul/导播操作笔记.md

19 KiB
Raw Blame History

TODO

  1. 项目目录中的EditorTools\Python\MaterialSetCharacter\SetCharacter.py 是否是不需要使用的?
    1. 以前使用的工具脚本,可以不用。
  2. 思诺生日会
    1. 道具衣服导入流程。
    2. 直播流程跑通
  3. Sequence播放逻辑跑通。
    1. 使用c++实现一个新轨道以此来捕捉当前的对应角色Actor的引用。
    2. 在播放最后放置Cut/Take逻辑
    3. 将这个播放功能放到4级里。
  4. DCC插件
    • 角色、衣服重新绑定。以及重定向。
      • 角色裸模,骨骼权重传递给衣服。之后修改轴向脚本。
    • 动画蓝图中的ASoul自研修形插件匹配。也就是在Maya中输出一个骨骼以及BlendShape信息JSON之后导入UE。
  5. ChaosBone
    1. 参考资产KawaiiPhysics与ChaosBone混用Content\ResArt\CharacterArt\BeiLa\BeiLa_SwimSuit\Animations\ABP_SK_BeiLa_Swimsuit_PostProcess.uasset
  6. 考虑将Sequence TakeRecord功能移植到导播台项目中先确定可能性

Console

  1. run0
  2. run3运行三级导播。

直播流程

PS.

  1. 码率12000、1080p 一个画面 35Mbps上下行。外部直播需要准备主备路2条ASoul主线路200M上下行对等。

导播台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_WinPVW预览屏、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. DesignerStreamDock插件相关包括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-studioOBS源码添加了若干插件但用不了因为技术服务属于字节。
    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. RuntimeEditorASoul导播台的实时编辑器模块。
  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. JNAnimation空。
  2. JNAnimationEd定义动画节点AnimGraphNode_JNPoseDriver
  3. JNCustomAssetEd定义角色蒙皮修形资产。定义数据格式位于UJNPoseDriverAsset
  4. 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

USTRUCT(BlueprintType)
struct FDrivenInfos
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> BlendShape;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> Joint;
};


USTRUCT(BlueprintType)
struct FAniCruveInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> Input;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FDrivenInfos DrivenInfos;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> Tangent;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> OutTangent;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> InTangent;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> Value;
};

USTRUCT(BlueprintType)
struct FPSDAniCurveInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> B;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> U;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> D;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> F;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> DF;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> UF;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> DB;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> UB;
};

USTRUCT(BlueprintType)
struct FPSDSloverInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FPSDAniCurveInfo aniCurveInfos;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString driver;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> matrix;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString parent;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> aimAxis;
};

USTRUCT(BlueprintType)
struct FLinearSolverInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	float coefficient;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString attribute;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FAniCruveInfo> aniCurveInfos;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString driver;
};

USTRUCT(BlueprintType)
struct FComposeDriverInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> curveName;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> blendshape;
	
};

USTRUCT(BlueprintType)
struct FSkinWeightDriverInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	int index;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString joint;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> influenceObjects;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> weights;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<float> initPoint;
	
};

USTRUCT(BlueprintType)
struct FTwistSloverInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FString inputJoint;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	int twistAxis;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FString> twistJoints;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	bool isReverse;
};

USTRUCT(BlueprintType)
struct FPoseDriverSolversInfo
{
	GENERATED_BODY()
public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FPSDSloverInfo> psdSolvers;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FLinearSolverInfo> linearSolvers;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FComposeDriverInfo> composeDrivers;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FSkinWeightDriverInfo> skinWeightDrivers;
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	TArray<FTwistSloverInfo> twistSolvers;
};

UCLASS(BlueprintType)
class JNCUSTOMASSET_API UJNPoseDriverAsset : public UBaseJsonAsset
{
	GENERATED_BODY()
public:
	virtual bool ParseFromJsonObject(const TSharedRef<FJsonObject>& JsonObjectRef) override;

public:
	UPROPERTY(BlueprintReadWrite, EditDefaultsOnly)
	FPoseDriverSolversInfo SloversInfo;
};

JNAnimationTools

Script

  1. DirectorCam与24个镜头相关。
  2. EditorRuntimeEditor相关。
  3. LiveDirector
    1. Character/TsIdolActor.ts角色流程#TsIdolActor.ts
  4. Camera
  5. Characrer:
  6. Danma:弹幕相关View以及控制。
  7. DeckLinkViewProcess视频处理叠加UI之类的操作。
  8. DecorationUI UMG类定义。
  9. DeviceINputActorMedia以及串口控制器Actor
  10. DirectorFrameWorkGameMode、Contorl、 UIManage之类的通用框架。
  11. DirectorToolMenu编辑器UI相关。
  12. Level场景切换控制器。
  13. LiveArea直播区域。
  14. MapEnvironmentLevel里的效果以及相关逻辑。天气控制。
  15. Pico相关。
  16. Prop道具相关道具。
  17. QuickControl简单UI控制器。
  18. ScreenPlayerTextureRenderer将视频渲染成贴图之后再场景中渲染。
  19. SeiSenderOBS 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. BlackMagicInputUE官方移植视频采集卡。
    2. BlackMagicOutputUE官方移植视频采集卡。
    3. DeckLinkOuputUE官方移植视频采集卡。
    4. GameCluster未完成
  6. MultiViewRenderer20个View的UI相关。
  7. UIModuleUI样式定义功能。

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-MaterialM_ToonHair_v01。v02为新版。

  • CommonMaterial-FunctionsShadingModel的骚操作。

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. 角色需要LiveAreaActor
  2. Sequence与Camera需要CameraRootActor需要与LiveArea完全重叠
    1. FollowMovementComponent编写各种相机跟踪物体IdolName、Socket、Bone
    2. 摄像机挂载FollowingComponment。

实现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_LiveLive场景。