我想开始使用 Microsoft 的 XNA 进行一些游戏开发。其中一部分是着色器开发,但我不知道如何开始。我知道 nVidia 的 FX Composer 是开发着色器的一个很棒的工具,但我没有找到关于如何实际开始的有用和更新的内容。

您会推荐哪些教程?

有帮助吗?

解决方案

在 XNA(显然使用 DirectX)中开发着色器需要以下知识 HLSL 或着色器组件。我建议先熟悉前者,然后再深入了解后者。

在编写任何着色器之前,最好对着色器管道有深入的了解,并尝试了解使用可编程着色器时可能发生的情况。当您熟悉像素的生命周期(从源数据一直到屏幕)时,理解着色器的示例就会变得容易得多。

接下来尝试编写您自己的 HLSL,它可以完成以下任务: 固定托损 管道用来做,只是为了让你脏手。这相当于顶点/像素着色器世界中的“hello world”程序。当您能够做到这一点并且理解了自己所写的内容时,您就准备好继续编写更有趣的内容了。

作为下一步,您可能想要模拟基本的 立体照明 在来自单个光源的着色器之一中。然后,您可以沿着轨道调整它以使用多个灯光。玩转颜色和灯光的移动。这也将有助于熟悉着色器常量的使用。

当您同时拥有几个基本着色器时,您应该尝试使您的游戏/引擎在不同的对象上使用多个/不同的着色器。开始添加一些其他位,例如基本的 或者 法线贴图.

当你到达这个阶段时,世界都是你的。您可以开始深入研究一些时髦的效果,甚至可以考虑使用 GPU 更多的 比原来的意图。

对于那些更高级的人,有几本免费的在线好书,其中包含来自 Nvidia 的一些重要信息 这里这里.

不要忘记有一个名为 ShaderX 的优秀书籍系列,其中涵盖了一些很棒的着色器内容。有 1, 2, 3, 4, 56 已经印刷,并且 7 即将到来。

祝你好运。如果你让一些着色器运行起来,我很乐意看到它们:)

其他提示

我只想重申 GPU Gems 书籍的伟大之处 - 对于任何严肃的图形开发来说都是真正出色的资源。

OJ 基本上总结了一个非常好的学习过程,我只是补充说,拥有良好的几何数学基础(至少是向量/矩阵)是不可低估的 - 但它并不像人们有时认为的那么难。了解点积、叉积、法向量和矩阵乘法是什么以及做什么是一个很好的第一步:)。尝试准确理解世界/视图/投影剪辑/屏幕空间之间发生的情况,透视划分是什么,等等。

当我开始学习时,一个很好的练习是在软件中实际实现整个 T&L 管道,包括剪切/剔除等。这是一个漫长的过程,可能看起来不值得,因为我确信你只想深入了解有趣的东西,但是正确理解正在发生的事情确实很有用,并且当你总是遇到更阴险和困难的情况时,这将证明是值得的诊断错误。

最初不要放弃像 FX Composer 这样的工具,它们对于原型设计很有用,但从长远来看,拥有坚实的基础知识更有价值。

开始使用着色器的最佳方法之一是阅读 Frank Luna 撰写的 DirectX 9.0c 3D 游戏编程介绍和着色器方法。作者首先介绍了DirectX和HLSL,然后逐步揭示了着色器的强大功能。他从非常简单的着色器开始,但到本书结束时,您知道如何创建照明、阴影、粒子系统等。很棒的书。

OJ建议您阅读ShaderX系列,但是那里的内容不适合初学者,因此当您迈出第一步时它不会对您有太大帮助。

我也发过一篇文章 这里 关于帮助您开始游戏开发的最佳书籍。

我会加入对 OJ 的赞扬——确实是一个很好的答案。不过,一旦您有了基本的了解,您就可以通过下载以下两个很棒的工具之一来快速学到很多东西:

完成此操作后,请转到他们的项目库并开始浏览示例,从基本着色开始,然后转向阴影、法线贴图、材质、效果以及您感兴趣的所有内容。开始一个项目,根据你设定的一些目标开始改变算法,看看如何实现它。您会发现许多示例非常先进,它们会开拓您的视野。

玩得开心

虽然已经给出了很多好的建议,但如果您很难弄清楚所涉及的步骤, 精神磨坊 提供了构建着色器的可视化方式(Artist Edition 与 Fx Composer 免费捆绑在一起 - 本身也是免费的!)。

虽然您最好直接长期学习 HLSL 代码,但 Mental Mill 可以为您生成这些 Fx 文件(以便您可以查看更改)。请注意,与所有代码生成器一样,它比您了解 HLSL 后可能做的要冗长一些!

从一种方法到另一种方法,效果的视觉进展非常令人印象深刻!

萨姆斯的 XNA 释放 Chad Carter 的文章是 XNA 的一个很好的起点,并且在开始之前假设您对游戏开发实践或硬数学知之甚少。它有关于基本和高级着色器的两章。

顺便说一句,请留意 Google 上的 WPF Shader 教程,它现在使用相同的技术来允许 WPF 应用程序中的客户着色器,并且我认为教程在很大程度上与 XNA 兼容。

我没有使用过 XNA 或 DirectX。但是,为了了解使用 Cg 进行着色器编程的基础知识, CG教程 是我找到的最好的书。

您还应该看看 RenderMonkey。这是一个很好的工具。就书籍而言,请查看 Riemer Grootjans 的 XNA 2.0 游戏编程食谱 ...很棒的书。

关于视觉着色器编辑器的一个快速思考。这些类型的编辑器玩起来非常有趣,但我真的非常建议坚持使用基于文本的 HLSL(RM 和 FXC 都可以完成这项工作)。我是一名游戏开发人员,构建了一些着色器系统(例如《战地 2》和《Farcry 2》中的着色器系统),说实话,我发现 HLSL 比迄今为止的任何图形着色器网络更有价值。

有些事情比如遵循执行流程、调试着色器或能够快速迭代测试用例,可以让您获得通过可视化工具几乎不可能获得的洞察力。

我自己也使用过视觉着色器构建器,我喜欢它们,有一天,当着色不再像今天这样对性能至关重要时,它们可能是完成这项工作的正确工具。

..虽然我的猜测是,在那一天到来之前我们会看到延迟照明,并且可能会看到完整的软件渲染;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top