[GENERIC]知识总结
知识总结
1. AI
寻路
路径规划之 A* 算法
[译]寻路优化
JPS/JPS+ 寻路算法
在AI寻路决策中运用势力图(Influence Map)
LPA* 与 D* Lite
NavMesh 生成算法
A* 的估价:设起点为 S、终点为 T,可以选择 D0 * ManhattanDist(S, T) + D1 * abs( Cross(Se, Te) )
其中 D0 = 2,D1 = 0.001
2. 动画
骨骼动画
骨骼动画原理
3. Gameplay
基础
Effective C++
架构
浅谈《守望先锋》中的 ECS 构架
漫谈Entity Component System (ECS)
4. 工具流
引入第三方库
c++库文件的理解
5. UI
6. 网络
预测、和解、插值
技能系统与网络同步
KCP
7. 物理
碰撞
多边形碰撞检测
SAT:每个方向的投影都有重叠部分则图形碰撞。实际上不需要检测所有方向,二维使用 每条边 的法向量检测;三维使用 每个面 的法向量、两个图形的边两两组成的面 的法向量进行检测即可。
GJK、GJK
两个图形的闵可夫斯基差包含原点则图形碰 ...
[UNITY]知识总结
知识总结
1. AI
2. 动画
动画基础
学习笔记 — Unity动画系统
Procedural Animation
Unity里的Procedural Animation
解决方案
Playable API:定制你的动画系统
Animancer
3. Gameplay
架构
GameFramework 解析
Unity DOTS:目录
协程
Unity 中的协程
地形
大世界GPU Driven地形入门
4. 工具流
反编译
dnSpy
编辑器
Odin常用功能整理
技能编辑器
技能编辑器的设计实现
5. UI
6. 网络
多人网络游戏同步探究
7. 物理
8. 渲染
渲染基础
Unity Shader 入门精要
卡通渲染
从零开始的卡通渲染
9. 性能优化
内存
【笔记】Unity内存分配和回收的底层原理
Unity游戏内存分布概览
[UE]知识总结
知识总结
1. AI
寻路
UE4 Navmesh寻路
UE4 的 RecastDetour 组件
UE4 主要使用 RecastDetour 组件主要支持 3D 场景的导航网格导出和寻路,也就是 NavMesh
行为树
UE4行为树详解
[UE4][AI] 浅析UE4-BehaviorTree的特性
2. 动画
3. Gameplay
基础
Unity3D 经验者转到 UE4 的经验
UE4的智能指针 TSharedPtr
[UE4]console命令行常用命令(command)
[UE4] 对象内存管理几种模式
蓝图
理解蓝图技术架构
GAS
UE的GAS原理深入探究
架构
《InsideUE4》GamePlay架构(一)Actor和Component
Demo
EpicSurvivalGameSeries
Shooter Game
ActionRPG
资源管理
UE4中的烘焙
大世界技术浅析,WOW的梦幻影歌——客户端资源加载
4. 工具流
插件基础
插件与模块
UE4编辑器如何生成和共享插件
[UE4]无插件源码编译和打包工程
How to Make Tools in UE4
...
[UE]BuffSystem的简单实现
BuffSystem的简单实现
设计
首先对于一个 BuffSystem 来说,最重要的肯定是 Buff,我们的 Buff 应该记录最基本的信息:BuffID、Givers(授予者)、Recipient(接受者),并且有最基本的功能:Create(生成)、Tick、Merge(合并)、Break(打断)。
然后我们需要一个 BuffSystem 用来管理所有的操作,我们通过这个 System 来发起 Commit、Query 某个 Buff,并且保存一下最基本的信息 BuffTable(buff总表)、RecipientDict(当前 Recipient 上有哪些 BUff)。其中BuffTable 在蓝图中手动添加。
BuffBase
Create:保存 BuffID、Givers(授予者)、Recipient(接受者) 信息;
Break:执行需要的方法,并将 bInterrupted 设为 true (对于每个 Buff,保存一个 bInterrupted 判断是否被 Break,可以有一个蓝图可调用的 CanBeInterrupted 方法来设置该值)
Merge:执行当 ...
[UE]PushModel属性同步
PushModel属性同步
优势
PushModel 是对 Replicate 的一个优化。
对于属性的同步,原有的 Replicated 属性,在 Replicate 之前需要对比所有的属性是否发生变化。
而用上了 PushModel,则会在 Set 时主动将属性设置为脏,省去了 “比较” 这个高消耗的操作。
UE5 中还对 PushModel 做了更进一步的优化,添加了一些新的宏以及对更多基础组件的支持。
实践
设置依赖
首先,我们需要在 Build.cs 中添加 NetCore 模块的依赖。
1PublicDependcyModuleNames.AddRange(new string[] {"NetCore"})
设置属性
我们对于一个需要同步的属性,得先加上 Replicated 标签;有必要的话,需要加上RepilicatedUsing 来设置属性为脏时执行的回调函数。
12345678910111213UCLASS()class ATest : public AActor{ GENERATED_BODY()public ...
2021 年度总结
2021 年度总结
一月 ~ 三月
开年好像并不是十分顺利,先是挂了 雅思听力 这门课(也是唯一一次挂科,幸好补考过了)。
给 ACM 的学弟讲课、准备补考、沉迷小说…… 日子总是在浑浑噩噩中就这样过去了,没什么成长也没什么收获。
就这样平平淡淡结束了这个学期在学校的日子,踏上了返乡的飞机。
回到家,躺了三天,想了很多,各种头脑风暴与纠结。最后终于坚定了自己的选择: 毕业直接打工 ,从事 游戏客户端开发 。
既然有了选择,那就动手!怎么在来年的秋招拿到个好 Offer 呢?水了水知乎,看了看那些面试的人,发现最有用的东西:实习经历。
发现大家都是大三才去找实习,那时候肯定很卷 QAQ,不行,得想个办法卷过他们!这时候我的内心萌生了一个想法:我要在这个 大二暑假 就去游戏大厂实习!
怎么找到实习呢?自然是 奖牌、项目、八股文 ,但这时我手里除了一块 ACM 银牌一无所有,于是带着找到实习的目标,开始了紧急特训。
寒假期间,每天晚上从七八点卷到凌晨三四点以后,最后终于在开学的前两天整出了一个稍微能看能聊的 项目 。开学后,带着焦虑从早到晚背了两三周的 八股文(速成还是稍微取巧了,不可取啊不 ...
Live2D模型的简单制作
Live2D模型的简单制作
准备工作
下载 Photoshop ;
下载 Live2D Cubism :https://www.live2d.com/zh-CHS/。
PS
首先我们在 PS 中制作好已经分层好的图层,为了方便后续在 Live2D Editor 中的使用,每个图层可以单独移动。
保存好 .psd 文件,后续使用。
Live2D Editor
导入文件
打开 Live2D Cubism Editor。
将制作好的 .psd 文件导入到 Editor 中。
应用模板动画
点击 文件 -> 应用模板 。
在显示的各种模板中选择一个合适的模板。
调整参数
调整模板参数,尽可能地保证五官、身体对应。
由于自动绑定不一定合适,我们在 应用模板预览 中手动绑定对应部位
点击一侧的部位,然后点击另一侧需要绑定的部位后,点击 对应所选元素 即可。
绑定后点击 OK 确认。
制作纹理
点击 可编辑纹理集 并导出纹理。
导出
点击 文件 -> 导出运作档 -> 导出为 moc3 文件 即可。
这个 moc3 文件即可投入使用。
骨骼动画原理
骨骼动画原理
基础知识
骨骼动画(Skeletal Animation) 是模型动画中的一种,通过改变骨骼的朝向和位置来为 模型 生成动画。
模型(Model)由一个个三角面组成,这种三角面也被称为 网格(Mesh),网格上有一个个 顶点(Vertex) 。
对应在骨骼动画中, 网格(Mesh) 也被称作 皮肤(Skin);骨骼之间的连接处称作 关节(Joints),骨骼可以绕着 关节 旋转。
骨骼动画的制作,我们一般先进行 蒙皮 ,然后运动时根据提前制作好的 关键帧 与在两个关键帧之间的 插值 进行 姿态调整 生成动画。
蒙皮
基础知识
对于两脚兽,一般使用 T-Pose 进行蒙皮,因为大部分姿势不会偏离它太大。
蒙皮 就是将 网格(Mesh) 的 顶点(Vertex) 给 绑定 在骨骼上,骨骼动画的本质就是用 骨骼 来操控 Mesh 动起来,Mesh 动起来的本质是 顶点 位置的改变。
一个 顶点 可能被多个 骨骼 影响(大部分情况一个顶点只会被一个骨骼影响,但是比如接近关节的顶点,单纯由一个骨骼影响可能会出现缝隙)。
确定被影响的方案就要使用 线性混合蒙皮(Linear Bl ...
[图形学]基础图形绘制-直线裁剪
基础图形绘制-直线裁剪
Cohen-Sutherland
Cohen-Sutherland 裁剪算法 是最常用的直线的裁剪算法,用于直线在矩形框的裁剪。
首先,给空间编码:
根据点所在的位置我们可以获得其编码。
接下来考虑几种情况:
完全在矩形框内:将端点编码按位或,若为 0,则完全在矩形框内,直接全部保留;
完全在矩形框外:将端点编码按位与,若不为 0,则完全在矩形框外,直接全部舍弃;
其它情况:计算线段与矩形框的交点,获得新的线段,继续判断。
对于 情况3,我们获得新的线段后接着判断。
这样可以有效减少计算次数,同时,遇到下图这种情况时:
我们会保留得到 AC 或 BD (取决于计算交点的顺序),然后在下一轮计算中舍弃该线段,不会出现问题。
123456789101112131415161718192021222324252627282930313233343536373839const int IN_SIDE = 0x0000;const int LEFT_SIDE = 0x0001;const int RIGHT_SIDE = 0x0010;c ...
[图形学]基础图形绘制-多边形
基础图形绘制-多边形
种子填充
给定一个多边形的顶点,圈出一个多边形,我们可以先用 Bresenham 直线算法 画上边界。
此时,若已知多边形内一个像素,我们可以轻易地从该像素出发,利用搜索(BFS、DFS等),将多边形完整填充,这就是 种子填充 算法。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263static bool pixelMatrix[SCR_WIDTH][SCR_HEIGHT];static int dx[] = { 0, 1, 0, -1 };static int dy[] = { 1, 0, -1, 0 };static void Bresenham(int x1, int y1, int x2, int y2){ bool steep = abs(y2 - y1) > abs(x2 - x1); if (steep) Sw ...