检查Rage的着色器
来源:互联网 发布:微信数据储存到sd卡里 编辑:程序博客网 时间:2024/05/16 01:31
检查Rage的着色器
Rage,游戏由id软件开发,玩得很开心。但是玩起来更有趣。
我已经提出了检查id Tech 5的虚拟纹理或MegaTextures的机制的方法,因为它们也被称为。但是,如果您真的很好奇这是如何工作的,您想要阅读用于解决MegaTexture的着色器文件。
由于id Tech 5(Rage的引擎)在OpenGL 3.2中实现,着色器必须作为源代码上传到驱动程序,所以必须有一种方式让你的手 - 但是在你想到拦截OpenGL调用之前,担心来源可能会被模糊化让我告诉你,这更简单:Rage有一个命令行选项来转储着色文件:只需将+ set r_dumpGeneratedGLSL 1添加到命令行,并将文件转储到您的steam目录Steam \ steamapps \ common \ rage \ base \ generated \ glsl。
(译者注,我已经得到了Rage的shader着色器源代码,但是按照此方法,我发现并不是在Rage的控制台中命令输入,才能得到Rage的Shader着色器代码,乃是在Rage.exe的快捷方式中修改才能得到这个文件的,考虑到Rage具有12G以上的规模,很多人电脑已经删除了,所以我上传到了网盘上面了,如果你需要这个东西的话,可以在此处下载,事实上我完全的没有想到这个shader代码能够在我电脑的rage中存在,真是想不到。
我怀疑doom4,德军总部新秩序,旧血脉,恶灵附身,得到shader的方法跟这个差不多的,有空可以试验一下
注:可以使用Ida注册版,来反编译rage.exe的源码,可以获得部分代码,清晰的可以看出来rage调用了cuda的部分函数,对于doom4.exe我估计使用反编译工具也可以用来反编译,得到部分代码)
他们显然是从内部格式生成的,可以同时为glsl(PC),cg(PS3)和hlsl(XBox360)写入着色器。这解释了为什么在所有着色器文件中总是具有相同的功能,这些功能可以封装纹理访问和一些基本的数学函数 - 使用这些包装器可以轻松地将代码转换成多个着色器语言。
我不会在这里引用任何着色器,因为它们是受版权保护的,但是如果你拥有这个游戏的PC版本,你可以转储自己的设置并看看。不要害怕848个文件,其中一半是cg,每个顶点着色器只有一个片段着色器 - 不会混合着色器。最终会有212个着色器程序,其中有很多的冗余 - 如果你有两个稍微不同的材料,你将得到两个共享99%代码的着色器程序。
(译者注:Rage的着色器,代码文件非常的多,分为fvertex和fargment两大部分,代码真是复杂,没有源代码,只有shader代码,也只能猜透一小部分而已,)有趣的是,大多数户外环境基本上只是纹理查找(在具有颜色空间转换的虚拟纹理和可选的雾) - 所有照明都是预烘焙的!即使是人的动态照明也是非常简单的,让我想起了Half-Life 2的简单光模型。你可能还想看一下顶点着色器中的动画:这是一个很好的阅读方式,尽可能地挤压尽可能多的有效载荷变成很少的变量。
你想了解更多吗?好。获取glintercept的副本,并将提供的OpenGL32.dll与配置文件一起放在您的Rage文件夹中(请参阅提供的文档)。因此,您可以转储用于渲染一帧的所有OpenGL调用。在早期的Rage版本中,您还可以使用此工具在游戏过程中修改所有着色器,看看会发生什么。可悲的是,这破坏了最近的更新之一 - 我指责统一缓冲区,因为这似乎只是使用UBO的shader程序发生,并且glintercept可能不会在重新链接着色器之前查询统一的缓冲区绑定点,所以他们找不到缓冲区了 请注意,这只是一个猜测,我没有时间来验证和修复。但是如果你做了 - 或者一段时间没有更新你的steam - 你可以在照明或虚拟纹理代码等方面打呵欠。例如,整个环境并不是法线!车辆和人有他们,但在环境中它是混合的(外围没有任何):
没有法线的物体是白色的,另一个在RGB中显示世界空间法线。请注意,人们具有非常详细的法定地图和管道。其中一个垃圾邮件具有正常的地图,下一个不是 - 控制台和PC端口上必须使用相同资产的微量内存的标志...
有可能操纵个人效果,您可以看到他们的视觉影响有多大,例如广告牌:
如果我们停用它们(通过将alpha设置为0.0),场景看起来更加“钝”,更少的动画(当云移动时,这更加明显):
要看看这是多么强调ROP让我们将alpha设置为1.0,并查看所有生成的片段:
或者将颜色设置为很好的红色,看看所有的小灌木丛:
它还需要像这样的操作来显示这些简单广告牌的问题:如果四边形相交,则找不到正确的绘制顺序:
- 检查Rage的着色器
- RAGE的megatexture介绍
- RAGE的megatexture介绍
- RAGE的megatexture介绍
- Unity3d的着色器
- DX10的几何着色器
- 加载着色器的异常
- OpenGL着色器的使用
- 普通的点光源着色器改成聚光灯着色器
- 顶点着色器和像素着色器的数据处理流程
- 着色器编程入门 - 顶点着色的基本原则(转)
- 着色器
- 着色器
- 着色器
- 着色器
- 着色器
- 着色器
- 编译着色器的工具--fxc
- AMD Intel两个显示 Window10打开电脑时 黑屏一段时间(1-2分钟) 进入系统
- C++ 32位程序枚举64位系统注册表子项,含关闭重定向和提权
- linux安装FTPserver
- RIL 机制---消息从reference-ril到RIL
- Ubuntu linux安装ssh server
- 检查Rage的着色器
- Github全面详解-18为小组创建Pull Request
- AS项目转到eclipse中方法
- 211. Add and Search Word
- 使用 Cookie 的优点与缺点
- mysql入门(五)
- 二次sql注入
- RIL 机制---消息从RIL到RILJ
- Megatextures in Rage