You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正After Effects中阴影随距离缩放的表达式方向错误?

解决After Effects中阴影缩放方向反转的问题

咱们先拆解下问题根源:你当前的表达式是直接把表情和阴影层的垂直距离作为缩放值,所以表情离地面越高(距离阴影层越远),阴影就越大,这和现实里投影的逻辑完全相反——真实场景中,物体贴地面时投影最大最清晰,离地面越远投影越小越淡。

下面给你两种针对性的修改方案,你可以根据合成的实际情况选择:

方案1:基于地面固定位置计算(更贴合真实投影逻辑)

首先确定你的地面在合成中的y坐标:如果地面是合成底部,就用thisComp.height;如果是某个特定位置(比如y=700),直接写对应数值即可。然后计算表情到地面的距离,让缩放和这个距离成反比。

修改后的表达式(以地面在合成底部为例):

// 定义地面的y位置,可替换成你实际的地面坐标
var groundY = thisComp.height;
// 获取表情图层的垂直位置
var emojiY = thisComp.layer("smile").position[1];
// 计算表情到地面的垂直距离(取绝对值避免负数)
var distToGround = Math.abs(groundY - emojiY);

// 表情贴地面时的阴影基础缩放比例
var baseScale = 100;
// 控制缩放变化的快慢,数值越大,距离变化时缩放的波动越明显
var changeSpeed = 0.5;
// 阴影最小缩放限制,避免表情离地面过远时阴影消失
var minScale = 20;

// 计算最终缩放值:距离越近,缩放越接近baseScale;距离越远,缩放越小
var scaleValue = Math.max(baseScale - (distToGround * changeSpeed), minScale);

[scaleValue, scaleValue]

参数调整提示:

  • 把groundY改成你合成里实际的地面y坐标
  • baseScale可以调整表情贴地时的阴影大小
  • changeSpeed数值越大,表情上下移动时阴影缩放的变化越剧烈

方案2:快速反转原逻辑(无需考虑地面位置)

如果你不想额外定义地面位置,只是单纯反转当前的缩放方向,可以直接用固定值减去原距离,同时加个最小值限制:

var y = thisComp.layer("smile").position[1];
// 取绝对值避免距离为负数
var dist = Math.abs(this.position[1] - y);

// 表情离阴影最近时的最大缩放
var maxScale = 100;
// 表情离阴影最远时的最小缩放
var minScale = 20;
// 控制缩放变化的快慢
var changeSpeed = 0.3;

// 反转距离逻辑:距离越小,缩放越接近maxScale;距离越大,缩放越接近minScale
var scaleValue = Math.max(maxScale - (dist * changeSpeed), minScale);

[scaleValue, scaleValue]

额外优化建议

  • 给阴影的不透明度也加关联表达式,让投影更真实:
    var groundY = thisComp.height;
    var emojiY = thisComp.layer("smile").position[1];
    var distToGround = Math.abs(groundY - emojiY);
    // 距离越远,不透明度越低,同时保留最低透明度
    Math.max(80 - (distToGround * 0.1), 10)
    
  • 可以把地面位置做成滑块控件:给阴影层添加「滑块控件」并命名,然后把表达式里的groundY替换成effect("地面Y位置")("滑块"),后续不用改表达式,直接拖动滑块就能调整地面位置。

内容的提问来源于stack exchange,提问作者Moon Star

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:26