YafRay(Yet another free raytracer)是一款LGPL条约下的开源光线追踪器(raytracer)。这个开源项目是Alejandro Conty Estévez (Jandro)在2002年创建的,主要的程序员还有Mathias Wein(lynx)。因为Yafray一直被用作Blender的可选渲染器,所以在Blender社区非常活跃。Yafray以其优秀的渲染结果和兼容性著称,并且因为开源的因素,受到更多研究者和开发人员的关注。
在经历了多年的演化后,早期的Yafray架构逐渐不堪新特性的加入,并且因为发展方向问题,似乎陷入了低潮。很多人怀疑这个项目会不会就这样死掉,成为一个不会更新的dead project。与此同时,两个主程序之间也发生了一些意见偏移,Jandro想重新改造架构,新的项目叫fry。而Lynx则在0.0.9的基础上推出了新的版本叫做Yaf(a)ray,这个a是什么意思呢?我的理解是asshole,Lynx希望这个项目不要成为一个废物。
事实上,Yafray发展到这个阶段,feature的加入并不是最大的难题,最大的障碍是发展问题,提供怎么样的接口,和Blender怎么对接,要知道Blender自己也在不断的变化之中。一个商业项目的定位可能由市场部门和高层来决定,而一个开源项目呢?Who knows!本来就是一个纯粹的东西。
无论如何,我们还是来探究一下Yaf(a)ray是如何工作的?作者是怎么设计的?经典的光线追踪算法需要哪些元件来支持?一个开源项目又是如何运作?因为Yafray本身是一个非常缺乏文档的项目,所以理解难度会比较大。一些中文的wiki或者教程始终停留在翻译和应用案例简介的程度上。
也许我会有时间写一些入门的内容,推广一下光线追踪算法本身,然后再去深究具体的代码和算法实现。