S&box 的着色器
阅读
2024-02-08更新
最新编辑:B1ueMicr0
阅读:
更新日期:2024-02-08
最新编辑:B1ueMicr0
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 运算指令)。这个流程就是通过走一遍完整的渲染管线来完成的。
注意事项
- 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 最大的区别之一。
- s&box 完全丢弃对于 OpenGL 的支持,这意味着 GLSL 着色器语言无法使用。
- 光照着色模型方面,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)。双向,即为光线的入射方向和出射方向;对应函数则决定了出射光的分布应该是什么样子,不同分布体现出不同的材质特性。
- (Anisotropic Gloss) 带菲涅尔项的 Cook-Torrance 反射模型 -> Glossy 以及真实的金属反射表面
- (Retro Reflective) 旧式 Blinn-Phong 法线分布模型 -> Source 风格的 Phong 高光反射表面
其中,Glossy 和 Metalness 是相对物理正确的,这意味着它们能提供非常逼真的视觉效果。但同时开销也比旧式反射要大一点,在制作材质并将其应用到模型,地图时应该综合考量。
半透明渲染
当然,Complex Shader 不仅仅是 PBR Shader,它也包含其它组件,例如半透明处理。这也是 s&box 的优势,因为它是直接基于前向管线的渲染系统,半透明处理是原生支持的,不需要像延迟渲染那样需要多开一个 RenderPass 来渲染半透明物体,s&box 拥有性能强悍的半透明处理系统。
视差(Parallax)贴图
为了高效地,高质量地渲染出纹理细节,Complex Shader 自带视差遮蔽映射(Parallax Occlusion)算法。它通过计算摄像机视线矢量和高度图(Height Map)定义的表面进行分层求交来获取近似高度信息,以此生成凹凸效果。不过,既然提到了“近似”,则意味着它在某些情况下会产生明显的画面失真。(例如高度图数据变化幅度很大时,该技术的近似插值会与实际值差距很大)
其它
已应用,但 Material Editor 内不可见:次表面散射(Sub-Surface Scattering),它可以模拟出光线进入介质内部后发生散射的物理行为,从而产生真实的半透明特效。
扩展
本页面所有专有名词均可在 GAMES101 - 现代计算机图形学入门 与 GAMES202 - 高质量实时渲染 系列课程中找到非常具体详尽的原理解释。