PAG动效框架源码笔记 (二)层级视图

By | 2023年5月16日

转载请注明出处:http://www.olinone.com/

如上章所言,特效播放主要包括应用逻辑处理和图形渲染两个阶段,其中,逻辑处理又可以看做模型对象的定义与流转

模型分层

PAG框架模型大致可以分为三部分:

Alt text

1、组件(PAGCompositon)

PAG框架支持多文件多图层渲染,PAGCompositon组件可以同时容纳多个PAGFile文件,每个PAGFile文件又可以包含多个Layer组件

PAGFile解析自File源文件,其中Layer组件可以支持元素替换,比如可以替换PAGImageLayer中PAGImage资源对象,从而实现自定义融合元素

2、图层(PAGStage)

PAGStage承载了完整的组件图层,记录了每个组件及其资源对象的映射关系,比如PAGImage及其关联的PAGImageLayer对象,实现通过资源对象查找对应Layer对象的能力

此外,PAGStage通过SequenceCache还缓存了资源对象与Graphic视图对象的映射关系,类似于渲染缓存的职责

3、图形(LayerGraphic)

组件模块加上时间戳,就生成对应时刻的图形对象Graphic,比如纹理图形Picture,或者文本图形Text

LayerGraphic作为图形模型的容器,继承自ComposeGraphic对象,包含当前播放时刻所有的图像对象,每一个图形对象可以通过装饰器添加裁切或者蒙版等多种处理效果

源码浅析

1、File文件解析

2、PAGFile构造

3、PAGStage图层填充

4、Graphic图形生成

总结

为了支持多文件多图层渲染,PAG框架设计了一套完整的框架模型,其复杂的对象继承关系,加深了代码阅读理解难度,在理解其设计思路后,才能知其然知其所以然


写在文后:

本文并未提及File文件解析过程,主要原因在于我们项目中特效使用MP4文件实现,因此暂未细研其技术细节,后续有机会再单开细聊

PAG官方暂未开源文件生成源码,如果只是针对传统的礼物特效场景,可以尝试使用MP4作为替换容器

^-^

4 thoughts on “PAG动效框架源码笔记 (二)层级视图

  1. 匿名

    PAGComposition是PAGFile的父类啊,PAGComposition中存储的是PAGLayer吧,感觉框架图有问题

    Reply
  2. 匿名

    PAGComposition是PAGFile的父类吧,存储的只是PAGLayer,感觉框架图有问题

    Reply
    1. 庞海礁 Post author

      这里不是继承关系图,当多个文件组合时,PAGComposition是一个容器,包含多个PAGFile

      Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注