AE小教程:让3D图层的大小不受距离影响(近大远小)
当前位置:首页 > 原创作品 |  标签: AE 表达式 摄像机 3D 透视
101341110
发表时间:2019年06月01日 12点07分

你一定遇到过在AE里调整三维图层的麻烦:在PS或AI中画了一个场景,前中后景都有,把图层变成3D层,你要往前往后拉开距离,因为透视(近大远小),还要回头调一下图层的缩放,来让画面跟你原本画的平面图一样——好费劲。
这时候你可能想过,如果我拉开距离的时候,图层远了自动放大,近了自动缩小,在摄像机里看,整个画面没有发生变化(缩放补偿了透视),这不就完美了!——那么问题来了:图层往后100像素,它应该放大多少,才能在相机里和以前看起来一样大呢!中间有什么特殊算法吗?

答案当然是有,以下就是算法:
缩放*(距离差/(1/36*镜头焦距*合成宽))

翻译成表达式就是:
n = 1/36*35*thisComp.width; //1/36*镜头焦距*合成宽
d = position[2]-thisComp.layer("Camera 1").transform.position[2]; //距离差
scale * (d / n); //缩放*(距离差/(1/36*镜头焦距*合成宽))


把这句表达式加在每个图层的缩放属性上,大功告成。

有人可能会疑惑,为啥会有个1/36呢,为什么一定是1/36呢——我也不知道,这是我试出来的,别想为什么,直接用。

11
CGer评论区
最新发布 评论排序
  共 10 条评论
  • 匕禾页
    举报 回复 0 匕禾页楼主2020-10-27 19:29:46:

    可能是因为你锚点不在画面中央,这个方法要保证锚点最初位置在合成中央。

    流鹰  2019-10-08 17:27:20发表评论:

    大佬,为什么我移动Z轴图片在视图中的位置会变,你的GIF里却没有变

  • Mr4A
    举报 回复 0 Mr4A2020-08-25 17:58:03:

    给楼主一个大大的赞,太有用了

  • 匕禾页
    举报 回复 0 匕禾页楼主2020-02-10 18:39:16:

    楼主不了解摄像机原力,靠蛮力测出来的

    月酌  2020-02-07 22:54:23发表评论:

    学习了 刚研究了一下 好像1/36 是摄像机里面胶片密度的选项 不知道是否正确

  • 月酌
    举报 回复 0 月酌2020-02-07 22:54:23:

    学习了 刚研究了一下 好像1/36 是摄像机里面胶片密度的选项 不知道是否正确

  • 匕禾页
    举报 回复 0 匕禾页楼主2019-10-23 12:28:21:

    忘了说了,你所有图片的锚点必须在合成中心!,这样才不会在x,y平面偏移

    流鹰  2019-10-08 17:27:20发表评论:

    大佬,为什么我移动Z轴图片在视图中的位置会变,你的GIF里却没有变

  • 流鹰
    举报 回复 0 流鹰2019-10-08 17:27:20:

    大佬,为什么我移动Z轴图片在视图中的位置会变,你的GIF里却没有变

  • 匕禾页
    举报 回复 0 匕禾页楼主2019-06-19 16:28:09:

    距离差指物体和摄像机Z方向上的距离

    西子木  2019-06-18 16:23:07发表评论:

    好东西啊 楼主辛苦 不过你说的 距离差指的是?

  • 西子木
    举报 回复 0 西子木2019-06-18 16:23:07:

    好东西啊 楼主辛苦 不过你说的 距离差指的是?

    匕禾页  2019-06-03 15:39:04发表评论:

    有一点忘了说了,计算距离的时候,最好把摄像机的Z轴也就是position[2],固定一个默认值,也就是刚创建相机时候它的z轴的像素值。 这样不会让推拉相机的时候,图片大小也跟着改变,而仅仅在推拉图片的时候,图片才会自动缩放。 n = 1/36*35*thisComp.width; //1/36*镜头焦距*合成宽 d = position[2]-(刚创建相机时它的默认Z轴数值); //距离差 scale * (d / n); //缩放*(距离差/(1/36*镜头焦距*合成宽))

  • 西子木
    举报 回复 0 西子木2019-06-18 16:22:56:

    好东西啊 楼主辛苦 不过你说的 距离差指的是?

  • 匕禾页
    举报 回复 0 匕禾页楼主2019-06-03 15:39:04:

    有一点忘了说了,计算距离的时候,最好把摄像机的Z轴也就是position[2],固定一个默认值,也就是刚创建相机时候它的z轴的像素值。 这样不会让推拉相机的时候,图片大小也跟着改变,而仅仅在推拉图片的时候,图片才会自动缩放。 n = 1/36*35*thisComp.width; //1/36*镜头焦距*合成宽 d = position[2]-(刚创建相机时它的默认Z轴数值); //距离差 scale * (d / n); //缩放*(距离差/(1/36*镜头焦距*合成宽))

用户名
您尚未登录,无法发表评论。点击登录