- 博客(94)
- 收藏
- 关注
原创 游戏引擎中顶点着色&像素着色
GPU渲染管线将3D游戏数据转换为2D屏幕图像,主要通过顶点着色器和像素着色器实现。顶点着色器负责3D顶点到2D屏幕的坐标转换,处理包括坐标、法向、UV和颜色等数据的灵活顶点格式(FVF)。像素着色器则完成2D坐标到像素颜色的计算,使用包含漫反射、法向、高光等纹理的材质参数。这两个着色器协同工作,实现从3D模型到屏幕图像的完整渲染过程,支持布料模拟等特殊效果。
2025-07-06 02:46:59
202
原创 C#-Type&Assembly
C#反射编程基础:Type与Assembly应用 摘要:本文介绍了C#反射编程中的两个核心概念:Type和Assembly。Type类用于获取类成员信息,示例展示了如何获取string类的所有字段(包括私有/公有/静态)和方法信息。Assembly类代表加载的DLL程序集,演示了如何通过程序集名称和完整类名来获取特定类型。这些反射技术为动态类型检查和运行时类型操作提供了基础支持,适用于插件系统开发、动态代码分析等场景。
2025-07-05 15:13:16
140
原创 骑砍Ⅱ霸主MOD开发(29)-伤害系统
物理系统(Agent与Agent,Agent与地形,Agent与Item之间物理碰撞)BlowFlag.CanKnockDown:受到伤害后是否播放骨骼动画。伤害系统(Agent受到Blow后的处理,击倒/击退,血量扣除)BlowFlag.NoSound:受到伤害后是否产生语音。BlowFlag.MakesRear 受到伤害后是否停马。力学系统(武器,碰撞类型,碰撞参数计算伤害Blow)
2025-06-28 16:51:05
37
原创 骑砍Ⅱ霸主MOD开发(28)-定制化ScriptComponentBehavior- MissionObject
Mission.MeleeHitCallback(近战攻击) & Mission.MissileHitCallback(远程武器攻击)1.继承MissionObject,覆写OnInit,OnPreInit,OnRemove等被重写过的方法。Mission.OnEntityHit(判断是否有MissionObject)MissionObject.OnHit(回调攻击方位,伤害,角度等信息)游戏中可被攻击的游戏实例,例如挡箭板,城门。2.实现自定义OnHit回调。
2025-04-03 15:11:49
102
原创 C#-使用VisualStudio创建C#工程
csproj文件可配置PropertyGroup(编译,平台等参数),ItemGroup(外部DLL引用)。csproj:VisualStudio项目配置文件,会根据csproj中配置加载外部依赖,调整编译环境。将C#依赖的外部库整体打包至一个文件夹即为发布,通过发布得到的exe不需依赖.NET运行时环境。通过csproj文件可实现控制台应用,窗体应用,Web应用等不同编译环境的工程创建。2.工具->选项->项目解决方案->生成并运行,调整日志输出级别。obj:存放编译流程中的中间文件和缓存文件。
2025-03-14 16:29:29
660
原创 C#-委托Delegate
定义了输入和返回的delegate,例如Func<int, string>表示输入为int,输出为string。定义了输入的delegate,例如Action<int, string>表示输入为int,string。C#中委托即C++中函数指针,通过delegate关键字可声明一个代理.代理可像指针一样作为参数传递和调用.<2.Action(不具有返回值的委托)<1.Func(具有返回值的委托)<4.目标方法赋值代理变量。<1.声明一个代理类型。<5.代理变量传参&调用。
2025-03-14 15:45:18
304
原创 骑砍Ⅱ霸主MOD开发(27)-定制化GameEntity-MissionWeapon
游戏中近战武器,石头,油罐等在战场上等与人物Agent绑定的GameEntity即为MissionWeapon。当武器对应Item物品配置有多个WeaponComponent时,战场上按下X键可触发形态切换.战场上按下G键可将武器进行丢弃,丢弃后会在场景中生成SpawnedGameEntity游戏实例。武器的使用,挥舞,丢弃,切换形态均为定制化GameEntity实现。双手长枪与骑枪之间相互切换。2.物理碰撞检测结果处理。飞斧与单手斧之间相互切换。1.物理碰撞检测回调。
2025-03-09 15:15:09
76
原创 天芒传奇Ⅱ·前传-特殊武器
通过delegate关键字可声明一个代理.代理可像指针一样作为参数传递和调用.一.C#-委托delegate。C#中委托即C++中。C#-委托delegate。
2025-02-14 16:38:28
151
原创 天芒传奇Ⅱ·前传-天芒的使用
1.红色天芒碎片+天芒的魂魄·忠 = 召唤P51战斗机。<2.红色天芒碎片+天芒的魂魄·义 = 召唤89虎式坦克。<1.蓝色天芒碎片 + 天芒的魂魄·忠 = 变身巨人。<3.红色天芒碎片+天芒的魂魄·勇 = 召唤迫击炮。Ctrl+A/D:飞机纵向旋转。Ctrl/ALT:加速/减速。Shift:RTS视角瞄准。
2025-02-14 16:35:39
134
原创 骑砍Ⅱ霸主MOD开发(11)-可编程渲染管线Shader编程
由于GPU,GPU版本,硬件平台等因素影响,不同的环境下shader编译方式不同,故采用动态shader编译方式编译shader,而后将shader提交至GPU中。Shader缓存路径:C:\ProgramData\Mount and Blade II Bannerlord\Shaders。2.在Mod目录下生成Shaders文件夹,\MOD\Shaders\D3D11\sack文件(shader缓存文件)已经编译过的shader不会重复编译,故将编译好的shader缓存至本地文件中.
2025-01-18 03:25:46
603
原创 C#-使用StbSharp库读写图片
StbSharp是基于C++/Stb图形处理库封装的C#接口,支持多种格式PNG/JPG等图片的处理.创建一张500*500的高度图PNG图片。
2024-12-27 18:20:18
353
原创 骑砍2霸主MOD开发(26)-Mono脚本系统
点击确定后,RGL引擎根据Platform平台(Steam/EPIC)拉起WOTS应用主进程,完成MONO运行时环境创建,系统资源加载.RGL中实现的C++对象例如Agent,GameEntity,数组,链表经过映射后转变为C#中NativeObject.通过MonoPInvokeCallback注解,Mono会扫描这些注解映射的方法,完成C++接口的映射.RGL引擎完成运行时环境加载时产生的回调,例如C#实例的GC,创建,销毁.
2024-12-25 17:47:44
298
原创 C#-调用C++接口
C#应用程序在编译为可执行exe时将外部DLL装载至本应用中,例如在CSC编译指令中添加相关参数可实现DLL引用.C#应用程序在运行时通过调用kernel32.dll中LoadLibrary完成外部DLL的装载.C++中接口通过编译为DLL对外提供调用,C#需要将DLL加载至本应用才可实现C++接口调用.实现C++方法MYFunction,将接口编译为MyClass.dll。
2024-12-25 13:45:11
427
原创 骑砍2霸主MOD开发(25)-顶点动画
3.实现自定义顶点动画播放ScriptComponentBehavior(VertexAnimator)1.创建MorphAnimation对应静态资源morph_animation.tpac。1.创建MetaMesh顶点动画,生成静态顶点动画资源meta_mesh.tpac。2.获取MetaMesh(从静态资源中获取/从GameEntity中获取)2.Agent设置对应MorphAnimation。定制化顶点动画用于人物Agent的面部表情.
2024-11-24 20:24:21
135
原创 游戏引擎中LOD渲染技术
为了降低GPU渲染压力,根据摄像机距离模型距离将面数较高的模型替换为面数较低的模型.故通常引擎中MetaMesh是由一个或多个LOD模型构成.精简修改器-塌陷/反细分/平坦手段进行LOD模型制作。
2024-11-11 20:21:41
560
原创 游戏引擎中Static,Kinematic,Dynamic三种刚体属性
包括常用的RayCast检测,BoxCast检测,AABB包围盒检测。Dynamic:实际游戏中具有重力和速度的物体,飞石,钢球等。在每一帧刷新时进行Collider刷新。Static:实际游戏中不可能发生移动的房子,树木,建筑物等。Kinematic:实际游戏中奇特的物体,传送门,陷阱等, 每一帧刷新时进行Collider刷新。Kinematic-Dynamic 穿模,会产生引擎回调OnCollisionStart。Static-Kinematic 穿模,会产生引擎回调OnCollisionStart。
2024-10-28 08:22:45
625
原创 游戏引擎中ECS架构及内存布局
E:Entity-游戏世界中的人,房子等实际物体,这些物体可能由不同的MetaMesh,ParticleSys组成。4.创建对应Entity下的Component,人具备技能,人具备盔甲,人具备AI三种不同的Component。C:Component-组成实际物体的MetaMesh,ParticleSys,也可以是一个实际物体。S:System-游戏引擎,负责完成实际物体的初始化,内存管理,帧同步,线程同步等核心功能。2.创建GameSystem引擎回调接口,帧渲染回调,实例创建回调,物理检测回调等。
2024-10-21 08:54:19
643
原创 骑砍Ⅱ霸主MOD开发(24)-定制化GameEntity-Missile
游戏中弩箭/弓箭/飞石/炮弹等在场景中沿抛物线飞行实例GameEntity即为Missile.Missile的发射,飞行,物理碰撞等都是定制化GameEntity实现。Missile的飞行抛物线是二次曲线,Missile相对于发射点的X/Y轴偏移与角度关系如下。不同Missile碰撞后可能会出现爆炸(燃油罐),附着(弩矢),消失(落水)等。抛物线方程y = x/tan(α) + k * x^2/cos(α)^2。2.根据落地点相对发射点相对坐标(X,Y)和α确定常量k。<4.飞行时粒子系统(火箭,飞石)
2024-10-08 11:20:18
366
原创 骑砍2霸主MOD开发(23)-定制化GameEntity-Agent
根据require_left_hand_usage_root_set="hand_shield"和左手武器的item_usage共同确定当前骨骼动画。<3.根据Agent对应Monster获取实际骨骼动画(ModuleData/monster_usage_sets.xml)当前为no_weapon,状态,取item_usage_sets.xml中id="no_weapon"中动画。当前为no_weapon,状态,取item_usage_sets.xml中id="no_weapon"中动画。
2024-09-29 13:27:14
252
原创 骑砍2霸主MOD开发(22)-使用TRFExporter&Blender导出TRF文件
【代码】骑砍2霸主MOD开发(22)-使用TRFExporter&Blender导出TRF文件。
2024-09-11 04:03:41
360
原创 骑砍Ⅱ霸主MOD开发(21)-定制化AgentComponent- MissionMainAgentInteractionComponent
>Agent.HandleStartUsingAction //使用投石车。SpawnedItemEntity //捡起&丢弃已有的武器,捡起弩矢。UsableMachine //弩炮,投石车等武器使用。Agent //玩家上马&下马,与领主对话。通过玩家位置&摄像机位置发射射线,获取命中游戏实例,实现交互机制.->Agent.OnUse //上马&下马。<4.与可使用GameEntity交互:使用冲车,投石车,弩炮。<1.与Agent交互:上马/下马,与人对话等功能。
2024-08-28 08:34:38
253
原创 骑砍2霸主MOD开发(20)-系统资源Resource
预制Resource被存储至AssetPackage,Asset文件夹下的TPAC文件中.每一个Asset对应一个Resource,可以是mesh,material,physics_shape,texture.Asset=GUID(唯一标识)+ResourceName(名称)+ResourceData(mesh,texture数据)<2.动态Resource:随业务动态变化的网格,例如边界墙,毒圈,自定义轨道等Mesh.2.动态获取:Texture.CreateFromByteArray()
2024-08-15 09:50:54
406
原创 骑砍Ⅱ霸主MOD开发(19)-定制化Shader
modding-kit中导入decal_siege_tower贴花材质。<2.创建Decal-GameEntityComponent。<3.添加Decal贴花至GameEntity中。<1.创建Decal贴花material。<1.设置GameEntity轮廓。<2.激活GameEntity轮廓。
2024-08-15 09:31:09
362
原创 骑砍Ⅱ霸主MOD开发(18)-存档
在类上添加SaveableProperty注解,声明字段的saveID,例如要将学生Student的年龄Age和身高Height进行存储。构造GameData:GameData.CreateFrom(byte[][])通过将游戏中Party状态,坐标等字段进行序列化后保存至sav文件,即游戏存档。写入sav文件:SaveContext.save()
2024-08-08 17:14:44
854
原创 骑砍Ⅱ霸主MOD开发(17)-使用XSLT文件合并覆写XML文件
k</test> <test id = '78'>k</test>开发MOD:NativeTest/ModuleData/a.xml <test id = '12'>k</test> <test id = '78'>k
2024-07-27 11:02:41
695
原创 骑砍2霸主MOD开发(16)-FaceKey&BannerKey
2.ModuleData\lords.xml中Character对应的BodyProperties中的key属性替换,实现对应英雄的皮肤替换。
2024-07-24 23:47:48
1281
原创 骑砍2霸主MOD开发(15)-游戏AI系统
获取Formation所有Agent成员:Formation.Arrangement.GetAllUnits()
2024-07-24 22:57:18
520
原创 骑砍2霸主MOD开发(14)-多人联机模式开发环境搭建
Token文件路径:C:\Users\taohu\Documents\Mount and Blade II Bannerlord\Tokens。发起Http请求:HttpClient.PostAsync(string requestUri, HttpContent content)发起TCP连接请求:TcpSocket.Connect(string address, int port)UDP收包:UdpClient.receive()UDP发包:UdpClient.send()Port:专用服务器端口号。
2024-07-22 09:54:30
689
原创 骑砍战团MOD开发(33)-使用BrfExporter&Blender制作BRF文件
【代码】骑砍战团MOD开发(33)-使用BrfExporter&Blender制作BRF文件。
2024-07-19 07:45:46
505
原创 骑砍Ⅱ霸主MOD开发(13)-物理系统
2.2.2 远程武器Missile与其他GameEntity物理碰撞(弩矢,箭矢的附着,反弹)Agent.Monster:Agent血量,重量,骨骼特性参数(Ragdoll特性,Item绑骨)BodyFlag:定制化物理标识,static/dynamic/kinematic,梯子,双面墙等。根据RigidBody中物理参数计算实际物体物理碰撞反应参数,反弹距离,反弹高度等。根据BodyFlag处理碰撞反应,穿模,坐标同步,反弹等物理反应机制。自定义物理形体边界,根据相对坐标进行碰撞,位置同步等操作。
2024-06-18 00:18:59
585
原创 骑砍2霸主MOD开发(10)-游戏实例GameEntity
梯子,椅子,攻城云梯,战车,武器,人物等定义为GameEntity,一个GameEntity若干子GameEntiy或Component组成.例如攻城云梯的轮子,梯子,支架等都是GameEntity或Component组成.引擎在渲染每个GameEntity时,会在每一帧进行位置同步,物理碰撞检测,时序同步等,通过注册该ScriptComponentBehavior实现事件通知.例如物理碰撞事件,实例化事件,移除事件.物理形体通常由碰撞体,刚体组成,使得这个物体具有一定的物理属性。
2024-06-07 08:52:48
732
原创 骑砍2霸主MOD开发(9)-游戏大地图(MapScene)
Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。
2024-05-30 09:07:49
1343
原创 游戏引擎中DDS纹理图片
摘要:DDS是为游戏优化的纹理格式,与PNG/BMP等2D图片不同。它支持MipMap技术,通过多级LOD纹理降低GPU负载。常见格式包括:DXT1(1:8压缩比,无alpha)、DXT3/DXT5(均1:4压缩比),后两者适合高光纹理和动态渲染场景。DDS格式特性使其成为游戏纹理存储的理想选择。(98字)
2024-05-07 08:10:19
462
原创 骑砍2霸主MOD开发(8)-骨骼动画
1.系统资产TPAC文件中有两种类型的资源,骨骼动画skel_animation和动画切片anim_clip。针对不同骨架(人/动物/房子)等具有不同的动画切片,将每种骨架所具备的动画切片汇总为一个ActionSet。
2024-04-24 10:31:37
848
原创 骑砍2霸主MOD开发(7)-世界坐标系&局部坐标系&屏幕坐标系&Camera
MatrixFrame frame = Vec3 orign(坐标X,Y,Z) + Mat3 rotation(旋转角度X,Y,Z);绝对坐标获取:GameEntity.getGlobalFrame()设置相对坐标:GameEntity,setLocalFrame()相对坐标获取: GameEntity.getFrame()3.Frame获取沿X/Y/Z轴旋转角度。4.Frame设置沿X/Y/Z轴旋转角度。1.Frame沿X/Y/Z轴移动。2.Frame沿X/Y/Z轴旋转。2.相对坐标→绝对坐标。
2024-04-24 10:12:36
458
原创 骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑
2.实现Prefix,Postfix前置后置插桩,实现对本体代码的修改,例如游戏菜单的加载调用前插入一个对话框MsgBox。
2024-04-21 17:58:44
1262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人