需要对照界面查找具体开关?请先看登录器设置指南,其中包含 Windows 英文原生截图和逐页说明。
本页以 PSOBB 为对象,解释旧式 Direct3D 调用如何经过 D3D9、dgVoodoo 或 DXVK 到达现代显卡,并说明 Ephinea 对应画面设置的实际作用。它既是渲染技术知识页,也可用于选择和排查客户端后端。涵盖:
一张图看清各项设置之间的依赖关系: 渲染后端的选择决定了下方哪些画质选项会真正生效。
看图记两句话: API 数字越大不代表画质越高;它首先决定命令经过哪套运行库、包装器和显卡驱动。Ephinea 的高级抗锯齿从 D3D9 起可用,D3D11/12 额外使用 dgVoodoo,Vulkan 使用 DXVK;只有 dgVoodoo Model 明确限定在 D3D11/12 路径。
PSOBB 的引擎原生只会提交 Direct3D 8 命令。登陆器里的选项不会重写模型、纹理或场景光照,而是决定这些命令之后经过哪套兼容层、输出 API 和显卡驱动。严格来说,下拉框混合了原生 API、转译路径和包装器输出后端,并不只是几套平级的"渲染器"。
现代后端不是把 PSOBB 改造成一款 D3D11 或 D3D12 原生游戏。游戏仍然生成同一批 D3D8 时代的顶点、纹理、固定功能状态和 Draw Call;兼容层负责把它们改写成后续 API 能理解的资源、状态和着色器,最后再交给显卡驱动。
PSOBB 内容与逻辑
↓ D3D8 命令
Ephinea 兼容/增强层 (D3D9 路径、AA、AF、后处理)
├─ D3D9 ───────────────────────────────→ D3D9 驱动
├─ D3D9 → Microsoft D3D9On12 ─────────→ D3D12 驱动
├─ D3D9 → dgVoodoo ─→ D3D11 或 D3D12 → 对应驱动
└─ D3D9 → DXVK ───────────────────────→ Vulkan 驱动这也解释了为什么登陆器的自定义文件是 dgVoodoo_d3d9.dll 或 dxvk_d3d9.dll:包装器接收的是 Ephinea 输出的 D3D9 调用,再转到 D3D11、D3D12 或 Vulkan。Ephinea 官方的 Launcher 3.5.0 更新说明也给出了这两个文件名和版本关系。
首先要区分三件事:D3D8/9/11/12 与 Vulkan 是图形 API;D3D9On12 是微软的映射层;dgVoodoo 和 DXVK 是第三方翻译器。Ephinea 下拉菜单把这些不同层级组合成便于选择的“后端”。
| Ephinea 选项 | PSOBB 上层接口 | 中间层 | 最终驱动 API | 抽象层级 | 关键特征 |
|---|---|---|---|---|---|
| Direct3D 8 | D3D8 | 无 | D3D8 | 旧式高层 | 原版固定功能管线;链路最短;高级 AA 不完整;传统设备丢失语义 |
| Direct3D 9 | D3D8 | Ephinea D3D8→9 | D3D9 | 旧式高层 | 固定功能与 Shader Model 并存;可用高级 AA;仍采用 D3D9 Reset/Device Lost 模型 |
| Direct3D 9on12 | D3D8→D3D9 | Microsoft D3D9On12 | D3D12 | 上层 D3D9、底层 D3D12 | 系统映射层;不是 dgVoodoo;保留上层 D3D9 设备语义 |
| Direct3D 11 | D3D8→D3D9 | dgVoodoo | D3D11 | 现代高层 | 驱动代管资源状态、同步与较多显存策略;兼容性通常最好 |
| Direct3D 12 | D3D8→D3D9 | dgVoodoo | D3D12 | 现代低层 | 翻译器显式管理命令、资源状态、描述符、同步和显存;固定 Flip 呈现 |
| Vulkan | D3D8→D3D9 | DXVK | Vulkan | 现代低层 | 与 D3D12 同代但属于另一套跨平台 API 和驱动栈;Windows 非 DXVK 官方支持目标 |
| Custom | D3D8→D3D9 | 用户提供的 dgVoodoo / DXVK | D3D11、D3D12 或 Vulkan | 取决于文件 | 用于验证新版修复或回归;行为不能由“Custom”名称本身判断 |
D3D8 到 D3D9 是旧式 API 的渐进升级,仍保留固定功能和传统设备重置模型;D3D11 把现代 GPU 功能包装成由驱动管理的高层接口;D3D12 与 Vulkan 则把资源状态、命令提交和同步显式交给上层。D3D9On12 只改变 D3D9 下面的实现,不会把 PSOBB 或 Ephinea 前端变成原生 D3D12。
API 本身不提供"D3D12 级画质"。角色多边形数量、贴图分辨率、材质、光照公式、阴影和特效仍由 PSOBB 决定。若输出分辨率、AA、AF、SSAO 与 Shaders 完全相同,D3D9、D3D11、D3D12 和 Vulkan 的目标画面应当非常接近。
但不同路径不是逐位等价的录像回放。包装器需要模拟 D3D8/9 的固定功能管线,并把旧式格式与状态转换成现代着色器和资源;以下细节可能产生可见差异:
因此,后端之间出现明显的黑块、错误雾效、缺失反射或整体偏暗时,应视为兼容性差异或翻译错误,而不是某个 API 的正常"画风"。切换后端的主要价值是寻找对当前 GPU、驱动和窗口模式最正确稳定的实现。
两者最终都会调用 D3D12 驱动,但翻译器、对上层暴露的设备模型和呈现管理都不同。"最终用了 D3D12"并不足以判断它们的行为。
| 对比项 | Direct3D 9on12 | Direct3D 12 |
|---|---|---|
| 完整路径 | D3D8 → Ephinea D3D9 → Microsoft D3D9On12 → D3D12 | D3D8 → Ephinea D3D9 → dgVoodoo → D3D12 |
| 谁负责翻译 | Windows 的 D3D9On12 Mapping Layer | 第三方包装器 dgVoodoo2 |
| 上层语义 | 仍按 D3D9 设备、资源和交换链规则工作 | 由 dgVoodoo 模拟 D3D9,再自行管理 D3D12 资源与同步 |
| 设备丢失 | 保留较多传统 D3D9 行为;Ephinea 已确认 UAC、锁屏等仍可触发问题 | dgVoodoo 接管设备与呈现,通常可避开该类 D3D8/9 Device Lost |
| 交换链 | 由 D3D9 运行库及映射层决定 | dgVoodoo D3D12 固定采用现代 Flip Discard |
| 抗锯齿 | Ephinea 高级 AA 可用;更接近 D3D9 的兼容特征 | 同一套 Ephinea AA 可用;MSAA/HSAA 的反射兼容性通常更好 |
| 主要用途 | 系统兼容路径,并非性能或画质升级档 | 用于 dgVoodoo 的现代设备管理、呈现和兼容修复 |
所以,为了避免 D3D8/9 在 Alt-Tab、UAC 安全桌面或锁屏后的 Device Lost,应选择 dgVoodoo 路径而不是 D3D9On12;实际排障先用 Direct3D 11。Direct3D 12 同样能绕开传统设备丢失,但应结合 GPU 厂商评估:它主要适合作为 AMD 的 D3D11 纹理异常替代路径,不是 NVIDIA 的默认推荐。D3D9On12 只是把 D3D9 工作负载映射到 D3D12,不会自动获得 dgVoodoo 的兼容策略。
先说结论:两者共享 dgVoodoo 的 D3D9 前端、状态转换和固定功能模拟,只在最后的资源管理、命令提交、同步与呈现层分流。因此它们的功能和预期画质相同;D3D12 不是增强画质版 D3D11。
| 对比项 | Direct3D 11 | Direct3D 12 |
|---|---|---|
| API 抽象 | 现代高层 API;即时上下文接收绘制命令 | 现代低层 API;命令列表录制后提交到命令队列 |
| 资源状态 | 驱动跟踪读写冲突和状态转换 | dgVoodoo 显式插入 Resource Barrier |
| 资源绑定 | 通过 Slot 绑定资源,驱动维护大量隐式状态 | 通过 Descriptor Heap/Table 与 Root Signature 组织绑定 |
| 同步 | 驱动负责大部分调度与危险跟踪 | dgVoodoo 使用 Queue、Fence 等对象显式同步 |
| 显存管理 | 资源驻留与内存策略主要由驱动处理 | dgVoodoo 更直接地分配 Heap、放置资源并控制驻留策略 |
| 管线状态 | 状态可分项修改,驱动在运行时组合 | 大部分状态预先固化为 Pipeline State Object |
| 呈现 | 可使用传统 BitBlt 或现代 Flip 模型 | dgVoodoo 使用 Flip Discard,即使全屏也以窗口交换链呈现 |
| 失败模型 | 驱动重置可报告 DXGI Device Removed/Reset | 命令、同步或驱动异常可报告 Device Removed/Hung;显式管理错误更容易暴露 |
| 画质 | 由分辨率、AA、SSAO、Shaders 决定 | 相同设置下与 D3D11 基本一致 |
| 性能 | PSOBB 上通常已足够稳定 | 在个别机器可改善 CPU 开销或卡顿,但 30 FPS 老游戏通常没有普遍优势 |
| 兼容性 | 硬件覆盖更广;dgVoodoo 官方记录某些 AMD 驱动可能把纹理错误显示为纯色多边形 | 需要 D3D12 支持;dgVoodoo 官方当前明确警告 NVIDIA 驱动上的 GPU Hang,AMD 则可把它作为 D3D11 纹理问题的替代路径 |
| 选择依据 | 默认先试;NVIDIA 用户优先使用;也适合作为现代后端的排障基准 | 主要在 AMD 的 D3D11 路径显示异常,或已有证据指向 D3D11 后端时测试 |
dgVoodoo 作者的官方说明也没有把 D3D12 视为无条件升级:其自动选择在 x86/x64 上不会默认选 D3D12,并记录了特定 NVIDIA 与 AMD 驱动的相反兼容性表现。因此更专业的选择方法是以正确渲染和稳定帧时间为准,而不是按 API 数字排序。
最简单的选择顺序:先试 Direct3D 11 (2.87.1),画面和运行都正常就无需换。AMD 上若出现纯色多边形等已知 D3D11 驱动症状,可试同版本 D3D12,并在崩溃时关闭 Radeon Anti-Lag。NVIDIA 上不要把 dgVoodoo D3D12 当作首选排障路径;优先保留 D3D11,再试较旧 dgVoodoo、D3D9 或 Vulkan,每次只改变一个变量。
D3D12 和 Vulkan 属于同一代低层图形 API,设计理念非常接近。两者都把过去由 D3D11 驱动隐式完成的大量工作交给应用或翻译层:提前记录 GPU 命令、显式声明资源状态、组织管线对象、绑定描述符并处理 CPU/GPU 同步。在本页讨论的 PSOBB 场景中,承担这些工作的不是游戏本体,而是 dgVoodoo 或 DXVK。
| 对比项 | Direct3D 12 | Vulkan |
|---|---|---|
| 标准与平台 | 微软 API,面向 Windows / Xbox | Khronos 标准,覆盖 Windows / Linux / Android 等平台 |
| 运行时与呈现 | D3D12 Runtime + DXGI Swap Chain | Vulkan Loader/ICD + Surface/Swapchain 扩展 |
| Shader 表示 | 通常由 HLSL 编译为 DXIL;旧工具链也可使用 DXBC | 由 GLSL、HLSL 等编译为 SPIR-V |
| 资源绑定模型 | Root Signature + Descriptor Heap/Table | Pipeline Layout + Descriptor Set |
| 资源状态 | Resource State + Resource Barrier | Access/Stage Mask + Pipeline Barrier + Image Layout |
| 显存模型 | Heap 与 Resource,结合 Windows 驻留管理 | Memory Type/Heap 与显式绑定,细节暴露通常更多 |
| 同步对象 | 单调递增的 Fence 为核心,可由 Queue Signal/Wait 并由 CPU 等待 | Timeline Semaphore 最接近 D3D12 Fence;Fence 与二值 Semaphore 分担主机通知和队列依赖等场景 |
| 能力扩展 | Feature Level、接口版本与可选 Feature | Core Version、Extension 与 Feature 链 |
| PSOBB 路径 | dgVoodoo 接收 D3D9 后输出 D3D12 | DXVK 接收 D3D9 后输出 Vulkan |
| 典型错误 | DXGI_ERROR_DEVICE_REMOVED / HUNG / RESET | VK_ERROR_DEVICE_LOST |
| D3D12 概念 | Vulkan 对应概念 | 底层职责 |
|---|---|---|
| Command List | Command Buffer | 先记录绘制、复制和状态切换命令,再批量提交给 GPU |
| Command Queue | Queue | 接收图形、计算或复制工作,并决定提交顺序 |
| Resource Barrier | Pipeline Barrier / Image Layout Transition | 声明资源何时从渲染目标、纹理或复制用途之间切换 |
| Descriptor Heap / Table | Descriptor Pool / Set | 让 Shader 找到纹理、采样器和缓冲区 |
| Pipeline State Object | Graphics Pipeline | 把 Shader 与光栅化、混合、深度等状态组合成可执行管线 |
| Fence | Timeline Semaphore;Fence / 二值 Semaphore 分担部分场景 | 协调 CPU、GPU 以及不同队列间的执行进度;对象并非一一对应 |
| Heap / Resource | Device Memory / Image / Buffer | 分配显存并放置纹理、顶点和渲染目标 |
上表是职责层面的近似映射,不是句柄、生命周期或同步语义的一一对应。例如 D3D12 Fence 是可递增的时间线对象,最接近 Vulkan Timeline Semaphore;传统 Vulkan Fence 主要用于向主机通知一次提交完成,二值 Semaphore 则常用于队列间依赖。
它们的主要差别不在“高低级”,而在生态和接口约定:D3D12 属于微软的 Windows/Xbox 图形栈,使用 DXGI、HLSL/DXIL 与 Windows 驱动模型;Vulkan 由 Khronos 制定,可跨 Windows、Linux 和 Android,通常使用 SPIR-V,并有自己的呈现与扩展体系。Vulkan 往往暴露更多显式选择,但两者都要求上层正确管理资源生命周期、同步和管线。
PSOBB → D3D8 → Ephinea D3D9 → dgVoodoo → D3D12 → Windows 显卡驱动 → GPU
PSOBB → D3D8 → Ephinea D3D9 → DXVK → Vulkan → Vulkan 显卡驱动 → GPU所以可以把 dgVoodoo + D3D12 与 DXVK + Vulkan 看作两条同类的现代低层翻译路线,但不能认为它们等价。两套翻译器对 D3D9 固定功能、Shader、旧纹理格式、深度缓冲、交换链和设备丢失的模拟方式不同;这些实现差异比 API 名称更容易决定 PSOBB 的正确性、卡顿和稳定性。对这款 30 FPS 老游戏,低层 API 的理论吞吐优势通常不重要,优先选择渲染正确且稳定的路径。
括号内数字不是“D3D 小版本”,而是翻译器发布版本。多版本选择由 Ephinea Launcher 3.5.0 与客户端 DLL 1.860 的首发组合引入;同一发布帖随后又以 DLL 1.861 修复栈破坏,并以 1.862 修复误触发的强制终止问题。因此,1.860 是功能引入版本,不是建议固定安装的当前版本;客户端应始终完成游戏内补丁。Launcher/DLL 负责选择和装载文件,本身不是图形 API。
| 菜单组合 | 翻译器 | 在 Ephinea 中的定位 | 已知版本差异 |
|---|---|---|---|
| D3D11 / D3D12 2.79.3 | dgVoodoo2 x86 D3D9 | 此前随客户端提供的旧版,可继续使用 | 2.79.3 明确修复 Ephinea PSOBB 的顶点雾兼容问题,并包含 D3D8/9 Device Reset 修复;但后者的变更记录针对另一款游戏,不能据此宣称消除 PSOBB 的所有设备丢失 |
| D3D11 / D3D12 2.87.1 | dgVoodoo2 x86 D3D9 | Launcher 3.5.0 新增的较新可选版 | 继承 2.87 的 D3D12 FL11 兼容路径和 FL12+ zero-copy 路径;2.87.1 修复一项 D3D12 后端崩溃,并改善伪全屏和窗口尺寸行为;Ephinea 官方称它可能解决部分 D3D12 冻屏 |
| Vulkan 2.3.1 | DXVK x32 D3D9 | 此前随客户端提供的旧版,可继续使用 | 适合已有稳定配置;并不因为版本较旧就一定比 2.7.1 更差 |
| Vulkan 2.7.1 | DXVK x32 D3D9 | Launcher 3.5.0 新增的较新可选版 | Ephinea 官方称更新 DXVK 可修复部分 Vulkan 图形异常;没有承诺解决所有崩溃或 Device Lost |
| D3D11 / D3D12 / Vulkan Custom | 用户提供的 x86/x32 D3D9 DLL | 验证上游新版、旧版或特定修复 | 兼容性完全取决于所放文件;“Custom”本身不代表更新、更快或更稳定 |
版本事实依据:Ephinea Launcher 3.5.0 / DLL 1.860 发布与后续热修帖和 dgVoodoo 官方变更记录。上游已有更新版本不代表 Ephinea 已内置;只有菜单列出的版本或正确放入 dxdg 的 Custom 文件会实际加载。
截图文字描述的是客户端收到设备丢失后,恢复/Reset 失败。它不是“dgVoodoo 2.79.3 专属错误”或“D3D12 专属错误”。必须先区分两类原因:
VK_ERROR_DEVICE_LOST;任何后端都无法保证免疫。| 后端与版本 | Alt-Tab/UAC/锁屏型 Device Lost | 对截图弹窗的判断 | 仍需注意 |
|---|---|---|---|
| D3D8 | 明确受影响 | 高概率来源,尤其是经典全屏 | 关闭 Classic Fullscreen,避免显示模式切换 |
| D3D9 | 明确受影响 | 仍使用传统 D3D9 Device/Reset 语义 | 比 D3D8 多一层转换不等于解决设备丢失 |
| D3D9On12 | 明确受影响 | Ephinea 官方明确说明它不能规避 UAC、锁屏和屏保导致的 Device Lost | 底层是 D3D12,但上层仍是 D3D9;不要把它当作 dgVoodoo D3D12 |
| dgVoodoo D3D11 2.79.3 / 2.87.1 | 通常规避 | 不是传统焦点丢失的预期路径;若仍出现,应怀疑驱动重置或 dgVoodoo/Overlay 冲突 | 2.87.1 不是“绝不崩溃版”;AMD 某些驱动还可能出现纹理异常 |
| dgVoodoo D3D12 2.79.3 | 通常规避 | 传统 Device Lost 风险低,但 Ephinea 已记录部分用户存在 D3D12 冻屏 | dgVoodoo 官方当前明确警告 NVIDIA 驱动可能发生 D3D12 GPU Hang;不建议作为 NVIDIA 首选 |
| dgVoodoo D3D12 2.87.1 | 通常规避 | 较 2.79.3 更适合验证 Ephinea 已记录的部分 D3D12 冻屏,但仍不能抵御真实 TDR | 包含特定 D3D12 崩溃与全屏行为修复,不代表消除 NVIDIA GPU Hang 或修复所有硬件组合 |
| DXVK Vulkan 2.3.1 / 2.7.1 | 默认通常不模拟焦点丢失 | DXVK 默认 d3d9.deviceLossOnFocusLoss = False,所以 Alt-Tab 型弹窗通常不是预期行为 | Vulkan 驱动仍可返回真实 VK_ERROR_DEVICE_LOST;DXVK 不正式支持原生 Windows |
| Custom | 无法统一判断 | 必须记录实际 DLL、版本和配置 | 旧配置可主动开启 DXVK 的焦点丢失模拟;第三方构建也可能改变行为 |
Ephinea 早期更新已经明确建议:要避开 UAC、锁屏、屏保等造成的传统 Device Lost,应使用 dgVoodoo D3D11/12,而不是 D3D9On12。不过 dgVoodoo 当前官方说明又对 NVIDIA 上的 D3D12 GPU Hang 发出强警告,所以“能规避传统 Device Lost”不等于“在所有 GPU 上都是最稳定后端”。DXVK 的默认行为可在其官方配置说明中核对。
对这张报错截图的实际判断:如果发生时选的是 D3D8、D3D9 或 D3D9On12,并且刚好 Alt-Tab、弹出 UAC、锁屏或切换显示模式,就是已知的传统设备丢失;优先改为 D3D11 2.87.1。如果当时已经是 dgVoodoo D3D11/12 或 Vulkan,这就不再是正常的焦点丢失行为,应检查可靠性监视器或 Windows Error Reporting 中的 LiveKernelEvent 117/141,以及系统日志中的显示驱动事件(常见为 Display 4101),再检查显卡驱动、超频和 Overlay。NVIDIA 优先复测 D3D11 2.87.1;AMD 若仅在 D3D11 出现纯色纹理异常,再受控测试 D3D12 2.87.1。
游戏的原版渲染。不经过任何翻译层,直接调用系统 D3D8。最接近 2003 年原版表现。
用一个轻量包装把 D3D8 调用转成 D3D9。开销极小,行为接近原版,稳定性略好于纯 D3D8。
微软官方的 D3D9-on-D3D12 转译层。先把 D3D8 调用走 D3D9,再由 Windows 内置的 d3d9on12.dll 转译为 D3D12 提交给显卡。
使用 dgVoodoo2 接收 Ephinea 的 D3D9 调用,再输出到 D3D11。旧式固定功能状态会被包装器模拟为现代 GPU 资源和 Shader。
同上,但 dgVoodoo2 输出到更现代的 D3D12。
使用 DXVK 把 Ephinea 的 D3D9 调用转译到 Vulkan。它走的是另一套驱动编译、资源管理和呈现路径,适合验证问题是否只存在于 Direct3D 驱动栈。
使用用户自定义的 dgVoodoo 或 DXVK 版本。按 Ephinea 官方约定,在游戏目录的 dxdg 文件夹放置 x86 dgVoodoo_d3d9.dll 或 x32 dxvk_d3d9.dll。
锯齿不是单一现象。PSOBB 中至少会看到三类:多边形轮廓的几何锯齿、远处细纹理/栅栏随镜头闪动的纹理与透明测试走样,以及低分辨率渲染后放大产生的整体采样不足。不同 AA 算法处理的对象并不相同,所以不能只比较名称后的 2x/4x。
Ephinea 的 AA 不是 D3D11、D3D12 或 Vulkan 自动附送的画质功能。客户端在渲染目标创建和最终图像处理阶段实现它:MSAA 改变渲染目标的多重采样参数;SSAA 提高内部渲染尺寸后缩小;SMAA 在场景完成后执行空间后处理。Ephinea 开发者对其实现的说明也明确了这个顺序。
| 后端 | 高级 AA | 需要注意 |
|---|---|---|
| D3D8 | 不是完整支持路径 | 用于无增强的原版基准最合适 |
| D3D9 | 支持 | MSAA/HSAA 可能造成部分场景反射异常 |
| D3D9on12 | 支持 | 继承 D3D9 前端特征,不是 dgVoodoo D3D12 |
| D3D11 / D3D12 | 支持 | 经 dgVoodoo 时,官方记录显示 MSAA/HSAA 的反射兼容性更好 |
| Vulkan | 支持 | 仍由 Ephinea 生成 AA 结果,DXVK 负责把 D3D9 工作负载翻译到 Vulkan |
这里的倍率作用于横向和纵向。设输出尺寸为 W × H,则 SSAA Nx 的内部尺寸为 (N·W) × (N·H),像素数是 N² 倍。不要把 SSAA 4x 误解成只渲染 4 倍像素。
| 1080p 输出示例 | 内部分辨率 | 内部像素数 | 相对 1080p |
|---|---|---|---|
| 无 SSAA | 1920 × 1080 | 约 207 万 | 1× |
| SSAA 2x | 3840 × 2160 | 约 829 万 | 4× 像素 |
| SSAA 4x | 7680 × 4320 | 约 3318 万 | 16× 像素 |
HSAA 还会在这个高分辨率渲染目标上叠加 MSAA 样本。例如 HSAA 4x 可近似理解为 16 倍像素着色规模上再使用 4 个覆盖/深度样本;总耗时不会严格等于 64 倍,但渲染目标、深度缓冲、带宽和显存压力可能非常高。即使 PSOBB 很老,4K 输出再开 4x 也可能启动失败、掉帧或耗尽包装器配置的 VRAM。
两种说法并不矛盾。PSOBB 原版的几何复杂度、Shader 复杂度和 30 FPS 上限都很低,20 年前的显卡在 640×480、800×600 或 1024×768、无现代后处理的条件下本来就能完成设计目标。现代登陆器则允许把每帧需要处理的像素、样本和全屏 Pass放大几个数量级;游戏内容仍然古老,但 GPU 实际执行的工作已经不是 2004 年的负载。
| 因素 | 负载如何增长 | 主要压力 | 容易误解的地方 |
|---|---|---|---|
| 输出分辨率 | 与宽×高成正比;4K 是 1080p 的 4 倍像素 | 像素着色、带宽、后处理 | 帧率仍锁 30 不代表每帧可以无限昂贵 |
| D3D8 / D3D9 | 链路较短,原始负载很低 | 旧驱动、Device Lost、CPU 提交 | 老硬件流畅通常指较低分辨率和较少增强 |
| D3D11 / D3D12 | 增加 Ephinea + dgVoodoo 的状态翻译和资源管理 | CPU 开销、同步、驱动兼容 | D3D12 可改善部分提交开销,但不能减少 SSAA 像素 |
| Vulkan | 增加 Ephinea + DXVK 的翻译与管线编译 | Shader 编译、驱动、同步 | 不同 API 不是免费的性能升级 |
| MSAA Nx | 增加覆盖率、深度/模板和多样本存储;像素 Shader 不一定完整执行 N 次 | ROP、深度、带宽、显存 | 主要处理几何边缘,不是全画面 N 倍清晰 |
| SSAA Nx | 宽高各乘 N,像素数乘 N² | 像素 Shader、纹理采样、显存、带宽 | SSAA 4x 是 16 倍像素,不是 4 倍 |
| HSAA Nx | SSAA 的 N² 像素上再叠加 Nx MSAA 样本 | 几乎所有 GPU 后端资源 | 它是极限组合,不是廉价折中 |
| AF 16x | 斜面纹理增加采样数 | 纹理单元与带宽 | 通常远轻于 SSAA,但自定义纹理仍可能增加压力 |
| SSAO / DoF | 每个输出像素进行多次深度读取与邻域采样 | 带宽、缓存、Shader 运算 | 分辨率越高越贵,High 不只是视觉档位 |
| Bloom / SMAA / Tone | 增加一个或多个全屏读取、模糊、混合 Pass | 带宽与像素 Shader | 单项便宜,多项叠加仍可成为瓶颈 |
4K 输出是 3840×2160,约 829 万像素。开启 SSAA 4x 后,内部尺寸变为 15360×8640,约 1.327 亿像素。仅一个 RGBA8 颜色缓冲约占 531 MB,一个 32-bit 深度缓冲也约 531 MB;两者还未计算 resolve 目标、Bloom/SSAO/DoF 中间纹理、包装器缓存和游戏纹理,就已超过 1 GB。
若再使用 HSAA 4x,颜色与深度目标需要保存约 4 倍多样本数据,仅上述两个缓冲的理论规模就可能接近 4.25 GB。每帧还要完成约 1.327 亿像素的着色和约 5.308 亿覆盖/深度样本处理,随后再 resolve、缩小到 4K 并执行多个后处理 Pass。这类负载主要受填充率、显存带宽、缓存与包装器实现限制,与模型只有多少三角形关系不大。
RTX 4090 拥有 24 GB GDDR6X;RTX 5090 提升到 32 GB GDDR7。NVIDIA 官方规格列出的显存带宽分别约为 1008 GB/s 和 1792 GB/s。因此在 SSAA/HSAA、多重全屏 Pass 这类偏带宽和显存容量的负载中,5090 通常会有更大的余量。参见 NVIDIA 5090 与 4090 官方规格对比。
但这不代表 5090 会按带宽比例提升 PSOBB 帧率。Ephinea 是 32-bit 老程序,还经过 D3D8→D3D9→dgVoodoo/DXVK 的状态翻译;瓶颈可能位于 CPU 单线程、同步、驱动、包装器内部上限或超大渲染目标分配。4090 在 4K + SSAA/HSAA 4x + SSAO High + 多个 Shaders 下可能达到满载、掉到 30 FPS 以下或因资源分配失败而崩溃;5090 通常更从容,但也不保证所有极限组合都合理。
实用判断:老硬件流畅说明它能承担"原版场景负载";顶级显卡吃力说明玩家主动创建了数百倍像素、更多采样和更多全屏 Pass。判断性能时应记录完整组合,不能只说"这是一款 20 年前的游戏"或只比较 D3D11/D3D12。
SMAA 位于场景完成后的后处理阶段,所以可以继续处理 MSAA、SSAA 或 HSAA resolve/downsample 之后仍残留的高对比边缘:
| 需求 | 推荐 |
|---|---|
| 性能优先 / 核显 | SMAA Medium/High;成本低且不增加渲染分辨率 |
| 均衡通用 | SMAA Ultra 或 MSAA 2x + SMAA |
| 减少纹理闪烁 / 画质优先 | SSAA 2x 或 SSAA 2x + SMAA |
| D3D9 反射异常 | 避开 MSAA/HSAA,改用 SMAA Ultra 或 SSAA 2x |
| 4K 输出 | 先用 SMAA Ultra;通常没有必要再开 SSAA 4x |
| 极限截图 / 充足显存 | SSAA 4x 或 HSAA;逐级测试,不建议直接拉满 |
AF 解决的是斜视角纹理变糊,不是模型轮廓锯齿。当地板、墙面或道路朝远处延伸时,一个屏幕像素在纹理上覆盖的区域会变成长条而不是正方形。普通双线性/三线性过滤用近似正方形的采样足迹,容易选择过低的 mipmap 并丢失远处细节;AF 沿长轴增加采样,让斜面纹理保持更清晰。
AF 会保留更多高频纹理细节。如果原版或 Mod 纹理缺少正确的 mipmap、含有过强锐化/细线,更清晰的远景也可能带来闪烁、摩尔纹和视觉噪声。此时问题不一定是 AF 实现错误:先把 16x 降到 8x/4x,或换用包含正确 mipmap 的纹理;SSAA 也能进一步压制这种走样。
建议:原版纹理和现代 GPU 可从 AF 16x 开始;若使用自定义高清纹理后远处明显闪烁,降到 8x/4x 并检查纹理包 mipmap。AF 不会消除角色轮廓锯齿,仍需搭配合适的 AA。
这一项只与 dgVoodoo 路径有关,控制 DXGI 交换链的 Present 模型,即渲染完成的后台缓冲如何交给 Windows 桌面合成器或显示器。它影响延迟、窗口兼容性、Alt-Tab 和捕获方式,不改变场景本身的采样画质。
重要限制:这些模式主要用于 D3D11 输出。根据 dgVoodoo 官方说明,D3D12 输出必须使用 Flip Discard;即使登陆器保留了其他选择,D3D12 也不能退回传统 BitBlt 交换链。
建议:
下面是概念上的数据依赖图,用于理解每种设置处理的对象,不表示 Ephinea 源码中绝对固定的逐条执行顺序。最重要的区别是:MSAA/SSAA/HSAA 会改变场景如何被采样,而 SSAO、Bloom、DoF、Cel Shading、Tonemapping 和 SMAA 都需要读取已经产生的图像或深度信息。
| 效果 | 最明显的变化 | 主要代价 / 副作用 | 一句话建议 |
|---|---|---|---|
| SSAO | 墙角、脚底、物体接缝更有接触阴影 | 边缘光晕、噪声;分辨率越高越耗 GPU | 喜欢立体感开 Medium,原版党关闭 |
| Bloom | 高亮特效产生柔和光晕 | 过曝、发灰、细节变糊 | 按口味开,不要把它当作 HDR |
| Depth of Field | 非焦点区域模糊,更有镜头感 | 远处辨识度下降;透明物体/HUD 边缘可能异常 | 战斗清晰度优先就关 |
| Cel Shading | 轮廓更明显,画面偏动画风格 | 细节边缘可能被误判或描得过重 | 纯审美选项 |
| Tonemapping | 改变亮度、对比度和颜色响应 | 暗部压黑或高光丢失 | 先单独开,确认颜色合口味再叠加 Bloom |
| Motion Blur | 运动与镜头变化产生拖尾 | 动态清晰度降低,可能引发眩晕 | 大多数玩家可关闭 |
SSAO (Screen-Space Ambient Occlusion) 是一种屏幕空间接触遮蔽近似。它从当前帧的深度缓冲(实现也可能结合法线信息)重建相邻表面的空间关系,在墙角、物体接缝和角色脚底等光线较难到达的位置生成低频暗化。
它不是动态阴影,也不是全局光照。真正的阴影要知道光源、遮挡物和被投影表面的关系;SSAO 只知道镜头当前看见的有限深度信息,因此只能提供"物体似乎更贴地、更有体积"的视觉线索。
建议:先用 Medium 观察角色脚底、墙角和屏幕边缘;若没有光晕、噪点或掉帧再升 High。想保留原版明快风格、追求敌人轮廓清晰或正在排查 Shader 崩溃时选 Disabled。
这组是 Ephinea 在原版基础上增加的体验类开关,与画质无关,绿色 = 开启,灰色 = 关闭。
截图兼容性:Ephinea 开发者明确说明 Clean Capture 不会包含 Addons;D3D12 的内置截图也无法捕获 Addons。若必须把插件 UI 一起截入,优先尝试 D3D8/9 且关闭 Clean Capture,或在 D3D11 下尝试兼容的 Flip 呈现模式;也可以直接用系统/OBS 的窗口捕获。
这组是基于最终颜色、深度或边缘信息的屏幕空间后处理,绿色 = 开启,灰色 = 关闭。它们不增加模型或贴图细节,而是重新解释已经渲染出的像素。多个效果叠加时,成本和伪影也会叠加,最终观感还会受执行顺序影响。
原版与清晰度优先:四项都关。轻度现代化:先单开 Tonemapping,再按口味加 Bloom。动画风格:单开 Cel Shading 观察轮廓是否干净。截图氛围:可尝试 DoF + Bloom,但不建议在需要远距离辨认敌人和掉落物时长期使用。
没有"绝对最好"的选项,以下是常见的选择思路:
| 场景 | 推荐 |
|---|---|
| 不知道选什么 / 第一次玩 | Direct3D 11 (2.87.1) |
| D3D11 正常 | 保持不变;换 D3D12 不会提高基础画质 |
| AMD:D3D11 出现纯色多边形等纹理错误 | 试 Direct3D 12 (2.87.1);崩溃时关闭 Radeon Anti-Lag |
| NVIDIA:D3D11 异常 | 先试 D3D11 2.79.3、D3D9 或 Vulkan;不要把 dgVoodoo D3D12 当作首选 |
| D3D12 冻结 / GPU 挂起 / Overlay 冲突 | 回到 Direct3D 11,必要时试 2.79.3 |
| D3D11/12 都异常 | 试 Direct3D 9;Vulkan 作为不同驱动路径的交叉测试 |
| UAC、锁屏、Alt-Tab 后 Device Lost | 优先使用 D3D11 2.87.1;不要用 D3D9On12 代替 |
| 只想验证原版是否能启动 | D3D8 + None AA + 关闭 Shaders |
| 录屏 / 直播捕获不到画面 | D3D11 + Auto/Discard,并尝试窗口捕获 |
Q: 切换后游戏黑屏 / 闪退怎么办?
A: 重新打开登陆器,换回 Direct3D 9 或 Direct3D 11 (2.79.3) 这类保守选项即可。设置只影响渲染,不会损坏角色数据。
Q: 为什么有两套版本号 (2.79.3 / 2.87.1)?
A: 不同版本的 dgVoodoo / DXVK 修复和回归问题不同。保留旧版作为回退,新版尝鲜。遇到新版的 bug 可以临时切回旧版。
Q: 改了选项后帧数没变化?
A: PSOBB 原生帧率上限是 30 FPS,翻译层不会突破游戏内部锁帧。换后端主要是为了稳定性和兼容性,不是为了高帧。
Q: 还是闪退,跟渲染无关?
A: 参考 关于闪退 检查 DEP、兼容性、UAC、杀软白名单等系统层设置。
Q: 抗锯齿开了为什么不生效 / 没区别?
A: 高级 AA 由 Ephinea 客户端在渲染目标和后处理阶段实现,不是 dgVoodoo / DXVK 自动提供。完整的高级选项从 D3D9 起可用;D3D8 不适合作为高级 AA 路径。MSAA 只处理几何覆盖边缘,所以纹理内部仍会闪烁;想改善这类问题应试 SSAA,只想低成本平滑可试 SMAA。
Q: D3D9on12 已经用了 D3D12,为什么还要选 D3D12?
A: D3D9on12 是微软把 D3D9 命令映射到 D3D12 的系统兼容层,上层仍保留 D3D9 设备模型;登陆器的 D3D12 则由 dgVoodoo 接管 D3D9 模拟、资源管理和 Flip 呈现。两者只是最终驱动 API 相同,翻译器和兼容行为完全不同。要规避传统 Device Lost,优先使用 dgVoodoo D3D11;AMD 上存在特定 D3D11 纹理异常时再考虑 D3D12。
Q: D3D12 是否可以理解为微软版本的 Vulkan?
A: 作为入门类比可以:两者都是显式管理命令、资源状态、描述符、管线与同步的现代低层 API。但它们不是同一套 API,也不是彼此的包装层;D3D12 属于 Windows/Xbox 生态,Vulkan 是跨平台标准。在 PSOBB 中更准确的说法是,dgVoodoo 把 D3D9 翻译到 D3D12,DXVK 则把同类工作负载翻译到 Vulkan。
Q: 开了 Shaders 之后画面糊 / 颜色变了?
A: 这是后期处理本身的特性,不是 bug。最常见的"罪魁"是 BLOOM (糊) 和 TONEMAPPING (颜色变深变饱和)。逐项关掉定位不喜欢的那一项即可。
Q: CLEAN CAPTURE 和 dgVoodoo Model = Discard 有什么联系?
A: 二者都和"录屏 / 直播能不能正常捕获画面"有关。优先开 CLEAN CAPTURE;D3D11 下若 OBS 仍捕不到,再把 Model 从 Flip 类切回 Discard。D3D12 固定走 Flip Discard,此时应改用 D3D11 再测试 Model。