自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 SWE 的原理解析

SWE 的运动机制可以理解成:水面坡度改变流速,流动的汇聚和发散改变水深。假设你在平静水面中央制造一个隆起:所以,SWE 需要同时保存“水有多少”和“水如何运动”。这也解释了为什么:仅根据当前高度图,通常不能唯一决定下一时刻的水面。 两片形状完全相同的水面,可能一个正在向外流动,另一个正在向内汇聚,它们下一刻的变化会不同。对于密度恒定的水,质量守恒等价于体积守恒。不可压缩流体的三维连续性方程(散度形式):∂u∂x+∂w∂y+∂v∂z=0\frac{\partial u}{\partial x} + \fr

2026-10-28 23:06:17 325

原创 SWE 的基本条件

它把水体划分成许多竖直的水柱,每根水柱记录自己的深度、流动方向、水柱之间的水交换和动量。它将三维水体沿竖直方向进行平均,因此只需要在二维平面上求解,就能得到随时间变化的水面。因此,判断能否使用 SWE,需要同时看水深和你希望模拟的波长。例如,同样是 1 米深的水,几十到上百米尺度的长波,比几厘米尺度的细碎波纹更符合浅水近似。其中,“忽略竖直加速度的主要影响”并不意味着水完全没有上下运动。把网格划得更细,只能改善求解精度,不能改变物理模型的适用范围。底床越低,即使水面保持水平,水深也会越大。

2026-10-28 23:04:55 236

原创 Shader Graph: 能量护盾

本文介绍了在Unity中使用Shader Graph实现能量护盾特效的方法。通过Dots子图平铺圆点图案,结合Simple Noise和Gradient Noise创建渐变和流动光效。利用极坐标UV实现中心透明边缘不透明效果,并加工UV贴图生成边缘发光。最后通过Global Volume的Bloom后处理增强视觉效果。该方案可呈现出具有动态光效、中心渐变和边缘发光的能量护盾效果。

2026-06-03 22:05:41 267

原创 ShaderLab: PBR + IBL

本文实现了一个基于物理的渲染(PBR)系统,通过四个核心文件完成PBR材质计算和渲染。系统采用Cook-Torrance微表面模型处理直接光照,使用球谐函数(SH)计算漫反射环境光,通过预过滤环境贴图和BRDF查找表(LUT)处理镜面反射环境光。PBRRunner.cs脚本负责协调这些组件,将复杂的环境光积分预计算到纹理中,运行时只需简单组合即可实现高效渲染。该系统完整展示了PBR渲染管线的工作流程,包括直接光计算、环境光处理以及色调映射等关键环节,为后续扩展提供了良好基础。

2026-06-03 16:55:54 518

原创 AO 环境光遮蔽

环境光遮蔽(AO)用于量化物体表面某点被周围几何体遮挡的程度,取值范围0(完全遮挡)到1(完全开放)。AO通过半球射线检测计算未遮挡比例,反映环境光的可达性。与阴影不同,AO描述环境光照而非直接光源的遮挡情况。AO贴图通过离线烘培呈现静态物体自身的遮挡细节(如褶皱、缝隙),具有高性能优势但无法实时响应场景变化。典型AO值:平坦地面≈1,墙角≈0.5,洞穴≈0.1。

2026-06-01 21:56:58 199

原创 BRDF LUT 计算

本文介绍了基于GGX微表面模型的BRDF LUT计算实现。关键函数包括:单/双向几何遮蔽计算(geometryIBL/smithShadowing)、Hammersley序列采样、Pixar ONB基向量构造、法线空间旋转和GGX重要性采样。核心函数integrateBRDF通过蒙特卡洛积分计算镜面反射BRDF的二维查找表,将结果拆分为F0相关项和常量项,其中考虑了微表面法线分布、几何遮蔽和菲涅尔效应。该实现固定法线方向为(0,0,1),通过重要性采样和反射计算推导光线方向,最终输出可用于实时渲染的预积分B

2026-05-30 15:00:00 50

原创 镜面 IBL 预过滤贴图的计算

镜面 IBL 预过滤贴图,本质是在提前计算不同粗糙度下,镜面反射方向附近能看到的环境光平均值。预过滤贴图计算的核心流程:对 cubemap 的每一个方向 R,对每一个 roughness,做一次 GGX 重要性采样。

2026-05-30 14:53:47 324

原创 五分钟学会PBR材质精髓:BRDF计算全流程拆解

