我一直在使用 ID3D11VertexShader 和其他着色器,方法是从 fx 文件中单独加载它们。我已经看到使用 Effects 一次加载所有内容,它看起来更有条理,因为您可以简单地设置一个效果,它可以根据 fx 文件中的技术设置所有着色器。这看起来容易多了,但我听说在使用 Effects 时存在性能问题。这是真的?如果是这样,使用一个比另一个有什么优势吗?
最佳答案
使用 Effects 11 的主要缺点是 HLSL 编译器中对它的支持已弃用,并且可能会在未来的更新中删除。
Effects 11 的最新版本在 CodePlex 上并且有一个 discussion thread关于这个话题。
从历史上看,效果是一种比尝试使用“原始”着色器更容易学习和制作原型(prototype)的工具。它使编写有趣的示例变得更加容易,但它不是强制性技术。它使创建 Direct3D 着色器内容的某些方面更容易,使绑定(bind)动态和数据驱动,并且(现在有点过时的)标准注释语法 (SAS) 得到各种编辑器的支持,使艺术家可以在工具中调整“着色器可调整项”他们熟悉。在同一文件中创建不同的硬件级别回退也是 Effects 的一个有用优势。
然而,大多数 AAA 游戏都发现很难获得良好的性能并且难以定制。 FX9 和 FX10 都是“黑匣子”,但 FX11 您已将源代码共享到运行时部分。
至于替代品,DirectX Tool Kit BasicEffect 'stock' 着色器是一种有用的学习和快速原型(prototype)制作工具,对于那些熟悉 XNA Game Studio 4 的人来说,它是相同的着色器。你可以看到大部分 Direct3D 11 Samples不要使用 Effects 11。
Effects 11 不推荐用于新的应用程序,但它是可用的。 Windows 8.0 的 Windows 应用商店应用和 Windows Phone 8.0 应用无法使用它,因为您必须在运行时提供 D3DCompile API,FX11 依赖于这些 API 进行元数据反射。从技术上讲,它将与适用于 Windows 8.1 和 Windows Phone 8.1 应用程序以及 Win32 桌面应用程序的 Windows 应用商店应用程序一起使用。有些人也设法将它用于 Xbox One。
更新:Effects 现在托管在 GitHub 上
关于c++ - 在 DirectX 11 中使用效果器的优点或缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479513/