开始着色器开发
我想开始使用Microsoft的XNA进行游戏开发。其中一部分是Shader开发,但我不知道如何开始。我知道nVidia的FX Composer是开发着色器的好工具,但是我没有找到关于如何真正开始的很多有用和更新的内容。
我们会推荐哪些教程?
解决方案
回答
乍得·卡特(Chad Carter)撰写的SAMS XNA Unleashed是XNA的一个很好的起点,并且在我们开始之前几乎不了解游戏开发实践或者硬数学。它包含有关基本着色器和高级着色器的两章。
作为旁注,请关注Google for WPF Shader教程,它现在使用相同的技术来允许WPF应用程序和教程中的客户着色器,因为我认为它们与XNA很大程度上兼容。
回答
在XNA(显然使用DirectX)中开发着色器需要HLSL或者着色器组装知识。我建议先熟悉前者,然后再深入研究后者。
在编写任何着色器之前,最好对着色器流水线有深入的了解,并尝试使我们了解使用可编程着色器时可能发生的情况。当我们熟悉像素的寿命(从源数据一直到屏幕)时,理解着色器的示例变得容易得多。
接下来,尝试编写自己的HLSL,该HLSL会执行固定T&L管道曾经做过的事情,只是使我们不方便使用。这等效于顶点/像素着色器世界中的" hello world"程序。当我们能够做到这一点并且了解所写内容后,就可以开始研究更有趣的东西了。
下一步,我们可能想在单个光源中的一个着色器中模拟基本的间隔照明。然后,我们可以沿轨道调整此方向以使用多个灯光。玩弄颜色,移动灯光。这也将有助于熟悉着色器常量的使用。
当我们将几个基本着色器放在一起时,我们应该尝试制作它,以便游戏/引擎在不同对象上使用多个/不同的着色器。开始添加其他一些内容,例如基本凹凸或者法线贴图。
当我们进入这个阶段时,世界就是牡蛎。我们可以开始研究一些时髦的效果器,甚至可以考虑将GPU的使用范围超出最初的预期。
对于那些比较高级的人,有一些不错的书籍可以免费在线获得,其中有一些来自Nvidia的重要信息。
别忘了有很多名为ShaderX的书籍,其中涵盖了一些很棒的着色器内容。已经有1,2,3,4,5和6在印刷中,而即将推出的有7个。
祝你好运。如果我们可以使用一些着色器,我很乐意见到它们:)
回答
我只想重申一下,GPU Gems书籍对于任何认真的图形开发而言都是多么了不起的资源。
OJ基本上总结了一个非常好的学习过程,我只是补充说,不能低估几何数学(至少是矢量/矩阵)的良好基础,但是它并不像人们有时所指出的那样难。学习点积,叉积,法线向量和矩阵乘积是什么,这是一个很好的第一步:)。试着准确了解世界/视图/投影剪辑/屏幕空间之间的情况,透视图的分界等等。
当我开始学习时,一个不错的练习是实际上在软件中实现整个T&L管道,包括剪切/剔除等。这是一个漫长的过程,似乎不值得,因为我敢肯定我们只是想从中获得乐趣东西,但是对正在发生的事情有一个正确的了解是非常有用的,当我们总是遇到更加隐蔽且难以诊断的错误时,这将证明是值得的。
最初不要尝试被诸如FX Composer之类的工具所困扰,它们对于原型设计很有用,但是从长远来看,在基础知识上有扎实的基础更值得。
回答
我还没有使用XNA或者DirectX。但是,为了了解Cg着色器编程的基础知识," Cg教程"是我发现的最好的书。
回答
我们还应该查看RenderMonkey。这是一个很好的工具。就书籍而言,请查阅Riemer Grootjans ...很棒的书中的XNA 2.0游戏编程食谱。
回答
我会赞扬给OJ的确是一个很好的答案。
不过,一旦我们有了基本的了解,就可以通过下载以下两种出色的工具之一来学到很多东西并快速学习:
- 渲染猴子http://ati.amd.com/developer/rendermonkey/downloads.html或者
- Fx Composer http://developer.nvidia.com/object/fx_composer_home.html
完成此操作后,请转到其项目库并开始浏览示例,从基本阴影开始,然后移至阴影,法线贴图,材质,效果以及我们发现的所有感兴趣的内容。
进行一个项目,根据我们设置的一些目标开始更改算法,并了解如何获得它。
我们会发现许多示例确实非常先进,它们将打开视野。
回答
玩得开心
尽管已经给出了很多很好的建议,但是如果我们很难下定决心去了解所涉及的步骤,则Mental Mill提供了一种构建着色器的直观方法(Artist Edition与Fx Composer捆绑在一起,它本身也是免费的) !)。
尽管最好直接长期学习HLSL代码,但Mental Mill可以为我们生成这些Fx文件(以便我们可以查看更改)。请注意,就像所有代码生成器一样,它比我们理解HLSL时可能要做的更加冗长!
回答
从一种方法到另一种方法,效果的视觉效果令人印象深刻!
关于可视着色器编辑器的快速思考。
这类编辑器非常有趣,但是我真的非常建议我们坚持使用基于文本的HLSL(RM和FXC都可以完成此工作)。我是一名游戏开发人员,已经构建了一些着色器系统(例如,《战地风云2》和《孤岛惊魂2》中的一个),并且老实说,我发现HLSL比迄今为止的任何图形着色器网络更有价值。
诸如遵循执行流程,调试着色器或者能够快速迭代测试用例之类的事情使我们获得了视觉工具几乎无法获得的见解。
我自己使用视觉着色器构建器,我喜欢它们,有一天,当着色不像今天那样对性能至关重要时,它们可能是完成这项工作的正确工具。
回答
..尽管我的猜测是,在这一天到来之前,我们将看到延迟的照明和可能的完整软件渲染;)
入门着色器的最佳方法之一是阅读Frank Luna撰写的使用DirectX 9.0c进行3D游戏编程简介和着色器方法。作者首先介绍DirectX和HLSL,然后逐步揭示着色器的功能。他从非常简单的着色器开始,但是到这本书的结尾,我们知道如何创建照明,阴影,粒子系统等。很棒的书。
OJ建议我们阅读ShaderX系列,但是那里的内容不适合初学者使用,因此在我们迈出第一步时不会有太大帮助。
段落数量不匹配