After Effects CC SDK 使用指南(五)—— 第二章 Effects基础 (2)

560 阅读18分钟

第二章 Effects基础

其他文章链接

  • 第一章 介绍
  • 第二章 Effects基础
    • 1
    • 2

PF_OUTDATA

使用 PF_OutData 将插件所做的更改传递给After Effects。将记录更改这些字段的有效时间。

表6:PF_OUTDATA

字段名描述
my_version将这个标志(使用 PF_VERSION 宏)设置为插件代码的版本。After Effects使用这个数据来决定加载哪个重复的效果。
name未使用
global_data将在每次调用 PF_InData 中返回给你的句柄。使用After Effects的内存分配函数。
num_paramsAfter Effects根据调用 PF_ADD_PARAM 的次数检查这个字段,以及隐式输入层。
sequence_data这个句柄在接收到 PF_Cmd_SEQUENCE_SETUP 后即可分配,在所有后续调用中,这个句柄将在 PF_InData 中传递给你。
flat_sdata_size未使用(After Effects知道大小,因为您使用它的分配函数在第一个地方获得内存)。
frame_dataPF_Cmd_FRAME_SETUP 期间分配的句柄。这永远不会写入磁盘;它用于将信息从您的PF_Cmd_FRAME_SETUP 响应传递到您的 PF_Cmd_RENDERPF_Cmd_FRAME_SETDOWN (如果您调整输出缓冲区的大小,必须这样做)。否则,此内存很少使用。
width, height, origin如果输出图像大小与输入不同,请在 PF_Cmd_FRAME_SETUP 期间进行设置。宽度和高度是输出缓冲区的大小,而原点是输入应该映射到输出中的点。要创建一个5像素的上下投影,将原点设置为(5,5)。
out_flags发送消息到After Effects。或多个值一起。
return_msgAfter Effects会显示你在这里放置的任何C字符串(在每个命令选择器之后勾选并清除)。
start_sampL
dur_sampL
dest_snd
仅用于音频命令
out_flags2发送消息到After Effects。或多个值一起。

PF_OUTFLAGS

这些标志将功能和状态信息传递给After Effects。在以前的版本中,它们还用于发送基本消息,例如刷新UI,发送错误消息。这些功能已经被功能套件所取代,所有新的消息传递功能都将以这种格式出现。但是,能力标志仍然包含在PiPL中。在进行更改时,同时更新PiPL和源代码。许多这些标志可以在After Effects会话中更改。

表7:PF_OUTFLAGS

