开始着色器开发

时间:2008-08-09 21:57:07

标签: shader

我想开始使用微软的XNA进行一些游戏开发。部分原因是Shader开发,但我不知道如何开始。我知道nVidia's FX Composer是开发着色器的一个很好的工具,但我没有找到有关如何实际开始的有用和更新的内容。

您会推荐哪些教程?

9 个答案:

答案 0 :(得分:31)

在XNA中开发着色器(显然使用DirectX)需要了解HLSL或着色器程序集。我建议在深入了解前者之前熟悉前者。

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

接下来尝试编写自己的HLSL,它执行Fixed T&L管道所做的事情,只是为了让你自己动手。这相当于顶点/像素着色器世界中的“hello world”程序。当你能够做到这一点,并且你了解你所写的内容时,你已经准备好了解更多有趣的东西。

下一步,您可能希望在单个光源的某个着色器中模拟基本sepcular lighting。然后,您可以将其调整到轨道上以使用多个灯光。玩色彩和灯光运动。这将有助于熟悉着色器常量的使用。

如果你有几个基本的着色器,你应该尝试这样做,以便你的游戏/引擎在不同的对象上使用多个/不同的着色器。开始添加其他一些位,例如基本bumpnormal maps

当你到达这个阶段时,世界就是你的牡蛎。您可以开始深入了解一些时髦的效果,甚至考虑将GPU用于more,而不是原先预期的。

对于那些更高级的人来说,有一些可以免费在线获得的好书,其中包含来自Nvidia herehere的一些很好的信息。

不要忘记,有一系列名为ShaderX的优秀书籍,涵盖了一些很棒的着色器。已经印刷了1234567即将推出。

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

答案 1 :(得分:5)

我想重申GPU Gems书籍的精彩程度 - 对于任何严肃的图形开发来说都是一个非常棒的资源。

OJ基本上总结了一个非常好的学习过程,我只想补充说,在几何数学方面有很好的基础(矢量/矩阵作为最低限度)不容小觑 - 但它并不像人们有时会想到的那么难。学习点积,交叉乘积,法向量和矩阵乘法是什么和做的是一个很好的第一步:)。尝试准确理解世界/视图/投影 - 剪辑/屏幕空间之间发生的事情,视角差异等等。

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

尽量不要使用像FX Composer这样的工具,他们对原型设计非常有用,但从长远来看,在基础知识方面有坚实的基础是非常值得的。

答案 2 :(得分:3)

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

OJ建议您阅读ShaderX系列,但那里的内容并不适合初学者,所以当您迈出第一步时,它对您没有多大帮助。

我还发表了一篇文章here,介绍了可以帮助您开始游戏开发的最佳书籍。

答案 3 :(得分:2)

我加入对OJ的赞美 - 这是一个很好的答案。 尽管如此,一旦你掌握了基本的理解,你可以通过下载以下两个很棒的工具之一来快速学到很多东西:

一旦你这样做,去他们的项目库并开始浏览示例,从基本着色开始,移动到阴影,法线贴图,材质,效果和你感兴趣的一切。 参加一个项目,根据你设定的目标开始改变算法,看看如何获​​得它。 你会发现很多例子都是非常先进的,它们会打开你的视野。

玩得开心

答案 4 :(得分:2)

虽然已经给出了很多好的建议,但是如果你正在努力思考所涉及的步骤,Mental Mill提供了构建着色器的可视化方法(Artist Edition是免费捆绑的Fx Composer - 本身也是免费的!)。

虽然您可以直接长期学习HLSL代码,但Mental Mill可以为您生成这些Fx文件(因此您可以查看更改)。请注意,就像所有代码生成器一样,它比您理解HLSL时可能会更加冗长!

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

作为旁注,请关注Google的WPF Shader教程,它现在使用相同的技术来允许WPF应用程序中的客户着色器以及我认为与XNA基本兼容的教程。

答案 7 :(得分:1)

我没有使用过XNA或DirectX。但是,为了通过Cg了解着色器编程的基础知识,Cg Tutorial是我发现的最好的书。

答案 8 :(得分:1)

对视觉着色器编辑器的一个快速思考。 这些编辑器是一个非常有趣的东西,但我真的,真的建议坚持使用基于文本的HLSL(RM和FXC都做这个工作)。我作为一个游戏开发工作,并建立了一些着色器系统(例如,战地2和Farcry 2中的那个),并且,老实说,已经发现HLSL比任何图形着色器网络更有价值。

有些事情可以跟踪执行流程,调试着色器或者能够快速迭代测试用例,从而为您提供几乎无法通过可视化工具的洞察力。

我自己使用了视觉着色器构建器,我喜欢它们,而且有一天,当着色不像现在那样对性能至关重要时,它们可能是正确的工具。

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