是一种着色与渲染方法,旨在通过模拟光与物质的真实物理交互,来生成高度真实且在任何光照环境下都表现自然的图像。简单来说,就是让材质在不同光线下都看起来“像真的”,而不是只在特定角度下才好看。PBR 的核心思想:传统渲染常用“取巧”的参数(如漫反射颜色、高光强度等),调整时很难直观预测结果。而 PBR 遵循两个基本物理原则:1. 能量守恒:反射的光能总量 ≤ 入射的光能总量。2. 微平面理论:物体表面由无数微小平面组成,每个小平面像镜子一样反光。

2026-05-30 01:08:47 618 2

原创 二维 uv 与单位球面坐标的相互转化公式

这段代码展示了球面坐标与UV纹理坐标之间的相互转换方法。第一部分将三维方向向量(x,y,z)转换为UV坐标:使用atan2计算x-z平面角度并归一化为(0,1],用arccos计算y轴夹角并映射到(0,1]。第二部分逆向转换:将UV坐标通过三角函数恢复为三维方向向量,其中θ和φ分别对应经度和纬度角度,通过sin/cos组合重建原始方向。这种转换常用于环境贴图、天空盒等图形渲染场景。

2026-05-30 00:59:41 90

原创 ShaderLab:PBR+IBL(ShaderToy Translation)

本文解析了 PBR + IBL 渲染技术中的核心着色器代码 Image_PBR.shader。该着色器通过射线步进(raymarching)渲染由 SDF 球体构成的场景,并实现基于物理的渲染(PBR)和基于图像的照明(IBL)。主要流程包括:生成相机射线、SDF场景求交、法线计算、材质分配、直接光计算(Cook-Torrance PBR)、间接光计算(球谐+预滤波环境贴图+BRDF LUT)、色调映射和伽马校正。文章详细介绍了关键全局变量、顶点着色器、相机射线生成、场景SDF计算(包含动态光源处理)、法线

2026-05-28 20:52:47 255

原创 ShaderLab:PBR+IBL(ShaderToy Translation)

本文分析了ShaderToy上的PBR+IBL渲染代码实现,重点解析了三个核心着色器文件。BufferA_Camera负责相机状态管理,通过RenderTexture保存相机参数;BufferB_DiffuseIBL预处理环境光数据,将立方体贴图转换为经纬图并计算球谐光照系数;BufferC_SpecularIBL生成不同粗糙度下的高光反射预滤波结果和BRDF积分图。文章展示了将ShaderToy代码转换为Unity可运行的ShaderLab代码的过程,并提供了效果对比图。这套PBR+IBL管线实现了基于物

2026-05-23 21:10:39 485

原创 现代实时渲染管线

底层GPU图形管线:例如顶点着色器、光栅化、像素着色器;上层引擎渲染管线:例如URP、HDRP、UE Deferred Renderer可以将渲染管线理解为:把场景里的模型、材质、灯光、相机、特效,经过CPU、GPU处理,最终变成屏幕上一张图像的全过程。

2026-05-21 21:13:39 789 2

原创 圆边、球面坐标表示

摘要:本文介绍了圆和球面在不同坐标系下的表示方法。对于标准圆坐标,给出了极坐标表达式;对于标准球面坐标,也提供了极坐标表示形式;特别针对Unity游戏引擎中y轴向上的坐标系,给出了相应的球面极坐标表达式。这些坐标表示方法在计算机图形学和游戏开发中具有重要应用价值。

2026-05-21 17:16:31 94

原创 球谐函数SH

比如环境光照、天空光、法线方向上的辐照度,都可以看成“方向 → 颜色/亮度”的函数。

2026-05-18 01:39:54 325

原创 Gamma颜色空间

Gamma空间是一种非线性颜色编码方式,使颜色数值与真实光照强度呈非线性关系。它通过将0.5等数值进行特殊编码,最终呈现符合人眼感知的亮度效果。Gamma空间具有两大优势:更符合人眼对暗部变化更敏感的特性,为暗部保留更多精度;适合存储和显示常见图片格式。在渲染流程中,Gamma编码确保了颜色显示的准确性。

2026-05-18 00:34:01 43

原创 三维空间法线的计算

摘要:本文讨论了函数在某点处的光滑性及其参数化形式。通过对等式两边求导,得出梯度垂直于切线向量,即梯度为法线向量。以海面高度函数y=H(x,z)为例,通过沿x和z方向的步长采样,可以近似计算出法线方向:(1)沿x方向采样,(2)沿z方向采样,(3)计算法线近似值。该方法适用于有向距离场(SDF)计算海面顶点坐标时的法线估计。

