0%

尽管游戏渲染一般都是以照相写实主义(photorealism)作为主要目标,但也有许多游戏使用了非真实感渲染(Non-Photorealistic Rendering, NPR)的方法来渲染游戏画面。非真实感渲染的一个主要目标是,使用一些渲染方法使得画面达到和某些特殊的绘画风格相似的效果,例如卡通、水彩风格等。

阅读全文 »

在上一节中,我们学习的屏幕后处理效果都只是在屏幕颜色图像上进行各种操作来实现的。然而,很多时候我们不仅需要当前屏幕的颜色信息,还希望得到深度和法线信息。例如,在进行边缘检测时,直接利用颜色信息会使检测到的边缘信息受物体纹理和光照等外部因素的影响,得到很多我们不需要的边缘点。一种更好的方法是,我们可以在深度纹理和法线纹理上进行边缘检测,这些图像不会受纹理和光照的影响,而仅仅保存了当前渲染物体的模型信息,通过这样的方式检测出来的边缘更加可靠。在本节中,我们将学习如何在 Unity 中获取深度纹理和法线纹理来实现特定的屏幕后处理效果。

阅读全文 »

屏幕后处理效果(screen post-processing effects)是游戏中实现屏幕特效的常见方法。在本章中,我们将学习如何在 Unity 中利用渲染纹理来实现各种常见的屏幕后处理效果。

阅读全文 »

在本节中,我们将会学习如何向 Unity Shader 中引入时间变量,以实现各种动画效果。并分别学习纹理动画和顶点动画,并动手实现一些简单的动画效果。

阅读全文 »

之前我们学习过关于基础纹理的内容,这些纹理包括法线纹理、渐变纹理和遮罩纹理等。这些纹理尽管用处不同,但它们都属于低维( 一维或二维)纹理。这一节我们将学习一些更复杂的纹理,但都是我们曾经在图形学中学到过的。包括使用立方体纹理(Cubemap)实现环境映射,以及强大的渲染纹理(Render Texture),最后学习程序纹理(Procedure Texture)。

阅读全文 »

优先队列(Priority Queue)是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。堆(Heap)是一种数据结构,是实现优先队列的一种方式。所以堆并不等同于优先队列。

阅读全文 »

贪心算法也是最常用的算法之一,很多困难问题使用贪心算法会大幅简化。贪心算法的思想很简单,贪心算法每一次都做出当前看起来最好的选择,而不用考虑其它可能的选择。

贪心算法的学习可以与动态规划算法进行比较,看看它到底比动态规划算法少考虑了哪些子问题,为什么可以少考虑那些子问题,而每次只专注于求解一个子问题,通过逐步递推得到原问题的答案。

阅读全文 »

在前面的学习中,我们的场景中都仅有一个光源且光源类型是平行光。但在实际的游戏开发过程中,我们往往需要处理数目更多、类型更复杂的光源。更重要的是,我们想要得到阴影、光照衰减等更加逼真的效果。这一节我们先学习 Unity 中不同的渲染路径和重要的光源类型,再学习如何在前向渲染路径中实现包含了光照衰减、阴影等效果的完整的光照计算。

阅读全文 »