65.9K
CodeProject 正在变化。 阅读更多。
Home

HLSL 开发秘籍 – 评测

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2013年8月3日

CPOL

7分钟阅读

viewsIcon

17193

HLSL 开发秘籍 评测

引言

在终于回归游戏开发的老本行时,又有一本有趣的书摆在了我面前,它深入探讨了神秘且有时令人望而生畏的着色器世界。

即使是我,也只是对幕后是如何创造出那些令人惊叹的效果有所了解,而这些效果只有通过在显卡上的图形流中捣鼓才能实现。XNA为我们做了很多这方面的工作,内置了5个着色器,让我们事半功倍,并提供了大多数常见游戏所需的基本效果。

要让你的游戏真正闪耀并看起来令人印象深刻,你需要对着色器有深入的了解,即使你打算只利用市面上大量的资源来增强你的游戏,理解这些东西是如何以及为什么这样工作的也大有裨益。

HLSL开发宝典

所以,如果你想了解更多关于幕后发生了什么,并开始制作/增强你自己的效果,请继续阅读。


《HLSL开发宝典》的目标读者是着色器领域的初中级或有经验的开发者,因此需要一些基础知识才能真正领会其中包含的技巧和窍门。不过,如果你是新手或初学者,不用担心,可以先看看Riemers的HLSL教程,以便快速掌握基础知识 – http://bit.ly/13stnxW

这本书就像许多食谱一样,是关于着色技术和一些通用光照及后处理效果的详尽参考。它的优点在于它能引导你走上一条非常直接的道路,让你准确地理解这些效果是如何工作的,以及是什么让它们得以实现,从而鼓励你尝试和测试自己的技术,并在其基础上进行改进或创建新的着色器。

通过阅读这本书,我获得了一种对某些效果是如何制作的以及需要哪些输入来简化其应用的理解。这让我能够更好地阅读Nvidia和AMD的着色器库,寻找我想要的东西,或者保持简单,只关注我需要的那种效果。

我跑题了,那么这本书中有什么内容呢?


下面是对书中所有章节及其内容的简要概述。本书的结构类似于传统的HLSL食谱,分解各种效果,展示每个组件如何工作及其对最终输出的影响。

第一章“前向光照”

光照是最基本也是最常用的着色技术之一,毕竟没有光就只有黑暗(这只对音频游戏有好处 Open-mouthed smile)。本章将深入探讨当今游戏中使用的主要基本光照系统,例如:

    半球环境光
    方向光
    点光源
    聚光灯
    胶囊灯
    投影纹理 – 点光源和聚光灯
    单次通道中的多个光源

通过本章,你将学会照亮场景及其内部模型所需的一切。

图片由Riemers HLSL教程提供

第二章“延迟着色”

延迟着色是一种更有效、性能更高的场景光照技术,它可以在计算所有光源的同时进行,而不受应用几何体的限制。听起来很棒,但实现起来比标准光照要棘手得多,尤其是因为它需要着色器中的多个通道来完成。

在本章中,作者很好地解释了实现延迟渲染所需的所有部分以及如何最好地实现它,还提供了一些进阶技巧,涵盖了以下内容:

    G-Buffer生成和解包
    延迟方向光、点光源、聚光灯和胶囊灯

这些效果的一些精美示例(由@NemoKrad提供,来自RandomChaos博客

第三章“阴影映射”

到目前为止,本书已经涵盖了如何添加光照,正如预期的那样,我们也需要能够通过减去光照来真正展示游戏中的元素如何受到它们所处环境的影响(问问彼得·潘他对自己的影子有什么看法!)。

阴影映射还可以让玩家获得身临其境的真实世界的感觉,没有它,游戏通常会显得扁平(即使是2D游戏)。通过本章,您将了解几种生成阴影的技术。正如其他所有事情一样,没有一种万能的方法来解决阴影这样的问题,所以作者提供了一些主要的解决方案是非常好的。

您将学习的技术包括:

    聚光灯和点光源PCF(百分比接近过滤)阴影
    级联阴影贴图
    具有可变半影大小的PCF
    可视化阴影贴图

这些效果的一些精美示例(由@NemoKrad提供,来自RandomChaos博客)可以在此处找到。

第四章“后处理”

现在你的游戏场景已经渲染完成,总是要添加一些特殊的额外效果来让你的游戏闪耀,比如为不在焦点的物体添加模糊效果,快速移动时的运动效果,或者非常闪耀的发光效果(非常适合爆炸 Open-mouthed smile),这就是后处理的作用。

问任何一位有经验的摄影师关于后处理的问题,他们可能会滔滔不绝地跟你讲上几个小时,那些你添加到场景中的最终修饰,让它栩栩如生。

后处理可以使游戏产生天壤之别,从让玩家惊叹“哇”到让他们只说“ meh”然后走开,这适用于所有游戏。有些开发者会提前完成一些工作,例如烘焙要在游戏中使用的纹理,但即便如此,仍然需要一些额外的效果来提升它们。

本书详细介绍了最常见的后处理效果:

    HDR渲染
    适应性(调整明暗空间的亮度)
    辉光
    距离景深
    散景(处理远景光照)

这些效果的一些精美示例(由DarkOmenGames提供,来自RandomChaos博客)可以在此处看到。

第五章“屏幕空间效果”

屏幕空间效果是另一种后处理类别,它侧重于影响整个场景的元素(通常来自单个元素,如太阳)。有些人认为它们只是另一种后处理,有些人认为它们是一种高级着色形式。无论哪种情况,这都是一项非常有用的技术,尤其适合在太空或户外环境中制作游戏。

在主要的“屏幕空间效果”类型中,本书涵盖了:

    环境遮蔽
    镜头光晕
    屏幕空间阳光
    反射

这些效果的一些精美示例(由@NemoKrad提供,来自RandomChaos博客)可以在此处找到。

第六章“环境效果”

我们已经有了漂亮的光照和渲染的HD场景,但我们不想即时改变场景的外观,或者让场景中的物体纹理受到其他效果的影响吗?这通常被称为环境效果,其中最基本的就是雨水效果,因为雨水会扭曲穿过它的光线,并在经过时留下痕迹。

这些是根据另一纹理或一组规则来改变环境的相当高级的技术。

在这里,作者用以下技术为本书画上了圆满的句号:

    动态贴花
    基于距离/高度的雾
    下雨

一些非常棒的火焰环境效果示例(由@NemoKrad提供,来自RandomChaos博客)可以在此处看到。


着色器是一个难以入门,甚至更难掌握的主题,它几乎是一门独立的专业。因此,作者能将每种效果的作用及其实现方式解释得如此清晰,令我颇感惊喜。

优点
  • 对所涵盖效果的精彩介绍和解释
  • 为每种效果提供了完整的可下载项目
  • 不充斥细节,保持简洁
缺点
  • 本书只涵盖着色器本身,而不涉及如何实现它们(尽管示例中有,但仅限C++)。
  • 并非所有章节都有创建效果的可视化示例,因此难以想象(但你可以摸索出来)。

即使以我粗浅的着色器知识,我也能理解本书中详述的各种着色器的运作原理(甚至无需谷歌搜索)。如果你是初学者,只需参考Riemers的教程或GameDevTuts上精彩的初级HLSL教程,你就能为本书中的技术做好准备了。我觉得它提供了恰到好处的细节(很少的数学计算,谢天谢地),帮助你欣赏你的显卡正在为你的游戏输出做什么。

还在等什么,准备好让你的游戏闪耀吧,无论你是2D还是3D。Open-mouthed smile

HLSL开发宝典 – packtpub

© . All rights reserved.