Chaos on Graphics
Chaos Chiao
灵感来自于《Joel on software》, 老实说,我在很久以前就已经希望为图形学写点什么了,要不就是没下手,要不就是写了一半觉得不妥当。到底我算什么人,要为图形学写点什么,这似乎很荒谬,很狂妄。虽然我在生活中也算是一个很狂妄的人,不过对于我自己所钟爱与了解的图形领域,在某程度上我狂妄不起来。
很简单,图形学并不是热门的研究领域,至少在Blog或者文档上面能看得出来。大家都去搞高深的ERP了,要不就是 C++的诡秘Template(当然我在写程序的时候不会抗拒,甚至会比较喜欢用)。直到后来我看到了《动手写自己的操作系统》,这的确是一本很优秀的书,曾几何时我也想过要写操作系统,可是人本来就不够时间用,开始了写运行时系统与渲染器以后,我就一直没时间再写其它东西了,包括我高中的时候非常钟情的GUI。这本书激励了我,作者虽然不是一个专家级的人物(这里的专家是有某种含义的),不过他很负责任。我说所谓负责任是,一个领域里做研究的人,应该肩负起促进这个领域发展的责任,而促进其发展,不仅仅是促进它高的那一方面更高,而更重要的是促进它低的地方能够得到更大的提升。
断层,这是最可怕的,也是中国技术界最大的问题,鄙人认为。高的人高高在上,低的人拿着一两本垃圾书当作宝贝,而中间缺乏了必要的连接。光靠高校教育和硬性工作积累,只会把这个断层越拉越大。技术的马太效应比经济显得更恐怖,因为整个社会的资产总量是比较稳定的,死了一个暴发户社会没有少多少钱。但死了一个掌握了高技术的人(抱歉允许我说得不好听一些,逃了),这对整个业界的损失是无法估量的,尤其在于当他掌握的技术只有他掌握的时候。
所以,出于一种社会责任感,高技术人员不光需要不断提升顶尖的技术,还有义务防止技术马太效应,导致低者越低高者越高。我提倡应该多出版“中层”图书。市面上的书以“入门到精通”为主流,实质上读完了半只脚踏进了门,但精通就远远算不上。还有一大部分含金量特高,理论扎实、内容丰富,可惜起点太高,大多是滥翻译国外教程,脱离了我国本身的教育模式和现状。有那么一部分人,他们门是入了,学得也不错,亟待提高,然而却找不到恰当的材料。不幸的是,这部分人实际上占了主流,尽管不满这种半桶水的水平,然而却无法通过简单的途径得到充实。
当然我就是这样的一个实例。
我不满,我喜欢图形学,但市面上就充斥着图形学的垃圾书。恕我直言,这些封面印着图形学三个大字的垃圾简直丢尽了中国图形学研究者的光。内容陈旧、老套、重复、互相抄袭严重,有的书竟然连一句代码都没有。目前最前沿的Photo Realistic Rendering已经研究到了Multi-layered Sub-Surface Scattering了,那些迂腐的作者还在用几十年前的输入输出设备细节耗费半本书的篇幅。
和一般的专业人员不同,我是一个彻头彻尾的业余爱好者。自96年来我一直在图形相关的领域自己作研究,直到2000年的7月,那是高二的暑假,我花了一个月的时间从头到尾写了一个辐射度渲染器,并根据我的一些想法设计了一套求解四种不同情况下辐射度的算法,写到了一篇论文里去。这是我人生的第一个程序和第一篇论文。很可惜我的高考还是落榜了,当然,没有真正的落榜那么严重,只是我读了一个毫不相关的专业——新闻学。不过我没有放弃,我一直视图形为自己的生命,所以我继续地在图形上作研究,开始了更系统的学习,日复一日地写代码,测试,思考。最后我在毕业前终于完成了自己布置的毕业设计——一个实时的光线跟踪渲染器,以及它的Shading Language编译器和虚拟机。
为此我非常自豪,因为没有任何导师、没有任何人对我进行过系统的培训或者指导,我只是不断地四处寻找各种可以找到的资料、看Open Source的代码,最重要的,是自己动手写出想要的东西。比如说编译器,这对于我来说是非常非常困难的,新闻学的老师们从来没有在课堂上面提起过什么是编译器、怎么构造一个编译器。我看了三本书,钻研了半年多GCC的代码,在google上淘了一次又一次的资料,终于成功地实现了从简单的asm编译器、到支持面向对象的运行时系统编译器。然而最值得我骄傲的是我的光线跟踪系统,从一开始的慢如蜗牛、到现在近乎实时渲染,其中的每一行代码都渗透着我的血与汗。
再回首,感觉滋味百般,若是能够有人在这个过程中稍微给与我支持与指点,或许我可以少走很多弯路,可以节省很多时间、写更多有用的代码。所以,我觉得我有责任,有义务,为后来人铺路。留下我所学过的、我所钻研过的。尽管我很嫉妒有机会读图形专业的学生、很恼怒论坛里时不时有人出来说他将要读这个专业了却不知道要研究什么,但我知道分享经验是值得的。我希望能够在某种程度上推动中国的图形技术发展,因为我爱这个领域,仅此而已。
趁着毕业后在家待业的时间,我会尽量多写一些,多分享成果,涵盖数学库、软渲染、实时渲染、几何体构造、光线跟踪、系统基础与结构体系等等,也欢迎大家一起交流,不仅仅是图形学,还有图形学所涉及的如编译、系统、语言、计算机结构体系等等。更欢迎高手斧正、毕竟我不是科班出身的,某些概念、理论可能理解得并不很到位,希望交流的时候自己也得到提升。