AI导读
🤖 欢迎来到 Vanish 的技术花园
更新时间: 2026-04-19 18:47:46
质量概览: 收录文章 51 篇,平均分 69.9。本文由 AI (deepseek-ai/DeepSeek-V3) 自动生成。
🧭 博客概览
博客概览:
这位博主是图形学与渲染技术的深度探索者!从标题就能看出,TA专注于实时渲染、光线追踪、阴影算法(如DDGI、PBR、Distance Field软阴影),同时涉及底层原理(如Split Sum、PCF到MSM的演进)和工程落地(Sheen/Anisotropy的实践)。技术栈可能涵盖Rust(Rain Rust管线)、C++/HLSL(图形API),甚至还有DotNet的趣味吐槽。风格硬核但不死板——既有理论推导的严谨,也有“入坑到入坟”的幽默,偶尔还会插播Git疑难杂症这类实用技巧。如果你想啃图形学“黑魔法”或学一手骚操作,这里绝对值得蹲守! 🚀
👨💻 关于作者
Vanish 是一位热衷于探索计算机底层奥秘的开发者。他的座右铭是 KeepLearning。从图形学渲染算法到 .NET 框架的源码分析,他总是试图透过现象看 ...
Split Sum原理介绍
摘要:Split Sum通过将环境光照积分拆分为BRDF滤波和光照滤波两部分,利用预计算降维技术加速实时渲染。BRDF部分采用菲涅尔近似降维,光照部分使用多级mipmap快速查询,显著提升PBS的IBL计算效率。
基于图像的光照(Image based lighting, IBL)是一类光照技术的集合.其光源不是如点光源等直接光源,而是将周围环境整体视为一个大光源.
那么在shader中我们有了一张cubeMap(也可能是别的形式),如何用它来实现PBS(Physically Based Shading)呢?
或者说,我们如何用一张环境贴图来解渲染方程呢?
首先回顾渲染方程:
L(p,ωo)=∫H2f(p,ωi⋅ωo)Li(p,ωi)V(p,wi)cosθidwiL(p, \omega_o) = \int_{H^2} f(p, \omega_i \cdot \omega_o) L_i(p, \omega_i) V(p,wi) \cos \theta_i dw_i
L(p,ωo)=∫H2f(p,ωi⋅ωo)Li(p,ωi)V(p,wi)cosθidwi
在环境光照中 ...
DDGI介绍
摘要:DDGI是NVIDIA提出的动态漫反射全局光照技术,通过光线追踪更新探针数据,实现动态场景下的实时全局光照,解决了传统辐射探针无法处理动态变化和光照泄露的问题。
前言
DDGI(Dynamic Diffuse Global Illumination,动态漫反射全局光照).是由Nvida于2019年推出的一种基于Probe,基于RayTracing(光线追踪)的动态漫反射全局光照技术,可以在动态的场景与光照中实时的生成漫反射的全局光照.
全局光照
在实时渲染领域中,实现全局光照意味着实现间接光照,即光线弹射两次或更多次后进入人眼的光照。
在DDGI技术出现的2019年之前,学界在解决全局光照问题时的方法就已经可谓是百花齐放,所以我们先简单回顾一些经典的全局光照的解决方案.
Baked Global Illumination
Baked Global Illumination(烘焙全局光照)或称Lightmap(光照贴图)是一种离线计算全局光照的方法,也是目前游戏中主流的解决方法.
这种方法的基本思路是将场景中的光照信息预先计算并保存为一张光照贴图,然后在渲染时直接读取光照 ...
Rain Rust 的 2D 光追渲染管线
摘要:《Rain Rust 的 2D 光追渲染管线》该文介绍了一个基于JFA算法的2D光线追踪渲染管线,包含光源绘制、自发光物体标记和跳转洪水算法(JFA)等核心阶段,实现了动态光影效果,在RTX 5070ti和M4 GPU上均能达到120FPS。
前言
Rain Rust 是作者的毕业设计作品代号, 以下也以Rain Rust作为作品的名称.
Rain Rust 是一款以精确动作、解密、探索为主要玩法的2d平台跳跃游戏.
游戏中玩家将探索一个被弃用的神秘工厂, 其中存在着各式由一种特殊物质“耦合蜜”驱动的机械造物, 而玩家可以利用自身的能力去控制它们运作.
而玩家的探索会将自己置身于一场更大的阴谋当中.
本项目开源在GitHub, 你可以点击这里进行访问, 欢迎留下一个小星星.
画面效果
你可以观看这个视频来了解画面效果.
由于平台原因, 此视频可能无法观看, 你也可以点击这个链接到笔者的bilibili账号中观看视频.
对于不想观看视频的读者, 也提供了一些游戏截图来了解效果
优点
这是光追
很cool的画面风格
完全动态的世界
缺点
这是 ...
从PCF到MSM
摘要:本文分析了PCF到MSM的软阴影技术演进:从PCF的滤波抗锯齿,到PCSS基于遮挡距离的自适应滤波,再到VSSM利用概率统计(切比雪夫不等式)加速PCF计算。核心思想是通过数学近似优化阴影滤波,在保证视觉效果的同时提升性能。
在实时渲染中, 有一个常常被使用的约等式:
问题在于,什么时候这个等式比较正确呢?
积分域比较小时
g(x)在积分域中变化不大时
在实时渲染中,对Rendering Equation有另一种解释:
多了一项V(p,wi),表示着色点到光源的Visibility.
那么我们就可以更改Rendering Equation为:
在RTR中,由于光源大部分是点光源或方向光,使得积分域小.而brdf是diffuse的时候变化也不大.这时近似就比较准确.
总结来说:
点光源,方向光
diffuse brdf/constant radiance area light
PCF(Percentage Closer Filtering)
PCF是用于解决shadowmap的锯齿问题的一种方法.
PCF的步骤如下:
对于每个着色像素
获取周围n*n个像素的深 ...
Sheen从理论到实践
摘要:本文详解glTF光泽(Sheen)材质扩展的实现原理,涵盖光泽颜色/粗糙度的纹理映射与独立控制,重点解析基于Charlie分布的光泽BRDF模型及其微表面理论实现,适用于模拟天鹅绒类材质的背向散射效果。(79字)
本文为这篇文章的翻译与整理
光泽(Sheen)
属性
类型
描述
必需
sheenColorFactor
线性空间中的光泽颜色。
否,默认值:[0.0, 0.0, 0.0]
sheenColorTexture
光泽颜色纹理(RGB,sRGB传输函数)。
否
sheenRoughnessFactor
光泽粗糙度。
否,默认值:0.0
sheenRoughnessTexture
光泽粗糙度alpha纹理。
否
光泽计算
颜色和粗糙度
if (sheenColorTexture) {
sheenColor = sheenColorFactor * sampleLinear(sheenColorTexture).rgb;
sheenRoughness = sheenRoughnessFactor * ...
DotNet响应式编程,一键入坑到入坟
摘要:本文系统介绍Rx.NET响应式编程核心:IObservable/IObserver基础、Subject类型、冷/热源处理、调度器与线程模型、时间操作符及错误处理,并附最佳实践指南,助.NET开发者安全落地Rx。(79字)
前言
这是一份面向 .NET 工程师的 Rx.NET 学习与实践指南:从 IObservable/IObserver 基础,到 Subject 类型、冷/热源、多订阅控制,再到调度器与线程模型、时间类操作符、错误处理与测试,最后给出落地的最佳实践清单。适合希望系统性掌握响应式编程并在实际项目中安全使用 Rx 的读者。
你可以在Rxxxxxxx中找到一些代码示例
对于调度器一章节,为了更好理解,可以查看这个仓库:VaniRx
Part1 - Why Rx
.NET事件的问题
讽刺的是,如果没有event关键字,c#的对事件的处理会更好
.NET event关键字基本问题是: 它们在 .NET 类型系统中得到了特殊处理, 使得没法像对象一样操作事件,比如存储在字段中,作为参数传递,不能使用LINQ,不能拓展等等.
event唯一的优势在于: += & ...
Anisotropy从理论到实践
摘要:本文介绍了各向异性(Anisotropy)渲染的核心实现,包括切线空间定义、纹理映射转换和各向异性GGX分布函数。重点讲解了anisotropyStrength参数对粗糙度的动态调整,并对比分析了UE4和glTF两种实现方案。
Anisotropy
前提:
必须定义切线空间
normalTex 和 anisotropyTex必须使用同一组uv
参数:
anisotropyStrength(float): [0,1] 表示沿指定方向增加粗糙度,默认方向是切线方向
anisotropyRoataion(float):
anisotropyTexture(Texture)
r & g : anisotropy Dir in [-1,1] tangent, bitangent
b : anisotropy strength
映射
rg: [0,1] -> [-1,1]
directonalAlphaRoughness = mix(materialAlphaRoughness, 1, anisotropyStrength^2)
其中:
material ...
Distance Field soft shadows
摘要:本文介绍基于距离场(SDF)的软阴影技术,通过RayMarching计算安全角度并转换为可见性,使用近似公式提升效率,具有实时性优势但需预计算距离场。
在介绍Distance Field soft shadows之前,我们首先得了解距离场.
距离场:对于每一个点,距离场的值表示该点最近的物体的距离.
距离场一大好处在于混合时的特性.
这样就可以非常方便地去做物体的Blending.
SDF被广泛使用在实时渲染的如RayMarching等的各种技术中.
如果我们能用SDF描述场景,比如这样:
可以发现一个关键点:
我们可以用SDF转换为"安全角度"–即有多少角度不会被遮挡,进而求Visibility.
即: SDF -> 安全角度 -> Visibility
而这正是Distance Field soft shadows的核心思想.
计算安全角度
对于我们的Shading point ,我们向光源做RayMarching.
然后在RayMarching过程中,每一步都可以计算出一个安全角度,取最小的角度.
计算角度很显然可以使用ar ...
PBR--从理论到实际
摘要:本文介绍基于物理的渲染(PBR)核心技术,涵盖辐射度量学基础概念(辐射能量、通量、强度等)和关键光照计算模型(BRDF),阐释光线与材质交互的物理原理及实现方法。
状态: 更新中…
Intro
前置知识
辐射度量学
下面的所有概念,请记英文(因为中文翻译千奇百怪).
Radiant Energy(辐射能量)
单位: J(焦耳)
用于描述能量的大小.比如一颗原子弹能释放的总能量大约为10^10 J.
Radiant Flux(辐射通量)
单位: W(瓦特)
单位: lm(流明,照明度单位,lumen)
单位: J/s(焦耳每秒)
描述单位时间内通过某一面积的辐射能量.比如太阳mitted的辐射通量大约为3.828 x 10^26 W/m^2.
Radiant Intensity(辐射强度)
功率/立体角
单位: W/sr (瓦每立体角)
单位: cd(坎德拉,candela)
太阳照的坎德拉为3.828 x 10^10 cd/m^2.
地球在太阳的立体角为: 23.45 deg.
可求太阳对输出的功率为: 3.828 x 10^10 W/m^2 * 23.45 ...
