vault backup: 2024-11-27 17:06:35
This commit is contained in:
parent
433214fead
commit
37044d0f3d
@ -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
|
@ -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()`。
|
||||
|
||||
## ISequoiaEvalTemplate(SequoiaCamShotEvalTemplate)
|
||||
- InitTemplate:
|
||||
- SetTemplateSource
|
||||
- Evaluate
|
||||
|
||||
## SequoiaCamSection
|
||||
## SequoiaCamSection =>
|
||||
SequoiaCamSection => TsSequoiaSection。
|
||||
- 数据Model类使用SequoiaCamSectionModel。
|
||||
- SequoiaCamShotEvalTemplate
|
||||
## ISequoiaEvalTemplate(SequoiaCamShotEvalTemplate)
|
||||
- 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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user