view Barcinski & Jeanjean Website (Part1)
接下来进入 Papervision3D 部分。他们开发了一个 AnaglyphView 类用于绘制立体效果。这个类包含了两个 Viewport3D(Viewport3D 是 Papervision3D 中绘制所有 DisplayObject3D 的对象,可以说是主渲染层,它是一个 Sprite 子类)。这两个对象分别用于渲染左右摄像机中看到的图像。
那是否也应该包含两个摄像机(Camera3D对象)呢?答案是不用,既然在成像原理中描述的摄像机位置是并排的,那么在程序中,只需要一个真正的 Camera3D,然后在每帧更新时,向左偏移渲一下,再向右偏移渲一下。如此得到的两个 Viewport3D 再用 ColorTransform 分别抽出需要的颜色通道,最后用 Screen 模式叠加在一起。
视频背景是分别加到两个 Viewport3D 的显示层级里的,对 Viewport3D 的颜色变换和叠加操作也能对其产生影响。
请注意:渲染的次数实际上增加了一倍,再加上层叠加运算,这种效果其实相当的占资源。所以不能用太复杂的3D对象,他们还将在 Blog 上继续分享优化方面的经验,一起期待吧。
在网站优化上,他们也有非常酷的Tips。注意到这样一个细节:主界面上环绕两人的纸是有前后遮挡关系的。虽然知道人像是抠像出来的,但是如何和 Papervision3D 中的对象产生遮挡呢?这是一个很有技术难度的问题。一般我们肯定会想视频要分两层,前景人像带通道。但是这是高分辨率的视频,带通道的话相当占资源。
点子来了:视频不能分层,那就把前景人像用矢量勾出来做遮罩。其实我们通常在做 media 遇到文件量限制的时候也用这种做法,关键是能减少文件量。在这里还能起到减去视频通道叠加造成的CPU运算增加的好处。方法是有了,可是144张图像要挖出来也是要吐口小血的。聪明人自然有聪明的做法:Flash 不是有 Trace Bitmap 自动转矢量的功能吗,只是勾个黑白图还是相当胜任的。他们还开发一个jsfl命令自动操作。点两下鼠标,喝两口咖啡的时间就可以搞定了,轻松惬意。遮罩问题解决,还有个遮挡问题。方法是把遮罩mc加入 Papervision3D 层级,设置它的z属性。前后关系就算出来了。接下来注意设置层叠加方式为 Erase,意思就是擦除,很明显了吧,遮挡就出来了。Erase 和 Alpha 叠加模式很有用,大家可以到 Flash 里面去试一下。
下一篇我将和大家分享一下该网站在文件量优化上的神来之笔。
Barcinski & Jeanjean Website (Part3)
« ActionScript 3 运算效率测试和优化 Photoshop – as real as it gets! »












