自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Goap进行目标导向的行为规划

前些天又重新看了遍,果然,都忘光了。。。还是自己写一个简单的小栗子吧。

2025-07-03 00:30:41 1078

原创 BVH (二):实现一个基于增量更新的BVH

在【】里介绍过BVH的基础构建和查询,这里尝试实现一个通过增量更新支持动态物体管理的BVH。

2025-06-30 00:36:08 803

原创 BVH(一):BVH的基础构建和查询

在GamePlay中,BVH常用于碰撞检测的BroadPhase阶段,通过自根节点向下逐层与查询目标进行AABB间的相交测试,排除那些明显不可能发生碰撞的分支,快速筛选出需要提供给NarrowPhase阶段进行精度片元测试的物体,基于此思想,在构建树时需要一方面使节点的AABB尽量紧凑,另一方面尽量使左右子节点分散,减少重叠,这样才能在查询阶段有效地进行剪枝提高查询效率。而树所管理的实际物体,则均位于最下层的叶子节点中。】中我们介绍了KD树的基本使用,这里要介绍的是另一种加速查询的空间划分结构:BVH。

2025-06-29 19:19:48 799

原创 使用ORCA进行动态速度避障

对于速度避障的基本原理不了解的话可以先看和。

2025-06-29 19:18:37 1496

原创 使用KD树进行最近邻查找(1NN)和K近邻查找(KNN)

均匀网格、四叉树(或八叉树)、KD树、BVH是游戏开发中比较重要的几种空间管理的手段。其中均匀网格和四叉树比较简单,通常都是以客观空间为基础进行空间划分(或者建树),而KD树和BVH则以被管理的物体本身为基础划分空间。KD树本身是一个数据集划分的手段,根据数据的不同维度交替对数据进行划分(如年龄、身高、成绩等),但是在游戏开发中,经常会根据物体的位置信息构建KD树,从而达到空间管理的效果。下面讨论的都是特指这种应用场景。

2025-06-21 13:04:22 1090

原创 堆排序和优先队列

入队指向队列中添加元素,可以将新加入的元素插入到堆的最后一个位置,然后该元素与其父节点比较,如果不满足堆特性,则将其与父节点交换,由于队列内本身已经是成型的堆,这里依然假设为大顶堆,父节点一定比另一个子节点大,因此新插入的元素跟父节点交换后不需要再跟另外一个子节点作比较。此时新放到堆顶的值是无法满足大顶堆的性质的,但是堆顶以下的部分依然满足,其实就相当于构建堆时还剩根节点没有执行下沉操作,因此只要对新的堆顶执行下沉操作,就又能重新达到大顶堆的状态。于是结果中的最后一个值就确定了。

2025-06-21 13:02:25 859

原创 泊松圆盘采样进行随机选点

上面也提到过,说白了这个格子就是个空间划分的工具,用来快速筛选目标点的,相当于碰撞检测的BroadPhase阶段,所以只要逻辑合理,怎么划分都可以,只不过不同的划分方式可能带来一些不同的额外情况需要考虑。一种标准的划分网格的方式是Bridson算法,以MinDis作为格子的对角线,由于同一个正方形中两个点能够相距的最远距离就是对角线,因此即使在极限情况下,满足距离要求的两个点也不会落到同一个格子中。在这种划分下,需要参与检测的最远的情况也就是两个点正好跨了一个格子的对角线,如下图所示。

2025-06-10 13:20:02 646

原创 米切尔最佳候选进行随机选点

米切尔最佳候选算法是一种进行相对均匀的随机布点的手段,可以严格限制最小间隔也可以不严格限制,因此相比于直接随机,米切尔最佳候选的选点效果更加均匀,相比于泊松圆盘随机,米切尔选点的效果整体均匀局部可能又不均匀。此时候选点集只有一个点,所以就是选距离初始点最远的候选点作为最佳候选点,加入确定点集。大概过程如下图所示,其中蓝色点为确定点集中的点,红色点为候选点。选择DisMin最大的候选点作为最佳候选点,加入候选点集。为确定点集中的每个点再次随机候选点。从初始点出发,随机三个候选点。

2025-06-10 10:20:26 257

原创 使用柏林噪声生成随机地图

