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。
|
2. 取得ESequoiaEvaluateMode为EEM_Inside与EEM_JumpIn的所有EvalSections。
|
||||||
3. 判断Template是否发生改变,如果改变则调用`evalTemplate.SetTemplateSource()`。
|
3. 判断Template是否发生改变,如果改变则调用`evalTemplate.SetTemplateSource()`。
|
||||||
4. 调用`evalTemplate::Evaluate()`。
|
4. 调用`evalTemplate::Evaluate()`。
|
||||||
|
## SequoiaCamSection =>
|
||||||
## ISequoiaEvalTemplate(SequoiaCamShotEvalTemplate)
|
|
||||||
- InitTemplate:
|
|
||||||
- SetTemplateSource
|
|
||||||
- Evaluate
|
|
||||||
|
|
||||||
## SequoiaCamSection
|
|
||||||
SequoiaCamSection => TsSequoiaSection。
|
SequoiaCamSection => TsSequoiaSection。
|
||||||
- 数据Model类使用SequoiaCamSectionModel。
|
- 数据Model类使用SequoiaCamSectionModel。
|
||||||
- SequoiaCamShotEvalTemplate
|
- 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()
|
DirectorCamSequoiaHandle.PlayCamShotSection()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user