vault backup: 2024-11-27 17:06:35

This commit is contained in:
BlueRose 2024-11-27 17:06:35 +08:00
parent 433214fead
commit 37044d0f3d
2 changed files with 74 additions and 23 deletions

View File

@ -1,16 +0,0 @@
# Motion写入逻辑
正确导入Motion的Log
```c++
[2024.10.23-05.22.35:360][637]LogSequoia: SequoiaFileRefPool:: Load FileRef start ++++++:C:/LiveDirectorSaved/Sequoia/心宜思诺一周年/LIKE THAT.Sequoia/1D20B3CA4D4B5CED1D7312AE0D9EBF9F.motion
```
错误
```c++
LogSequoia: SequoiaData file ref load complete, sequoiaPath = :/Sequoia/心宜思诺一周年/初智齿.Sequoia/初智齿.json
```
## 录制逻辑
LogSequoia: UMotionCaptureRecorder::StartRecord start record motion frames from avatar:Idol.F07
LogSequoia: UMotionCaptureRecorder::StopRecordstop record motion frames from avatar:Idol.F07, frames:0

View File

@ -120,16 +120,83 @@ OnEvaluate(EvalSections: $Ref<UE.TArray<UE.SequoiaEvalSection>>, EvalStartTime:
2. 取得ESequoiaEvaluateMode为EEM_Inside与EEM_JumpIn的所有EvalSections。
3. 判断Template是否发生改变如果改变则调用`evalTemplate.SetTemplateSource()`
4. 调用`evalTemplate::Evaluate()`
## ISequoiaEvalTemplateSequoiaCamShotEvalTemplate
- InitTemplate
- SetTemplateSource
- Evaluate
## SequoiaCamSection
## SequoiaCamSection =>
SequoiaCamSection => TsSequoiaSection。
- 数据Model类使用SequoiaCamSectionModel。
- SequoiaCamShotEvalTemplate
## ISequoiaEvalTemplateSequoiaCamShotEvalTemplate
- InitTemplate
- SetTemplateSource用来设置对应的*ICamShotEvalHandle*
- Evaluate
ISequoiaEvalTemplate => ICamShotEvalHandle.Eval()
在计算Section、以及FrameOffset参数之后调用***DirectorCamSequoiaHandle.PlayCamShotSection()***在创建newTask***CamTaskDataRPC***之后最终会调用directorCamManager.RequestPGMTaskServerUnreliable()/RequestPVWTaskServer()进入导播系统循环。
```ts
let newTask = new UE.CamTaskDataRPC()
newTask.WorkShopId = DirectorCamUtil.CopyGuid(workShopId)
newTask.CamGroupId = DirectorCamUtil.CopyGuid(camSection.camGroupId)
newTask.CamIndex = camSection.camIndex
newTask.StartFrame = camSection.GetStartFrameOffset().Value + frameOffset
newTask.bPreviewOneFrame = bPreviewOneFrame
```
## DirectorCamManager
1. this.RequestPVWTask(newPVWTaskData)
2. this.HandlePreStreamTaskDataMulticast(newPVWTaskData)
1. DirectorCamUtil.EnsureWorkShopReady()确保WorkShop有效并且已经初始化之后就调用对应函数。
1. DirectorEventSystem.Emit(this, DirectorEvent.OnPVWTaskRequested)
2. this.HandlePreStreamTaskByNetTag()
1. PVW => this.HandlePVWTask()
1. DirectorCamUtil.SubmitNewCommandIfDataNotChanged()
3.  this.RecordLastPVWTime()
### HandlePVWTask()
```ts
HandlePVWTask(): void {
if(!DirectorCamUtil.SubmitNewCommandIfDataNotChanged(this.preStreamTask, this.prestreamTaskData)){
if (this.preStreamTask) {
this.preStreamTask.Stop()
}
this.preStreamTask = DirectorCamUtil.CreateCamTask(this, this.prestreamTaskData, CamTaskType.FullStream, this.droneCamera,
this.PVWWindow, this.handHeldCamera)
if (this.preStreamTask) {
this.preStreamTask.Start()
if (this.PVWWindow) {
this.PVWWindow.SetViewBorderColor(0, new UE.LinearColor(0, 1, 0, 1))
}
console.log('PVW Task: ' + this.preStreamTask.workShop.BindPlacement.Title + " " + this.preStreamTask.groupName + " " +
this.preStreamTask.camName)
}
}
}
```
通过DirectorCamUtil.SubmitNewCommandIfDataNotChanged()判断CamTaskDataRPC是否相同如果Camera机位相同则直接提交。
如果不同,比如换机位了,就调用
`DirectorCamUtil.CreateCamTask() => this.preStreamTask.Start()`
来发送新的任务。
```ts
export function SubmitNewCommandIfDataNotChanged(task : DirectorCamTask, taskData : UE.CamTaskDataRPC):boolean{
let bSubmitSuccess = false
if(task && taskData){
let bWorkShopEqual = IsGuidEqual(task.workShopId, taskData.WorkShopId)
let bCamGroupEqual = IsGuidEqual(task.groupId, taskData.CamGroupId)
let bCamIndexEqual = task.GetMainCamIndex() == taskData.CamIndex
let bNotSpecialCam = taskData.CamIndex != HANDHELD_CAM_INDEX && taskData.CamIndex != DRONE_CAM_INDEX
if(bWorkShopEqual && bCamGroupEqual && bCamIndexEqual && bNotSpecialCam){
// submit new cmd
task.SubmitNewCommand(taskData)
bSubmitSuccess = true
}
}
return bSubmitSuccess
}
```
## 裁剪相关逻辑
DirectorCamSequoiaHandle.PlayCamShotSection()