自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GPU PRO 5 - 3.3 Bokeh Effects on the SPU 笔记

本文讲述的是一种通过sprite实现的散景方案,并将其应用到PlayStation 3 的 协同处理单元(Synergistic Processing Unit,SPU)这样利用滤波核计算出每个像素的亮度后,如果该像素亮度高于某个阈值(threshold),就在该像素对应的屏幕空间位置生成一个纹理精灵(sprite)算法思路很简单通过分析每个像素的亮度,如果高于阈值就在对应位置生成一个sprite模拟散射效果。这里的优化方案是降低遍历用的分辨率以及选用小一些的滤波核。基于 SPU 的散景效果实现。

2026-06-09 21:39:17 179

原创 GPU PRO 5 - 3.2 Screen-Space Deformable Meshes via CSG with Per-Pixel Linked Lists 笔记

PPLL(Per-Pixel Linked List)像素链表的构建,这个结构是渲染领域非常常用的结构,以往的文章中也有描述比如。主要是对链表按照深度值排序,并根据M+与M-的交集情况将对应的深度值记录到最后的深度查找表上。,这里不同的是节点结构中多存了两个标志位,一个判断当前的片元是M+还是M-网格,一个判断当前片元是前向面还是后向面。局限性在于都是通过深度剔除,依赖多次渲染Pass,并和场景复杂度相关,场景越复杂通道数越多。以该图为例,M+为正常渲染的网格,M-为变形网格,M-的区域的像素会被裁剪。

2026-06-07 16:54:26 217

原创 GPU PRO 5 - 3.1 Screen-Space Grass 笔记

文章渲染草地的思路很简单,作者并没有真正生成草的几何体,而是在屏幕空间中把地形颜色颜色沿垂直方向拉伸,这会形成细长的纹理,所以在远处看起来会像草叶。文章模板测试中标记的只是地形,但是不是草地区域需要另外做区分,作者简单判断原像素是不是绿色来判断是不是草区域。有可能一些非地形组成部分的源像素被误处理,比如树木、路标、其他场景装饰物等等。这一部分主要为了标记屏幕空间中哪些区域是地形,或是哪些地方需要画草。文章中将地形的模板值设为了2,其他的物体的模板值设为了1。这一部分是文章草地渲染的核心。

2026-06-04 22:06:42 236

原创 GPU PRO 5 - 2.6 Wire Antialiasing 笔记

渲染的物体过小会带来一个问题就是相关的向量误差会越来越大,比如法线可能会因为像素变小而使得方向跳向了别的地方。因此与法线相关的光照模型在这些渲染上就不适用了,因此文章提出用法线变化带来的影响比较小的光照模型,比如半兰伯特光照模型。其实这里的思路类似于同书2.5章中头发的抗锯齿技术,也是通过计算覆盖率控制透明度的思路。解决这个问题的办法是将原本的电线粗细与拓展后的粗细计算出一个覆盖率,作为渲染像素的透明度值。但这会带来一个问题就是远处的电线会变粗,因为一个像素虽然小,但比起远处电线原来的大小还是会粗很多。

2026-06-03 22:27:49 262

原创 GPU PRO 5 - 2.5 TressFX: Advanced Real-Time Hair Rendering 笔记

头发渲染的初始数据是线段,在几何阶段时会将线段拓展成一个与视平面齐平的平面,也就是常见的公告板,投影后的毛发半径还会增加一些半径保证不会因为投影过小导致在光栅化阶段消失。这里的抗锯齿用的是基于覆盖率的毛发抗锯齿,计算当前像素被毛发覆盖的比例来决定当前像素毛发的Alpha 值,以此减少边缘的锯齿现象。最简单的方法,所有毛发的都同同一个深度,优点是简单,不用额外的Pass,不用额外的存储,缺点是效果差,会产生视觉伪影。在毛发渲染中,计算毛发的光照的时候需要考虑毛发的深度,文章中拓展了这部分内容。

2026-06-02 21:41:24 264

原创 GPU PRO 5 - 2.4 Hi-Z Screen-Space Cone-Traced Reflections 笔记

