我想开始使用 Microsoft 的 XNA 进行一些游戏开发。其中一部分是着色器开发,但我不知道如何开始。我知道nVidia 的 FX Composer是开发着色器的好工具,但我没有找到太多有用和更新的内容来说明如何真正开始使用。
你会推荐什么教程?
我想开始使用 Microsoft 的 XNA 进行一些游戏开发。其中一部分是着色器开发,但我不知道如何开始。我知道nVidia 的 FX Composer是开发着色器的好工具,但我没有找到太多有用和更新的内容来说明如何真正开始使用。
你会推荐什么教程?
在 XNA(显然使用 DirectX)中开发着色器需要了解HLSL或着色器组件。我建议在深入了解后者之前先熟悉前者。
在编写任何着色器之前,最好对着色器管道有充分的了解,并尝试了解使用可编程着色器时可能发生的事情。当您熟悉像素的生命周期(从源数据一直到屏幕)时,理解着色器示例就会变得容易得多。
接下来尝试编写您自己的 HLSL,它执行固定 T&L管道过去所做的工作,只是为了让您手忙脚乱。这相当于顶点/像素着色器世界中的“hello world”程序。当你能够做到这一点并且你理解你所写的内容时,你就可以开始做更有趣的事情了。
作为下一步,您可能希望在您的一个着色器中从单个光源模拟基本的反射光照。然后,您可以在轨道上调整它以使用多个灯光。玩弄颜色和灯光的运动。这也将有助于熟悉着色器常量的使用。
当您有几个基本着色器在一起时,您应该尝试使您的游戏/引擎在不同的对象上使用多个/不同的着色器。开始添加一些其他位,例如基本凹凸或法线贴图。
当你到了这个阶段,世界就是你的牡蛎。您可以开始深入研究一些时髦的效果,甚至考虑将 GPU 用于超出最初预期的用途。
对于那些稍微高级一点的人,有几本可以免费在线获得的好书,其中包含来自 Nvidia 的一些很棒的信息这里和这里。
不要忘记有一本名为 ShaderX 的优秀系列书籍,其中涵盖了一些很棒的着色器内容。1、2、3、4、5和6已经在印刷中,而且7即将推出。
祝你好运。如果你有一些着色器,我很乐意看到它们:)
我只是想重申一下 GPU Gems 书籍有多么棒——对于任何严肃的图形开发来说,这都是一个非常棒的资源。
OJ 基本上总结了一个非常好的学习过程,我只想补充一点,不能低估几何数学(至少是向量/矩阵)的良好基础——但这并不像人们有时所说的那么难。学习点积、叉积、法向量和矩阵乘法是很好的第一步:)。尝试准确了解世界/视图/投影-剪辑/屏幕空间之间发生了什么,透视划分是什么等。
当我开始学习时,一个很好的练习是在软件中实际实现整个 T&L 管道,并完成裁剪/剔除等。这是一个漫长的过程,可能看起来不值得,因为我相信你只想沉浸在乐趣中东西,但是对正在发生的事情有一个正确的理解是非常有用的,当你总是遇到更隐蔽和难以诊断的错误时,这将证明是值得的。
尽量不要一开始就使用 FX Composer 之类的工具,它们对原型设计很有用,但从长远来看,在基础上打下坚实的基础更值得。
开始使用着色器的最佳方法之一是阅读 Frank Luna 的 DirectX 9.0ca Shader Approach 的 3D 游戏编程简介。作者首先介绍了DirectX和HLSL,然后逐渐揭示了shader的威力。他从非常简单的着色器开始,但在本书的结尾,您知道如何创建照明、阴影、粒子系统等。很棒的书。
OJ 建议您阅读 ShaderX 系列,但其中的内容不适合初学者,因此在您迈出第一步时对您没有太大帮助。
我还在这里发布了一篇关于可以帮助您开始游戏开发的最佳书籍的文章。
我会加入对 OJ 的赞扬——这确实是一个很好的答案。尽管如此,一旦您有了基本的了解,您就可以通过下载以下两个很棒的工具之一来快速学习很多东西:
一旦你这样做了,去他们的项目库并开始浏览示例,从基本的阴影开始,然后转到阴影、法线贴图、材质、效果和你感兴趣的一切。拿一个项目,根据你设定的一些目标开始改变算法,看看如何得到它。你会发现很多例子真的很高级,它们会打开你的视野。
玩得开心
虽然已经给出了很多很好的建议,但如果您很难将注意力集中在所涉及的步骤上,Mental Mill提供了一种可视化的方式来构建着色器(Artist Edition 与 Fx Composer 免费捆绑在一起——它本身也是自由!)。
虽然您最好直接长期学习 HLSL 代码,但 Mental Mill 可以为您生成这些 Fx 文件(因此您可以查看更改)。请注意,与所有代码生成器一样,它比您了解 HLSL 后可能会做的更冗长!
效果的视觉进展,从一种方法到另一种方法,非常令人印象深刻!
SAMS 的XNA Unleashed by Chad Carter 是 XNA 的一个很好的起点,并且假设您在开始之前对游戏开发实践或硬数学知之甚少。它有两章关于基本和高级着色器。
作为旁注,请留意 Google 的 WPF 着色器教程,它现在使用相同的技术来允许 WPF 应用程序和教程中的客户着色器,因为我认为这些着色器在很大程度上与 XNA 兼容。
我没有使用过 XNA 或 DirectX。但是,为了了解使用 Cg 进行着色器编程的基础知识,Cg 教程是我找到的最好的书。
您还应该查看 RenderMonkey。这是一个很好的工具。就书籍而言,请查看 Riemer Grootjans 的 XNA 2.0 Game Programming Recipes ... 好书。
关于视觉着色器编辑器的快速思考。使用这类编辑器是一件非常有趣的事情,但我真的非常建议坚持使用基于文本的 HLSL(RM 和 FXC 都可以完成这项工作)。我是一名游戏开发人员,并构建了一些着色器系统(例如,战地 2 和 Farcry 2 中的那个),老实说,我发现 HLSL 比迄今为止任何图形着色器网络都更有价值。
诸如遵循执行流程、调试着色器或能够快速迭代测试用例之类的事情,可以让您获得通过可视化工具几乎不可能获得的洞察力。
我自己也使用过视觉着色器构建器,我喜欢它们,而且有一天,当着色不像今天那样对性能至关重要时,它们可能是适合这项工作的工具。
..虽然我的猜测是在那一天到来之前我们会看到延迟照明和可能的完整软件渲染;)