简介记录 Xlua2018 中的资源管理方式,AB打包工具、AB加载、AB调试、资源缓存等等模块
AssetBundle资源到AB的映射Manifest中存储AB间的依赖关系
加载机制加载 Asset 时,创建 Asset 加载器,根据 Asset 对应的 AB,创建 AB 加载器,如果有多个依赖,则创建多个 AB 加载器,AB 加载器通过 AssetBundleCreateRequest 进行资源的拉取。加载完后,将 AB 中的 Asset 置入缓存中,释放 AB。加载器根据缓存中是否存在 Asset 来判断是否加载完成
打包机制打包流程
AB 检测
切换渠道
构建 AB 包
后期处理
AB 编辑器工具包括打包工具(包括 AB 构建)、AB 分发器可视化配置、ABMangaer 调试工具
资源预加载在场景切换时,进行场景所需资源的预加载
资源缓存池
简介记录研究卡通渲染时的内容
眼睛二次元角色卡通渲染—眼睛篇 - MIZI的文章 - 知乎
视察映射实现眼睛的凹凸感123456#if defined(_Parallax_Eye) half3 VT = lightData.viewDirectionTS; half parallax_mask=smoothstep(1.0,0.5,(distance(input.uv,half2(0.5,0.5))/0.4)); half2 parallax_offset=(VT.xy/(VT.z+0.42f))*_EyeParallaxOffset*parallax_mask; baseColorFinal= SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv+parallax_offset) * _MainColor;#endif
环境反射高光在shader中结合Flipbook播放
MatcapMatcap是一种材质渲染技术,它通过采样一张预计算的材质图片(Matcap texture)来达到渲染材质的效果。M...
简介简单记录下,URP 中 Lit 如何实现光照计算
后处理
Boom抗锯齿雾效LUTColor Lookup组件ColorLookup.cs
1234567891011121314if (hdr){ material.EnableKeyword(ShaderKeywordStrings.HDRGrading);}else{ switch (m_Tonemapping.mode.value) { case TonemappingMode.Neutral: material.EnableKeyword(ShaderKeywordStrings.TonemapNeutral); break; case TonemappingMode.ACES: material.EnableKeyword(ShaderKeywordStrings.TonemapACES); break; default: break; // None }}
ApplyColorGrad...
描述记录战斗系统中,用到的动画知识点
效果
你的浏览器不支持播放该视频
Curves在 AnimationClip 的 Curves 中设置,控制 Parameters 的变化在播放动画中,设置 AnimationMove 值,脚本通过读取这个值,控制人物进行偏移
123456private void UpdateAnimation() { if (characterAnimator.CheckAnimationTag("Battle")) { CharacterMoveInterface(transform.forward, characterAnimator.GetFloat(animationMoveID) * animationMoveScale, true); }}
Events在 AnimationClip 的 Events 中设置,进行事件的派发
攻击者OnAnimationAttackEvent事件,进行攻击事件的派发,参数为 hit_light(轻攻击)...
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...
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), ...
Desc:行为树是一种用于编写智能行为的图形化编程语言和框架。它是一种树状结构,其中每个节点表示一个行为或一个行为组合,并按照特定的规则组织起来。
行为树的根节点通常表示整个行为树,而叶子节点则表示最基本的行为。每个节点可以包含一个或多个子节点,这些子节点也可以是行为节点或组合节点。行为节点可以表示简单的行为,如移动、攻击、躲避等,而组合节点则可以将多个行为节点组合成更复杂的行为。
行为树的执行是从根节点开始的,然后按照一定的规则遍历每个节点。节点的执行结果可以影响到其父节点和兄弟节点的执行。例如,如果一个行为节点返回失败,则可以触发其父节点中的备选行为,或者如果一个组合节点的一个子节点返回失败,则可以直接返回整个行为树的失败状态。
行为树在游戏开发、机器人控制、智能体控制等领域广泛应用,可以有效地组织和管理复杂的行为逻辑,并提供一种可扩展、易于理解和修改的编程方式
行为树节点NodeCanvas
叶子节点叶节点没有子节点,它们是行为树刻度的最终目的地,因此得名。最常见的叶节点将检查条件;游戏状态,或执行动作,改变游戏状态
Action Node 动作节点表示具体的动作,例如...
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()); ...
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...