Shader开发实战之“初识游戏图形 ”

       Shader的中文名为“着色器”,顾名思义,它的作用可以被简单地理解为给屏幕上的物体上色。负责给屏幕上的物体填加颜色的硬件设备是GPU,编写Shader的目的就是指挥GPU工作。一听就很高级,对不对?因为普通的应用编程只会指挥CPU工作,包括游戏逻辑的开发。只有游戏开发的渲染部分才使用Shader编程。

       国内游戏行业,大厂已经入局,游戏产品逐渐精细化,一个游戏项目团队中有专人负责渲染问题。最基本的需求是要实现一些特殊效果,如碧波荡漾效果、布料烧毁时的溶解效果、技能释放时的气浪等。虽然Unity这样的引擎有很多资源可用,但有的效果还是需要自己来实现。这几年国内的手游市场,不少产品都在渲染上下了很大功夫,例如《崩坏3》《原神》和《明日方舟》等。如果渲染上没什么亮点,就很难有竞争力。

        说到这里,你可能已经开始急不可耐地要四处搜寻有关Shader的资料,恨不得立刻上手找一份出来。但看了一些资料甚至看了不少着色语言的语法之后,还是很迷茫,想学但是又不知道如何去学,或者学了一段时间发现捕捉不到核心点,始终感觉游离在外,无法开窍。Unity_Matrix_MVP到底是个什么矩阵?统一变量如何与游戏代码交互?

       我在2006年开始接触Shader编程,那时业界才逐渐开始使用可编程管线,国内能找到的学习资料很少。当时着色器开发环境也不方便,很多情况下都是徒手编写代码,而现在有了Unity和Unreal等引擎,着色器的开发和调试能与游戏项目无缝衔接。这些改变都极大地降低了着色器开发的门槛,让更多对渲染效果感兴趣的新人轻松加入这一行列。

       本书深入浅出地介绍了完成一个常见游戏需要的所有着色器技术,并通过实际的代码示例,让读者及时获得反馈,理解了原理后就能灵活运用所学技术创建自己独一无二的渲染效果。作者不拘泥于同类技术书籍的写法,舍弃入门阶段不需要知道的大量枯燥难懂的理论和公式,对初学和进阶开发人员非常友好。例如,在介绍向量运算时,没有搬出数学课本上复杂的点乘、叉乘和除法的定义,而是介绍了向量在图形学中颜色计算的使用方式,简单易懂。浮点数的细节常常能把人转晕,在调试和优化着色器介绍浮点数时,作者也不是采用经典方法;顺着作者的思路能很轻松地理解浮点数引起的精度问题。

节选自《Shader开发实战》一书

———————————————————————————————————————————

 基本信息

书名:《Shader开发实战》

ISBN:9787302583349

作者译者:[英]凯尔·哈拉迪(Kyle Halladay)著   郭华丰 韦静 译

定价:98元

出版时间:2021年7月

京东链接:https://item.m.jd.com/product/12897063.html

———————————————————————————————————————————

试读样章

      欢迎来到实用着色器开发。本书旨在深入浅出地介绍编写视频游戏着色器的理论和实践。编写着色器是一个非常宽泛的话题,当我刚起步时,感到非常迷茫。希望本书能够帮助你避免同样的感觉,并让你快速而自信地踏入着色器和游戏图形的广阔世界。

      本书的指导思想是:“木匠不需要知道如何制作扳手”。同样,你不必知道如何构建渲染引擎就可以使用着色器创建美观的视觉效果,尤其是在刚入门时。本书旨在帮助你进行实验、发挥创造力、创造有趣的事物,并希望在此过程中有所收获。为此,本书不会尝试教你如何成为图形程序员,也不会尝试提供系统的数学知识(尽管将逐步介绍一些数学知识)。相反,本书将从一开始就讨论现代游戏中如何在屏幕上放置东西,然后直接进入编写着色器,以使我们在屏幕上放置的东西看起来像我们想要的那样。将会有大量示例代码,大量图片,并且到本书结束时,将从着色器编写的基本知识转向编写与市场上一些最流行的游戏中使用相同光照的着色器。

       如果在本书的最后,你决定想更深入地研究图形编程,甚至编写自己的渲染引擎,或者更复杂的着色器技术,那么本书将为你提供扎实的基础知识,为你处理更复杂的主题做准备。

0.1 本书读者对象

本书适用于想要学习如何使用着色器代码为游戏或实时应用程序创建视觉效果的任何人。假设你已经知道如何编写一些简单的C ++代码,但这就是你阅读本书之前需要掌握的全部背景知识。将解释我们所需的所有数学运算(你会惊讶地发现其中的数学运算很少),并从3D网格开始,分解将使用的每种图形技术。如果你对C ++有点生疏,那也没问题!由于本书的重点是着色器开发,因此根本不会编写太多的C ++代码,并且我们即使要写也将保持尽量简单短小,不给读者增加额外的负担。 

0.2 如何使用本书

第1~12章的重点是着色器技术的教学和介绍新的图形概念。如果你完全是初学者,建议你从第1章开始,并按顺序阅读所有内容。每章都基于之前的内容,因此,如果你跳过太多内容,就有可能最终迷失方向。

如果你已经掌握了一些着色器开发知识,那么直接跳到你以前从未学过的章节可能会更有趣。

第13~15章涉及调试和优化着色器代码。如果你是因为项目以10fps的速度运行而选择阅读本书,并且需要对其进行修复,那么可能更值得直接跳到那里去解决当前碰到的问题。否则,你可能会因为前几章的轻松和缓慢的节奏而感到沮丧。

第16~18章讨论了如何在当今使用的3种最流行的引擎中实现本书中所教的概念:Unity、Unreal Engine 4和Godot。建议你将这些保留到最后,以准备将本书中讲授的概念应用于你的项目中。

最后,本书结尾处的附录中有一些重要的代码片段,这对于本书中的某些示例是必需的。这些代码片段不是着色器代码,因此不会对其进行详细说明。

如果你在没有互联网连接的情况下阅读本书,则需要参考附录中的代码,以便跟随后续章节中的示例内容进行学习。章节的内容将告诉你何时需要那些代码。

0.3 示例代码约定 本书使用了大量示例代码。为了使讨论代码更容易,这些示例均使用编号进行了注释,如下所示:  

int main(){

return 0; ❶

}  

行❶引用了返回0的代码行。

0.4 软件要求

由于我们将使用一个名为openFrameworks的开源框架(默认情况下使用C++ 14),因此,如果你拥有能够支持C++ 14的编译器,那么你的编程生活将前 言 VII 最为轻松。我们不会使用任何C++ 14功能,但是框架需要在幕后使用它们。如果你使用的是openFrameworks支持的IDE,你的编程生活也会更加轻松。幸运的是,支持openFrameworks的IDE很多,当完成所有设置后,你就可以自由选择你想要的IDE。

最后,我们将使用OpenGL运行所有着色器。OpenGL是一个“渲染API”,这是用来与图形卡(GPU)进行通信的一组函数。有很多不同的API供你选择,但OpenGL的优势是可在尽可能广泛的硬件上运行,并可与openFrameworks很好地集成。你应该确保GPU至少支持OpenGL 4.1,这是本书假定你正在使用的。从OS X High Sierra开始,苹果公司已不推荐在其台式PC上使用OpenGL,这意味着如果你在Mac上学习本书,则本书中的示例可能无法正常运行。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值