全站通知:

S&box 的着色器

阅读

    

2024-02-08更新

    

最新编辑:B1ueMicr0

阅读:

  

更新日期:2024-02-08

  

最新编辑:B1ueMicr0

来自S&boxWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
布朗尼蛋糕-

s&box 着色器系统概述

s&box 使用 Source 2 引擎,它拥有非常强大的,可扩展和配置的着色器系统。这使得游戏的画面质量相比于 Source 的 Garry‘s Mod 提升了多个数量级,带来令人印象深刻的游戏画面。

  • NOTE:s&box 的 Material Editor 可读取的着色器文件格式为 .shader,16 进制格式为 .shader_c。但是在为 s&box 编写着色器时,仍可引用 .hlsl 源代码文件。

s&box 基于 Tile-Based Forward 渲染管线,这意味着在同时兼容 高性能多光源 处理特性时还能支持 多着色器。您甚至可以同时使用 卡通着色,PBR 着色, Blinn-Phong 着色和光线追踪着色

着色器概述

在图形学领域,渲染管线(The Rendering Pipeline)内的任何部件都被定义为 “着色器”(Shader),这意味着它不一定需要具备决定如何绘制图形的功能。例如 DirectX 11 的计算着色器(Compute Shader)或逻辑上和计算管线高度相似的一些光线追踪着色器(Anyhit, Intersection 等)。我们平时探讨的很多着色器都是像素着色阶段的部件(例如 PBR 着色器,卡通着色器)。

一般地,着色器是运行在 GPU 上的。着色器代码通过 GPU 驱动转化为各类控制和运算指令,操纵 GPU 计算各类标矢量浮点整数值并存储在内存里,最后进行综合计算(关于 HLSL 着色语法,常见 GPU 运算指令等,参见 着色器基本语法与现代 GPU 运算指令)。这个流程就是通过走一遍完整的渲染管线来完成的。

注意事项

  1. s&box 在 2023 年丢弃了所有 Direct3D 9 的代码索引,这意味着它完全统一了着色器模型。在 DirectX 10 之前, GPU 在硬件上是以单独的顶点着色器(Vertex Shader)和像素着色器(Pixel Shader)组织起来的。在 2006 年 NVIDIA 发布第一款统一着色器架构 GPU(Unified Shader)—— NVIDIA G80 以后,着色器才有了标准的,统一的程序模型。这是 s&box 和 Source 引擎的 Garry's Mod 最大的区别之一。
  2. s&box 完全丢弃对于 OpenGL 的支持,这意味着 GLSL 着色器语言无法使用。
  3. 光照着色模型方面,s&box 默认提供基于物理的渲染(PBR)的着色器支持,开发工具里叫做 “Complex Shader” 或 “Simple Shader”。

您甚至可以尝试植入一些非光照类的着色器,例如 AMD FidelityFX SSSR 或 FSR 2。(Facepunch 曾努力植入过,但因稳定性受到影响而被禁用)

对于 Complex Shader 的具体使用和配置方法,请参阅 Complex着色器 。如果您认为 Complex Shader 使用起来过于复杂繁琐,请转向 Simple Shader。

Complex Shader 原理概述

Complex Shader 概略

Complex Shader 是 Source 2 引擎默认提供的一种高质量的,基于物理的着色器(PBR)。它本质上和 Simple Shader 是同一个着色器,只不过提供的可配置选项非常多。将它应用在各类材质上,可以做出很多富有真实感的效果。

Complex Shader 属于一种典型的 Forward-Based(前向管线的) PBR Pipeline,经过编程,您也可以实现这一管线。有资料表明,起源 2 引擎支持延迟管线,但是我们无法进一步查证关于该情况下的 PBR 管线情况。

Complex Shader 基于 PBR 渲染。这意味着它完全符合接下来将提及的一个重要理论,它支撑着基于物理的渲染特性。

PBR 渲染与微表面(Microfacet)理论

现实生活中有非常多视觉效果各异的材质,例如毛玻璃和铁的表面。即使它们在肉眼下观察可能都是平整的,但是它们在微观结构上大不相同。光线通过和这些不同的微观结构表面发生反射,使得出射光线的方向大不相同,造成了不同的视觉效果。在图形学中,我们将这些结构定义为微几何(Microgeometry),而它们的微观表面称为微表面(Microfacet)。针对不同微表面函数可以让不同材质拥有它们各自的独特质感。


Complex Shader 的 PBR 特性建立于微表面理论之上,这使得它支持一些特别的材质效果。Complex Shader 自带了以下的几种常用材质特性,它们各自由不同的函数模型控制。这几种模型一般被归纳为双向反射分布函数Bidirectional Reflectance Distribution Function, BRDF)。双向,即为光线的入射方向和出射方向;对应函数则决定了出射光的分布应该是什么样子,不同分布体现出不同的材质特性。

  1. (Anisotropic Gloss) 带菲涅尔项的 Cook-Torrance 反射模型 -> Glossy 以及真实的金属反射表面
  2. (Retro Reflective) 旧式 Blinn-Phong 法线分布模型 -> Source 风格的 Phong 高光反射表面

其中,GlossyMetalness 是相对物理正确的,这意味着它们能提供非常逼真的视觉效果。但同时开销也比旧式反射要大一点,在制作材质并将其应用到模型,地图时应该综合考量。

半透明渲染

当然,Complex Shader 不仅仅是 PBR Shader,它也包含其它组件,例如半透明处理。这也是 s&box 的优势,因为它是直接基于前向管线的渲染系统,半透明处理是原生支持的,不需要像延迟渲染那样需要多开一个 RenderPass 来渲染半透明物体,s&box 拥有性能强悍的半透明处理系统。

视差(Parallax)贴图

为了高效地,高质量地渲染出纹理细节,Complex Shader 自带视差遮蔽映射(Parallax Occlusion)算法。它通过计算摄像机视线矢量和高度图(Height Map)定义的表面进行分层求交来获取近似高度信息,以此生成凹凸效果。不过,既然提到了“近似”,则意味着它在某些情况下会产生明显的画面失真。(例如高度图数据变化幅度很大时,该技术的近似插值会与实际值差距很大)

其它

已应用,但 Material Editor 内不可见:次表面散射(Sub-Surface Scattering),它可以模拟出光线进入介质内部后发生散射的物理行为,从而产生真实的半透明特效。

扩展

本页面所有专有名词均可在 GAMES101 - 现代计算机图形学入门GAMES202 - 高质量实时渲染 系列课程中找到非常具体详尽的原理解释。