从代码的实现中可以了解到,他所计算的可见性是基于屏幕空间的,不是基于世界空间的,实现代码中只是简单的基于一个范围内最大最小深度的差值,与之前计算的可见性来评估当前计算的可见性。这一段主要讨论的是如何处理屏幕外的反射数据,屏幕空间反射的固有问题就是他的反射信息只能在屏幕空间内,反射步进到屏幕空间外的话是采样不到颜色信息的,文章表示通过控制淡出来掩盖这部分问题。这一段主要是考虑大深度场景,一般大世界的深度缓存为了提高超远距离的深度采用的是反转Z,即1 / Z 来代替,对应的Hi-Z也要对应修改。

2026-05-30 23:27:43 250

原创 GPU PRO 5 - 2.3 Volumetric Light Effects in Killzone: Shadow Fall 笔记

这样就获得了一个3D纹理查找表,在体积光步进计算光照量的时候通过深度就可以直接或当前位置的散射量,这样通过就可以通过控制切片的从而能在空间上控制体积光的效果。体积光和半透明物体因为渲染顺序的不同都会造成错误的遮挡,因为步进算法会考虑深度图,而半透明物体一般是不写入深度的,以至于在体积光计算的时候很难考虑的到半透明物体的影响。一半体积光计算的时候,每个像素点步进的幅度是一致的,文章中通过采样一个扰动贴图,让相邻的计算点步进幅度会有不同,以此减少整个计算过程中的步进数量。二,调整步进幅度,减少步进步数。

2026-05-27 23:42:52 386

原创 GPU PRO 5 - 2.2 High Performance Outdoor Light Scattering Using Epipolar Sampling 笔记

由于在极线采样的情况下我们只会对极线上对应的View Ray进行步进计算,那么对于这个极线上的View ray所构成的平面来说,他们所采样的阴影图的区域都是一样的,每条View ray上的步进点最终都是阴影图上某个线段面积。这个原理是如果当前要步进计算的线段AB深度完全小于节点中最小的深度,说明这一段都可以进行光照计算,反之则缩短接下来要步进的距离,或是如果全都在阴影处的话就跳过这一段的光照计算。可以看到,原本的算法中需要对屏幕每个像素点都进行光线步进,极线采样后需要进行光线步进的点就降低了几个数量级。

2026-05-24 20:35:00 231

原创 GPU PRO 5 - 2.1 Physically Based Area Lights 笔记

抽离的关键在于将粗糙度g'和着色点p的关系解绑,也就我在渲染着色点p的时候,我需要将当前着色点p的粗糙度g也作为查表的一个坐标。Li的值是可以通过离线预计算处理,在要用的时候通过查询一个三维表来获得,该表的三个维度坐标分别是光源空间中Pd的xy坐标和着色点与Pd之间的距离r。目前为止考虑的光源都是均匀光源,真实情况的光源可能是非均匀发光,因此需要对光源做一些处理,论文中提示用预积分的对整个光源变化进行预积分,再按照光源面积进行归一化。对于两个面积的求交,文章考虑了两种情况,一个是圆盘光源,一个是矩形光源。

2026-05-17 17:17:12 322

原创 Unity基于自定义管线实现风格化水

本文在Catlike Coding 实现的基础上参考多方文章编写的风格化水的渲染。

2026-05-14 15:54:26 523

原创 GPU PRO 5 - 1.4 Simple Rasterization-Based Liquids 笔记

文章表示液体模拟是逐个计算粒子与粒子之间的相互作用力实现的,主打一个力大飞转。这种模拟方式需要对粒子做空间排序以方便查找周边粒子,而这篇文章则将每个粒子的属性投射到网格上,通过在网格上求解粒子间的动力学来简单模拟液体,因此免去了排序步骤也不需要去寻找邻接粒子。文章的背景是为了解决弱不可压缩模型下光滑粒子流体动力学(SPH)里模拟粒子行为时需要查找旁边粒子来计算作用力这个形式。这里的核心想法是:不是直接从网格上计算出新的值赋值给粒子,而是计算一个变化量给粒子。3,将计算好的结果反馈回粒子上调整粒子。

2026-04-22 21:51:43 209

原创 GPU PRO 5 - 1.3 Particle-Based Simulation of Material Aging 笔记

在粒子和表面的材质传输有两种类型,一种是从粒子里的材质更新到物体表面(PS_SurfaceUpdate),一种是从物体表面更新到粒子里(GS_GammatonUpdate)。代码上看就是将当前表面数据和粒子里面的材质数据进行混合,但有些不明白CUDA编程中是不是可以对物体材质数据进行读写的,因为在Unity渲染中贴图一般是在CPU中进行读写的,这里的CUDA流程应该是类似的。以上便是粒子模拟的大概流程,思路其实很简单,就是用CUDA每帧更新物体表面和粒子的材质数据,模拟粒子本质上也只是迭代更新数据。

2026-04-08 21:33:21 387

原创 GPU PRO 5 - 1.2 Reducing Texture Memory Usage by 2-Channel Color Encoding 笔记

RGB颜色空间可以表示为一个三维表示的立方体,一张纹理的所有颜色都分布在这个立方体之内,但是普通的纹理他所有像素在这个立方体中存在一定的空间关联性,具体来说在三维空间中可以找到一个平面,他与这张纹理的所有像素点都相对较近。这个颜色平面在RGB颜色空间中与边界交叉可以获得几个顶点,一个顶点是(0,0,0),与顶点相邻的两个顶点(bc1,bc2)则定义为该颜色平面的基色。文章主要的思想其实还是如何用一个颜色平面拟合一张在RGB空间下的纹理,这个平面才是能够双通道存储的核心,这里用的是最小二乘法进行的拟合。

2026-03-22 16:59:06 397

原创 Unity基于自定义管线实现贴花效果

本文在Catlike Coding 实现的基础上参考知乎文章实现相关功能。

2026-03-18 14:16:42 451

原创 GPU PRO 5 - 1.1 Per-Pixel Lists for Single Pass A-Buffer 笔记

当要把手上的盒子放到队列里的时候,我们先和队列里第一个盒子比较,如果位置上的盒子里的值比手上的盒子值小的时候,我将手上的盒子和当前位置的盒子交换,并且根据两个盒子的内容决定我下一次要去找哪个位置的盒子去比较。在PRE-SORT 中,插入排序需要在全局内存中完成,这样的操作会比较慢,但这个排序方法支持对不可见的片元提前剔除。在传统光栅化渲染半透明物体时,往往渲染的顺序十分重要,一般渲染半透明物体的时候都是从距离相机比较远的物体开始渲染,靠近相机的后渲染,从后往前叠加颜色来得到最终效果。

2026-03-07 15:58:01 497

原创 GPU PRO 4 - 6.2 Real-Time JPEG Compression Using DirectCompute 笔记

本笔记仅为个人的理解,如果有误欢迎指出。Real-Time JPEG Compression Using DirectCompute 使用DirectCompute实时JPEG压缩本文基于C++ 和 Direct3D 11.0 ,利用DirectCompute 对RGB数据进行JPEG压缩。整个文章分为两个部位:1,JPEG的主要流程以及原理2,DX11实现实例。

2026-02-12 18:30:18 587

原创 Unity基于自定义管线实现视差贴图

本文基于CustomSRP2.5.0框架,在Unity 2022.3.18f1环境下实现了视差贴图效果。

2026-02-10 10:59:23 673

原创 Unity基于自定义管线实现经典经验光照模型

SRP管线的好处就是任何渲染效果都可以自己去实现,坏处就是任何渲染效果都要自己去实现。本文在Catlike Coding 实现的基础上给出几个经典光照模型的Shader实现,Catlike Coding在这教程中使用的是PBR光照模型,网上常见的实现范例都是基于Unity预设的管线,这边给出这个教程框架下的实现。

2026-02-06 15:48:05 695

原创 GPU PRO 4 - 6.1 Bit-Trail Traversal for Stackless LBVH on DirectCompute 笔记

本笔记仅为个人的理解,如果有误欢迎指出。层次包围结构:这是一种树形的数据结构,一般常用于碰撞检测,游戏引擎中将场景的物体进行划分的时候就会将物体都划分成一个一个包围盒,由此生成了一个树形结构线性的层次包围结构:LBVH是一种使用了Morton Code(位交错编码/莫顿码)线性构建的BVH结构,一般LBVH的使用对象是网格上的三角形,LBVH用每个三角形的三个顶点坐标计算出三角形的重心坐标,再将三角形重心坐标通过Morton Code映射成一串编码,再根据每个三角形编码的相似性进行包围层次包围结构的划分。

2026-02-03 01:51:53 583