字段名含义
PF_OutFlag_KEEP_RESOURCE_OPEN插件的资源必须在所有命令执行期间可用。在 PF_Cmd_GLOBAL_SETUP 期间,插件的资源总是打开的,但是在其他任何时候都不可用( PF_Cmd_ABOUTPF_Cmd_DO_DIALOG 期间除外),除非设置了这个标志。如果您需要在 PF_Cmd_GLOBAL_SETUP 期间以外的任何时间访问资源,请进行设置。注意:我们建议插件在全局数据中加载和存储必要的资源,而不是保持文件的资源打开
PF_OutFlag_WIDE_TIME_INPUT该效果在除 current_time 以外的时间检出一个参数。如果你使用另一个时间的参数(包括层参数),设置这个标志。否则,After Effects不会正确地无效缓存帧使用的效果。在PF_Cmd_GLOBAL_SETUP 里设置。
如果您设置了这个标志,我们强烈建议您也设置PF_OutFlag2_AUTOMATIC_WIDE_TIME_INPUT 以获得更好的性能。
PF_OutFlag_NON_PARAM_VARY设置了这个标志后,当效果应用到静态效果时,After Effects将不会缓存输出。否则,如果可能的话,After Effects将缓存你的输出以用于渲染其他帧。
如果输出基于参数值以外的内容而变化,则设置此标志。如果效果产生变化帧时,应用到静止的图像和所有参数都是恒定的,这是一个确定的标志,这一点应该设置(如波曲)。例如,粒子效果就需要这个。
PF_Cmd_GLOBAL_SETUP 里设置。如果需要,可以在PF_Cmd_QUERY_DYNAMIC_FLAGS 期间动态重写。在可能的情况下关闭此功能以提高性能。
PF_OutFlag_RESERVED6未使用。
以前是 PF_OutFlag_SEND_PARAMS_UPDATE。被 PF_OutFlag_REFRESH_UI 取代。
PF_OutFlag_SEQUENCE_DATA_NEEDS_FLATTENINGAfter Effects和Premiere Pro都假设设置了这个标志。当序列数据包含引用项(指针、句柄)时,扁平化是必要的,这些引用项必须扁平化以用于存储,而非扁平化以用于使用。参考 PF_Cmd_SEQUENCE_RESETUP
PF_OutFlag_I_DO_DIALOG效果显示对话框响应 PF_Cmd_DO_DIALOG。在 PF_Cmd_GLOBAL_SETUP 中设置,在 PF_Cmd_SEQUENCE_SETUP 中检查。
注意:效果对 PF_OutFlag_I_DO_DIALOG 的响应是不可撤销的。您可以在自定义UI中使用任意数据,如果需要这样的更改的话。
PF_OutFlag_USE_OUTPUT_EXTENT效果会尊重 extent_rect 的输出。在 PF_Cmd_GLOBAL_SETUP 设置。详细信息请参见本章末尾的正确用法。
注意:在SmartFX里不再使用
PF_OutFlag_SEND_DO_DIALOG效果必须显示对话框功能(添加为兼容Photoshop插件)。After Effects发送PF_Cmd_SEQUENCE_SETUP 后的 PF_Cmd_DO_DIALOG 。在 PF_Cmd_SEQUENCE_RESETUP 期间设置,而不是在PF_Cmd_GLOBAL_SETUP 期间设置。
PF_OutFlag_DISPLAY_ERROR_MESSAGE在错误对话框中显示 return_msg 的内容。当 return_msg 为非null时,After Effects会在一个对话框中显示内容,如果设置了这个标志,将会出现一个错误对话框。在任何命令之后设置,并且可以在调试过程中使用。这也是为试用版本实现nag消息的好方法。
PF_OutFlag_I_EXPAND_BUFFEREffect扩展输出缓冲区。在 PF_Cmd_GLOBAL_SETUP 设置。设置这个标志和 PF_OutFlag_USE_OUTPUT_EXTENT 以在 PF_Cmd_FRAME_SETUP 期间使用输出 extent_rect 和新的缓冲区大小的交集。使用 pre_effect_source_origin 字段来检测其他转换。
注意:只有在需要时才设置这个标志;它大大降低了缓存效率
注意:在SmartFX里不再使用
PF_OutFlag_PIX_INDEPENDENT一个给定的像素独立于它周围的像素。在 PF_Cmd_GLOBAL_SETUPPF_Cmd_QUERY_DYNAMIC_FLAGS 中设置。例如,颜色校正效果通常是像素独立的,而畸变则不是。
注意:如果你的效果不使用一个像素的颜色值来影响相邻像素的颜色值,设置这个标志!它可以提供显著的性能改进。
PF_OutFlag_I_WRITE_INPUT_BUFFER效果写入输入缓冲区。这是有限的用途;在保存分配时,它会使一些管道缓存失效。在 PF_Cmd_GLOBAL_SETUP 设置。
PF_OutFlag_I_SHRINK_BUFFER这种效果会基于 extent_rect 收缩其缓冲区,以获得更高的内存效率。在 PF_Cmd_GLOBAL_SETUP 期间尽可能进行设置。
注意:在SmartFX里不再使用
PF_OutFlag_WORKS_IN_PLACE未使用
PF_OutFlag_SQUARE_PIX_ONLY未使用
PF_OutFlag_CUSTOM_UI该效果有一个自定义用户界面,需要 PF_Cmd_EVENT 消息。在 PF_Cmd_GLOBAL_SETUP 设置。
PF_OutFlag_RESERVED5未使用
PF_OutFlag_REFRESH_UI刷新整个效果控件、合成和图层窗口。在 PF_Cmd_EVENT , PF_Cmd_RENDERPF_Cmd_DO_DIALOG 中设置。如果在 PF_Cmd_EVENT 期间刷新自定义UI,我们建议使用更细粒度的新重绘机制。
PF_OutFlag_NOP_RENDERPF_Cmd_FRAME_SETUP 期间设置此标志以使当前呈现无效。
PF_OutFlag_I_USE_SHUTTER_ANGLE表示渲染的图像取决于 shutter_angle 的值。
PF_OutFlag_I_USE_AUDIO效果的参数依赖于音频数据,使用 PF_CHECKOUT_LAYER_AUDIO 获得。
PF_OutFlag_I_AM_OBSOLETEEffect可以在使用它最初应用的旧项目时使用,但没有出现在效果菜单中。
PF_OutFlag_FORCE_RERENDER效果进行了更改,需要重新渲染。PF_ChangeFlag_CHANGED_VALUE 也强制重新渲染。
PF_OutFlag_PiPL_OVERRIDES_OUTDATA_OUTFLAGSAfter Effects将使用PiPL出标,并忽略那些在 PF_Cmd_GLOBAL_SETUP 期间设置的。
PF_OutFlag_I_HAVE_EXTERNAL_DEPENDENCIES效果取决于外部文件(或外部字体)。如果设置,After Effects发送 PF_Cmd_GET_EXTERNAL_DEPENDENCIES
PF_OutFlag_DEEP_COLOR_AWARE效果处理16 bpc颜色
PF_OutFlag_SEND_UPDATE_PARAMS_UIPF_Cmd_GLOBAL_SETUP 期间设置这个标志来接收 PF_Cmd_UPDATE_PARAMS_UI
PF_OutFlag_AUDIO_FLOAT_ONLY效果需要 PF_SIGNED_FLOAT 格式的音频数据。After Effects将执行任何所需的格式转换。你也必须设置 PF_OutFlag_AUDIO_EFFECT_TOOPF_OutFlag_AUDIO_EFFECT_ONLY
PF_OutFlag_AUDIO_IIR如果(音频)效果是无限脉冲响应滤波器,在 PF_Cmd_GLOBAL_SETUP 期间设置。如果给定时间的输出依赖于以前时间的输出,则这是正确的。当IIR滤波器接收到 PF_Cmd_AUDIO_RENDER 时,输入音频时间跨度与输出音频时间跨度相同(当它们与 PF_Cmd_AUDIO_SETUP 中请求的输出时间跨度相交时)。为了响应 PF_Cmd_AUDIO_SETUP ,过滤器可以请求早期的音频(至于延迟效果)。过滤器可以访问早期的参数,并且应该将它们(连同临时音频)缓存在序列数据中。如果生成的音频与请求输出音频的时间不一致,则输出音频的持续时间应设置为零。该滤波器可以利用参数和输入音频更新其延迟线。缓存了它的延迟线后,在 PF_Cmd_AUDIO_SETUP 期间根据最后缓存的延迟线请求更多的输入音频。使用 PF_HasParamChanged 来确定缓存是否有效。
PF_OutFlag_I_SYNTHESIZE_AUDIO如果效果产生音频,则在 PF_Cmd_GLOBAL_SETUP 时间内设置,即使经过静音。你也必须设置 PF_OutFlag_AUDIO_EFFECT_TOOPF_OutFlag_AUDIO_EFFECT_ONLY
PF_OutFlag_AUDIO_EFFECT_TOO如果效果改变音频,请在 PF_Cmd_GLOBAL_SETUP 期间设置。
PF_OutFlag_AUDIO_EFFECT_ONLY如果效果只改变音频输出,请在 PF_Cmd_GLOBAL_SETUP 期间进行设置。