2026-05-18 00:19:27 46

原创 ShaderLab:可互动水面(基于RenderTexture,实时生成动态扰动)

本文介绍了一个基于URP的可交互水面系统,实现了实时渲染水面扰动效果。系统采用三缓冲RT交换技术实现波纹扩散,通过三个关键Shader文件协同工作:DrawShader负责鼠标输入的扰动绘制,RippleShader处理波纹扩散物理计算(使用二维波动方程离散求解器),WaterShader则负责最终水面渲染(包含顶点位移、法线重建和光照计算)。配套的Ripple.cs脚本实现了鼠标交互扰动和波纹传播逻辑。该系统突破了传统静态水面的限制,能够模拟石子投入、船只航行等动态效果,通过高度图驱动实现了真实感水面渲染

2026-05-04 21:15:53 384

原创 ShaderLab:海面——顶点变换,程序化生成无需贴图

一个基于URP的程序化海面shader:顶点阶段把网格变换形成波浪,偏远阶段重新计算更精细的法线,再做漫反射、镜面、高光、菲涅尔、泡沫和雾效。这篇文章是在上一篇文章水面的基础上,采用其基本方法延伸而来,本文章中的着色器不是一个适用于全屏效果的着色器,而是应用在一个平面上,通过更改平面顶点位置来模拟海浪效果。

2026-04-30 23:54:01 941 1

原创 ShaderLab:水面

水面表现是一个技术美术中一个常见的课题,在本篇文章中我参考了在2014年创作的Seascape,并以此代码为基础,翻译成ShaderLab语言,并分析其中每个函数的作用和必要性。ShaderLab代码:https://pan.baidu.com/s/1wuerhUVqQg8amo6a0rk2Ug?pwd=9527。

2026-04-29 01:18:33 438

原创 ShaderLab:星空宇宙

摘要:本文介绍了实现动态星空效果的着色器技术。通过顶点着色器转换坐标,片元着色器完成星图绘制,包含随机点生成、智能连线、辉光渐变等特性。采用分层渲染实现远近效果,远处星星数量更多且渐入渐出。通过噪声函数和利萨如曲线控制粒子运动,使用线段光绘函数创建发光连接线。系统支持鼠标交互,颜色随时间循环变化,并添加径向模糊和呼吸效果。关键技术包括动态粒子位置计算、距离衰减光照模型和时间驱动的动画控制,最终呈现具有空间深度感和动态变化的星空场景。

2026-04-20 03:15:20 369 1

原创 ShaderLab:线条几何体旋转

摘要:本文介绍了在Unity中实现18个旋转立方体和8个球形线框的着色器技术。通过将着色器材质赋予正对摄像机的平面来呈现效果,避免了直接屏幕绘制的复杂性。顶点着色器负责坐标转换,片元着色器处理图形渲染,包含旋转、抗锯齿和颜色混合等函数。关键技术包括:1)使用旋转函数实现3D变换;2)通过抗锯齿函数优化线条显示;3)基于时间参数实现动态颜色过渡。最终效果呈现多个几何体围绕中心旋转并渐变色彩的视觉效果。(149字)

2026-04-18 16:54:36 296

原创 UV映射!加入纹理!

本文介绍了OpenGL纹理相关知识,包括纹理坐标映射、纹理环绕方式、纹理过滤和多级渐远纹理等技术细节。主要内容包括:1)通过纹理坐标将2D纹理映射到三角形面片;2)四种纹理环绕方式(重复、镜像、边缘拉伸、边框颜色)的设置方法;3)GL_NEAREST和GL_LINEAR两种纹理过滤方式的区别;4)多级渐远纹理(Mipmap)的原理和使用方法;5)通过stb_image.h库加载图片数据并生成纹理;6)实现多重纹理混合效果,包括纹理单元的使用和mix函数混合纹理。文中提供了完整的代码示例,演示了如何加载两个纹

2025-09-17 14:41:41 734

原创 独立着色器文件!更好的可读性!

上一节我们编写了一个完整的,从编写顶点文件、顶点着色器、片段着色器、着色器程序,到启动项目。但是仍然有一个问题:着色器文件、片段着色器文件的源文件都是我们自己在main.cpp文件里硬编码的,这样就导致我们的着色器程序的,并且编辑起来会更困难。所以我们在这篇文章里会将着色器文件独立出来,并且新建一个类来管理这个着色器文件。

2025-09-15 00:14:48 887 1

