2011-04-10 40 views
7

我在寻找可以让我更好地理解着色器在游戏中使用什么类型的东西的资源,他们可以做什么,甚至更重要的是什么他们不可以。我了解图形管道是如何工作的,以及我在GLSL中做了一些非常基本的着色器(主要是为了替换固定功能管线功能),但我还没有完全理解哪些东西只能用于自定义着色器,哪些事情可以更有效地完成,等等。我已经能够找到某些技术的一些例子,特别是照明,但我正在寻找更高层次的使用概述。概述/着色器技术展示/游戏用途

与总览相比,某些有趣技术的链接和解释也受到赞赏(但不到概述;)),最好是GLSL或伪代码。

+0

此问题可能更适合http://gamedev.stackexchange.com/ – Twelve47 2011-04-10 13:43:04

+0

我认为这是一个非常有效的问题。我也一直在想这个,这是我在这里找到你的问题的原因。对于拥有完全可编程管线的承诺,我也有些失望。无法对附近的碎片进行采样是一种惊喜。但我认为在纹理组合方面存在很多可能性(固定管道中的噩梦)。我认为GLSL并不是即时的酷炫效果配方(有些效果听起来不错),但肯定会有其用处。 – zmippie 2012-05-30 15:46:49

回答

4

考虑到DirectX和OpenGL都朝向仅着色器(即没有固定功能)的系统,对于“哪些效果只有着色器才有可能”问题的答案可能就是“一切”。

,我相信一些技术是不可能的/不带可编程着色器可行(或通过使用非常特殊的黑盒的API)虽然,有:

  1. 每像素照明
  2. 阴影映射。
  3. 用于动画网格的GPU蒙皮(即矩阵调色板蒙皮)。
  4. 任何今日常见的后期处理效果:bloom,SSAO,景深等。
  5. 延期着色。
  6. 实现任意波形/“其他”照明模型,如奥伦 - 纳亚尔,库克 - 托兰斯,轮缘照明等

和列表可以去上,我敢肯定,有些人会不同意我的评估这些无法通过固定功能功能(通过黑客或各种固定功能扩展)来实现。

它可以归结为,在可编程着色器之前,供应商必须在硬件/驱动程序中实现给定的效果,而且它必须是可以通过API合理表达的东西。现在,您可以有效地执行任何用户定义的代码(在不同着色器阶段和硬件其他限制的限制之内),因此您可以灵活地大幅度定制渲染管道,并根据需要发明新技术。

看看第一对情侣GPU Gems书籍(可以在Nvidia网站上免费阅读)来感受一旦可编程硬件可用时出现的技术类型。

+1

尽管我同意这个答案,但是这里有一点评论:阴影映射实际上可以用固定/函数GL(不知道D3D),还有矩阵调色板蒙皮的扩展(我确信D3D有它,太)。但是这些作为着色器肯定不那么灵活(并且广泛支持蒙皮延伸)。 – 2011-06-12 01:28:57