AEJoy —— 表达式之通过 sampleImage() 营造遮蔽效果【JS】

610 阅读2分钟

效果图

099.gif

想法

sampleImage() 是 AE 表达式库中一个强大的新成员,它为许多新的可能性打开了大门。一种想法是使用 “遮蔽” 层在另一层上调节光源的强度。作为一个具体的例子,让我们看看如何使用 sampleImage() 来让云层影响镜头光晕的强度。

设计

首先,我们需要创建一个云层。我们可以使用 AE 的分形噪声效果,然后应用 Knoll Unmult 效果(在红巨人软件免费)创建一个 alpha 通道(这样任何底层图层都是可见的)。然后我们可以在云层下面的一层上应用镜头光晕。再然后我们可以添加一个sampleImage() 表达式到镜头光晕的 Flare Brightness 参数。作为一个样本点,我们将使用镜头光晕的 Flare Center 参数(但应用于云层)。我们将指定一个 7*7 像素的样本区域(这似乎在代表性的样本大小和渲染时间之间取得了很好的平衡)。

注意,sampleImage() 将接受最多四个参数,但在本例中,我们只需要指定前两个参数,因为第三和第四个参数的默认值已经是我们需要的。如果我们需要在蒙版或效果应用之前进行采样,我们可以将第三个参数设置为 false ,但因为我们需要在效果之后进行采样(因为云和 alpha 通道是由效果生成的),所以我们只接受默认值 true

一旦我们从云层中检索到样本数据,我们就可以使用索引为 3 (第四个通道)的方法从返回的 [r,g,b,a] 数组中分离 alpha 值。由于返回的颜色和 alpha 值是介于 0.0 和 1.0 之间的数字,我们将使用我们的老朋友 linear() 来将 alpha 值转换为适当的耀光亮度对应值。

表达式代码

target = thisComp.layer("clouds");

/// @note 每个方向 3.5 个像素,构成了 7*7 的采样区域
/// 通过 sampleImage 返回该区域的平均(alpha)值
alpha = target.sampleImage(effect("Lens Flare")("Flare Center"),[3.5, 3.5])[3];
linear(alpha, 0, 0.36, 80, 10) 

(完)