<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[feiduoge的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/feiduoge</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; feiduoge]]></copyright><item><title><![CDATA[教程 51 - Vulkan 自定义内存分配器]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156396377</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156396377</guid><author>feiduoge</author><pubDate>Mon, 29 Dec 2025 19:51:21 +0800</pubDate><description><![CDATA[在这一章中，我们将为 Vulkan 渲染器实现自定义内存分配器。统一内存管理：所有内存分配（包括 Vulkan 内部分配）都通过我们的内存系统进行跟踪内存对齐控制：利用我们在教程 50 中实现的对齐内存分配功能调试和分析：可以追踪所有 Vulkan 相关的内存分配，便于调试内存泄漏性能优化：可以针对 Vulkan 的特定使用模式优化内存分配策略Vulkan 的自定义分配器通过结构实现，我们需要提供 5 个回调函数。首先，在// 是否启用分配追踪（用于调试）// #endif。]]></description><category></category></item><item><title><![CDATA[教程 50 - 内存对齐 (Memory Alignment)]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156396359</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156396359</guid><author>feiduoge</author><pubDate>Mon, 29 Dec 2025 19:50:26 +0800</pubDate><description><![CDATA[内存对齐（Memory Alignment）是指数据在内存中的地址必须是特定值的倍数。正确的内存对齐对程序性能至关重要，特别是在高性能游戏引擎中。✅ 理解什么是内存对齐以及为什么重要✅ 学习不同数据类型的对齐要求✅ 实现对齐内存分配函数✅ 在动态分配器中添加对齐支持✅ 掌握 SIMD 和缓存行对齐内存对齐是指数据的内存地址必须是某个值（通常是数据大小）的倍数。示例未对齐（Unaligned）:地址：0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15。]]></description><category></category></item><item><title><![CDATA[教程 49 - 任务系统 (Job System)]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156396332</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156396332</guid><author>feiduoge</author><pubDate>Mon, 29 Dec 2025 19:49:31 +0800</pubDate><description><![CDATA[任务系统（Job System）是现代游戏引擎的核心并发架构，它比传统的固定线程模型更灵活、更高效。任务系统将工作分解为小的、独立的任务，然后动态分配到工作线程池中执行。✅ 理解任务系统的优势✅ 实现无锁环形队列✅ 设计任务类型和优先级系统✅ 实现工作线程池和任务调度✅ 处理任务结果回调任务系统是现代游戏引擎并发架构的核心，它提供了比固定线程更灵活、更高效的方式来利用多核 CPU。]]></description><category></category></item><item><title><![CDATA[教程 48 - 多线程系统 (Multithreading System)]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156277892</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156277892</guid><author>feiduoge</author><pubDate>Thu, 25 Dec 2025 20:26:25 +0800</pubDate><description><![CDATA[多线程系统（Multithreading System）是现代游戏引擎的基础组件之一，允许同时执行多个任务以充分利用多核 CPU。Kohi 引擎提供了跨平台的线程抽象层，隐藏了不同操作系统之间的差异。✅ 理解多线程的必要性和挑战✅ 学习线程和互斥锁的抽象设计✅ 实现跨平台的线程 API✅ 掌握线程同步和互斥访问✅ 了解游戏引擎中的多线程模式多线程系统是现代游戏引擎的基础，Kohi 引擎提供了简洁的跨平台抽象。]]></description><category></category></item><item><title><![CDATA[教程 47 - 天空盒 (Skybox)]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156277626</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156277626</guid><author>feiduoge</author><pubDate>Thu, 25 Dec 2025 20:04:22 +0800</pubDate><description><![CDATA[天空盒（Skybox）是一种常用的 3D 图形技术，用于渲染遥远的背景环境（如天空、山脉、城市天际线等）。它使用立方体贴图（Cubemap）来创建一个环绕相机的无限远背景，给玩家带来身临其境的感觉。✅ 理解天空盒的原理和用途✅ 学习立方体贴图（Cubemap）的结构✅ 实现天空盒渲染视图✅ 编写天空盒着色器✅ 处理深度测试和视图矩阵的特殊配置天空盒是一个包围整个场景的大型立方体，其内表面贴有环境纹理。由于它始终以相机为中心，无论相机如何移动，天空盒看起来都在无限远处。]]></description><category></category></item><item><title><![CDATA[教程 46 - 透明度渲染]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156131796</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156131796</guid><author>feiduoge</author><pubDate>Sun, 21 Dec 2025 17:24:48 +0800</pubDate><description><![CDATA[透明度渲染（Transparency Rendering）是 3D 图形学中最具挑战性的问题之一。当场景中包含半透明或透明对象时，简单的深度测试和深度写入无法正确处理渲染顺序，导致视觉错误。✅ 理解透明度渲染的挑战✅ 学习深度排序算法✅ 实现快速排序来排序透明对象✅ 分离不透明和透明几何体的渲染✅ 处理 Alpha 混合和深度测试。]]></description><category></category></item><item><title><![CDATA[教程 45 - 渲染视图系统]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156131781</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156131781</guid><author>feiduoge</author><pubDate>Sun, 21 Dec 2025 17:23:47 +0800</pubDate><description><![CDATA[渲染视图系统（Render View System）是 Kohi 引擎渲染架构中的关键抽象层，它将渲染逻辑从具体的渲染通道和着色器中解耦出来。每个视图代表一种独立的渲染方式，可以有自己的投影矩阵、视图矩阵、渲染通道和着色器。✅ 理解渲染视图系统的架构设计✅ 学习如何创建和配置不同类型的视图✅ 实现 World 视图（3D 世界渲染）✅ 实现 UI 视图（2D 界面渲染）✅ 了解视图数据包的构建和渲染流程。]]></description><category></category></item><item><title><![CDATA[教程 44 - 相机系统]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156114879</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156114879</guid><author>feiduoge</author><pubDate>Sat, 20 Dec 2025 19:08:53 +0800</pubDate><description><![CDATA[在之前的教程中,我们一直在硬编码相机的视图和投影矩阵。这限制了我们的灵活性 - 无法轻松改变视角、切换相机,或实现相机动画。本教程将实现一个完整的相机系统灵活的相机组件多种投影模式(透视/正交)相机管理和切换常见的相机控制模式fill:#333;color:#333;color:#333;fill:none;Camera Controls 相机控制Camera Component 相机组件Camera System 相机系统第一人称Orbit轨道Free Fly自由飞行。]]></description><category></category></item><item><title><![CDATA[教程 43 - 渲染目标和可配置渲染通道]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156114863</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156114863</guid><author>feiduoge</author><pubDate>Sat, 20 Dec 2025 19:06:59 +0800</pubDate><description><![CDATA[在教程 42 中,我们实现了可写纹理,可以作为渲染目标使用。但我们的渲染通道(Renderpass)系统还是硬编码的:只支持渲染到 Swapchain。渲染目标系统(Render Targets):统一管理颜色、深度、模板附件可配置渲染通道(Configurable Renderpasses):动态创建不同配置的渲染通道多通道渲染管线(Multi-pass Rendering):支持复杂的渲染流程fill:#333;color:#333;color:#333;fill:none;]]></description><category></category></item><item><title><![CDATA[教程 42 - 可写纹理]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156096582</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156096582</guid><author>feiduoge</author><pubDate>Fri, 19 Dec 2025 20:39:51 +0800</pubDate><description><![CDATA[到目前为止,我们使用的纹理都是只读的:从文件加载,然后在着色器中采样。但在现代图形编程中,我们经常需要动态生成或修改渲染场景到纹理 (Render to Texture)阴影贴图 (Shadow Maps)后处理效果 (Post-processing)动态环境贴图 (Dynamic Cubemaps)程序化纹理 (Procedural Textures)本教程将实现可写纹理(Writeable Textures),支持 GPU 渲染和 CPU 写入。fill:#333;]]></description><category></category></item><item><title><![CDATA[教程 41 - 增强纹理映射(采样器)]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156096508</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156096508</guid><author>feiduoge</author><pubDate>Fri, 19 Dec 2025 20:35:54 +0800</pubDate><description><![CDATA[在之前的教程中,我们实现了纹理系统,可以加载和使用纹理。但我们一直使用默认采样器,没有控制纹理的采样方式。本教程将深入探讨纹理采样器如何控制纹理过滤 (放大/缩小)如何处理纹理边界 (包裹模式)如何提高斜视角纹理质量 (各向异性过滤)如何在材质系统中配置采样器fill:#333;color:#333;color:#333;fill:none;Texture Sampling Pipeline 纹理采样管线1. 坐标处理2. 纹理查找3. 质量增强4. 输出纹理坐标。]]></description><category></category></item><item><title><![CDATA[教程 40 - 二进制网格格式]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156061973</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156061973</guid><author>feiduoge</author><pubDate>Thu, 18 Dec 2025 20:03:00 +0800</pubDate><description><![CDATA[在教程 38 中,我们实现了网格系统,可以从 OBJ 文件加载 3D 模型。但 OBJ 是一种文本格式加载速度慢 (需要解析字符串)文件体积大 (文本存储效率低)解析复杂 (需要处理多种格式变体)本教程将实现格式,这是一种二进制网格格式,专为游戏引擎优化。fill:#333;color:#333;color:#333;fill:none;Asset Pipeline 资源管线离线转换导出运行时加载OBJ File文本格式体积大,加载慢网格转换器KSM File二进制格式。]]></description><category></category></item><item><title><![CDATA[教程 39 - 变换和父子关系]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156061959</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156061959</guid><author>feiduoge</author><pubDate>Thu, 18 Dec 2025 20:02:01 +0800</pubDate><description><![CDATA[在之前的教程中,我们实现了网格系统,可以加载复杂的 3D 模型。但每个网格都是独立的,无法建立层级关系。在实际游戏开发中,我们经常需要父子关系角色的手臂跟随身体移动车轮随车辆旋转UI 元素相对于父容器定位相机跟随玩家移动本教程将实现变换系统(Transform System) 和父子关系(Parenting),这是构建复杂场景图 (Scene Graph) 的基础。graph TBsubgraph "Scene Hierarchy 场景层级"Root[Root Node<br/>根节点]]]></description><category></category></item><item><title><![CDATA[教程 38 - 网格 Part 1]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156026429</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156026429</guid><author>feiduoge</author><pubDate>Wed, 17 Dec 2025 20:05:54 +0800</pubDate><description><![CDATA[在之前的教程中,我们使用几何体(Geometry) 来表示简单的 3D 模型,如立方体、平面等。但实际游戏中的 3D 模型要复杂得多:一个角色可能包含头部、身体、武器等多个部分,每个部分使用不同的材质。网格多个子网格(Submeshes):一个网格可以包含多个几何体部分材质管理:每个子网格可以使用不同的材质从文件加载:支持从配置文件加载复杂模型引用计数:自动管理网格生命周期fill:#333;color:#333;color:#333;fill:none;Mesh System 网格系统。]]></description><category></category></item><item><title><![CDATA[教程 37 - 法线贴图]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/156026375</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/156026375</guid><author>feiduoge</author><pubDate>Wed, 17 Dec 2025 20:02:09 +0800</pubDate><description><![CDATA[在上一教程中,我们实现了基础的方向光照。但即使有了光照,3D 物体的表面仍然看起来很平滑,缺少细节。如果要表现出砖块的凹凸、木纹的纹理、岩石的粗糙,我们需要大量的几何细节——但这会严重影响性能。法线贴图(Normal Mapping) 提供了一个巧妙的解决方案:通过纹理存储表面法线信息,在不增加几何复杂度的情况下,让表面看起来有丰富的细节。fill:#333;color:#333;color:#333;fill:none;With Normal Mapping 使用法线贴图。]]></description><category></category></item><item><title><![CDATA[教程 36 - 方向光照]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/155989584</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/155989584</guid><author>feiduoge</author><pubDate>Tue, 16 Dec 2025 20:46:11 +0800</pubDate><description><![CDATA[在之前的教程中,我们实现了纹理映射,但渲染的3D物体看起来很"平"(flat),缺乏深度感和立体感。这是因为我们还没有实现光照(Lighting)。方向光照环境光(Ambient Light):场景的基础照明漫反射(Diffuse):根据光照方向和表面朝向计算的光照Lambert 漫反射模型:一个简单但有效的光照公式通过添加光照,3D物体将展现出真实的立体感和深度,为更高级的渲染技术(如镜面高光、法线贴图、阴影)奠定基础。fill:#333;color:#333;color:#333;]]></description><category></category></item><item><title><![CDATA[教程 35 - 在UI渲染通道中绘制]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/155989048</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/155989048</guid><author>feiduoge</author><pubDate>Tue, 16 Dec 2025 20:11:44 +0800</pubDate><description><![CDATA[在上一教程中,我们实现了多渲染通道架构,将 World Renderpass 和 UI Renderpass 分离。现在我们将实现在 UI Renderpass 中实际绘制 2D UI 元素。2D 顶点格式vertex_2d):只包含位置和纹理坐标的简化顶点UI 材质类型:区分 3D 世界材质和 2D UI 材质泛型几何体创建:支持不同顶点格式的统一接口默认 2D 几何体:用于测试的基础 2D quadfill:#333;color:#333;color:#333;fill:none;]]></description><category></category></item><item><title><![CDATA[教程 34 - 多渲染通道]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/155949820</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/155949820</guid><author>feiduoge</author><pubDate>Mon, 15 Dec 2025 19:50:14 +0800</pubDate><description><![CDATA[在之前的教程中,我们只有一个渲染通道 (Renderpass),用于渲染所有几何体。但游戏引擎通常需要渲染多种类型的内容:3D 世界、2D UI、后处理效果、阴影贴图等。每种内容都有不同的渲染需求。本教程将介绍多渲染通道架构(Multiple Renderpasses),将 3D 世界渲染和 2D UI 渲染分离到不同的 renderpass 中。使用不同的着色器 (World 用透视投影,UI 用正交投影)使用不同的 framebuffer (离屏渲染 vs 直接显示)]]></description><category></category></item><item><title><![CDATA[教程 33 - 资源系统]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/155949777</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/155949777</guid><author>feiduoge</author><pubDate>Mon, 15 Dec 2025 19:47:30 +0800</pubDate><description><![CDATA[在之前的教程中,我们实现了多个独立的资源管理系统:纹理系统、材质系统、几何体系统。每个系统都有自己的加载逻辑,这导致代码重复和维护困难。本教程将介绍资源系统(Resource System),它提供了一个统一的、可扩展的资源加载框架。通过加载器模式(Loader Pattern),资源系统将资源加载逻辑模块化,让不同类型的资源可以通过注册加载器来实现加载。fill:#333;color:#333;color:#333;fill:none;Existing Systems 现有系统。]]></description><category></category></item><item><title><![CDATA[教程 32 - 几何体系统]]></title><link>https://blog.youkuaiyun.com/feiduoge/article/details/155915404</link><guid>https://blog.youkuaiyun.com/feiduoge/article/details/155915404</guid><author>feiduoge</author><pubDate>Sun, 14 Dec 2025 17:12:40 +0800</pubDate><description><![CDATA[几何体 = 顶点数据 + 索引数据 + 材质顶点数据：...索引数据：indices = [0, 1, 2, 0, 2, 3] // 定义三角形材质：指向material*的引用恭喜你完成了本教程！几何体系统让我们可以高效管理和渲染3D形状。通过程序化生成、引用计数、渲染包等机制，我们构建了一个灵活且高效的几何体管理系统。结合之前的纹理和材质系统，Kohi引擎现在已经具备了渲染复杂3D场景的基础能力。关键要点回顾几何体 = 顶点 + 索引 + 材质ID索引比名称查找更适合几何体。]]></description><category></category></item></channel></rss>