柏林噪声(Perlin Noise)是一种由 Ken Perlin 在1983年提出的梯度噪声(Gradient Noise)算法,用于生成自然、连续的随机值。它被广泛用于计算机图形学中模拟自然现象(如地形、云层、火焰等),是程序化生成(Procedural Generation)的核心技术之一。

2025-06-07 23:05:34 1589

原创 一个简单的德劳内三角剖分实现

德劳内(Delaunay)三角剖分的简单实现

2025-06-07 15:15:24 519

转载 【备份】GASDocumentation_Chinese

Attribute是由结构体定义的浮点值, 其可以表示从角色生命值到角色等级再到一瓶药水的剂量的任何事物, 如果某项数值是属于某个Actor且游戏相关的, 你就应该考虑使用AttributeAttribute一般应该只能由修改, 这样ASC才能预测(Predict)其改变.Attribute也可以由定义并存于其中.用于同步那些标记为replication的Attribute. 参阅部分来了解如何定义AttributeTip: 如果你不想某个Attribute显示在编辑器的Attribute列表, 可以使用。

2025-04-30 12:00:50 396

原创 EntitasLite源码分析(八)

ISystem是所有System的基础接口类,从ISystem又继承下来一系列的System接口,各自提供对应的方法,用于在特定的生命周期节点进行调用,执行逻辑处理。

2024-12-07 12:53:40 785

原创 EntitasLite源码分析(七)

顾名思义,ICollector是一个收集器,通过监听Group的Event事件,对相关的Entity进行收集,以供后续逻辑处理。

2024-12-07 12:52:48 854

原创 EntitasLite源码分析(六)

Matcher是EntitasLite提供的一个匹配器,也可以叫筛选器,通过定义一系列Component规则来对Entity进行匹配或筛选。基本结构由IMatcher接口类定义:这一堆的IMatcher接口乍一看有点乱,仔细一看,还真是有点乱。没关系,我们继续看实现类Matcher。

2024-12-01 01:02:30 964

原创 EntitasLite源码分析(五)

在ECS结构中,Component并不实际承载逻辑,而是负责为逻辑提供所需的数据,因此Component只是一个负责记录数据的容器。EntitasLite框架中,几乎所有类型都维持着一个接口类对应一个接口实现类的形式,如 IContext 和 Context、IEntity 和 Entity。Component则不同,Component存在的意义是为了使数据有个存取的地方,以供实际的业务逻辑使用,其本身是没有任何特性的。

2024-12-01 01:01:42 866

原创 EntitasLite源码分析(四)

Group是Context的子集,它通过Matcher指定的规则筛选并存储一组具有某些共同特征的Entity,方便在业务逻辑中对这些Entity进行遍历处理。

2024-11-28 12:34:39 1038

原创 EntitasLite源码分析(三)

Entity作为ECS的基础个体,是整个框架中最大的类。同样,通过对应的 IEntity 接口类定义了Entity的基本能力。

2024-11-28 12:33:23 687

原创 EntitasLite源码分析(二)

上文介绍了Context是EntitasLite框架中管理一切的管家,而Contexts则是负责创建和管理单个Context的大管家(从名字也能看出来)。IContexts接口本身内容非常简单,只有一个记录所有Context的数组。

2024-11-26 23:43:09 834 1

原创 EntitasLite源码分析(一)

EntitasLite是一个轻量级的ECS框架,代码量少,结构清晰,非常适合扩展和封装,创建适合自身项目实际情况的ECS系统。

2024-11-26 23:41:58 888

原创 【Unity Shader入门精要 第13章】使用深度和法线纹理(三)

基于深度+法线纹理的描边

2024-06-12 10:57:14 999

原创 【Unity Shader入门精要 第13章】使用深度和法线纹理(二)

全局雾效、高度雾

2024-06-06 12:29:01 674

原创 【Unity Shader入门精要 第13章】使用深度和法线纹理(一)

深度纹理,重建世界坐标

2024-06-06 12:27:25 1708

原创 【Unity Shader入门精要 第12章】屏幕后处理效果(三)

Bloom效果/简单运动模糊

2024-06-03 10:05:59 685

原创 【Unity Shader入门精要 第12章】屏幕后处理效果(二)

高斯模糊

2024-05-31 12:40:15 1559

原创 【Unity Shader入门精要 第12章】屏幕后处理效果(一)

