最近需要模拟红侠乔伊的镜头运用.这东西初看简单,实际还是很需要功夫的.关键不是程序技术如何(就一个摄像机),而是分析其轨迹和追踪点规律.其实就是一个3D空间中的缓冲系统.你如何确定都有什么参数,这么多参数又如何相互之间作用?这些天做下来,有一些心得.
1 确立缓冲点.有3个方向位移的缓冲,有180度范围旋转的缓冲,但这些缓冲关系,只从2个点变化而来:相机的位置,以及相机追踪点的位置.后边这个一开始做的时候容易被忽略,实际上对效果的精细程度所起作用是很关键的.实际上不止对于摄像机系统,对于广泛意义的缓冲系统而言,都要找出主动关系与被动关系的缓冲点.在摄像机中,主动关系就是相机追踪位置,被动关系是相机位置.每个关系一个缓冲点.如果主动关系有2个,那就多一个缓冲点.依次类推.
2 确立缓冲点上的正交关系.摄像机系统中,就是每个缓冲点处的x,y,z轴.旋转的缓冲其实依赖于位移,所以只关注位移就行了.
3 想象在缓冲点处,沿你确定的每个正交方向,有一个弹簧点.弹簧由参数控制,沿其方向滑动.如果你在脑海中模拟到这个画面,缓冲系统已经完成大半了.
4 插值函数.对于这种动态缓冲环境而言,我认为需要且只需要一个线性插值函数就足够了.丰富多彩的插值函数,适用于类似道路曲线或零件形状这种静态环境.我一开始在这里走了弯路,尝试了几个插值方式,后面才意识到错误.为什么?因为插值函数相当于一个黑盒子,对于插值函数的输入参数t来说,t本身已经由我们进行了模拟,不是线性的,那么一个非线性的参数进入一个非线性的盒子,所得结果你是非常非常难于预料的.
5 参数调整.对于参数处理,log(x+a), e^(-x+a), (ax + b) / (cx + d)这3个函数框子是你最好的朋友.多考虑是否能用阙值函数代替条件判断.