- 博客(177)
- 收藏
- 关注
原创 动画系统里的临界阻尼与MotionModel
玩家的输入,怎么转换成人物模型的速度、转向速度、加速度等参数怎么理解Damping这个变量什么是阻尼、临界阻尼与过阻尼,什么是阻尼系数什么是惯性化插值如何根据带阻尼的弹簧运动模型,转换成对应的用于插值的Damper代码?如何理解Motion Matching代码里面Daniel Holden写的Damper函数。
2024-01-31 16:40:42
1269
原创 UE5动画源码剖析
UpdateAnimation在GameThread完成,主要任务是计算当前帧动画相关的变量、收集动画Notifies、更新动画Curve等ParallelAnimationEvaluation顾名思义,是并行的动画计算,它主要会根据前面一个阶段计算得到的结果,真正的去修改Scene里骨骼的Transform,一般在工作线程内执行。不过也可以修改命令行参数。
2024-01-31 16:31:49
2523
原创 UE里的动画重定向(Retargeting)
参考:https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/AnimationRetargeting/参考:https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/AnimHowTo/Retargeting/参考:https://www.youtube.com/watch?v=FDbpHamn2e
2024-01-31 16:29:25
2616
1
原创 UE里的反射(Reflections)机制
由于C++语言是不支持反射的,像UE这种引擎为了支持反射,就只能自己设计一套系统了,UE里这套系统叫做Unreal Header Tool (UHT),实现反射的核心思路也比较清晰明了,就是让用户在需要支持反射的类代码里加对应的宏,然后UHT在编译的时候会为其生成相关代码,比如要给一个变量加到反射系统里,就在它前面给它加一个UPROPERTY的宏(有点类似于C#里的给Property加Attribute)。
2024-01-31 14:07:29
2278
原创 Hazel引擎学习(十二)
现在的窗口其实只有Viewport,没有GameView窗口。为了完善Scene的相关功能,可以先来看看别的游戏引擎里的设计,Unity里会有SceneView和GameView两个窗口,一个负责绘制场景,一个负责代表GamePlay的实际窗口,而UE里的Viewport和GameView则共用一个窗口,按F8 eject可以切换SceneView和GameView。
2023-12-08 17:12:51
1688
2
原创 UE 简单插件制作
通过蓝图实现,创建Editor Widget蓝图(注意是Editor Widget资产,不是Widget Blueprint)通过C++创建Plugins实现第一种方式就不提了,它也不是个插件,这里研究的是使用C++创建Slate Editor Window来创建插件创建插件写一个简单的Widget类,加入到插件对应的Editor Window里,学习Slate C++的写法把这个Widget类变得复杂,让它可以绘制出所有动画资产。
2023-04-12 11:13:55
2747
4
原创 UE MotionTrajectory插件研究
对于过去的点,一直记录当前计算的模型位置即可,就是每帧存一下,没什么特殊的对于未来的点,按照当前的加速度上一个Sample点的速度,不断调用速度和位移的Update函数即可,注意这里假设的用户的Input是不变的,所以这里的加速度也是不变的(注意,角色的加速度仅仅是根据玩家的Input得到的)对于预测路径而言,应该都是这么个算法,我看Daniel Holden的文章里也是这么逻辑,
2023-03-24 21:14:16
1130
原创 Hazel引擎学习(十一)
我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看参考视频链接在这里很高兴的是,引擎的开发终于慢慢开始往深了走了,前几章的引擎UI搭建着实是有点折磨人,根据课程,接下来的引擎开发路线是:不过由于我对某些章节比较感兴趣,所以实现模块的顺序可能跟Cherno课上的顺序略有不同之前在学Unity的时候,我就对这一块特别感兴趣,因为我在没有完全了解C#、Mono和C++之间的交互原理之前,去看Unity的源码是一件非常费劲的事情,所以把这几课的内容提前实现了。参考:Mono Embeddin
2023-03-22 13:49:57
2109
原创 Hands-on C++ Game Animation Programming阅读笔记(九)
Chapter 12: Blending between AnimationsThis fade is usually short—a quarter of a second or less. (动画之间的fade一般很快,0.5s甚至更短)本章重点:两个Pose的Blending不同Animations的CrossFading,会有一个cross fade controller来处理一个blend queueAdditive BlendingPose blending也没啥新东西,
2023-03-10 14:07:08
2219
原创 UE BlendSpace处理SyncMarker相关代码研究
参考:https://arrowinmyknee.com/2020/10/13/deep-dive-into-blendspace-in-ue4/主要是对UE的Sync相关的代码不太理解,然后BlendSpace在SyncMarker作用时出的Bug不太好查,所以写下了这篇文章。
2023-02-14 11:47:08
779
原创 UE里动画状态机节点权重研究
参考:https://forums.unrealengine.com/t/animbp-what-is-a-conduit-and-why-do-you-need-it/363568参考:https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/StateMachines/Overview/动画状态机节点里可以右键添加Conduit State,如下图所示,前面有个拉分支线的图标:Conduit翻译过来
2023-02-06 12:04:37
1356
原创 UE的Blend Profile
这个概念是在UE4的动画系统里提出的feature,可以让我们设置每个Bone的blend speed。如果没有这玩意儿,正常动画Blend时,所有的Bone的Blend Speed都是相同的。这个功能可以有效解决movement动画之间的transition造成的滑步问题,同时保证上半身动画的流畅性。
2022-12-01 15:33:05
764
原创 Unity ECS记录
我之前写过文章Entity Component System与Entity Component介绍EC系统和ECS系统的区别,几年前的Unity和UE还都是用的EC框架,但这几年我看他们都开始往ECS架构调整了,Unity推出了DOTS系统,UE5里推出了Large Entities of Entities with Mass,ECS架构对内存和数据存储更友好一些,两个引擎都做出这个操作也是很合理的。
2022-10-12 14:34:12
1738
原创 Hazel引擎学习(十)
我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看参考视频链接在这里经过了漫长的过程,终于把无聊的UI部分结束了,接下来主要是搭建引擎的基础部分,包括:具体以下几点:Unity把场景存成了Yaml格式的文本文件,GameObject与Components之间的信息、以及每个Component在inspector上显示的内容,都会存在Scene文件里;而UE里的场景对应文件为格式,貌似并没有完全把场景存为文本文件,如下图所示:其实还可以用JSON来存储,但是这种格式在merge的时
2022-09-22 17:22:10
2550
8
原创 decompose transformation matrix
参考:https://math.stackexchange.com/questions/237369/given-this-transformation-matrix-how-do-i-decompose-it-into-translation-rotati。
2022-08-22 15:41:45
1005
1
原创 Hazel引擎学习(九)
我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看参考视频链接在这里Entity Component SystemEntity-Component-System (ECS) is a software architectural pattern mostly used on video game development for the storage of game world objects. An ECS follows the pattern of “entities
2022-08-08 17:58:41
3447
1
原创 std::bind与lambda表达式
bind-vs-lambda参考:bind-vs-lambda参考:why-use-stdbind-over-lambdas-in-c14参考:Lambdas vs. std::bind in C++11 and C++14背景介绍In C++98, such binding was accomplished via std::bind1st and std::bind2nd. TR1 added std::tr1::bind, which was promoted to std::bind
2022-07-19 19:15:54
1577
原创 C++ 使用typename来修复模板编译错误
在看Unreal Engine源码时,有一行代码我比较疑惑:下面是这些函数的定义:疑惑的点在于:因为在我之前的理解,typename是只能用于template的尖括号里的,所以写下这篇文章研究一下。参考: Why typename?先看个例子:想象的用法是,当T为MyRandomClass时,模板实例化为:然后,上面的模板直接编译会报错,报错位置为,报错信息为:Error信息很明确,这里的E,模板函数是认不出来的,因为它把E当成了变量,而不是Type。至于具体怎么改,警告其实已经告诉我了,改成
2022-07-14 14:49:25
1165
原创 UE的 AimOffset
参考:https://docs.unrealengine.com/5.0/en-US/aim-offset-in-unreal-engine/参考:https://www.youtube.com/watch?v=LzDw9VhlWJs&t=441s&ab_channel=NiceShadow什么是Aim OffsetAn Aim Offset is a type of Blend Space that uses additive poses, typically for creati
2022-07-08 22:13:24
1438
翻译 Unity的APIUpdater
参考:https://docs.unity3d.com/Manual/APIUpdater.html参考:http://man.hubwiz.com/docset/Unity_3D.docset/Contents/Resources/Documents/docs.unity3d.com/Manual/APIUpdater.htmlUnity本身就是一个不断迭代和改进的软件,它的类、函数和API都可能会不断更改。当Unity进行大版本更新时,这些改变可能会带来breaking changes(毁灭性的改变)
2022-07-08 21:07:15
870
原创 UE动画节点 —— Blend Node
参考:https://docs.unrealengine.com/5.0/en-US/animation-blueprint-blend-nodes-in-unreal-engine/本文主要讲UE的AnimGraph的动画蓝图里,负责把多个动画blend到一起的Blend节点,如下图所示,Blend Node在动画蓝图里,节点标题颜色都是灰色的:BlendNode根据功能可以分为下面几类:Unreal的Blend Node是把多个Animation输出的Pose,Blend到一起。实际动画系统还有从Po
2022-07-08 21:05:00
3040
原创 Unity的[Obsolete]属性
参考:https://www.tutorialspoint.com/What-are-obsolete-attributes-in-Chash参考:https://docs.microsoft.com/en-us/dotnet/api/system.obsoleteattribute?view=net-6.0参考:https://stackoverflow.com/questions/31804260/do-unity-functions-that-are-obsolete-still-workC#自身
2022-07-07 12:09:11
2540
原创 UE里的Sync Groups
在Blend Space的源码里看到了这个东西,不太清楚是干啥的。参考链接:https://www.youtube.com/watch?v=lWRsPl_IX7c&ab_channel=MattCourtois看了下,Sync Group可以帮助更好的进行动画之间的过渡,它需要两步操作:mark your animations with sync markersmake sure your animations are synchronized using sync groups第一步
2022-07-04 21:48:42
1519
原创 UE4入门(从Unity3D转学UE4)
UE4 项目文件介绍如下图所示,是我创建一个空白工程时生成的文件夹:因为创建了一个新的空工程,里面是不含C++代码的,如果在Content Browser里添加C++空类,项目结构会改变成下图所示,红色的区域是新增的内容:UE4里面的物体在Unity3D里叫GameObject,而在UE4里叫Actor或Pawn在Unity里,GameObject是所有在Hierarchy里面的物体,该类不可以被拓展和继承,而UE4里,Actor是一个C++基类,可以被拓展和继承,ComponentsUE
2022-05-03 17:05:24
3945
2
原创 Entity Component System与Entity Component
Entity Component与Entity Component System
2022-05-02 19:05:41
2652
原创 Hazel引擎学习(八)
我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看参考:https://www.youtube.com/watch?v=Yw7RpvmqvSE&list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT&index=65&t=120s&ab_channel=TheChernoTesting Hazel’s Performance这节课主要是对当前的Hazel游戏引擎进行性能测试,拿了网友的一个Demo进行测试,整体来说,性能
2022-04-18 15:19:06
4208
1
原创 Hazel引擎学习(七)
Making a GAME in ONE HOUR using MY ENGINE参考:https://www.youtube.com/watch?v=qITIvVV6BHk&ab_channel=TheCherno这个视频是看了看Unity里别人做类似Flappy Bird的视频,不过这里的Bird换成了Rocket,来看看用Hazel来实现对应的游戏,需要什么额外的功能:需要Particle System来代表火箭后面的喷射装置需要碰撞检测,判断Rocket是否撞到了墙上重力模拟一
2022-04-05 19:54:22
5583
2
原创 Hazel引擎学习(六)
# How to Build a 2D Renderer不管是3D还是2D的游戏引擎,都需要渲染2D的东西,因为一个游戏里是必须有UI的。## 渲染架构目前引擎里Render的代码是这样的:```cpp// 把Camera里的VP矩阵信息传到Renderer的SceneData里Hazel::Renderer::BeginScene(m_Camera);{ glm::mat4 scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.1f));
2022-03-22 23:09:24
1544
原创 Unity的GraphView
参考链接:https://www.youtube.com/watch?v=7KHGH0fPL84&ab_channel=MertKirimgeriGraphView介绍Unity在2018.1开始加入了一个node system,它不需要在Unity里安装任何Package或者像XNode一样添加任何脚本,只需要使用Unity的default api即可。Unity里的Shader Graph,VFX Graph和Visual Scripting都是通过Graph View API实现的。相关
2022-03-03 14:30:17
12561
4
原创 Hazel引擎学习(五)
Render Flow And Submission背景在Hazel引擎学习(四),从无到有,绘制出了三角形,然后把相关的VerterBuffer、VertexArray、IndexBuffer进行了抽象化,也就是说目前Application里不会有具体的OpenGL这种平台相关的代码,不过还剩下一个DrawCall没有进行抽象化,也就是里面的glDrawElements函数。Begin Scene为了搭建一个Renderer,先要从Scene的环境搭建起,在Begin Scene阶段,会设置其周
2022-02-11 00:17:44
3478
原创 Gitlab因为push rules导致git push出错
参考:https://docs.gitlab.com/ee/push_rules/push_rules.html参考:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks参考:https://www.atlassian.com/git/tutorials/git-hooks最近用Gitlab的时候push报错:remote: GitLab: Commit message does not follow the pattern '^(fix
2022-01-23 17:58:27
3941
原创 Unity的Reorderable List用法
关于ReorderableListUnity官方文档里完全没有提到ReorderableList类,这是因为它不在UnityEngine或UnityEditor的命名空间下,而是在UnityEditorInternal命名空间下,这个命名空间里的东西是没有官方文档支持的。ReorderableList的作用它的作用,是让一个数组,在Unity的Inspector界面上显示得更好一些。举个例子,如果我一个MonoBehaviour脚本,里面有个数组,两种写法都可:// 写法一// 注意Wave是
2021-12-29 14:19:18
8735
1
原创 Hands-on C++ Game Animation Programming阅读笔记(八)
Chapter 11: Optimizing the Animation Pipeline本章的优化的几个思路:用更好的方法来实现skinning更高效的Sample Animation Clips回顾生成matrix palette的方式具体分为以下几个内容:Skin matrix的预处理把skin pallete存到texture里更快的SamplingThe Pose palette generation探讨Pose::GetGlobalTransform函数Skin
2021-12-23 19:48:48
2589
原创 Hands-on C++ Game Animation Programming阅读笔记(七)
Chapter 10: Mesh SkinningDeforming a mesh to match an animated pose is called skinning.Mesh Skinning是基于Animation Pose,改变Mesh去匹配Pose的过程,可以通过Shader进行GPU Skinning,也可以用CPU进行C++这边的Skinning,我以前还写过一篇文章比较它俩的特点。本章重点:skinned mesh与non-skinned mesh的区别了解整个skinn
2021-12-08 20:28:01
1150
原创 Unity的PreviewRenderUtility类
参考:https://answers.unity.com/questions/1332916/any-idea-how-to-use-previewrenderutility.html代码如下:namespace UnityEditor{ public class PreviewRenderUtility { public Camera m_Camera; // obsolete public float m_CameraFieldOfView;
2021-11-29 15:43:23
2255
原创 Hands-on C++ Game Animation Programming阅读笔记(六)
Chapter 9: Implementing Animation ClipsAn animation clip is a collection of the TransformTrack objects. An animation clip animates a collection of transformsover time and the collection of transforms that is animated is called a pose. Think of a pose as
2021-11-26 18:18:24
1302
原创 Unity的PlayableGraph切换AnimationClipPlayable时关于RestPose的思考
问题是这样的,我有这么个简单的应用场景,一个PlayableGraph,只有一个output为AnimationPlayableOutput,然后直接连接一个AnimationClipPlayable。现在我的需求是,Editor下,使用脚本,把它的播放状态换成我一个新的Animation Clip。一开始我的代码是这么写的:public class Test : MonoBehaviour{ public AnimationClip clip; public AnimationCl
2021-11-26 11:48:35
3997
2
原创 Hands-on C++ Game Animation Programming阅读笔记(五)
Chapter 7: Exploring the glTF File FormatglTF is a standard format that can store both mesh and animation data. a file format that contains everything you need to display animated models. It’s a standard format that most three-dimensional content creatio
2021-11-21 22:57:53
1971
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人