游戏中着色器技术的概述/展示及其用途

7
我正在寻找资源,可以帮助我更好地理解游戏中着色器的用途、能够完成哪些任务,甚至更为重要的是,哪些任务无法完成。 我已经了解了图形管线如何工作,也使用GLSL制作了一些非常基本的着色器(主要是用于替换固定功能管线),但我仍然不完全理解哪些任务只能使用自定义着色器,哪些任务可以更有效地完成等。 我已经找到了某些技术的示例,尤其是照明方面,但我正在寻找更高级的用法概述。
当然,链接到和解释某些有趣技术的文章也很受欢迎,尽管比总览少一些,最好是使用GLSL或伪代码。

这个问题可能更适合于http://gamedev.stackexchange.com/。 - Twelve47
我认为这是一个非常有价值的问题。我也一直在思考这个问题,这也是我在这里找到你的问题的原因。对于完全可编程管道的承诺,我也稍微感到失望。不能够采样附近的片段是一个惊喜。但是当涉及到纹理组合时(在固定管道中是一场噩梦),我认为有很多可能性。我认为GLSL并不是一个立竿见影的酷效果配方(有些人让它听起来像),但肯定会有其用途。 - zmippie
1个回答

4
考虑到DirectX和OpenGL都已经向着仅使用着色器的系统(即没有固定功能)发展,对于你的“哪些效果只能通过着色器实现”的问题,答案可能是“一切”。
然而,我认为以下一些技术在没有可编程着色器(或使用非常特殊的黑盒API)的情况下不可能或不可行:
1. 每像素光照 2. 阴影映射。 3. GPU蒙皮(即矩阵调色板蒙皮)用于动画网格。 4. 任何常见的后处理效果:泛光、SSAO、景深等。 5. 延迟渲染。 6. 实现任意/“其他”照明模型,如Oren-Nayar、Cook-Torrance、Rim-Lighting等。
当然,这个列表可以继续增加,我相信有些人会反对我的评估,认为这些可以通过固定功能实现(通过各种hack或不同的固定功能扩展)。
归根结底,在可编程着色器出现之前,必须由供应商在硬件/驱动程序中实现给定的效果,并且它必须是可以通过API合理表达的东西。现在,您可以执行任何用户定义的代码(在不同着色器阶段和硬件的其他限制的约束下),因此您可以灵活地定制渲染流水线并根据需要发明新技术。
查看前几本GPU Gems书籍(可在Nvidia网站上免费阅读)以了解一下可编程硬件可用后出现的技术类型。

1
虽然我同意这个答案,但是我有一点小建议:阴影映射实际上可以在固定/函数GL(不知道D3D)中实现,并且还有一个矩阵调色板蒙皮扩展(我相信D3D也有)。但是这些肯定不像着色器那样灵活(而且蒙皮扩展并没有得到广泛支持)。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接