PF_OUTFLAGS2

我们在After Effects 5.0中添加了第二组输出标记;一方面是为了未来的扩张空间,另一方面是为了打破我们对现有旗帜进行再利用的坏习惯。与PF_OutFlags一样,许多这些标志可以在After Effects会话期间更改。在进行更改时,不要忘记同时更新PiPL和源代码。

字段名含义
PF_OutFlag2_NONENothing
PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS效果响应 PF_Cmd_QUERY_DYNAMIC_FLAGS 。必须在PiPL和PF_Cmd_GLOBAL_SETUP期间设置。
PF_OutFlag2_I_USE_3D_CAMERA该效果可以访问3D摄像机信息
PF_OutFlag2_I_USE_3D_LIGHTS该效果可以访问3D灯光层信息
PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG这个标志本身并不控制 paramtwirlies 的状态。每个单独参数组的初始折叠状态是在 PF_Cmd_PARAM_SETUP 期间通过在 PF_ParamFlags 中设置 pf_paramflag_start_collapse 标志来设置的。但这些个人设置将不会被尊重,除非效果设置这一点。否则,所有参数组将默认折叠。记住在PiPL和 PF_Cmd_GLOBAL_SETUP 期间设置这个标志。
PF_OutFlag2_I_AM_THREADSAFE目前这没有任何作用。如果您对此感兴趣,那么您可能对下面描述的 PF_OutFlag2_PPRO_DO_NOT_CLONE_SEQUENCE_DATA_FOR_RENDER 感兴趣。
PF_OutFlag2_CAN_COMBINE_WITH_DESTINATION最初添加的Premiere使用,但不再使用。
PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS添加渲染优化;收缩传递到效果的输入缓冲区以排除任何空像素(其中空意味着“零alpha”除非 PF_OutFlag2_REVEALS_ZERO_ALPHA 设置,在这种情况下RGB也必须为零)。
PF_Cmd_GLOBAL_SETUPPF_Cmd_QUERY_DYNAMIC_FLAGS 中设置。被修剪缓冲区的来源可以在 in_data>pre_effect_source_origin 中找到。这个标志和 PF_OutFlag_I_EXPAND_BUFFER 集合的效果可能会在输入缓冲区为空时被调用,并且必须能够在不崩溃的情况下处理这种情况。
注意:这个标志会导致输出缓冲区的大小发生改变。
注意:在 SmartFX 里不再使用
PF_OutFlag2_REVEALS_ZERO_ALPHA这是标志实现者最需要注意的一点,因为它表示默认行为中的一个更改。如果效果可以采用零alpha像素并显示其中的RGB数据,则设置此标志(就像我们的Set Channels效果)。这告诉After Effects在确定输入效果时不要修剪这些像素。这个标志可以在 PF_Cmd_QUERY_DYNAMIC_FLAGS 期间更改。请注意,虽然这个标志会导致 extent_hint 的大小发生变化,但它不会改变图像缓冲区的大小。
在6.0版本中,蒙版边界框外的像素被置零。如果你的效果可以显示这样的像素,告诉AE不要通过设置这个标志来丢弃这些RGB值。如果你的效果不总是显示这样的像素,动态设置这个位
要查看你的效果是否需要设置这个位,应用一个明显小于该层的蒙版到一个固体,然后应用效果并设置它的阿尔法修改状态。如果遮罩的矩形边界框变得可见,则需要将此位设置为集。
PF_OutFlag2_PRESERVES_FULLY_OPAQUE_PIXELS保护那些像素!
PF_OutFlag2_SUPPORTS_SMART_RENDER该效果使用SmartFX API。
PF_OutFlag2_FLOAT_COLOR_AWARE该效果支持32 bpc浮点颜色表示。
注意: PF_OutFlag2_SUPPORTS_SMART_RENDER 也必须设置。
PF_OutFlag2_I_USE_COLORSPACE_ENUMERATION这是用于在Premiere Pro中优化不同颜色空间的效果。更多细节请参见 Premiere Pro SDK
PF_OutFlag2_I_AM_DEPRECATEDPF_Cmd_GLOBAL_SETUP 期间设置这个效果,将其放在本地化的“Obsolete”文件夹中,在效果面板中。比较 PF_OutFlag_I_AM_OBSOLETE
PF_OutFlag2_PPRO_DO_NOT_CLONE_SEQUENCE_DATA_FOR_RENDER支持在Premiere Pro,而不是在After Effects。这将影响Premiere Pro如何使用多线程驱动插件。
PF_OutFlag2_AUTOMATIC_WIDE_-TIME_INPUTPF_Cmd_GLOBAL_SETUP 设置。需要设置 PF_OutFlag_WIDE_TIME_INPUT (这允许您支持旧主机),但实际上会覆盖该标志。
设置后,将跟踪所有参数签出,以便主机了解超时依赖关系,从而更加高效。例如,如果您只设置了旧的 PF_OutFlag_WIDE_TIME_INPUT,那么任何时候任何东西发生变化,都将被调用来重新呈现。有了这个标志,如果给定的第17帧已经检出了0-17次的内容,AE将知道在第18帧以上的任何更改都不会影响缓存的帧。
注意,如果你使用这个新标志,你一定不能在你的序列数据中缓存任何时间相关的数据(或任何其他地方),除非你也验证缓存使用 PF_GetCurrentState() / PF_AreStatesIdentical() 之前使用时间依赖的数据。
这只适用于SmartFX(那些设置 PF_OutFlag2_SUPPORTS_SMART_RENDER )。如果你没有设置,After Effects将会默默地将其作为 PF_OutFlag_WIDE_TIME_INPUT 代替。
PF_OutFlag2_I_USE_COMP_TIMECODEPF_Cmd_GLOBAL_SETUP 设置。这让AE知道,如果合成开始时间和/或下拉框设置被修改,它应该渲染一个效果。
PF_OutFlag2_DEPENDS_ON_UNREFERENCED_MASKSCS6新增。如果你要查看路径参数中没有直接引用的路径,设置这个,例如,如果你要在所有蒙版上画一个描边。这是需要的,所以After Effects知道,当一个蒙版被修改时,没有显示被你的效果引用,你的输出无效。在 PF_Cmd_GLOBAL_SETUPPF_Cmd_QUERY_DYNAMIC_FLAGS 中设置。
PF_OutFlag2_OUTPUT_IS_WATERMARKEDCS6新增。在 PF_Cmd_GLOBAL_SETUP 期间设置此值,如果您的输出将以某种方式加上水印,使其不适合最终使用,可能是因为用户使用的是未授权的演示版本。在 PF_Cmd_QUERY_DYNAMIC_FLAGS 的应用会话过程中改变这种状态是可以的,例如浮动的许可证状态发生了变化。
真正异步改变这个状态的插件作者必须小心让下一个呈现匹配从 PF_Cmd_QUERY_DYNAMIC_FLAGS 返回的最后一个状态,否则竞争条件可能会导致不正确的帧被缓存。(如果你只在响应 DO_DIALOG 时修改这个,这就不是问题了。)
PF_OutFlag2_SUPPORTS_GPU_RENDER_F3216.0新增。在 PF_Cmd_GLOBAL_SETUP 中设置,这表示GPU支持。该效果将被GPU选择器调用,并将在GUI中标记为GPU支持。在 PF_Cmd_GPU_DEVICE_SETUP 时,这些标志表示特定设备和框架的呈现能力。

