学习二三事

最近一个多星期(9.20 - 9.27)来,我没有很专注于我的游戏项目:JI,反而是做了很多很杂的东西,现在记录如下:

1. 实现了Unity Shader中对2D图形的轮廓描绘和消融效果。

轮廓描绘分为描绘整个图像的轮廓和描绘物体的线条,只是这么说大家可能不理解,下面就上图给大家看看:

原始图案 描绘整个图形的轮廓 描绘物体的线条

在实现过程中,我顺便学习了 Unity Sprite Default Shader 的源码,了解了 PerRendererData 这个属性,还有采用高斯核进行轮廓判断的方法。

还有消融效果,感觉实现起来蛮简单的,就是噪声图+AlphaTest嘛。但我实现的是随机点的消融,如果要实现特定的消融效果应该还是蛮难的,比如沿着一条线扩散消融这种。最近项目好像也不需要这种效果,暂时先放着吧。

2. 纪念碑谷的简单实现

因为我们组的新人实习任务中有实现纪念碑谷这道题,加之我认为纪念碑谷的逻辑应该不是很复杂,就想着实现一下。

现在做了简单的,不含楼梯、曲面的路径规划。

我是这么想的:将每个正方体分解为六个面,每个面有着“是否可以行走”和“当前玩家是否可以到达”这两个属性。对于这个面是否可以行走,这个在我们设计关卡的时候就预先设置好(见图中灰色圆圈,代表可以行走);对于玩家是否可以到达这个面,这个在玩家进行移动的时候进行动态更新(见图中蓝色图标,代表这个面玩家可以到达)。

做这个的时候参考了纪念碑谷团队在GDC上面的演讲(可以在Youtobe上找到)。

纪念碑谷编辑器视图

纪念碑谷的带曲面的寻路逻辑我还没有做,而且纪念碑谷还有很多Shader实现得挺好的,这个以后再写吧。应该是过一两个星期的样子,等我作业做完,JI的每周开发任务、种子杯结束,再写。

3. 学习噪声函数、Geometry Shader的编写

最近看了一篇陈嘉栋的关于大规模草的模拟的文章,我自己尝试实现了一下。

首先遇到的困难是,我需要一张噪声图来生成地形。因为我自己对噪声函数也不是很了解,所以顺便学习了噪声函数。学习了什么是噪声函数,如何进行噪声的叠加以产生分形效果,几种常用的插值函数,几种常用的平滑噪声的方法。

生成了大地图后,我接下来看了看别人的 Geometry Shader 的代码,学习了一下 Geometry Shader 的书写格式和在渲染流程中的作用。

4. 买了很多书

这一周买了:《游戏编程模式》、《Doom启示录》、《Unity 5 实战》。

其中《游戏编程模式》是我以前就在网上看了电子版的,当时没有看完,最近出笔试题的时候又学习了一下其中的“游戏循环”这一章,感觉还是需要买回来,做做笔记,仔细阅读的。

《Doom启示录》这本书,我在大二上学期的时候就读过两遍,这次买来,还没来得及阅读完。每次读卡马克和罗梅洛这两个人的传奇经历,都让我特别兴奋。

卡马克在我脑海中的形象是无比冷静、刻苦、自学成才。他没有接受过正规的计算机教育,所有关于编程方面的知识都是通过看书和每天令人难以置信的编程实践得来。他的天分,完全是因为他的自律、刻苦而得来。

我十分推崇他的思想:“如果你想动手开发什么全新的技术,不需要几百万美元的资金,只需要在冰箱里放满披萨和可乐,再有一台便宜的计算机和为之献身的决心。”我自开始编程以来(大一下),几乎所有现在所掌握的知识,都是我通过书本、网络自学而来,我也认为,要学好计算机的唯一方法就是多敲代码,多练。

我也欣赏id的风格:“我们是风!”想要做好一件事,实现一项新的技术,直接开始做就行了,比他人更快的学习能力才是我们的优势所在,要像风一样迅速的开始行动,即使是自己陌生的领域。

与卡神相比,我的刻苦和自律水平太差了。这一方面是我要重点改变的地方。我决定增加我的学习时间,增加我连续学习的时间(中间不中断)。