如何在时间重映射预合成内的预合成中控制嘴型不透明度?
解决时间重映射预合成内嵌套预合成的嘴型不透明度控制问题
我需要控制预合成内不同嘴型图层的不透明度,普通场景下操作有效,但将该预合成嵌套到带时间重映射的预合成里后就失效了。即使使用以下表达式控制嘴型不透明度:
control = comp("Stage").layer("Face").effect("mouths")("Slider") ; if(control == layerNum) {value = 100;} else {value = 0;}
嘴型看似能由滑块控制,但实际会和时间重映射预合成的帧绑定。需求是实现时间重映射预合成内嵌套预合成的嘴型控制(使用时间重映射预合成是因为里面有随头部转动变化的头部形状)。
注:“mouths”滑块用于将Mouth预合成内特定图层的不透明度设为100%,每个图层的不透明度都基于Stage合成内的滑块值。
核心原因
时间重合成会改变嵌套预合成的时间流,原表达式直接读取滑块值时,默认关联的是嵌套预合成的局部时间,而非主合成的实际时间,导致控制逻辑被时间重映射干扰。
解决方法
修改表达式,强制读取主合成时间点的滑块值,摆脱时间重映射的影响:
// 获取主合成(Stage)当前时间下的滑块值 control = comp("Stage").layer("Face").effect("mouths")("Slider").valueAtTime(comp("Stage").time); // 匹配当前图层编号,显示对应嘴型 if (control == thisLayer.index) { 100; } else { 0; }
补充说明
- 如果嘴型图层不是用图层编号(
index)对应滑块值,而是自定义编号,把thisLayer.index替换为自定义属性即可,比如thisLayer.effect("嘴型编号")("Slider") valueAtTime(comp("Stage").time)是关键,它确保滑块值始终跟随主合成的时间,不受嵌套预合成时间重映射的影响- 确认Stage合成路径、滑块所在图层及效果名称与你的项目完全一致
内容的提问来源于stack exchange,提问作者Sybren
相关产品推荐
相关产品推荐

