Comp(合成属性和方法)组 提供了一系列用于访问和操作合成属性及其内容(如图层、标记、摄像机等)的工具。通过这些方法,用户可以在表达式中动态控制合成中的元素,实现复杂和自动化的动画效果。
layer(index)
返回指定序号的图层。
参数:
index :表示图层在时间轴中的序号(Number)。序号从上到下编号,1为最上层。
返回值:对应序号的图层、灯光或摄像机对象(Object)。
应用:
通过图层在时间轴中的序号(顺序)检索合成中的图层、灯光或摄像机。
//示例 1:获取第三个图层并调整其不透明度
// 获取合成中的第三个图层
thirdLayer = thisComp.layer(3);
// 将第三个图层的不透明度设置为50%
thirdLayer.opacity = 50;
//示例 2:访问摄像机图层并修改其位置
// 获取合成中的第五个图层(假设是摄像机)
cameraLayer = thisComp.layer(5);
// 修改摄像机的位置
cameraLayer.position = [100, 200, -500];layer(name)
返回指定名称的图层。
参数:
name :图层的名称或源名称(String)。
返回值:与指定名称匹配的第一个图层、灯光或摄像机对象(Object)。
应用:
通过图层名称检索合成中的图层、灯光或摄像机。如果存在同名图层,返回时间轴中第一个(最上层)的图层。
// 获取名称为“mediaTEA”的图层
solidLayer = thisComp.layer("mediaTEA");
// 将该图层的位置设置为合成中心
solidLayer.position = [thisComp.width/2, thisComp.height/2];layer(otherLayer, relIndex)
返回在指定图层的上面或下面的图层(对象)。
参数:
otherLayer :参考的图层对象(Object)。
relIndex :相对索引值(Number)。正数表示在 otherLayer 下方的图层,负数表示在其上方的图层。
返回值:相对于 otherLayer 的指定位置的图层、灯光或摄像机对象(Object)。
应用:
检索相对于指定图层上方或下方的图层、灯光或摄像机。
//获取当前图层下方的图层并调整其不透明度
// 获取当前图层下方的图层
belowLayer = thisComp.layer(thisLayer, 1);
// 将下方图层的不透明度设置为75%
belowLayer.opacity = 75;
//访问上方两个图层的摄像机并修改其位置
// 获取当前图层上方第二个图层(假设是摄像机)
upperCamera = thisComp.layer(thisLayer, -2);
// 修改摄像机的位置
upperCamera.position = [300, 400, -600];marker
访问合成中的所有标记属性。
参数:无
返回值:合成中的标记属性集合。
应用:
当无法通过标记编号直接访问合成标记,可使用 marker.key(name) 方法。
// 示例 1:获取合成中第一个标记的时间
firstMarkerTime = thisComp.marker.key(1).time;
//示例 2:检查当前时间是否在某个标记附近
// 获取最近的标记
nearestMarker = thisComp.marker.nearestKey(time);
// 计算当前时间与最近标记的时间差
d = Math.abs(time - nearestMarker.time);
// 如果时间差小于0.5秒,则执行某操作
if (d < 0.5) {
// 执行操作,例如改变图层颜色
[1, 0, 0, 1]; // 红色
} else {
[0, 1, 0, 1]; // 绿色
}marker.key(index)
获取指定索引的合成标记。
参数:
index :标记的索引号(Number)。
返回值:指定索引的标记对象(Object)。
应用:
索引基于时间顺序,1 为第一个标记。
//示例 1:获取第二个标记的注释
// 获取第二个标记的注释
secondMarkerComment = thisComp.marker.key(2).comment;
//示例 2:在标记处添加一个关键帧
// 获取第三个标记的时间
thirdMarkerTime = thisComp.marker.key(3).time;
// 在标记时间处设置位置关键帧
thisLayer.transform.position.setValueAtTime(thirdMarkerTime, [500, 500]);marker.key(name)
获取指定名称的合成标记。
参数:
name :标记的名称(String)。
返回值:指定名称的标记对象(Object)。
应用:
通过标记的名称获取对应的标记对象。如果存在多个同名标记,返回时间上最早的一个。
//示例 1:获取名为“Start”的标记时间
// 获取名称为“Start”的标记的时间
startMarkerTime = thisComp.marker.key("Start").time;
//示例 2:根据标记名称调整图层位置
// 获取名称为“Move Here”的标记时间
moveHereTime = thisComp.marker.key("Move Here").time;
// 在标记时间设置位置关键帧
thisLayer.transform.position.setValueAtTime(moveHereTime, [800, 600]);marker.nearestKey(t)
获取最接近指定时间 t 的合成标记。
参数:
t :以秒为单位的数值(Number)。
返回值:最接近时间 t 的标记对象(Object)。
应用:
//示例 1:获取当前时间最近的标记时间
// 获取当前时间最近的标记
nearestMarker = thisComp.marker.nearestKey(time);
// 获取最近标记的时间
nearestMarkerTime = nearestMarker.time;
//示例 2:在最近标记处触发动画
// 获取当前时间最近的标记
nearestMarker = thisComp.marker.nearestKey(time);
// 计算时间差
d = Math.abs(time - nearestMarker.time);
// 如果在0.5秒内,则执行动画
if (d < 0.5) {
// 例如,放大图层
scale = easeOut(d, 0, 0.5, 150, 100);
} else {
scale = 100;
}
[scale, scale];marker.numKeys
获取合成中标记的总数。
参数:无
返回值:合成中标记的总数量(Number)。
应用:
//示例 1:循环访问所有标记并打印其时间
// 获取标记总数
totalMarkers = thisComp.marker.numKeys;
// 循环遍历每个标记
for (i = 1; i <= totalMarkers; i++) {
markerTime = thisComp.marker.key(i).time;
// 执行操作,例如设置关键帧或调整属性
}
//示例 2:根据标记数量调整动画速度
// 获取标记总数
totalMarkers = thisComp.marker.numKeys;
// 动画速度与标记数量成反比
animationSpeed = 100 / totalMarkers;
// 应用到旋转属性
rotation = time * animationSpeed * 360; // 每秒旋转360度numLayers
获取合成中图层的总数。
参数:无
返回值:合成中图层的总数量(Number)。
应用:
//示例 1:动态调整图层位置基于图层数量
// 获取图层总数
totalLayers = thisComp.numLayers;
// 设置图层位置为合成中心加上图层序号的偏移
xPos = thisComp.width / 2 + (thisLayer.index * 10);
yPos = thisComp.height / 2;
[xPos, yPos];
//示例 2:根据图层数量调整不透明度
// 获取图层总数
totalLayers = thisComp.numLayers;
// 设置不透明度为100%除以图层总数
opacityValue = 100 / totalLayers;
// 应用到不透明度属性
opacityValue;layerByComment(comment)
返回指定注释内容的图层对象。
参数:无
返回值:与指定的注释内容匹配的第一个图层对象(Object)。
应用:
// 获取评论为“mediaTEA”的图层
mLayer = thisComp.layerByComment("mediaTEA");
// 将该图层的位置设置为合成中心
mLayer.position = [thisComp.width/2, thisComp.height/2];
//示例 2:根据评论触发图层的不透明度变化
// 获取评论为“FadeOut”的图层
fadeOutLayer = thisComp.layerByComment("FadeOut");
// 根据时间设置不透明度
opacityValue = ease(time, fadeOutLayer.inPoint, fadeOutLayer.inPoint + 2, 100, 0);
// 应用到不透明度属性
opacityValue;activeCamera
获取当前帧中用于渲染合成的活动摄像机对象。
参数:无
返回值:当前活动的摄像机对象(Object)。
应用:
要注意的是,获取的摄像机对象不一定是合成面板中正在查看的摄像机。
//示例 1:访问活动摄像机的位置并应用偏移
// 获取活动摄像机
cam = thisComp.activeCamera;
// 获取摄像机位置并添加偏移
camPosition = cam.transform.position + [50, 0, 0];
// 应用新的位置
cam.transform.position = camPosition;
//示例 2:根据活动摄像机的旋转调整图层方向
// 获取活动摄像机的旋转
camRotation = thisComp.activeCamera.transform.rotation;
// 将图层旋转与摄像机同步
rotation = camRotation;width
获取合成的宽度。
参数:无
返回值:合成的宽度(Number),以像素为单位。
应用:
//示例 1:将图层水平居中
// 获取合成宽度并设置图层X位置为中心
xPos = thisComp.width / 2;
// 保持Y位置不变
yPos = position[1];
[xPos, yPos];
//示例 2:根据合成宽度调整图层缩放
// 获取合成宽度
compWidth = thisComp.width;
// 设置图层缩放比例为合成宽度的百分比
scaleValue = (compWidth / 1920) * 100; // 假设基准宽度为1920像素
[scaleValue, scaleValue];height
获取合成的高度。
参数:无
返回值:合成的高度(Number),以像素为单位。
应用:
//示例:根据合成高度调整图层位置
// 获取合成高度
compHeight = thisComp.height;
// 设置图层Y位置为合成高度的三分之一
yPos = compHeight / 3;
// 保持X位置不变
xPos = position[0];
[xPos, yPos];duration
获取合成的持续时间。
参数:无
返回值:合成的持续时间(Number),以秒为单位。
应用:
//示例 1:在合成结束时触发动画
// 获取合成持续时间
compDuration = thisComp.duration;
// 在合成结束时设置位置关键帧
if (time >= compDuration) {
position = [thisComp.width/2, thisComp.height/2];
} else {
position;
}
//示例 2:根据合成持续时间调整动画速度
// 获取合成持续时间
compDuration = thisComp.duration;
// 设置动画速度为持续时间的倒数
animationSpeed = 1 / compDuration;
// 应用到旋转属性
rotation = time * animationSpeed * 360; // 每秒旋转360度ntscDropFrame
判断合成的时间码是否为 NTSC 的丢帧格式。
参数:无
返回值:Boolean。如果时间码为 Drop-Frame 格式,返回 true,否则返回 false。
应用:
//示例 1:根据时间码格式调整显示
// 检查是否为 Drop-Frame 时间码
if (thisComp.ntscDropFrame) {
// 执行 Drop-Frame 相关操作
text = "Drop-Frame 时间码";
} else {
// 执行非 Drop-Frame 相关操作
text = "Non-Drop-Frame 时间码";
}
text;
//示例 2:动态设置时间显示格式
// 根据时间码格式设置时间显示
if (thisComp.ntscDropFrame) {
// 使用 Drop-Frame 时间码格式
tc = timeToTimecode(time, true);
} else {
// 使用非 Drop-Frame 时间码格式
tc = timeToTimecode(time, false);
}
tc;displayStartTime
获取合成的起始时间。
参数:无
返回值:合成的起始时间(Number),以秒为单位。
应用:
//示例 1:将图层位置基于合成起始时间调整
// 获取合成起始时间
startTime = thisComp.displayStartTime;
// 将图层位置X设置为合成起始时间乘以100
xPos = startTime * 100;
// 保持Y位置不变
yPos = position[1];
[xPos, yPos];
//示例 2:在合成起始时间处触发关键帧
// 获取合成起始时间
startTime = thisComp.displayStartTime;
// 在起始时间设置不透明度关键帧
if (time == startTime) {
opacity = 100;
} else {
opacity;
}frameDuration
获取每帧的持续时间。
参数:无
返回值:每帧的起始时间(Number),以秒为单位。
应用:
//示例 1:基于帧持续时间调整动画速度
// 获取每帧的持续时间
fd = thisComp.frameDuration;
// 设置旋转速度为每帧旋转30度
rotation = time / fd * 30;
//示例 2:创建基于帧数的闪烁效果
// 获取每帧的持续时间
fd = thisComp.frameDuration;
// 计算当前帧数
currentFrame = time / fd;
// 每隔5帧闪烁一次
if (Math.floor(currentFrame) % 10 < 5) {
opacity = 100;
} else {
opacity = 0;
}
opacity;shutterAngle
获取合成的快门角度。
参数:无
返回值:合成的快门角度(Number),以度为单位。
应用:
//示例:根据快门角度调整旋转速度
// 获取快门角度
angle = thisComp.shutterAngle;
// 设置旋转速度与快门角度成正比
rotationSpeed = angle / 360 * 100;
// 应用到旋转属性
rotation = time * rotationSpeed;shutterPhase
获取合成的快门 相位 。
参数:无
返回值:合成的快门相位(Number),以度为单位。
应用:
//示例 1:根据快门相位调整图层透明度
// 获取快门相位
phase = thisComp.shutterPhase;
// 根据相位设置透明度
opacityValue = Math.abs(Math.sin(degreesToRadians(phase))) * 100;
// 应用到不透明度属性
opacity = opacityValue;
//示例 2:创建与快门相位同步的闪光效果
// 获取快门相位
phase = thisComp.shutterPhase;
// 计算闪光强度
flashIntensity = easeOut(Math.abs(Math.sin(degreesToRadians(phase))), 0, 1, 100, 0);
// 应用到不透明度属性
flashIntensity;bgColor
获取合成的背景颜色。
参数:无
返回值:四维数组(Array),包括背景颜色的红色(R)、绿色(G)、蓝色(B)和透明度(A)分量,范围均为 0.0 到 1.0。
应用:
//示例 1:将图层颜色设置为合成背景色
// 获取合成背景颜色
backgroundColor = thisComp.bgColor;
// 应用到图层填充颜色
effect("Fill")("Color") = backgroundColor;
//示例 2:根据背景颜色动态调整图层不透明度
// 获取合成背景颜色
bg = thisComp.bgColor;
// 计算亮度
brightness = (bg[0] + bg[1] + bg[2]) / 3;
// 设置不透明度基于亮度
opacity = ease(brightness, 0, 1, 50, 100);
opacity;pixelAspect
返回合成的像素长宽比 。
参数:无
返回值:像素长宽比(Number)。
应用:
//示例:根据像素宽高比调整图层缩放
// 获取像素宽高比
par = thisComp.pixelAspect;
// 设置图层缩放比例
scaleFactor = [100 * par, 100];
// 应用到缩放属性
[scaleFactor, scaleFactor];name
获取合成的名称。
参数:无
返回值:合成的名称(String)。
应用:
//示例 1:在图层名称中引用合成名称
// 获取合成名称
compName = thisComp.name;
// 设置图层名称为合成名称加后缀
thisLayer.name = compName + " - Layer";
//示例 2:根据合成名称调整图层属性
// 获取合成名称
compName = thisComp.name;
// 根据合成名称设置图层颜色
if (compName == "mediaTEA") {
effect("填充")("颜色") = [1, 0, 0, 1]; // 红色
} else {
effect("填充")("颜色") = [0, 1, 0, 1]; // 绿色
}“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.