检视Rage的着色器
Rage,
游戏由ID软件开发,玩得很开心。
但是玩起来更有趣。
我已经提出了检查id Tech 5的虚拟纹理或MegaTextures的机制的方法,
因为它们也被称为。
但是,如果您真的很好奇这是如何工作的,
您想要阅读用于解决MegaTexture的着色器文件。
由于id Tech 5 (Rage的引擎)在OpenGL 3.2中实现,
着色器必须作为源代码上传到驱动程序,
所以必须有一种方式让你的手 ,(此处翻译可能有误……)
但是在你想到拦截 OpenGL调用之前,
担心来源可能会被模糊化让(此处翻译可能有误……)
我告诉你,
这更简单:Rage 有一个 命令行选项 来 转储 着色文件:
只需将+ set r_dumpGeneratedGLSL 1
添加到命令行,
并将文件转储到您的蒸汽 目录 Steam \ steamapps \ common \ rage \ base \ generated \ glsl 。
他们显然是从 内部格式 生成的,
可以同时为GLSL(PC),CG(PS3)和HLSL(XBOX360)写入着色器。
这解释了为什么在所有着色器文件中总是具有相同的功能,
这些功能可以封装纹理访问和一些基本的数学函数 ,
使用这些包装器可以轻松地将代码转换成多个着色器语言。
我不会在这里引用任何着色器,
因为它们是受版权保护的,
但是如果你拥有这个游戏的PC版本,
你可以转储自己的设置并看看。
不要害怕 848个文件,其中一半是CG,
每个顶点着色器只有一个片段着色器 - 不会混合着色器。
最终会有212个着色器程序,
其中有很多的冗余 ……,
如果你有两个稍微不同的材料,你将得到两个共享99 %代码的着色器程序。
(译者注:Rage 的着色器,代码文件非常的多,
分为fvertex和fargment两大部分,
代码真是复杂,
没有源代码,只有着色器代码,也只能猜透 一小部分而已,)
有趣的是,
大多数 户外环境 基本上只是 纹理查找
(在具有 颜色空间 转换的 虚拟纹理 和 可选的 雾) ,
所有照明都是 预烘焙 的!
即使是人的 动态照明 也是非常简单的,
让我想起了 Half-Life 2的简单光模型。
你可能还想看一下 顶点着色器中的动画:这是一个很好的阅读方式,
尽可能地挤压尽可能多的有效载荷变成很少的变量。
你想了解更多吗?好。获取glintercept 的副本,
并将提供的OPENGL32.DLL与配置文件一起 放在 您 的RAGE 文件夹 中
(请参阅提供的文档)。
因此,您可以 转储用于 渲染一帧的所有 OpenGL调用。
在早期的Rage版本中,
您还可以使用此工具在游戏过程中修改所有着色器,
看看会发生什么。
可悲的是,这破坏了最近的更新之一 ,
我指的 统一缓冲区,
因为这似乎只是使用UBO的着色器程序发生,
并且 glintercept 可能不会在重新链接着色器之前查询统一的缓冲区绑定点,
所以找不到他们缓冲区了
请注意,这只是一个猜测,我没有时间来验证和修复。
但是如果你做了 -,或者一段时间没有更新你的steam ,
你可以在 照明或虚拟纹理代码 等方面“打呵欠”。
例如,整个环境并不是法线!载具 和人有他们,
但在环境中它是混合的(外围没有任何):
没有法线的物体是白色的,
另一个在RGB中显示 世界空间法线。
请注意,游戏中的 人物 有非常详细的法定地图和管道。
其中一个垃圾邮件具有正常的地图,
下一个不是 , Console和PC端口上 必须使用 相同资产的微量 内存的标志......
有可能操纵个人效果,
您可以看到他们的视觉影响有多大,
例如 广告牌:
如果 我们 停用 它们(通过将 阿尔法 设置为0.0),
场景 看起来更加 “钝”,
更少的动画( 当 云 移动时,这更加 明显):
要看看这是多么 强调 ROP让 我们将 阿尔法设置为1.0,
并查看所有生成的片段:
或者将 颜色设置为很好的 红色,看看所有的小灌木丛:
它还需要像这样的操作来 显示这些简单 广告牌 的问题:
如果 四边形相交,则找不到正确的 绘制顺序:
