<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GLDbalala的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/GLDbalala</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; GLDbalala]]></copyright><item><title><![CDATA[GPU Pro 5 - 5.3 Managing Transformations in Hierarchy 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/163571855</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/163571855</guid><author>GLDbalala</author><pubDate>Fri, 07 Aug 2026 20:14:46 +0800</pubDate><description><![CDATA[个人笔记，仅供参考层级结构中的变换管理有游戏引擎的使用经验的话Hierarchy应该相当熟悉，这篇文章主要讲述的是3D引擎中如何将场景中的对象组织成一颗树形结构，并管理对象之间的空间关系。常用的方式是通过使用TRS系统，T：Translation，R：Rotation，S：ScaleTRS系统所需要处理的第一个问题是如何将一个世界矩阵重新分解回TRS。事实证明，这个问题不存在一完全稳健的通解，但存在一种近似分解算法，能够在绝大多数实际应用场景中取得较好的效果。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 5.2 glTF: Designing an Open-Standard Runtime Asset Format笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/163220595</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/163220595</guid><author>GLDbalala</author><pubDate>Wed, 29 Jul 2026 20:18:42 +0800</pubDate><description><![CDATA[这里可以看到，一个office.bin 文件被划分为两个bufferView，Buffer表示一整块连续的二进制数据，BufferView则是其中的一段数据，可以用于划分不同用途的数据块。这篇文章主要是提倡另一种资源文件格式，用来给开发者提供一个统一的基础，将美术资源格式转换到统一的渲染引擎在运行时使用的资源格式，文章给这种资源文件格式的名字是。定义完每种美术资源如何在glTF的保存后，接下来需要了解的是如何从统一的美术资源格式。2，开放协作，包括GitHub，社区，Markdown，Issue跟踪。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 5.1 Quaternions Revisited 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/163086149</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/163086149</guid><author>GLDbalala</author><pubDate>Sat, 25 Jul 2026 21:25:23 +0800</pubDate><description><![CDATA[四元数插值存在方向的问题，如果两个四元数点积为正则会沿着最短路径进行，否则会沿着最长路径进行，对于三角形内部的顶点法线通常希望用最短路径去插值。用四元数可以用更少的数值完成变换矩阵的作用，变换矩阵需要位置、旋转、缩放 每个四个共12个数值来表示，但是用四元数仅仅需要8个数值即可。既然是通过顶点插值来实现，那么同样就可以把每个顶点的TBN转换成四元数，然后再套用之前说的四元数插值，以及对齐的办法代替。文章中对此的处理是不直接混合四元数，而是先用骨骼四元数分别计算顶点变换，再对变换后的顶点位置按权重进行混合。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.7 Optimizing OpenCL Kernels for the ARM Mali-T600 GPUs 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162850398</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162850398</guid><author>GLDbalala</author><pubDate>Mon, 20 Jul 2026 21:33:52 +0800</pubDate><description><![CDATA[这篇文章应该是面向GPU底层开发人员的，本文主要讲述的是如何针对 ARM Mali-T600 系列 GPU 的架构特点，在使用 OpenCL Kernel 上进行性能优化。矩阵计算的时候被乘矩阵应该可以用转置矩阵替换，这是因为缓存从内存读取矩阵数据的时候是按矩阵行读取，为了后续计算时提高缓存的命中率文章中指出将其中一个矩阵换为转置后的矩阵。Kernel 中应该保持A指令和LS指令数量的平衡，这个主要可能是因为三流水线设计的原理，最佳比例是A ：LS = 2 ：1。2，减少内存的访问次数。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.6 Adaptive Scalable Texture Compression 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162788182</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162788182</guid><author>GLDbalala</author><pubDate>Mon, 13 Jul 2026 11:36:10 +0800</pubDate><description><![CDATA[而ASTC中，每个块都可以存储最多4个顶点（正方形的四个角）的颜色，并根据从预设的颜色计算公式中挑选合适的算法保存。基于块的意思是对数据的处理都是基于Block的，也就是图片会被分割成很多的大小相同的小的Block，然后一个Block的数据会被用更少的数据表示，压缩后的数据也只用来表示这个Block的数据。ASTC 是 ARM 公司开发的一种纹理压缩格式，其目标是为此前种类繁杂、灵活性不足的纹理压缩格式提供一种统一且灵活的解决方案。它是一种基于块的纹理压缩算法。但是解压缩的时间是固定的。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.5 Tiled Deferred Blending 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162738798</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162738798</guid><author>GLDbalala</author><pubDate>Fri, 10 Jul 2026 15:27:59 +0800</pubDate><description><![CDATA[核心思路还是使用多重纹理代替多次渲染上，现代渲染管线中，在不考虑合批等操作下，每个物体都会在片元/像素 Pass 进行采样对应的一个纹理进行颜色计算，并在后续流程进行混合。Tile 有个优点就是同一个位置可以加入多个Tile片，当Pass支持的纹理小于当前Tile存在的纹理数量时，可以划分多几个Tile来渲染。2，对于每个Sprite，找到他覆盖到的Tile，将sprite的ID存储到受影响的Tile的列表中。5，对于每个非空的Tile，每个片元利用插值后的纹理坐标采样绑定的纹理，并手动完成颜色混合。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.4 Efficient Morph Target Animation Using OpenGL ES 3.0 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162673707</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162673707</guid><author>GLDbalala</author><pubDate>Wed, 08 Jul 2026 22:52:31 +0800</pubDate><description><![CDATA[本笔记仅为个人的理解，如果有误欢迎指出。Efficient Morph Target Animation Using OpenGL ES 3.0利用 OpenGL ES 3.0 实现高效的 Morph Target 动画        这篇文章主要介绍了利用OpenGL ES 3.0 新引入的 Transform Feedback（变换反馈），在移动端设备上实现的Morph Target 动画方案。        Morph Target 动画的另一个名字叫做混合动画，指的是美术人员在离线阶段预先制作模型的]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.3 Bandwidth Efficient Graphics with ARM Mali GPUs 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162464358</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162464358</guid><author>GLDbalala</author><pubDate>Wed, 01 Jul 2026 22:11:30 +0800</pubDate><description><![CDATA[这个实现原理是因为在移动端设备中，片段着色器写入的不是framebuffer，写入的是Tile Buffer，而Tile Buffer不是在显存中所以几乎没有额外的带宽消耗。这个拓展允许片段着色器读取现有的framebuffer 深度和模板值，这使得许多依赖场景深度的屏幕空间技术可以实现，比如软粒子、可编程深度\模板测试、三维位置重建以及方差阴影贴图。提供的一系列拓展技术，感觉像是API介绍说明，这篇文章不像是面向普通的游戏开发人员看的，像是给游戏引擎开发看的。本笔记仅为个人的理解，如果有误欢迎指出。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.2 Deferred Rendering Techniques on Mobile Devices 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/162348830</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/162348830</guid><author>GLDbalala</author><pubDate>Mon, 29 Jun 2026 22:30:55 +0800</pubDate><description><![CDATA[第二步：这一阶段对于屏幕上的每一个像素首先会根据Light Index Texture上的光源索引，通过这个光源索引去查询存储了光源信息的纹理，比如光源位置纹理、光源颜色纹理、光源衰减纹理等，最终再结合应用程序传入的漫反射纹理、法线等着色数据信息渲染出最终的颜色。延迟渲染对物体的渲染一般会有两个Pass以上，第一个Pass中会将这些数据写入到G-buffer中，随后在另外一个单独的光照计算的Pass中针对场景中的每一个光源依次读取G-buffer中的数据并混合，最终累积得到最后的光照。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 4.1 Realistic Real-Time Skin Rendering on Mobile 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161901690</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161901690</guid><author>GLDbalala</author><pubDate>Thu, 25 Jun 2026 21:49:20 +0800</pubDate><description><![CDATA[利用一个屏幕分辨率1/4大小的Buffer作为光照累积缓冲区，将渲染场景中所有使用皮肤着色的角色入射光计算结果都存储到缓冲区中，然后在该Buffer进行一次高斯模糊用于模拟光线在皮肤内扩撒效果。查找表存储4项：R通道存储 N·H 值，G 通道存储 N·V 值，B 通道存储预计算 Fresnel 项 ，A通道存储被镜面反射拿走之后，仍然留给漫反射的能量。文章表示皮肤的BRDF计算是最耗时的部分，这里可以用LUT优化，两个维度分别为：（法线与半角向量夹角）和 （法线与视线夹角）。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 3.3 Bokeh Effects on the SPU 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161838829</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161838829</guid><author>GLDbalala</author><pubDate>Tue, 09 Jun 2026 21:39:17 +0800</pubDate><description><![CDATA[本文讲述的是一种通过sprite实现的散景方案，并将其应用到PlayStation 3 的 协同处理单元（Synergistic Processing Unit，SPU）这样利用滤波核计算出每个像素的亮度后，如果该像素亮度高于某个阈值（threshold），就在该像素对应的屏幕空间位置生成一个纹理精灵（sprite）算法思路很简单通过分析每个像素的亮度，如果高于阈值就在对应位置生成一个sprite模拟散射效果。这里的优化方案是降低遍历用的分辨率以及选用小一些的滤波核。基于 SPU 的散景效果实现。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 3.2 Screen-Space Deformable Meshes via CSG with Per-Pixel Linked Lists 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161727737</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161727737</guid><author>GLDbalala</author><pubDate>Sun, 07 Jun 2026 16:54:26 +0800</pubDate><description><![CDATA[PPLL（Per-Pixel Linked List）像素链表的构建，这个结构是渲染领域非常常用的结构，以往的文章中也有描述比如。主要是对链表按照深度值排序，并根据M+与M-的交集情况将对应的深度值记录到最后的深度查找表上。，这里不同的是节点结构中多存了两个标志位，一个判断当前的片元是M+还是M-网格，一个判断当前片元是前向面还是后向面。局限性在于都是通过深度剔除，依赖多次渲染Pass，并和场景复杂度相关，场景越复杂通道数越多。以该图为例，M+为正常渲染的网格，M-为变形网格，M-的区域的像素会被裁剪。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 3.1 Screen-Space Grass 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161696159</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161696159</guid><author>GLDbalala</author><pubDate>Thu, 04 Jun 2026 22:06:42 +0800</pubDate><description><![CDATA[文章渲染草地的思路很简单，作者并没有真正生成草的几何体，而是在屏幕空间中把地形颜色颜色沿垂直方向拉伸，这会形成细长的纹理，所以在远处看起来会像草叶。文章模板测试中标记的只是地形，但是不是草地区域需要另外做区分，作者简单判断原像素是不是绿色来判断是不是草区域。有可能一些非地形组成部分的源像素被误处理，比如树木、路标、其他场景装饰物等等。这一部分主要为了标记屏幕空间中哪些区域是地形，或是哪些地方需要画草。文章中将地形的模板值设为了2，其他的物体的模板值设为了1。这一部分是文章草地渲染的核心。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.6 Wire Antialiasing 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161664246</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161664246</guid><author>GLDbalala</author><pubDate>Wed, 03 Jun 2026 22:27:49 +0800</pubDate><description><![CDATA[渲染的物体过小会带来一个问题就是相关的向量误差会越来越大，比如法线可能会因为像素变小而使得方向跳向了别的地方。因此与法线相关的光照模型在这些渲染上就不适用了，因此文章提出用法线变化带来的影响比较小的光照模型，比如半兰伯特光照模型。其实这里的思路类似于同书2.5章中头发的抗锯齿技术，也是通过计算覆盖率控制透明度的思路。解决这个问题的办法是将原本的电线粗细与拓展后的粗细计算出一个覆盖率，作为渲染像素的透明度值。但这会带来一个问题就是远处的电线会变粗，因为一个像素虽然小，但比起远处电线原来的大小还是会粗很多。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.5 TressFX: Advanced Real-Time Hair Rendering 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161601057</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161601057</guid><author>GLDbalala</author><pubDate>Tue, 02 Jun 2026 21:41:24 +0800</pubDate><description><![CDATA[头发渲染的初始数据是线段，在几何阶段时会将线段拓展成一个与视平面齐平的平面，也就是常见的公告板，投影后的毛发半径还会增加一些半径保证不会因为投影过小导致在光栅化阶段消失。这里的抗锯齿用的是基于覆盖率的毛发抗锯齿，计算当前像素被毛发覆盖的比例来决定当前像素毛发的Alpha 值，以此减少边缘的锯齿现象。最简单的方法，所有毛发的都同同一个深度，优点是简单，不用额外的Pass，不用额外的存储，缺点是效果差，会产生视觉伪影。在毛发渲染中，计算毛发的光照的时候需要考虑毛发的深度，文章中拓展了这部分内容。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.4 Hi-Z Screen-Space Cone-Traced Reflections 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161493836</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161493836</guid><author>GLDbalala</author><pubDate>Sat, 30 May 2026 23:27:43 +0800</pubDate><description><![CDATA[从代码的实现中可以了解到，他所计算的可见性是基于屏幕空间的，不是基于世界空间的，实现代码中只是简单的基于一个范围内最大最小深度的差值，与之前计算的可见性来评估当前计算的可见性。这一段主要讨论的是如何处理屏幕外的反射数据，屏幕空间反射的固有问题就是他的反射信息只能在屏幕空间内，反射步进到屏幕空间外的话是采样不到颜色信息的，文章表示通过控制淡出来掩盖这部分问题。这一段主要是考虑大深度场景，一般大世界的深度缓存为了提高超远距离的深度采用的是反转Z，即1 / Z 来代替，对应的Hi-Z也要对应修改。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.3 Volumetric Light Effects in Killzone: Shadow Fall 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161399833</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161399833</guid><author>GLDbalala</author><pubDate>Wed, 27 May 2026 23:42:52 +0800</pubDate><description><![CDATA[这样就获得了一个3D纹理查找表，在体积光步进计算光照量的时候通过深度就可以直接或当前位置的散射量，这样通过就可以通过控制切片的从而能在空间上控制体积光的效果。体积光和半透明物体因为渲染顺序的不同都会造成错误的遮挡，因为步进算法会考虑深度图，而半透明物体一般是不写入深度的，以至于在体积光计算的时候很难考虑的到半透明物体的影响。一半体积光计算的时候，每个像素点步进的幅度是一致的，文章中通过采样一个扰动贴图，让相邻的计算点步进幅度会有不同，以此减少整个计算过程中的步进数量。二，调整步进幅度，减少步进步数。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.2 High Performance Outdoor Light Scattering Using Epipolar Sampling 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/161323823</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/161323823</guid><author>GLDbalala</author><pubDate>Sun, 24 May 2026 20:35:00 +0800</pubDate><description><![CDATA[由于在极线采样的情况下我们只会对极线上对应的View Ray进行步进计算，那么对于这个极线上的View ray所构成的平面来说，他们所采样的阴影图的区域都是一样的，每条View ray上的步进点最终都是阴影图上某个线段面积。这个原理是如果当前要步进计算的线段AB深度完全小于节点中最小的深度，说明这一段都可以进行光照计算，反之则缩短接下来要步进的距离，或是如果全都在阴影处的话就跳过这一段的光照计算。可以看到，原本的算法中需要对屏幕每个像素点都进行光线步进，极线采样后需要进行光线步进的点就降低了几个数量级。]]></description><category></category></item><item><title><![CDATA[GPU PRO 5 - 2.1 Physically Based Area Lights 笔记]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/160601911</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/160601911</guid><author>GLDbalala</author><pubDate>Sun, 17 May 2026 17:17:12 +0800</pubDate><description><![CDATA[抽离的关键在于将粗糙度g'和着色点p的关系解绑，也就我在渲染着色点p的时候，我需要将当前着色点p的粗糙度g也作为查表的一个坐标。Li的值是可以通过离线预计算处理，在要用的时候通过查询一个三维表来获得，该表的三个维度坐标分别是光源空间中Pd的xy坐标和着色点与Pd之间的距离r。目前为止考虑的光源都是均匀光源，真实情况的光源可能是非均匀发光，因此需要对光源做一些处理，论文中提示用预积分的对整个光源变化进行预积分，再按照光源面积进行归一化。对于两个面积的求交，文章考虑了两种情况，一个是圆盘光源，一个是矩形光源。]]></description><category></category></item><item><title><![CDATA[Unity基于自定义管线实现风格化水]]></title><link>https://blog.youkuaiyun.com/GLDbalala/article/details/157942154</link><guid>https://blog.youkuaiyun.com/GLDbalala/article/details/157942154</guid><author>GLDbalala</author><pubDate>Thu, 14 May 2026 15:54:26 +0800</pubDate><description><![CDATA[本文在Catlike Coding 实现的基础上参考多方文章编写的风格化水的渲染。]]></description><category></category></item></channel></rss>