原创 Unity 实现一个简单的构建机

这只是一个简单的技术实现,很多技术细节还相当毛糙,不少地方都是硬编码,但只要流程都跑通了后续功能都可以自行添加。

2026-01-28 21:16:36 437

原创 GPU PRO 4 - 5.3 A Pipeline for Authored Structural Damage 笔记

本笔记仅为个人的理解,如果有误欢迎指出A Pipeline for Authored Structural Damage 一个可人工设计的结构破坏管线Authored Structural Damage :人工的结构破坏,指的是美工手工制作的被破坏结构的细节,比如断肢的残面,建筑被破坏后暴露的钢筋之类的。为了表现角色和建筑的破坏效果,传统的方式是使用贴花(decal)技术,比如弹痕。但是这种技术表现不了结构变化类型的破坏,比如断肢,身体的孔洞,建筑被轰炸后造成的孔洞之类的。

2026-01-24 11:32:38 608

原创 GPU PRO 4 - 5.2 Kinect Programming with Direct3D 11 笔记

本笔记仅为个人的理解,如果有误欢迎指出Kinect Programming with Direct3D 11 用DX11在Kinect编程这篇文章,比起技术性文档,更像是一篇Kinect的说明文,价值不高。

2026-01-19 22:23:34 381

原创 GPU PRO 4 - 5.1 An Aspect-Based Engine Architecture 笔记

本文更像是讲述的一种在数据高度集中的情况下如何将各个功能在引擎层面中封装成模块,这种引擎的特点就是数据被管理到引擎核心中,功能模块化后对于引擎的修改会更加方便,因为只需要关注当前模块的功能即可。这边文章个人觉得理解难度不高,涉及的技术难点也不多。【什么是面向切面编程AOP?- 欲眼熊猫的回答 - 知乎】【在Unity中简单使用AOP为方法添加自定义属性】【DOTS 技术深度解析】

2026-01-18 18:21:50 1286 1

原创 GPU PRO 4 - 4.1 Real-Time Deep Shadow Maps 笔记

本笔记仅为个人的理解,如果有误欢迎指出Real-Time Deep Shadow Maps 实时深度阴影贴图在离线渲染中渲染半透明物体的时候会使用到一种深度阴影贴图的东西辅助渲染,例如头发以及烟雾的阴影渲染,本篇文章提供了一种在实时渲染中生成并应用深度阴影贴图的方法,依赖DX11 的API。一张阴影贴图是光源点为视角,观察不透明物体时生成的深度图,但这张贴图一般是不会考虑半透明物体的,深度阴影贴图中则是专门考量半透明物体对阴影影响,具体影响数值由下面这个公式得出。

2026-01-11 18:42:59 1041

原创 Unity 一个简单的红点模块

红点模块主要通过树结构完成,先使用一个普通的树结构实现。

2026-01-06 15:38:09 355

原创 GPU PRO 4 - 3.5 Coherence-Enhancing Filtering on the GPU 笔记

流程从一张灰度图或者颜色图输入开始,每次迭代的时候进行流引导平滑和冲击过滤锐化,并在执行前进行一次局部方向估计,锐化后会进行一次边缘平滑再输出图像,用来展现每次迭代的效果。算法的核心是局部方向估计 (Local Orientation Estimation),用来获取当前像素位置的方向信息,他由平滑后的结构张量的特征值分析得到。b, Shock Filter 冲击过滤 一种锐化过滤方法,能把纹理插值平滑地变换成陡峭的变换。本文讲述的是一种图像处理办法,能够将图像处理成类似梵高或爱德华·蒙克的绘画风格。

2025-12-29 21:51:29 136

原创 GPU PRO 4 - 3.4 Practical Framebuffer Compression 笔记

结合后文理解,通过同时采样四周围的点来计算当前点的颜色从而近似复原出原图,T 代表阈值 Li 代表每个采样点通道中的Y,从而计算出每个采样点对当前点混合比例wi,进而混合出当前点的【Y Co Cg】信息,再通过颜色转换公式计算出【R G B】信息。颜色转换公式中,RGB -> YCoCg 是线性转换的,那么混合也可以是线性的,但需要留意的是转换后的YCoCg的值范围是[-0.5 , 0.5] 保存到缓冲里面的时候加了0.5 映射到[0,1] ,混合的时候需要留意。本笔记仅为个人的理解,如果有误欢迎指出。

