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