5.7k words
Desc:草地编辑器之缝合怪 效果 草的绘制上一篇中,已经得到了需要绘制的草的信息,包括顶点、法线、顶点色等,其中顶点由一个 Vector3 存储,可以通过CPU计算出,草对应的顶点位置,传递给GPU,也可以通过计算着色器的方式,让GPU去计算草的顶点位置信息 脚本通过 ComputeBuffer 将数据传递给计算着色器 ComputeBuffer 12345678910111213141516171819202122private ComputeBuffer m_sourceVertexBuffer;private ComputeBuffer m_drawBuffer;private ComputeBuffer m_argsBuffer;...m_sourceVertexBuffer = new ComputeBuffer(vertices.Length, Source_Vert_Stride, ComputeBufferType.Structured, ComputeBufferMode.Immutable);m_sourceVertexBuffer.SetData(ver...
8.6k words
Desc:草地编辑器之缝合怪 草地数据的存储:通过将每个草的位置,存储到Mesh中,用Mesh中的顶点去记录每个草的位置、法线、uv、顶点色信息 效果 需要存储的数据 顶点位置信息 顶点色 法线信息 草的宽高信息 对 GrassData 的操作 123456789101112131415161718192021222324public void AddGrassData(Vector3 grassPosition, RaycastHit terrainHit) { positions.Add(grassPosition); indicies.Add(i); lengths.Add(new Vector2(sizeWidth, sizeLength)); colors.Add(new Color( AdjustedColor.r + (Random.Range(0, 1) * rangeR), AdjustedColor.g + (Random.Range(0, 1) * rangeG), ...
7k words
Desc:行为树是一种用于编写智能行为的图形化编程语言和框架。它是一种树状结构,其中每个节点表示一个行为或一个行为组合,并按照特定的规则组织起来。 行为树的根节点通常表示整个行为树,而叶子节点则表示最基本的行为。每个节点可以包含一个或多个子节点,这些子节点也可以是行为节点或组合节点。行为节点可以表示简单的行为,如移动、攻击、躲避等,而组合节点则可以将多个行为节点组合成更复杂的行为。 行为树的执行是从根节点开始的,然后按照一定的规则遍历每个节点。节点的执行结果可以影响到其父节点和兄弟节点的执行。例如,如果一个行为节点返回失败,则可以触发其父节点中的备选行为,或者如果一个组合节点的一个子节点返回失败,则可以直接返回整个行为树的失败状态。 行为树在游戏开发、机器人控制、智能体控制等领域广泛应用,可以有效地组织和管理复杂的行为逻辑,并提供一种可扩展、易于理解和修改的编程方式 行为树节点NodeCanvas 叶子节点叶节点没有子节点,它们是行为树刻度的最终目的地,因此得名。最常见的叶节点将检查条件;游戏状态,或执行动作,改变游戏状态 Action Node 动作节点表示具体的动作,例如...

SC2

48 words
Desc傻逼暴雪,Pimba! 留念工作后就没怎么打了,就这样吧打神族胜率还挺高的,乐 Timba!
5.9k words
Desc用Unity2022的HDRP光追试了下,感觉效果挺好的,不过没看到20版本提到的步数 原理根据光路可逆,从眼睛表面积分发出射线。设射线的能量为1单位,射线到达物体时,会被吸收一部分能量,再沿着其他方向发射出去,如果到达光源,则最后乘上光源的能量 效果 效果图 没有开启光追的屏幕环境光遮罩开启光追的环境光遮罩屏幕空间全局光照开启光追的屏幕空间反射关闭光追后的结果教程中演示的提高步数后的屏幕空间反射 链接youtube C++实现光线追踪来源link ray射线表达式,P(t)=A+tbP:射线上的点A:射线的起点b:射线的方向向量t:射线起点A到P的距离 判断射线和球体有无交点 证明相关 12345678910111213double hit_sphere(const point3& center, double radius, const ray& r) { vec3 oc = r.origin() - center; auto a = dot(r.direction(), r.direction()); ...
3.5k words
Desclive2d CodeLive2D Controller12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273public Animator animator;public List<string> clipNameArr;public void V_PlayClipByIndex(int idx){ if (idx >= clipNameArr.Count) { return; } animator.Play(clipNameArr[idx]);}public GameObject V_LoadLive2D(PathData pathData){ // 加载模型数据 CubismModel3Json jsonData = m_LoadL...
24k words
空间数据结构在游戏程序中,利用空间数据结构加速计算往往是非常重要的优化思想,空间数据结构可以应用于场景管理、渲染、物理、游戏逻辑等方面link19.1 空间数据结构 - Justin的文章 - 知乎 四叉树/八叉树四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割 松散四叉树/八叉树:解决边界问题四叉树/八叉树的一个问题是,物体有可能在边界处来回,从而导致物体总是在切换节点,从而不得不更新四叉树/八叉树。 而松散四叉树/八叉树正是解决这种边界问题的一种方式:首先它定义一个节点有入口边界(inner boundary),出口边界(outerboundary)。那么如何判定一个物体现在在哪个节点呢? 若物体还没添加进四叉树/八叉树,则检测现在位于哪个节点的入口边界内;若物体先前已经存在于某个节点,则先检测现在是否越出该节点的出口边界,若越出再检测位于哪个节点的入口边界内。在非松散的四叉树/八叉树中,入...
173 words
Desc:游戏引擎架构笔记,结合Game104引擎 分层架构平台层(Platform)提供操作系统/平台相关的底层功能平台层细节 核心层(Core)提供操作系统常用模块核心层细节 资源层(Resource)提供资源加载、保存功能,资产的结构化数据定义和相关路径配置等资源层细节 功能层(Function)提供引擎功能模块。分为框架和子系统两部分
308 words
Desc:花大钱买了块树莓派4B,折腾一下想了很久的嵌入式 初始化连了显示器后一直next,系统选择的是64位 远程vnc viewer Gitlabgitlab 踩到的坑管理员账号密码link 台式无法链接树莓派有线网和无线网不在一个网段 SSH密钥保存在 C:\Users\Ruancuan.ssh 目录下 git clonegit@7e4e60542121:gitlab-instance-33113c43/game001.git在host中配置网址,或者直接手动替换git@7e4e60542121:gitlab-instance-33113c43/game001.git git push网络代理原因导致link
937 words
Desc:碰撞检测是适用于碰撞处理的一部分,碰撞处理可以分为三个部分:碰撞检测,碰撞计算,碰撞响应。碰撞检测的结果通常是一个布尔量,它告知了是否存在两个或者更多的物体相撞;而碰撞计算求出物体间碰撞的实际交点;最终,碰撞响应决定针对两个物体的碰撞,该采取什么样的行动 优化的思路减少检测的数量通过四叉树或者八叉树,将地图分块,每次只检测当前角色附近区域的块 减少检测的计算将除角色外的物体视作静态,发射射线去检测碰撞 射线的碰撞检测一般通过向角色的下方位置发射射线去根据距离检测位置,如果是负的,说明需要向上,不适用于复杂的场景(角色发生旋转,这是不能通过脚的位置向下发出射线,需要不同方向发射不同射线) 动态BVH树的动态碰撞检测动态包围盒层次结构(Dynamic BVH)是一种数据结构,用于加速射线追踪等计算机图形学应用程序。它是一个树形结构,每个节点表示一组物体的包围盒,而叶节点表示单个物体的包围盒动态BVH树 BSP树的动态碰撞检测二叉空间分割树,在多边形剪切方面出色,在碰撞检测方面高速使用BSP进行碰撞检测的本质是减少了树的遍历和搜索,前期派出了大量的多边形,在最后仅仅对...