自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入剖析Vulkan交换链相关的同步机制

剖析Vulkan涉及交换链的渲染和呈现过程,并指出一个常见错误,分析原因,并给出了两种解决方案。

2025-11-05 17:56:23 561

原创 C++中嵌入C#作脚本引擎(一)

然后,对于所有C++中的Component,我们都在C#定义对应的类型。当C++和C#交互时传输时,如果数据类型不是基础类型(整型,浮点型等),而是C#中的托管类型(如string)或者自定义类型时,涉及到数据类型在C++和C#中的内存排布不同的情况时,需要进行数据的封送(Marshalling)。存储,简单起见,键类型这里选用ECS系统中entity本身的id,但其实是有问题的,更好的办法是给每个entity添加一个通用唯一标识符(UUID),在序列化时记录下来,这样才能将挂载的脚本信息保存在场景中。

2025-09-26 23:08:40 703

原创 C++中嵌入C#作脚本引擎(二)

文章探讨了在C++引擎中嵌入C#作为脚本引擎的实现方案。采用双Mono Domain架构,分别维护编辑和运行状态,通过序列化实现数据同步,更接近Unity的灵活控制方式。文章详细介绍了包含ScriptDomain、ScriptClass、ScriptInstance等核心类的设计实现,重点阐述了通过反射信息缓存提升访问效率、支持编辑/运行模式切换等关键技术点。

2025-09-26 23:06:36 691

原创 C++反射

在游戏引擎中,很多常用的功能需要用到反射系统。例如在Unity的Inspector面板中,可以直观地看到每个Component的属性,并且在编辑器中实时修改;又比如在保存和加载游戏场景时,需要用到对游戏对象的序列化与反序列化。保存时,通过反射将各组件的属性转化成文本数据存储到json,yml或toml等文件中;加载时,解析文本文件并由反射系统创建游戏物体。)是程序在运行时检查和修改自身结构和行为的能力,C++本身不支持反射,虽说有C++26的静态反射提案,但是离主流编译器支持还早。

2025-09-04 22:34:00 987

原创 在Unity中实现简化的光线追踪

本文介绍了在Unity中实现简化版光线追踪的方法。通过Unity Shader编写光线追踪核心逻辑,利用OnRenderImage函数将自定义着色器应用于相机渲染。文章详细讲解了光线与球体求交的数学原理和代码实现,包括射线参数方程求解、蒙特卡洛积分应用等关键步骤。虽然该实现经过简化(仅使用顺序表存储球体数据,未采用BVH等加速结构),但完整展示了路径追踪的基本原理。

2025-07-17 16:16:53 1815

原创 C++中嵌入C#作脚本引擎(一)

本文介绍了在C++游戏引擎中嵌入C#脚本系统的实现方法。通过Mono这一跨平台.NET运行时,可以实现C++与C#的互操作,将引擎底层逻辑与Gameplay逻辑分离。

2025-07-02 22:24:44 1754

原创 ECS的两种主流实现:基于SparseSet和基于Archetype

ECS架构的两种主流实现方式对比:基于SparseSet的方案通过稀疏集数据结构高效管理组件,利用密集数组和稀疏数组实现O(1)时间复杂度的查询和遍历,同时采用分页技术优化内存;而基于Archetype的方案将组件组合分类存储,在内存中连续排列,适合多组件查询场景。两者都遵循面向数据编程(DOP)原则,通过紧密存储数据、顺序访问和批量内存操作提升性能。Unity和Unreal分别采用Archetype方案(DOTS/Mass),而EnTT等框架则选择SparseSet实现,各具优势。

2025-06-24 22:43:00 763

原创 C++反射系统

实现简单的C++反射系统,以及反射代码自动生成。

2025-06-09 23:49:30 1545 1

空空如也

空空如也

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

TA关注的人

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