2025-12-20 16:26:34 176

原创 Unity基于自定义管线实现屏幕空间反射(SSR)

本文在Catlike Coding 实现的基础上参考了知乎文章增加了屏幕空间反射(SSR)功能,并给出相关步骤。

2025-12-12 17:50:28 1229

原创 GPU PRO 4 - 3.3 Second-Depth Antialiasing 笔记

可以看到,在这个情况中两个边缘并没有交点,褶皱边的计算方式无法生效,这个时候,通过记录浅蓝色边的深度,计算得到交点A,在用A点的位置作为参考决定如何去做混合颜色的比例。而浅蓝色边的深度,主要通过shader渲染中反向利用剔除物体背后这个机制来获取。也就是说第二层深度纹理指的是面向摄像机的物体的背面的深度。褶皱边这种情况,通过两个边交点A ,与距离B、C两点的比例作为权值,来混合两边的颜色。本文讲述的是一种在后期处理的时候通过另一层深度纹理优化轮廓边的抗锯齿效果。本笔记仅为个人的理解,如果有误欢迎指出。

2025-12-09 21:59:06 188

原创 Unity基于自定义管线实现风格化草

本文基于Unity 2022.3.18f1和CustomSRP2.5.0管线,参考Roystan的GrassShader实现风格化草地渲染。

2025-11-11 16:55:29 994 2

原创 Unity基于自定义管线实现体积云—光线步进(RayMarch)算法

本文在Catlike Coding 实现的基础上参考了知乎文章实现了体积云渲染,并给出相关步骤。

2025-10-20 11:33:27 1080

原创 Unity 一个简单的多线程日志系统

可配置日志文件大小,并且可以清除旧日志,防止日志太多占用空间。:使用锁和双队列确保多线程安全以及读写分离。:批量处理日志条目,提高性能。:支持不同级别的日志过滤。

2025-10-12 18:09:45 246

原创 Unity基于自定义管线实现体积雾—光线步进(RayMarch)算法

本文在Catlike Coding 实现的基础上参考了知乎文章实现了体积雾渲染,并给出相关步骤。

2025-09-09 10:09:52 1618

原创 Unity基于自定义管线实现体积光—光线步进(RayMarch)算法

本文在Catlike Coding 实现的基础上参考了知乎文章增加了后期处理体积光功能,并给出相关步骤。

2025-08-18 15:29:52 1021

原创 Unity基于自定义管线实现屏幕空间环境光遮蔽(SSAO)

本文在Catlike Coding 实现的基础上参考了知乎文章【Unity URP实现SSAO】增加了屏幕空间环境光遮蔽(SSAO)功能,并给出相关步骤。

2025-07-29 11:22:43 1341

原创 Unity 基于UIToolKit编写的一个proto协议编写界面

基于UIToolKit编写的一个proto协议编写界面

2025-03-26 10:55:27 491

原创 Unity 调用Windows保存对话窗口崩溃

这里有问题,原本怀疑是【openFileName.maxFile】 给的太小,后面给了256,512,10000依旧会有闪退。这里面new了一个新的string不会闪退,怀疑是不是c++里面引用到了一个空指针对象导致的崩溃,然后尝试了这种代码。然后问题来了,测试那边反馈,调用这个保存框多几次后程序会发生崩溃。到这里还没什么问题,功能能够正常实现,测试那边也没有问题。折磨啊,折腾了好一会后,我搞出了这种代码。网上找了一番后参考了这个代码实现了功能。运行了一下,功能正常便直接交给测试了。

2024-09-27 11:08:42 615 2

原创 一些unity开发过程中奇怪的问题解决方案记录

这个问题是因为Unity2022 有BUG,在适配安卓旧机型上有问题,该问题在2022.3.18f1 版本中被修复。

2024-02-01 10:31:49 1095 1

原创 用C#实现企业微信机器人定时下班提醒服务

用C#建立一个企业微信定时提醒下班的功能

2023-11-15 16:15:41 1290 2

原创 [Unity3D] Unity3D连接安卓设备调试unity程序

通过unity3d以及VS对安卓设备上自己打包的unity程序进行调试

2022-08-02 18:47:38 23067 9

空空如也

空空如也

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

TA关注的人

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