屏幕后处理原理,亮度饱和度对比度

2024-05-31 11:00:59 925

原创 【Unity Shader入门精要 第11章】让画面动起来(二)

顶点动画、Billboarding

2024-05-29 09:41:27 2097

原创 【Unity Shader入门精要 第11章】让画面动起来(一)

纹理动画

2024-05-29 09:40:19 663

原创 【Unity Shader入门精要 第10章】高级纹理(二)

镜子效果、玻璃效果

2024-05-27 10:47:05 1289

原创 【Unity Shader入门精要 第10章】高级纹理(一)

反射、折射、菲涅尔反射

2024-05-27 10:46:32 1255

原创 【Unity Shader入门精要 第9章】更复杂的光照(四)

透明物体的阴影

2024-05-24 12:58:49 1206

原创 【Unity Shader入门精要 第9章】更复杂的光照(三)

不透明物体的阴影

2024-05-24 12:58:12 1357

原创 【Unity Shader入门精要 第9章】更复杂的光照(二)

多光源前向渲染

2024-05-22 09:31:23 1204

原创 【Unity Shader入门精要 第9章】更复杂的光照(一)

渲染路径

2024-05-22 09:30:11 1015

原创 【Unity Shader入门精要 第8章】透明效果(四)

前面提到过,在进行半透物体的渲染时需要关闭深度写入,但是如果物体本身存在复杂的遮挡关系时,关闭深度写入的渲染就会出现问题。如上图红框中的部分,这种情况下,可以使用开启深度写入的半透渲染方式。这里我们通过 ZWrite On 开启深度写入。

2024-05-20 09:41:39 912

原创 【Unity Shader入门精要 第8章】透明效果(三)

透明度混合

2024-05-20 09:41:08 1442

原创 【Unity Shader入门精要 第8章】透明效果(二)

透明度测试

2024-05-17 21:46:20 552

原创 【Unity Shader入门精要 第8章】透明效果(一)

之前我们并没有提到过渲染顺序的问题,也就是当场景中有多个物体时,需要先渲染哪个后渲染哪个。实际上,对于不透明物体,先渲染谁后渲染谁都是一样的,都可以得到正确的渲染结果,这是由于深度缓冲(Z-Buffer)的存在。在实时渲染中,深度缓冲用于解决可见性的问题,它可以决定哪个物体的哪些部分会被渲染在前面,哪些部分会被其他物体挡住。其基本思想是,根据深度缓冲中的值来判断片元距离摄像机的距离。

2024-05-17 21:45:20 727

原创 【Unity Shader入门精要 第7章】基础纹理(三)

另外一种对于纹理的使用方式是通过渐变纹理为物体提供漫反射光照效果。顾名思义,渐变纹理本身就是一张颜色渐变(可以是连续渐变,也可能是突变)的图片,这个渐变的过程模拟的就是光源从不同的角度照射物体的过程,因此对渐变纹理的采样通关不关心目标像素的位置信息,只关心光照角度。通常来讲,渐变纹理都是左右不可以互相拼接的(像上图这样)。

2024-05-16 12:18:03 466

原创 【Unity Shader入门精要 第7章】基础纹理(二)

除了用于直接表示物体表面颜色,纹理的另外一种常见用法是用来进行凹凸映射,在不增加顶点的情况下,通过纹理来提供额外的法线信息,从而在视觉上增加表面凹凸细节,丰富渲染表现。最常用的两种凹凸映射为法线贴图和高度图。

2024-05-16 12:17:12 1034

原创 【Unity Shader入门精要 第7章】基础纹理(一)

每一张纹理可以看作拥有一个属于自己的2D坐标空间,其横轴用U表示,纵轴用V表示,因此也称为UV坐标空间。UV空间的坐标范围为[0,0]到[1,1],在Unity中,UV空间也是从左下到右上,即纹理的左下角对应的UV坐标为[0,0],纹理右上角对应的UV坐标为[1,1]在美术导出模型资源时,会通过UV展开将模型每个顶点对应的UV坐标存储到顶点信息中。渲染时通过顶点(或片元)的UV坐标映射到纹理上的某一点,这样就可以通过采样每一个顶点(或片元)对应的纹理上的颜色将纹理显示出来。

2024-05-14 22:31:15 1432

空空如也

空空如也

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

TA关注的人

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