
Games104游戏引擎
文章平均质量分 61
Mhypnos
这个作者很懒,什么都没留下…
展开
-
Games104现代游戏引擎笔记 网络游戏进阶架构
同时对位置进行插值,如果没有收到新包时,自身的p,v本身也会收到自身的a影响,走到自身复制的pt位置(如上图红线),因为收到了新包,所以知道在t时间后会在新的真实pb位置(如上图绿线)。服务器会做一个验证,但是验证通常不会特别麻烦,客户端会发送开枪的位置,及击中的目标,击中的位置给服务器和服务器记录的自身的位置做验证,是否距离过远。因为延迟的原因,其实已经看到别人,但因为我的位置仍未同步过去,在对方世界里,我仍在掩体后,无论是以发现还是射击作为收益,都会有先手优势。服务器不会用现在的受击者的状态做判定。原创 2023-10-26 22:09:08 · 1852 阅读 · 0 评论 -
Games104现代游戏引擎笔记 网络游戏架构基础
IDL 会定义各种参数,类似schema的定义RPC Stubs RPC 存根:当一个客户端或服务器起来之后,彼此会告诉对方自己上线,然后注册一大堆的RPC(用来个函数调用)。每次call RPC时可以在RPC的存根里查询,如果没有对应RPC,系统会报错,但不影响其他业务逻辑的运行。真实RPC路径:发出RPC请求后,首先进行压缩,加密,然后网络传输,服务器接收后,进行解密,解压缩。原创 2023-10-25 02:27:16 · 1622 阅读 · 0 评论 -
Games104现代游戏引擎笔记 面向数据编程与任务系统
提取出游戏中一致性非常高,但是计算量很大,比如动画,物理模拟的一些运算,到一定时间,这些固定好的线程,会Fork一些子任务出来专门传递到Work Thread(预先申请好的),然后计算完后回收Task的结果。乱序的原因:有大量的数据存储,读取,因为cpu通常是饥饿的等待数据,不会等待指令一条条执行,根据指令读取数据,而是整块指令和数据混在一整块在cpu中运行。协程是由程序自己定义的,在一个线程里可以在很多的协程里来回切换,从cpu上看还是在一个线程里,通过程序来定义切换和激活,并没有激活核的切换。原创 2023-11-16 00:44:31 · 5175 阅读 · 2 评论 -
Games104现代游戏引擎笔记高级ai
Plan展开的过程是非常的快的,但是因为每一个Primitive Task 都是有个对于world state修改的Effect,但是并不会真的修改到World State 上,然而这可能会影响到后面的task。如果奖励足够密集,每一步或没几下就能判断奖励结果,用增强学习,容易训练出一个好的ai,如果是探索解谜类,一个动作和结果非常的不关联,增强学习的效果比较难。2.将目标和行为真正意义上分开(FSM,BT,HTN,行为和目标是一一锁死的,GOAP同一个目标,可能有多种行为路线,可以超出设计师的想象)原创 2023-10-08 22:11:29 · 1397 阅读 · 2 评论 -
Games104现代游戏引擎笔记 基础ai
2.内存和计算机开销低(路点寻路只是使用到了真是可行走区域的一小部分,与格子相比,牺牲了路线的灵活性,换取交第的内存和计算机开销,只要两个点之间是连通的,那么角色就可以按照点所在的位置到达目标点的位置)对所有的障碍物加距离场,当物体里离障碍物越来越近时,距离场的值越来越小,产生的反向斥力越来越大,然后给个大致的方向。在选择explored点时,优先选择现在已走过的距离加上预计要走的距离中最近的点,来优先搜索。任务一条路径,从起点开始,寻找路网中最近的点,在走到离终点最近的点(类似地铁)原创 2023-10-05 21:21:01 · 1544 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记11
外层:类似保护膜,防止离别的东西太近,高速移动时卡进物体。另一个作用是防止过于贴近摄像机的进平面,看到墙背后的物体。朝墙移动时,实际往往并不是撞击,而是贴墙移动。蹲下起身时,位置的变换,可能导致卡死在环境中。每个mesh会有个约束权重,设置可移动的范围。每个连接都有一个权重,设置可承受的力。走台阶时,往往会把物体往上下偏移一部分。衣料的物理mesh会另做一套网格更少的。3D,对空间划分后,再将空间进行三角化。设置好的破坏区域会连接在一个环境中。用网格的方法每个顶点计算物理。将物体分成一截一截的碎片。原创 2023-05-30 23:34:40 · 685 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记10
半隐式欧拉法:用当前受的力,根据牛顿第二定律求出未来的速度,再用速度求距离。但是简谐运动,cos,sin等,求出来的周期会比实际略长。能量会衰减,但是因为摩擦力空气阻力的存在,能量的衰减通常感觉不到。CCD:设置一个安全距离,当超过安全距离时,会做一个步长更密的检测。Actor-Kinematic:违背物理原则,由设计决定,不遵循真实物理原则。初筛:AABB-box,跟轴同向的一些box,快速计算能否碰撞。扭矩:形成角冲量,角冲量除以转动惯量,得到角速度,即旋转速度。比较简单,但是能量不守恒,无法收敛。原创 2023-05-30 00:48:26 · 1150 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记09
例如:移动时踩的非平地,有各种凹凸,希望保持脚始终踩在地上。会有两个Bones IK,模型的小腿和大腿,确定三角形的两条边,踩的目标点位置确定,可以算出距离根节点的位置(第三条边)。1:所有骨骼拉长,向外判断target,2:选出最长的骨骼,其余向内,判断向内target。混合空间的采样点分布是不均匀的,如果在某个地方需要更细腻的表达,可以在对应地方增加一个clips。在采用空间里的所有动画(clips),必须保持一致循环性,要么都循环,要么都不循环。并非采用全部的clips,根据划分的三角形。原创 2023-05-28 23:41:33 · 719 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记08
存下每帧每个顶点的数据,顶点的变化会导致法向的变化。通过对每个小图元的旋转,缩放和变形(对图套以一个框架,对框架的拉伸,会使里面的三角形/正方形进行反射变换)旋转则是在关键帧之间插值,当插值计算出来的值与实际值的误差大于一定范围时,把前一帧设为关键帧。受两个关节影响的坐标插值计算,需要将两个关节局部坐标转换为模型坐标,再计算权重插值。根据摄像机的位置,播放不同的sprite动画。一个刚体通常6个自由的:平移的x,y,z。以及围绕三个轴的旋转。渲染那部分看的云里雾里的,等学完其他图形学的内容再回头开吧。原创 2023-05-17 01:07:11 · 550 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记05
布林冯模型因为光的叠加,在光线追踪时可能出现入射能量为1,最终反射的能量大于1。3.所有被照射的物质在下一帧可能成为新的光源。1.如何获取可能从各个角度辐射进来的光源。这节还是正儿八经的去学图形学吧。2.光源和表面材质的积分运算。glossiness:光滑度。roughness:粗粗糙度。metallic:金属度。原创 2023-05-11 00:34:13 · 180 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记04
数据尽量只从cpu送到gpu计算结束了,不要从gpu读数据。因为逻辑和渲染是不同步的,来回的数据交互会导致帧数的延迟。因此,在做所有的绘制算法,绘制运算时,尽可能用同样的代码,各自访问各自的数据,效率会远高于CPU上的运算。每个submesh的顶点数据,索引,纹理等会存在一个大的buffer里,通过不同的offset获取。现代引擎,对于一个GO,会将其mesh,根据材质应用的不同切分成各个子mesh。一个指令,4次运算。SIMT:一个指令在多核上,同时做同样的指令操作。将所有的mesh存在一个pool,原创 2023-05-10 00:46:26 · 525 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记03
因为并行可能会导致各种消息时序的问题,所有会有消息管理的系统,管理当前帧处理消息还是下一帧处理消息等。四叉树/八叉树:管理不规则分布GO的场景。任何GO产生事件通讯只需要查找父节点,子节点与邻居节点。现代引擎往往不是根据各个对象分别tick,而是根据各个系统分别tick。1.Game Object:游戏世界里几乎所有东西都抽象成GO,GO的管理:通过GO的唯一id和GO的位置来管理。4.所有GO直接通过消息机制彼此通讯。2.GO有各种组件组合而成。场景世界会根据位置分成网格。原创 2023-05-08 23:17:39 · 153 阅读 · 0 评论 -
Games104现代游戏引擎学习笔记02
1.尽可能把数据放在一起。2.尽可能顺序访问。3.尽可能一次一批的读写数据。其他格式资源要转化成引擎的资产。每个资产有唯一识别号。数学库,数据结构(减少内存碎片,内存管理 stl库有内存碎片)…对世界的模拟为先,然后渲染。先logic再render。资源层:管理游戏所有资产的生命周期,资源分配。游戏引擎会申请一大块内存,并自己高效分配。原创 2023-05-05 22:04:10 · 714 阅读 · 0 评论