参数

参数是随时间变化的值流;源图像、滑块、角度、点、颜色、路径和用户可以操作的任何任意数据类型。它们以 PF_ParamDefs 数组的形式传递给插件,不过数组中的值仅在某些选择器中有效。

After Effects Effect API最好的方面之一是参数插值和管理。在29.97帧的四分之一帧中快门角度变化了多少?不是你的问题;把它留给After Effects。

使用 PF_ADD_PARAM()PF_Cmd_PARAMS_SETUP 期间描述插件的参数。您可能有多达(大约)38 kajillion参数,或尽可能多的用户愿意筛选,然后要求退款。做出明智的选择。

通过在注册 PF_ParamDefs 之前使用 AEFX_CLR_STRUCT (在 AE_Macros.h 中定义)清除 PF_ParamDefs 来避免无数的问题。

表9:参数类型

参数类型参数类型
PF_ParamDefUnion 成员
参数值数据类型
描述
PF_Param_LAYERPF_LayerDef
ld
A_long
图像和音频层的组成。所有效果自动有至少一个层参数,参数[0],他们被应用的层。
当作为效果参数使用时,这些显示为一个下拉菜单,用户在当前组合中选择一个层。下拉菜单内容由After Effects生成。
注意:这是一个包含像素和音频样本的层的参考,而不是实际的像素和音频样本。
PF_Param_SLIDERPF_SliderDef
sd
long
不再使用
PF_Param_FIX_SLIDERPF_FixedSliderDef
fd
PF_Fixed
弃用。多年来,我们一直在推广固定滑块。现在我们推荐 pf_param_float_slider 。额外的精度在很多情况下都有帮助,而且不像以前那样昂贵。另外,我们厌倦了低字节/高字节的愚蠢。
fix_slider 提供比 PF_Param_SLIDER 更高的精度。独立指定UI的小数位。忽略 PF_Fixed 的低字以获得积分结果。
PF_Param_FLOAT_-SLIDERPF_FloatSliderDef
fs_d
PF_FPLong
滑块表示数值。 float_slider 包含音频滤波器使用的相位、精度和曲线公差值。指定最小值和最大值,用户可以移动滑块或键入数字来指定设置。
pf_param_float_slider 也响应音频过滤器中讨论的滑块标志。
PF_Param_ANGLEPF_AngleDef
ad
PF_Fixed
(定点)度的角度,精确到一个度的一小部分。用户可以指定多个转数,导致值大于360。
PF_Param_CHECKBOXPF_CheckBoxDef
bd
PF_Boolean
PF_ParamFlag_CANNOT_INTERP 被强制用于所有复选框。
PF_Param_COLORPF_ColorDef
cd
PF_Pixel
RGB值(不使用alpha值),用户可以使用标准的颜色选择器或吸管工具来选择。为了浮点精度,使用 PF_Color_Param_Suite 来检索值。
PF_Param_POINTPF_PointDef
td
PF_Fixed
一个二维的点。点提供目标层空间中的 xy 值。图层的原点在左上角,随着 x 向右增大, y 向下增大。从CS5.5开始,为了浮点精度,使用 PF_point_Param_Suite 来检索值。
遵循灰尘历史教训:在API规范版本12.1 (After Effects 4.0)之前,点的默认值是0和100之间的固定点,小数点在位16(即标准固定点)。指定定点(50,50)将生成图像的中心。点控制返回的值以绝对像素为单位,具有一定数量的定点精度。因此,如果你将(50,50)作为默认位置,用户将效果应用到一个640 * 480的图层,你将被发送的默认值将是(320,240)固定点。指定12.1之前的API版本的插件仍然会得到旧的行为。
PF_Param_POPUPPF_PopupDef
pd
A_long
选择列表。在 namesptr 中构建一个字符串,包含一个(只读的)弹出项列表(“Entry1|Entry2|Entry3”)。After Effects复制数据并创建一个弹出菜单。一旦添加了参数,就不能修改这些条目。
一个“(-”条目将导致在前一个条目和后一个条目之间绘制一个分隔符。
PF_Param_ARBITRARY_DATAPF_ArbitraryDef
arb_d
???
自定义数据类型。任意参数包含一个ID(您可以在一个给定的效果中使用多个自定义数据类型)、一个默认值(因此After Effects知道您的数据类型应该作为什么开始)和一个实际参数句柄。
AE中必须指定 PF_PUI_TOPIC/PF_PUI_CONTROLPF_PUI_NO_ECW。在pro 8.0及更高版本中,可以不设置任何这些标志,这允许你在不创建自定义控件的情况下在效果控件的右侧看到参数的关键帧轨迹。
PF_Param_PATHPF_PathDef
path_d
PF_PathID
路径参数引用的蒙版应用于同一层的效果。不能直接访问路径参数数据;使用 PF_PathQuerySuitePF_PathDataSuite 来管理和查询路径。
PF_PathDef.Path_id 包含用户选择的掩码的索引。对应的 AEGP_MaskRefH 可以通过AEGP_GetLayerMaskByIndex 获得。
PF_Param_GROUP_START

PF_Param_GROUP_END
-参数组(主题)将参数组织成集合。每个组接收自己的旋转,并将在ECP中相对于相邻的参数或组缩进。一个组可以嵌套在另一个组中。每个旋转可以由用户旋转打开或关闭,或通过编程的效果。该效应可以选择将某些组初始化为旋转旋转打开,而其他组初始化为旋转旋转关闭。
PF_Param_BUTTONPF_Button
button_d
(no value)
在CS5.5到After Effects中。一个简单的按钮。使用参数监控来检测按钮何时被按下。
PF_Param_POINT_3DPF_Point3D
point3d_d
PF_FpLong (3)
CS5.5新增。不支持在Premiere Pro。一个三维点。

滑块范围问题?

如果滑块看起来被禁用了,但没有变灰,请检查 valid_minslider_minvalid_maxslider_max 字段。参数是 PF_Param_FIX_SLIDER 吗?如果有,你是否将你的分和最大值转换成合理的固定值?如果你正在使用AE_Macros.h 中提供的宏,它们期望接收 int;传递固定的点值不起作用。

点参数的起源

After Effects修改任何点参数来解释原点偏移,由“上游”效果引入,修改输出尺寸。即使ECP UI指示点参数的值是(0,0),偏移量也已经被考虑进去了。

原文

Communicate changes made by your plug-in to After Effects using PF_OutData. Valid times for altering these fields are noted.

These flags communicate capability and status information to After Effects. In previous versions they were also used to send rudimentary messages, e.g. refresh the UI, send an error message. These capabilities have been supplanted by function suites, and all new messaging functions will come in that format. However, capability flags are still contained in the PiPL. Update both the PiPL and your source code when you make a change. Many of these flags can be changed during an After Effects session.

We added a second set of outflags in After Effects 5.0; partly for room to expand in the future, and partly to break ourselves of the bad habit of repurposing existing flags. As with PF_OutFlags, many of these flags can be changed during an After Effects session. And don’t forget to update both the PiPL and your source code when you make a change.

Parameters are streams of values that vary with time; the source image, sliders, angles, points, colors, paths, and any arbitrary data types the user can manipulate. They are passed to the plug-in as an array of PF_ParamDefs, though the values in the array are only valid during certain selectors.

One of the best aspects of the After Effects effect API is the parameter interpolation and management. How much does the shutter angle change during one-fourth of a 29.97 fps frame? Not your problem; leave it to After Effects.

Describe your plug-in’s parameters during PF_Cmd_PARAMS_SETUP, using PF_ADD_PARAM(). You may have up to (approximately) 38 kajillion parameters, or as many as your users are willing to sift through before demanding a refund. Choose wisely.

Avoid countless problems by clearing PF_ParamDefs with AEFX_CLR_STRUCT (defined in AE_Macros.h) before registering them.

If your slider seems disabled but not grayed out, check the valid_min, slider_min, valid_max and slider_max fields. Is the param a PF_Param_FIX_SLIDER? If so, did you convert your mins and maxs to reasonable fixed values? If you’re using the macros provided in AE_Macros.h, they’re expecting to receive ints; passing fixed point values won’t work.

After Effects modifies any point parameter to account for origin offset, introduced by “upstream” effects that modify the output dimensions. Even if the ECP UI indicates the value of the point parameter is (0,0), the offset has already been factored in.