
原文地址Deus Ex-Human Revolution 画面研究deus Ex 这个游戏名我感觉应该是翻译成 困驴犹斗困局犹斗屡败屡战等等等等名字比较适合实际上 游戏我感觉属于个技术验证品并不好玩有的一部分技术值得参考图形图像只是一部分实际上 预处理 场景管理光照贴图碰撞检测文件等提前生成我感觉更好太多的高清游戏画面看多了目前有可能会导致制作者以为不用进行预处理就直接制作游戏硬件其他投入都高一些……游戏运行中 画面猜测技术实际未必属于 全部 画面实现 的技术这个 游戏使用的 阴影技术 也许在 很大的场景空间 的时候性能开销小要比 阴影体技术……包括 光照 开销也小但是 实现 的效果相当可以属于 性价比 非常可以的技术 我感觉本质上其实挺不错的技术如果 有 预处理场景管理还有预处理 光照信息碰撞检测 信息 等等……等比如 类似 Quake2 或者Quake3 的很多……再结合 这个游戏 实时出来的很多渲染其实应该在性价比范围内 很不错……2015年3月10 日2015/03/12在Reddit 和Slashdot在最后几个小时内 停掉 了我的带宽30,000次访问后返回网路。其次是HN。2015/03/11更新来自Matthijs DeSmedt的评论。原来的Deus Ex是 当时 最受欢迎的PC游戏之一我花了无数个小时 帮助 JC Denton 抵御了UNATCO或Illuminati的阴谋。我从来没有机会玩第二部作品“ 隐形战争 ”但是当它被释放时我又对“ Deus Ex-Human Revolution ”进行了设计。我可以说的是它符合预期Deus Ex-Human Revolution是2011年由Square Enix发布的游戏由EidosMontréal和Nixxes为PC版开发。它使用Crystal Dynamics制造的Crystal引擎的修改版本并且是支持DirectX 11的最早的游戏之一。当时它具有出色的图形仍然看起来不错它的重量比较轻巧甚至低预算的视频卡可以顺利运行游戏。我好奇的渲染过程所以我花了几个小时 逆向工程的游戏 译者注使用ida正式版来逆向工程对于源代码反编译可以看出来部分代码与Renderdoc玩。以下是我调查的结果。框架如何呈现以下是我们将考虑的场景。这是游戏的实际屏幕截图播放器显示器上显示的最终图像。让我们剖析这个框架乍看之下Deus Ex HR似乎使用类似于前进渲染技术的方法。除了游戏开发前几年前进变得流行应该是 前向与 延迟 渲染 实际上它使用前驱技术“轻量级前通”的方法。普通深度预通游戏渲染所有可见对象仅输出法线贴图和深度图。透明对象不呈现。根据网格每个三角形 将被 渲染为 平坦表面与 三角形的 所有 片段 相同的法线或者 也可以通过其自己的 法线贴图 进行 调制。例如浮雕 具有自己的 法线贴图 来 调制 渲染到 缓冲区 的 最终法线。正常地图进度10正常地图进度40正常地图进度70正常地图进度100以前下一个1234在创建 法线贴图的 同时每个绘图 调用 也同时 生成深度图深度地图这个步骤是在166次绘图调用 中实现的。阴影地图阴影通过PSSM技术产生。简而言之场景每渲染一次可以投下阴影一次。在我们的案例中有两个光源一个在右边玻璃窗后面的小办公室一个在手雕顶部。每个 阴影贴图 对应于4096x3072纹理内的1024x1024平方。这个通行证只有52个绘制调用比渲染完整的场景要少得多。这是通过将最大的物体标记为阴影脚轮跳过较小的物体来实现的;加上一些frustrum剔除可能用于 仅 渲染 从光源可见的对象。在 生成不同的 阴影贴图 之后将 深度图 和 阴影贴图 组合起来以产生 阴影纹理。阴影Mask(?此处翻译待定)读取 深度图的每个 纹素并为每个光源 计算 其可视性。最终结果 被输出到一个像 掩码一样的 RGBA 8位纹理默认值为白色(1, 1, 1, 1)这意味着纹素不被任何东西遮蔽。如果一个纹理素材处于某个光源的阴影中则与该光源对应的字节设置为0.雕刻手指下方的阴影仅由其上的光产生而不是办公室光线这就是为什么它们出现blue-ishRGBA(0, 1, 1, 1)。这种方法能够同时处理4个光源更多的是使用位掩码而不是字节掩码。一些小的可见伪像是PCF滤波技术的典型。更新Matthijs De Smedt指出光源的每个通道不仅可以存储0或1对此使用8位将是浪费的在此过程中像素的PCF也被计算并存储在这些8位。严格来说它不是真正的掩码如果完全点亮我们的值为1如果完全遮挡在阴影的中间值为0在阴影边缘之间的值为 0 到 1至给予 更平滑的 边界。屏幕空间环境遮挡通过采样深度缓冲区创建SSAO图。通过像素着色器获得第一个“嘈杂”的结果。然后在DirectX 11兼容卡上使用 计算着色器 对19x19内核应用模糊 并平滑 结果。在旧的卡片上模糊是用像素着色器完成的。SSAO第一通SSAO最终模糊结果以前下一个12在生成 SSAO 纹理之后其值存储在 法线贴图 的 Alpha通道 内。RGB正常的XYZAlpha环境遮挡光通行证场景的每个 点光 逐一呈现。唯一的输入是 普通 SSAO图 和 深度缓冲区。受光影响 的 像素 仅取决于 光的 半径和强度。光地图进度10光地图进度40光地图进度70光地图进度100以前下一个1234反射光的材料 在这一点上 并不重要此句翻译可能有误……而存储在光图 中的信息 就是 场景中 每个 像素 可能反射 的 光及其颜色多少。之后这种辐照度信息将有助于计算实际反射的光量取决于网格材料及其镜面特性。这个场景使用45点灯。不透明物体的前向渲染这是“实际”渲染终于发生的地方。场景的每一个网格都被画到屏幕上。像素的最终颜色由下式计算正常 SSAO地图阴影贴图和掩模光图对象自己的纹理/材质属性有时候假的环境地图128x128纹理立方体可以增强网格的反射首先渲染所有不透明对象普通 SSAO深度阴影光网格纹理和env地图。不透明物体10不透明物体40不透明物体70不透明物体100以前下一个1234请注意在此渲染步骤中深度测试功能被设置为COMPARISON_EQUAL而不是COMPARISON_LESS。此外即使深度测试被启用深度写入也被禁用。这是提高性能的诀窍记住在正常的地图创建过程中我们已经生成了场景深度缓冲区。所以我们已经知道像素应该具有的最终深度值。通过丢弃具有错误深度的任何片段我们避免了大量的阴影计算当一个更靠近相机的新片段以其自己的价值覆盖时这将会浪费时间。这有效地实现了0超绘制的渲染。透明对象这一步渲染贴花像墙上的标志子弹撞击透明物体如窗玻璃或 假体积光点光源的光晕。透明对象无透明物体贴花玻璃透明物体贴花玻璃体积光以前下一个123深度函数当然会被转回COMPARISON_LESS_EQUAL因为我们目前还没有关于透明对象位置的信息。深度写入保持禁用以确保靠近相机的透明网格 不会 取消 后面的另一个透明网格的渲染。体积光看起来很不错这些 只是在场景中处于良好位置的3D渲染的一组“精灵”。他们不是像您所期望的那样始终面向相机的单精灵广告牌它们实际上是二十面体 3D网格正确缩放以表示光晕。二十面体的选择是一个折中近似球体尽可能少的几何。这些网格也不依赖于 任何纹理“光环”在程序上计算100。通过对 深度图 进行 采样像素着色器 可以知道 当前 像素与 光源的 距离并且基于 该距离 计算 最终颜色值。以下是用于 创建效果的 网格的线框表示二十面体用于体积灯为了参考不透明和透明对象的渲染是在253次绘图调用中完成的。浅棕色要应用绽放效果我们需要知道具有非常强的光强度的像素集合。Deus Ex HR使用简单的LDR工作流程没有HDR缓冲区可以应用亮通滤波器。但实际上在执行上一遍时对于每个网格一个额外的信息 被输出到 alpha通道网格的 发射强度。Alpha通道亮度信息这足以创建一个绽放层这个想法是简单地应用一个大半径的高斯模糊。图像 首先缩小到一半然后 缩小 原始大小的 四分之一使模糊更有效最后 模糊。缩放x0.25应用模糊在 我们获得明亮区域的 模糊 之后我们只需要将它混合在 原始场景的 顶部。混合是添加剂因为我们 只想增加一些 区域的亮度不会变暗 任何东西。布卢姆以前布鲁姆之后以前下一个12抗锯齿为了平滑网格边缘上的锯齿状线条Deus Ex HR支持不同的抗锯齿技术如DLAAMLAAFXAA ...以下概述了使用FXAA时的更正FXAA关闭FXAA On颜色校正我们几乎完成了现场它已经看起来不错。最后一次触摸有一点颜色校正应用伽玛校正然后使用特殊的 像素着色器 给 场景提供淡黄色的色调。黄色的色调有时 被称为“黄金过滤器”有点像游戏的商标。对于那些 不喜欢 它的人来说有些mod可以 禁用 它。颜色校正之前颜色校正之后以前下一个12用户界面最后一步是将UI呈现在视图的顶部。这是在317个绘图调用中完成的。UI之前UI之后以前下一个12我们完成了 纹理 终于被复制到 后台缓冲区 并呈现给 用户。时间线只是粗略地了解流程每一步的成本这里是对处理步骤所需时间的快速比较。奖金备注翻译可能也有误 ……景深我不认为DoF效果在游戏阶段被使用过但在电影或对话中始终都是存在的。Deus Ex HR中使用的技术是 您可以考虑 的 最基本的使用 高斯模糊 的2层DoF。原始场景低调和模糊1缩放x0.52水平模糊3垂直模糊以前下一个123我们得到2个版本的场景后原来的酥脆一个模糊失焦的版本像素着色器将线性插值 的2层之间这取决于像素深度。色差太近或太近着色器会使用模糊的图像;但是在对焦距离的右侧着色器将使用原始图像。原版的模糊深度深度插值景深以前景深之后以前下一个12高斯模糊 可以在 兼容硬件上 的 计算着色器 上执行并且 可以对 像素着色器 进行 回退。剪影效果在播放时可以与场景的各种对象进行交互。游戏指示玩家可以通过将黄色着色并在其周围绘制闪亮的轮廓来操纵的对象。在一些游戏中效果是非常基本的有时网格被简单地绘制在更大的尺度上输出恒定的颜色; 有时在整个场景渲染之后相关网格再次被绘制在最终图像顶部的一些颜色和alpha调制。但是在Deus Ex HR中剪影效果是完美集成的前面的任何封闭器可以影响最终的轮廓。请注意闪亮的轮廓不仅遵循容器的形状而且还遵循前面的警察之一。那么这样的效果如何呢这是一个非常简单的技巧。记住包含场景每个像素的所有辐照度信息的光图我们只需要RGB通道来存储辐照度不使用alpha通道。而这正是在 Alpha通道 中游戏存储 有关 属于 可交互对象 的 像素的 信息。光地图 - RGB辐射光 地图 - Alpha交互式对象以前下一个12这是我们需要绘制剪影的唯一信息场景呈现之后但在绽放之前会发生额外的传球。该通道在 场景顶部 绘制 叠加 层标记为 交互式的像素 以一些三角形图案由 纹理 调制的 黄色调色呈现最后使用Sobel样 边缘检测算子 绘制 剪影。绘制剪影也会输出到 渲染目标 的Alpha通道这是有关 亮度的 信息 所在的位置。绽放效果将使 剪影 闪耀。剪影以前剪影之后以前下一个12进一步阅读如果您想了解更多您可以查看以下链接的一些链接还有很多可以说Deus Ex HR的内容。Deus Ex在详细资料 - Matthijs De Smedt的GDC 2012演讲。设计挑战的例外人类革命 - GDC 2012演讲由FrançoisLapikas。构建故事驱动的Deus Ex人类革命的经验 - GDC 2011由Mary DeMarle的演讲。原文地址Deus Ex人类革命 - 图形研究2015年3月10 日2015/03/12在Reddit 和Slashdot在最后几个小时内 终止 了我的带宽30,000次访问后返回网路。其次是HN。2015/03/11更新来自Matthijs DeSmedt的评论。原来的Deus Ex是当时最受欢迎的PC游戏之一我花了无数个小时帮助JC Denton抵御了UNATCO或Illuminati的阴谋。我从来没有机会玩第二部作品“ 隐形战争 ”但是当它被释放时我又对“ 人类革命 ”进行了设计。我可以说的是它符合预期Deus Ex人类革命是2011年由Square Enix发布的游戏由EidosMontréal和Nixxes为PC版开发。它使用Crystal Dynamics制造的Crystal引擎的修改版本并且是支持DirectX 11的最早的游戏之一。当时它具有出色的图形仍然看起来不错它的重量比较轻巧甚至低预算的视频卡可以顺利运行游戏。我好奇的渲染过程所以我花了几个小时逆向工程的游戏与Renderdoc玩。以下是我调查的结果。框架如何呈现以下是我们将考虑的场景。这是游戏的实际屏幕截图播放器显示器上显示的最终图像。让我们剖析这个框架乍看之下Deus Ex HR似乎使用类似于前进渲染技术的方法。除了游戏开发前几年前进变得流行实际上它使用前驱技术“轻量级前通”的方法。普通深度预通游戏渲染所有可见对象仅输出法线贴图和深度图。透明对象不呈现。根据网格每个三角形将被渲染为平坦表面与三角形的所有片段相同的法线或者也可以通过其自己的法线贴图进行调制。例如浮雕具有自己的法线贴图来调制渲染到缓冲区的最终法线。正常地图进度10正常地图进度40正常地图进度70正常地图进度100以前下一个1234在创建法线贴图的同时每个绘图调用也同时生成深度图深度地图这个步骤是在166次绘图调用中实现的。阴影地图阴影通过PSSM技术产生。简而言之场景每渲染一次可以投下阴影一次。在我们的案例中有两个光源一个在右边玻璃窗后面的小办公室一个在手雕顶部。每个阴影贴图对应于4096x3072纹理内的1024x1024平方。这个通行证只有52个绘制调用比渲染完整的场景要少得多。这是通过将最大的物体标记为阴影脚轮跳过较小的物体来实现的; 加上一些frustrum剔除可能用于仅渲染从光源可见的对象。在生成不同的阴影贴图之后将深度图和阴影贴图组合起来以产生阴影纹理。阴影面具读取深度图的每个纹素并为每个光源计算其可视性。最终结果被输出到一个像掩码一样的RGBA 8位纹理默认值为白色(1, 1, 1, 1)这意味着纹素不被任何东西遮蔽。如果一个纹理素材处于某个光源的阴影中则与该光源对应的字节设置为0.雕刻手指下方的阴影仅由其上的光产生而不是办公室光线这就是为什么它们出现blue-ishRGBA(0, 1, 1, 1)。这种方法能够同时处理4个光源更多的是使用位掩码而不是字节掩码。一些小的可见伪像是PCF滤波技术的典型。更新Matthijs De Smedt指出光源的每个通道不仅可以存储0或1对此使用8位将是浪费的在此过程中像素的PCF也被计算并存储在这些8位。严格来说它不是真正的掩码如果完全点亮我们的值为1如果完全遮挡在阴影的中间值为0在阴影边缘之间的值为0到1至给予更平滑的边界。屏幕空间环境遮挡通过采样深度缓冲区创建SSAO图。通过像素着色器获得第一个“嘈杂”的结果。然后在DirectX 11兼容卡上使用计算着色器对19x19内核应用模糊并平滑结果。在旧的卡片上模糊是用像素着色器完成的。SSAO第一通SSAO最终模糊结果以前下一个12在生成SSAO纹理之后其值存储在法线贴图的Alpha通道内。RGB正常的XYZAlpha环境遮挡光通行证场景的每个点光逐一呈现。唯一的输入是普通 SSAO图和深度缓冲区。受光影响的像素仅取决于光的半径和强度。光地图进度10光地图进度40光地图进度70光地图进度100以前下一个1234反射光的材料在这一点上并不重要而存储在光图中的信息就是场景中每个像素可能反射的光及其颜色多少。之后这种辐照度信息将有助于计算实际反射的光量取决于网格材料及其镜面特性。这个场景使用45点灯。不透明物体的前向渲染这是“实际”渲染终于发生的地方。场景的每一个网格都被画到屏幕上。像素的最终颜色由下式计算正常 SSAO地图阴影贴图和掩模光图对象自己的纹理/材质属性有时候假的环境地图128x128纹理立方体可以增强网格的反射首先渲染所有不透明对象普通 SSAO深度阴影光网格纹理和env地图。不透明物体10不透明物体40不透明物体70不透明物体100以前下一个1234请注意在此渲染步骤中深度测试功能被设置为COMPARISON_EQUAL而不是COMPARISON_LESS。此外即使深度测试被启用深度写入也被禁用。这是提高性能的诀窍记住在正常的地图创建过程中我们已经生成了场景深度缓冲区。所以我们已经知道像素应该具有的最终深度值。通过丢弃具有错误深度的任何片段我们避免了大量的阴影计算当一个更靠近相机的新片段以其自己的价值覆盖时这将会浪费时间。这有效地实现了0超绘制的渲染。透明对象这一步渲染贴花像墙上的标志子弹撞击透明物体如窗玻璃或假体积光点光源的光晕。透明对象无透明物体贴花玻璃透明物体贴花玻璃体积光以前下一个123深度函数当然会被转回COMPARISON_LESS_EQUAL因为我们目前还没有关于透明对象位置的信息。深度写入保持禁用以确保靠近相机的透明网格不会取消后面的另一个透明网格的渲染。体积光看起来很不错这些只是在场景中处于良好位置的3D渲染的一组“精灵”。他们不是像您所期望的那样始终面向相机的单精灵广告牌它们实际上是二十面体 3D网格正确缩放以表示光晕。二十面体的选择是一个折中近似球体尽可能少的几何。这些网格也不依赖于任何纹理“光环”在程序上计算100。通过对深度图进行采样像素着色器可以知道当前像素与光源的距离并且基于该距离计算最终颜色值。以下是用于创建效果的网格的线框表示二十面体用于体积灯为了参考不透明和透明对象的渲染是在253次绘图调用中完成的。浅棕色要应用绽放效果我们需要知道具有非常强的光强度的像素集合。Deus Ex HR使用简单的LDR工作流程没有HDR缓冲区可以应用亮通滤波器。但实际上在执行上一遍时对于每个网格一个额外的信息被输出到alpha通道网格的发射强度。Alpha通道亮度信息这足以创建一个绽放层这个想法是简单地应用一个大半径的高斯模糊。图像首先缩小到一半然后缩小原始大小的四分之一使模糊更有效最后模糊。缩放x0.25应用模糊在我们获得明亮区域的模糊之后我们只需要将它混合在原始场景的顶部。混合是添加剂因为我们只想增加一些区域的亮度不会变暗任何东西。布卢姆以前布鲁姆之后以前下一个12抗锯齿为了平滑网格边缘上的锯齿状线条Deus Ex HR支持不同的抗锯齿技术如DLAAMLAAFXAA ...以下概述了使用FXAA时的更正FXAA关闭FXAA On颜色校正我们几乎完成了现场它已经看起来不错。最后一次触摸有一点颜色校正应用伽玛校正然后使用特殊的像素着色器给场景提供淡黄色的色调。黄色的色调有时被称为“黄金过滤器”有点像游戏的商标。对于那些不喜欢它的人来说有些mod可以禁用它。颜色校正之前颜色校正之后以前下一个12用户界面最后一步是将UI呈现在视图的顶部。这是在317个绘图调用中完成的。UI之前UI之后以前下一个12我们完成了 纹理终于被复制到后台缓冲区并呈现给用户。时间线只是粗略地了解流程每一步的成本这里是对处理步骤所需时间的快速比较。奖金备注景深我不认为DoF效果在游戏阶段被使用过但在电影或对话中始终都是存在的。Deus Ex HR中使用的技术是您可以考虑的最基本的使用高斯模糊的2层DoF。原始场景低调和模糊1缩放x0.52水平模糊3垂直模糊以前下一个123我们得到2个版本的场景后原来的酥脆一个模糊失焦的版本像素着色器将线性插值 的2层之间这取决于像素深度。色差太近或太近着色器会使用模糊的图像;但是在对焦距离的右侧着色器将使用原始图像。原版的模糊深度深度插值景深以前景深之后以前下一个12高斯模糊可以在兼容硬件上的计算着色器上执行并且可以对像素着色器进行回退。剪影效果在播放时可以 与 场景 的 各种 对象 进行 交互。游戏 指示 玩家可以 通过 将 黄色 着色 并在 其 周围 绘制 闪亮的轮廓 来 操纵 的 对象。在一些 游戏 中效果 是 非常 基本 的有时网格 被 简单地 绘制 在 更大 的 尺度上输出 恒定 的 颜色;有时在整个场景渲染之后相关网格再次被绘制在最终图像顶部的一些颜色和alpha调制。但是在Deus Ex HR中剪影效果 是 完美 集成的前面的任何封闭器可以影响最终的轮廓。请注意闪亮的轮廓不仅遵循容器的形状而且还遵循 前面 的 检测此处翻译可能有误之一。那么这样的效果如何呢这是一个非常简单的技巧。记住包含场景每个像素的所有辐照度信息的光图我们只需要RGB通道来存储辐照度不使用alpha通道。而这正是在Alpha通道中游戏存储有关属于可交互对象的像素的信息。光地图 - RGB辐射光地图 - Alpha交互式对象以前下一个12这是我们需要绘制剪影的唯一信息场景呈现之后但在绽放之前会发生额外的传球。该通道在场景顶部绘制叠加层标记为交互式的像素以一些三角形图案 由 纹理 调制 的 黄色 调色 呈现最后 使用Sobel 样边缘 检测 算子 绘制 剪影。绘制 剪影 也会 输出 到 渲染 目标 的Alpha通道这是有关 亮度 的 信息 所在的 位置。绽放 效果 将使 剪影 闪耀。剪影以前剪影之后以前下一个12进一步阅读如果您想了解更多您可以查看以下链接的一些链接还有很多可以说Deus Ex HR的内容。Deus Ex在详细资料 - Matthijs De Smedt的GDC 2012演讲。设计挑战的例外人类革命 - GDC 2012演讲由FrançoisLapikas。构建故事驱动的Deus Ex人类革命的经验 - GDC 2011由Mary DeMarle的演讲。