原创 添加着色器!Hello Triangle!

本文介绍了使用OpenGL绘制三角形的基本流程,包括着色器编程和缓冲对象管理。主要内容包括:1)OpenGL关键概念如VAO、VBO、EBO的作用;2)渲染管线各阶段(顶点着色、图元装配、光栅化等)的功能;3)GLSL着色器语法和数据类型;4)顶点着色器和片段着色器的编写与编译;5)着色器程序链接和顶点属性配置;6)VAO状态管理和EBO索引绘制的优势。通过创建着色器、配置顶点数据、使用缓冲对象,最终在GLFW窗口实现三角形绘制,为OpenGL图形编程提供了基础实现框架。

2025-09-13 00:47:01 1291

原创 Loop!上手OpenGL

本章介绍了OpenGL基础程序的配置和窗口创建过程。重点包括:1)GLAD和GLFW库的引入顺序;2)使用glfwInit()初始化GLFW;3)通过glfwCreateWindow()创建窗口;4)设置视口(glViewport)和回调函数;5)渲染循环中的关键操作:清屏(glClear)、交换缓冲(glfwSwapBuffers)和事件处理(glfwPollEvents)。文章还解释了双缓冲机制的作用,并提供了完整的代码示例,最终可显示一个指定颜色的OpenGL窗口。

2025-09-12 00:30:01 514

原创 创建GLFW窗口,开启OpenGL之路

本文介绍了OpenGL开发环境的配置与基础图形绘制流程。首先说明了GLFW和GLAD库的作用:GLFW负责窗口管理,GLAD简化OpenGL函数加载。详细讲解了在Visual Studio 2022中配置这两个库的步骤,包括目录设置和依赖项添加。然后展示了一个完整的OpenGL程序示例,包含窗口初始化、着色器创建、顶点数据绑定和渲染循环等关键步骤。文中提供了三角形绘制的完整代码,涵盖顶点/片元着色器编写、VAO/VBO设置等核心概念,最终实现了一个能响应ESC键退出的彩色三角形窗口程序。

2025-09-11 22:58:58 1223

原创 第四章 文件系统 文件目录

25考研王道操作系统——文件目录 知识点总结

2024-06-22 15:00:32 1177

原创 第四章 文件系统 文件系统基础

王道操作系统第四章——文件系统知基础 识点总结

2024-06-22 14:56:51 1288

原创 第三章 内存管理 虚拟内存管理

王道操作系统 第三章虚拟内存管理——知识点总结

2024-05-17 19:21:40 1412

原创 第三章 内存管理 内存管理概念

王道操作系统第三章 内存管理概念——知识点总结

2024-05-17 19:19:26 1035

原创 第二章 进程与线程 死锁

王道操作系统第二章 死锁——知识点总结

2024-05-15 21:03:51 1114

原创 第二章 进程与线程 同步与互斥

王道操作系统第二章 同步与互斥——知识点总结

2024-05-15 21:01:43 892

原创 第二章 进程与线程 CPU调度

王道操作系统第二章——知识点总结

2024-04-02 00:18:01 1884 1

原创 第二章 进程与线程

王道操作系统第二章——知识点总结

2024-04-02 00:12:16 1366 1

原创 第一章 操作系统概述(第二部分)

王道操作系统第一章——知识点总结

2024-03-27 20:02:34 657

原创 第一章 计算机系统概述(第一部分)

王道操作系统第一章——知识点总结

2024-03-25 23:02:31 1605 1

原创 C++复习 第四章 复合类型 第一节

文章主要是为了方便本人复习C/C++语言,也方便以后忘了之后再复习。之后也会持续更新,全文参考、总结C++ Primer Plus一书。

2023-07-30 17:30:22 398 1

原创 C++复习 第三章 处理数据 第二节

文章主要是为了方便本人复习C/C++语言,也方便以后忘了之后再复习。之后也会持续更新,全文参考、总结C++ Primer Plus一书。

2023-07-22 19:25:34 304

原创 C++复习 第三章 处理数据 第一节

文章主要是为了方便本人复习C/C++语言,也方便以后忘了之后再复习。之后也会持续更新,全文参考、总结C++ Primer Plus一书。

2023-07-07 23:32:35 437 1

原创 C++复习 第二章 第三节 开始学习C++

文章主要是为了方便本人复习C/C++语言,也方便以后忘了之后再复习。之后也会持续更新,全文参考、总结C++ Primer Plus一书。

2023-07-06 16:47:03 318 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除