【专访冯乐乐】这是你们的shader女神,更是一位艺术家
写在最前面:应作者强烈要求,真人照片不会出现在正文中,而是在文章的题图里。想知道怎么才能看到仰慕已久的shader女神吗?点击页面左上角logo进入社区首页,在“异步专访”中,你就能看到啦!
异步社区:可以先介绍一下你自己吗?
冯乐乐:大家好,我是冯乐乐,《Unity Shader入门精要》一书的作者,目前在上海交通大学软件学院攻读硕士学位。本科同样是在交大同一个专业读的,也就是软件工程专业,后来就保送到了本院的研究生。在本科分方向的时候,出于对计算机图形图像的兴趣选择了数字媒体这个方向,研究生也是继续研究这个方向。目前我在实验室主要在研究sketch-based modeling、AR、VR等相关领域。
异步社区:你曾经说是误打误撞选择软件工程这个专业?能详细说说吗?
冯乐乐:哈哈我在哪里说的我自己都忘记了。我本身在高中没有接触过计算机编程,当时很喜欢数学,在高中老师的建议下学习了数学竞赛,然后得了省级数学竞赛二等奖。虽然只得了二等奖,但还是依靠这个奖项参加了五校联考,当时五校包括了交大、清华等一些高等院校,考试较好的学生可以获得高考相应院校的降分政策。当时我的第一志愿就是交大,后来也顺利通过了,因此交大会在录取分数线的基础上降30分录取。幸运又不幸的是,高考果然发挥失常,哈哈不过还好有这30分因此还是顺利被交大录取了。不过也因此无法自主选择专业,软件工程专业就是经过交大调剂后的结果。后来进入大学后得知这个专业很多同学都是调剂进来的:),我们推想原因大概是这个专业学费较高导致大家都去CS专业啦,哈哈。实际上之前在五校联考时也填报过专业志愿,依稀记得好像的确也有选择软件工程,只是排名很后。当时对专业什么的基本没什么想法,因此最后进入这个行业的确算是误打误撞吧。
异步社区:作为上海交大软件学院的研究生,你的典型的一天是如何度过的?
冯乐乐:哈哈这个问题有点难倒我了,我也不知道怎么说。我可以说下我认为研究生和本科生阶段的不同吧,当时只是我个人的感觉,大牛的经历自然和我完全不同啦:) 我并不是一个有“先天优势”的人,大学之前完全不了解计算机编程,虽然专业是被调剂的,但所幸的是大学四年让我爱上了这个专业。如果说本科让我逐渐认识熟悉了计算机编程,那么研究生就让我的眼界看得更高了。我们有一个老师曾这么形容过本科和研究生的不同:“本科只是需要你学习一些东西,而上了研究生之后就需要你真的研究一些东西了。”很多人喜欢说自己在研究某某技术,听了这个老师的话之后我很少敢说自己是在研究,而一般都是说自己在学习某项技术。按这个老师的话来说,研究是从无到有的过程,是需要你去一个前人没有去过的领域,得到一些新的东西。当然这个过程是非常难的,能最后做到的人也少。研究生阶段导师会鼓励我们选择一个自己感兴趣的领域,然后阅读该领域最经典和最前沿的论文,尝试实现它们并进行改进,如果能发现一个新的研究点自然更好。所以我的研究生期间的每一天大概都是在不断进行这个过程 :)
异步社区:平时喜欢玩哪些游戏?你比较欣赏哪些游戏?为什么?
冯乐乐:我并不是一个重度游戏玩家,通常来说每周玩游戏的时间在5小时以内。我基本不玩网络游戏,原因主要是一直觉得网络游戏界面过于繁乱,内心不是很喜欢。平时更喜欢玩一些单机游戏,PC上或手机上的。人生第一个启蒙游戏应该是《口袋怪兽》,在初中时玩了很久。后来一个对我影响很深的游戏是《安琪拉之歌》(英文名《Aquaria》),当时还是在高中,我记得非常清楚是在市里一份本地报纸的角落里看到了对这款游戏的推荐,然后命运神奇得让我去下载了这款游戏,从此一发不可收拾。那时觉得这款游戏做得太美了,之后得知这是由一个两人工作室制作出来的独立游戏的时候惊呆了,当时内心就一直想着什么时候自己也能做出来这种游戏就好了。在大二暑期大作业的时候,我做了一款基于Kinect的体感游戏《Kikyou》,这款游戏的背景音乐全程使用了《安琪拉之歌》的游戏插曲(Kikyou这个名字是桔梗的英文,当时刚看完犬夜叉非常心疼桔梗这个角色,就把Kikyou作为了游戏的女主角的名字)。后来也玩过一些很好的游戏,但都没有《安琪拉之歌》当时给我的那种感觉了,《安琪拉之歌》游戏结局暗示有第二部,很可惜后来就一直没有声音了。前一段时间得知它有了iOS重制版,毫不犹豫地花了30大洋买了下来,算是为当年的自己感谢游戏作者带给我这样的体验。
大二时做的体感游戏
总体说来,我喜欢玩类似《安琪拉之歌》这种画面精美或是让人放松的游戏。我对一些3D的FPS游戏本能的会头晕,因此很少玩那种游戏……但不可否认的是这些游戏在渲染上做得非常出色,这也是我一直想要学习研究的方向。我平时更加愿意玩一些游戏风格独特的单机游戏,像《光之子》《奥日》《饥荒》这种。
异步社区:你自己是如何入门学习Unity Shader的呢?
冯乐乐:学习Unity Shader完全是一种个人兴趣吧。一开始写Unity Shader也是感觉一头雾水,虽然之前写过GLSL,但由于Unity进行了封装,很多原理和方法不甚了解。后来逐渐对渲染感兴趣之后,觉得Unity是一个可以非常方便的实现各种想法的工具,就想要学习Unity Shader的编写。官方文档当时写得很不好,自己谷歌之后找到了《Unity Shaders and Effects Cookbook》这本书就开始自学,并在博客上更新自己的学习记录。当时博客并没有像现在这么为人所知,我选择写博客的原因大多也是怕自己忘记,因为其实平时学业上并不需要经常接触这些内容。学习完《Unity Shaders and Effects Cookbook》后,就开始搜索更多的资料,再通过一些自己的分析逐渐对Unity Shader更加了解了。Shader入门之后其实更多的是算法的积累,Unity只是提供了这样一种封装和工具,后来就开始尝试用Unity Shader实现一些算法,我的博客也开始被更多人关注了。写《Unity Shader入门精要》一书的原因大多是想把我学习到的一些经验传递给更多的人,有读者说我的经历鼓舞了他们,让他们对学习Shader充满了信心,哈哈。
异步社区:学习shader之前需要对计算机图形学有一定的了解吗?
冯乐乐:当然需要啦。很多人把shader看得很神奇,很高深,其实也并不是这样的,它只是整个流水线里面的一个环节,没了渲染流水线,shader就是一个字符串什么也干不了。但读者也不用总觉得计算机图形学这个词语很高级,很遥远,其实只要跟图形图像打交道的每天都在跟图形学接触。想要达到入门程度,也不需要了解非常底层的渲染架构,这本书在编排上也考虑了这一点,我已经把我认为必需的图形学相关内容在书的基础篇中进行了讲解,当然一本书的内容是远远不够的,我相信真正喜爱这一领域的读者会在阅读本书后找到更多的资料来进行更深一步的学习。
异步社区:你在学习shader时,如果碰到自己解决不了的问题,怎么办呢?
冯乐乐:我总感觉很多人把shader看得非常高大上,其实在了解了它的工作原理和机制后,后面的学习更多是在编写算法、实现某种特效、优化性能等。学习shader本身的工作原理并没有非常复杂,难的是根据要求实现渲染算法以及后面的性能优化。当然,Unity Shader由于它的特殊性会需要我搜索一些Unity的实现原理等。如果是Unity对于某个功能的实现原理我搞不清楚的话,当然第一时间是去谷歌搜索,实在找不到解决方案会去相关的论坛、交流群等寻求帮助。更多的困难其实是算法实现和优化,这部分没有非常好的解决方法,需要静下心来好好学习下算法,当然身边如果有非常有经验的前辈,和他们交流肯定可以大有收获。搜索资料一定要用谷歌搜索,一定不要惧怕英文,善用英语搜索词。
异步社区:平时关注哪些游戏开发和渲染相关的论坛或博客?
冯乐乐:我平时喜欢去GDC Vault看一些视频,然后有时也会去SIGGRAPH Course上找找相关的课程,这些都是扩展眼界的很好的地方。晚上睡觉之前一般会刷一下Twitter,上面关注了一些相关领域的大牛,他们的动态也能提供很多有意思的内容,遇到特别感兴趣的就会去搜下相关资料。经常看的博客有:
iq的博客(http://www.iquilezles.org/www/index.htm)
Simon的博客(https://simonschreibt.de/)
Aras的博客(http://aras-p.info/blog/)等等。
Shadertoy(https://www.shadertoy.com/)平时也一直关注。
国内的博客会关注雨松前辈的博客(http://www.xuanyusong.com/)。总之就是平时搜资料的时候多用谷歌,慢慢就会积累很多很好的资源啦 :)
异步社区:大家知道你最早是在CSDN开始写shader方面的博客分享学习心得,写一本书和写技术博客相比,有哪些不一样的地方呢?
冯乐乐:最大的不一样就是写博客的时候更多是想着自己,写书的时候要时刻想着读者啊哈哈。说实话我写博客是为了记录,好记性不如烂笔头嘛,写作过程中并不会考虑这个内容别人会不会、知不知道、能不能看懂等等,博客首先是写给自己看的,其次才是写给网友看的。写书就不同了,写每一句话的时候都要先问下自己,这个知识点有没有讲过,读者会不会看不懂。写书最重要的是要让读者能够看懂。之前有一个读者问我某个书里某句代码为什么要这么写,我看了他的问题之后发现这是之前章节讲过的。如果这是篇博客,那么这个知识点我可能就完全不会讲解。但由于这是一本完整的技术书,我一定会详细解释每一个重要的知识点。这就是个例子,如果读者能从前往后阅读的话,我相信绝大部分内容都是可以看懂的。
异步社区:《Unity Shade入门精要》这本书的写作花费了多长时间?期间碰到什么困难吗?
冯乐乐:2015年6月的时候张涛编辑找到了我,我在2015年11月初的时候完成了初稿并交给了出版社,因此整个写作过程大概5个月吧。最开始的挑战和困难就是确定整本书的目录,Unity Shader处于一个比较尴尬的位置,既被层层封装,但同样需要了解shader语言,而这本书的定位是面向初学者,甚至是那些没有怎么写过程序的美术人员。所以如何把内容写得循序渐进、让学习曲线平缓上升是最重要的问题。当时参考了很多我阅读过的优秀书籍和网络资料,例如OpenGL的一些入门书籍是如何编排的,最后确定下来了现在大家看到的目录,希望读者能够适应和喜欢这样的安排。
在后面编写的过程中,数学章是一个比较大的挑战,大家都知道写shader需要学习一些线性代数方面的内容,这一部分是很多读者害怕的领域,大家总是一提到数学就头疼哈哈,但是没办法,我尽可能想把这部分写得有趣一点,容易阅读一点,期间也参考了很多资料,而且由于涉及到很多公式,特意选择了Markdown作为书写工具,手打的公式大概有几百个了吧,当时一天打下来手指头都累了。这一章也是全书耗时最长的章节之一。
由于是面向初学者,因此涉及到的内容都不会太难,但对我而言难的是把每个重要的知识原理都讲清楚、讲明白,而且要讲正确。Unity Shader现有的一些资料的通病就是原理一带而过,甚至是不讲,这对初学者是很不利的,我写这本书也是为了改善这种情况。这个理念一直贯穿了整个写作的过程,遇到算法的话我尽量会绘制更多的图例进行解释,更加困难的是Unity对某些实现进行了封装而又没有提供文档说明,这部分内容更加难写,只能通过大量搜索和实验来验证Unity的实现方式和原理。
异步社区:你理想中的工作是什么样的?
冯乐乐:和很多选择从事这个方向的人差不多,我是个“外貌协会”,对如何使用计算机来产生各种绚丽的画面很感兴趣。我理想中的工作自然也是希望和这方面相关。而且我还是在校学生,马上毕业,也很希望可以去相关行业和这方面的前辈一起学习工作。
最后,买一本《Unity Shader入门精要》,就当是给女神送朵花、点个赞吧~
本文转载自异步社区
原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF90FAB00001FFB3AAF010411DFD
- 点赞
- 收藏
- 关注作者
评论(0)