- 博客(53)
- 收藏
- 关注
原创 网上搜刮的一些腾讯游戏客户端开发(实习)面试的考题及部分答案
C/C++/C#基础:32位情况下: Char 1个字节 short 2个字节 long 4个字节 Int, float 4个字节 Double 8个字节 long long 8个字节 "struct与union的区别,他们的内...
2021-03-20 00:53:35
5147
原创 Unity Shader笔记 - Unity3D中的渲染流水线
整理自《Unity Shader入门精要》渲染流水线:https://zhuanlan.zhihu.com/p/26077873?utm_source=qq&utm_medium=social&utm_oi=633580650117206016概念上分为3个阶段:应用程序阶段、几何阶段、光栅化阶段应用程序阶段:应用开发者控制,通常在CPU上实现调用过程:主要任务:准备好场景数据:如场景物件、光源和相机等。 设置渲染状态:材质系数、使用的纹理等。 调用D...
2021-03-10 11:57:33
624
原创 Kinect+Python: 使用PyKinect存取Kinect识别到的全部关节坐标和旋转到本地
介绍项目需要使用Kinect获取到的骨架数据实时传输给Pytorch使用,所以本人寻找了在Python环境下存取Kinect坐标和旋转的资料。发现坑是真的多,首先PyKinect没有获取关节旋转的示例,而且由于Kinect接口提供的关节旋转数据是用的四元数,所以还存在一个四元数转换成欧拉角的问题。Kinect中的旋转值Kinect使用四元数表示 joint orientation,四元数由四个值组成 X, Y, Z, 和W.而在Kinect SDK中四元数利用Vector4结构封装,项目
2021-03-05 13:55:52
4280
2
转载 运动捕捉数据的描述ASF/AMC
ASF文件:ASF文件是骨架信息。定义了运动的初始姿态。#开头的部分是ASF文件的声明部分。:version 是运动捕获设备的类型 :name 是运动捕获设备的名称 :units 是相关的度量单位的信息,比如"units_length"的值为0.45,表示数据都乘以0.45后存储,且数据的存储单位为英寸 :documentation 是对文档的描述信息 :root 是人体...
2021-03-04 13:47:52
900
1
原创 姿态识别相关:当数据集关节规范不一致时需要进行处理
##Indexes of joint for 21 joint skeleton from total 31 jointsJOINT_INDEX = { 21 : [0,1,2,3,4,6,7,8,9,11,13,15,16,17,18,20,21,24,25,27,28], 15 : [0,1,2,3,6,7,8,13,16,17,18,20,24,25,27] }JOINT_LABELS = { 21: [ "pelvis".
2020-12-16 15:57:28
267
1
原创 Seq2Seq模型总结笔记
Seq2Seq也就是序列到序列模型,是encoder-decoder结构的一种模型简介 Seq2Seq模型主要是输出的长度不确定时采用的模型,这种情况一般是在机器翻译的任务中出现,将一句中文翻译成英文,那么这句英文的长度有可能会比中文短,也有可能会比中文长,所以输出的长度就不确定了。如下图中,输入的中文长度为4,输出的英文长度为2。 在网络结构中,输入一个中文序列,然后输出它对应的中文翻译,输出的部分的结果预测后面,根据上面的例子,也就是先输出“machine”,将"mac...
2020-12-02 23:50:06
733
原创 Leetcode 198.打家劫舍 C#动态规划
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。using System;using System.Collections.Generic;public class Solution{ public int Rob(int[] num
2020-11-29 22:33:58
168
原创 VR+强化学习 格斗游戏相关文献资料
整体思路:自训练AI -> 玩家键盘接入交互 -> 搭虚拟环境 -> 体感交互(Kinect) -> VR设备+体感交互对手Agent模块设计:这块主要用强化学习来做存在的问题:AI强度设置(已有相关论文研究AI强度适宜问题) 【见另一个文档】主要需要关心:玩家的舒适/满意度FightingICE核心思想:设置一个Balancing Constant(平衡常数)值,在格斗游戏中,这个值往往设置成双方生命量的差异。观测参数设置:物理空间...
2020-11-28 10:43:47
1138
1
原创 基于HMM的智能伴舞系统开发记录 - 问题二:Visual Gesture Builder的使用
由于系统使用Kinect进行识别交互舞蹈,其他数据集的规范和我们有很大的不同,哪怕我们进行手动规范转换,也会存在相当大的空间误差。所以了解VGB进行姿势录制测试是必要的,csdn上其实有几个兄弟已经写得非常清晰了,我这里对我遇到的坑进行一定的补充。VGB具体使用什么机器学习算法学习姿势 貌似微软并没有明确给出。首先使用Kinect Studio进行姿势录制:录制好的姿势可以打开后进行编辑,将不需要的帧剔除(这步可以跳过其实)然后打开Visual Gesture Buil.
2020-11-25 15:54:04
326
原创 基于HMM的智能伴舞系统开发记录 - 问题一:骨架规范
目前遇到的问题:人体骨架结点规范不一样因为需要用Kinect捕获到的骨骼数据,传给HMM,而数据集里面的数据是CMU的骨架规范,所以涉及到一个骨架转换问题CMU Mocap中的Salsa舞数据集结点数据总和:31个HipsLHipJointLeftUpLegLeftLegLeftFootLeftToeBaseRHipJointRightUpLegRightLegRightFootRightToeBaseLowerBackSpineSpine1NeckNec
2020-11-18 22:06:30
343
原创 深度学习 学习笔记 AlexNet优化
https://blog.youkuaiyun.com/u011268787/article/details/84926246https://blog.youkuaiyun.com/u011268787/article/details/85043511class AlextNet(nn.Module): def __init__(self, in_channel, n_class): super(AlextNet, self).__init__() # 第一阶段 s
2020-11-15 17:28:22
935
原创 深度学习 学习笔记六
理论:1.网络优化递度下降:批量递度下降(BGD)、随机梯度下降(SGD)、小批量递度下降(MBGD)批量递度下降(BGD):优点:一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。缺点:当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意...
2020-11-10 21:42:40
2549
原创 深度学习 学习笔记五
理论:前馈神经网络的问题卷积的作用和卷积的运算https://www.cnblogs.com/shine-lee/p/9932226.html函数角度:从这个角度看,多层卷积是在进行逐层映射,整体构成一个复杂函数,训练过程是在学习每个局部映射所需的权重,训练过程可以看成是函数拟合的过程。模板匹配角度:即认为卷积核定义了某种模式,卷积(相关)运算是在计算每个位置与该模式的相似程度,或者说每个位置具有该模式的分量有多少,当前位置与该模式越像,响应越强。一维...
2020-11-08 13:05:19
1249
原创 深度学习 学习笔记四
理论:激活函数:为什么要用激活函数:线性转为非线性,如果不运用激活函数,输出信号仅仅是一个简单的线性函数,此时神经网络就是一个线性回归模型,无法学习和模拟如图像、语言等复杂数据。深度学习前期用到的激活函数有Sigmoid和Tanh,后期有Relu、LeakyRelu、pRelu、Elu、softplushttps://blog.youkuaiyun.com/u013289254/article/details/98472343特点:Sigmoid 函数可以把输入的值映射到0到...
2020-11-07 22:43:22
426
原创 深度学习 学习笔记三
1.回归和分类都是有监督学习问题嘛?分类与回归,这两者都属于监督学习的范畴,都是学习的方法。之所以会去两个不同的名字,就是因为其对应的输出值形式不同,仅此而已。对于回归任务其输出值是连续的实数值,而对于分类任务其输出值为离散的类别数。因此这两者的本质是一样的,仅仅是输出形式不同而已。当然由于其输出形式不同,在构建误差函数(就是监督系统中的使得盒子往正确答案发展的驱动装置)时会有区分,这里对于分类和回归的误差函数的设计不多做介绍,后续会单独聊一聊。链接:https://www.jiansh...
2020-11-05 18:03:51
1124
原创 深度学习 学习笔记二
理论:1.线性判别函数和决策边界线性判别函数若分属于ω1,ω2的两类模式可用一方程d(x) =0来划分,那么称d(x) 为判别函数,或称判决函数、决策函数。一个线性分类模型(Linear Classification Model)或线性分类器(Linear Classifier),是由一个(或多个)线性的判别函数f(x,w)= wTx+b和非线性的决策函数g(·)组成。两类分类(Binary Classification)的类别标签y只有两种取值,通常可以 设为{+1,−1}。在两...
2020-11-04 18:26:53
969
原创 三维场景重建整合笔记
近年来,随着智能手机、头盔立体显示等技术的发展和 普及,虚拟现实技术取得了飞速发展。在 VR 技术中场景建 模是最关键的一步。3D 游戏通常采用专业三维建模软件, 如 Autodesk Maya、Autodesk 3ds Max 等进行建模,此方法 耗时耗力,所建模型为虚拟场景。对真实场景一般需要借助 专业三维扫描设备,此方法测量精度高,但设备价格昂贵, 不利于大范围推广。为此本文将多视图三维重建技术应用于 VR,实现真实场景的建模。该方法直接从多个视角的 2D 图 像提取场景的三维信息,数据采集简单快捷,
2020-11-02 23:13:36
6894
2
原创 AI强度相关的研究:康复游戏中难于调整的多周期强化学习
通常,治疗游戏的难度级别由治疗师手动调节。 但是,基于家庭的康复游戏需要用于自动难度调整的技术。 本文提出了一种针对康复游戏的个性化难度调整技术,该技术可根据患者的技能实时自动调节难度设置。 为此,强化学习的思想被用来动态调整游戏的难度。 我们表明难度调整是一个多目标问题,其中一些目标可能在不同时期进行评估。 为了解决这个问题,我们提出并使用多周期强化学习(MPRL),使您可以在不同的时期评估难度调整的不同目标。 实验结果表明,MPRL的用户满意度参数优于传统的多目标强化学习(MORL),并且提高了患者的运
2020-10-30 20:37:33
939
1
原创 Leetcode 17. 电话号码的字母组合 C#回溯模板
result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择public class Solution { List<string> res = new List<string>()..
2020-10-28 22:23:16
202
原创 AI强度相关的研究:MCTS 蒙特卡洛树搜索 Monte Carlo Tree Search
提供具有挑战性的人工智能对手是使视频游戏令人愉悦和身临其境的重要方面。 太简单或反之太难的游戏可能会让玩家感到沮丧或无聊。 动态难度调整是一种方法,旨在通过为对手提供量身定制的挑战来改进传统的难度选择方法,从而使挑战对玩家来说处于最佳水平。 这项研究使用蒙特卡洛树搜索(Monte Carlo Tree Search)方法对三种不同的动态难度调整方法进行了玩家评估,并评估了它们对玩家享受度,真实感和感知难度的影响,尤其是调查了采用不同赢/输比例的影响 通过动态难度调整,使得玩家能获得最大的欢乐。背景2
2020-10-28 22:16:58
427
原创 Leetcode 11. 盛最多水的容器
双指针思想public class Solution{ public int MaxArea(int[] height) { if (null == height || height.Length < 2) return 0; int left = 0; int right = height.Length - 1; int area = 0; while (left < right)
2020-10-21 22:56:24
102
原创 深度学习 学习笔记一
数学基础logistic函数logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线。Sigmoid 是常用的非线性的激活函数,可以将全体实数映射到(0, 1)区间上,其采用非线性方法将数据进行归一化处理;sigmoid函数通常用在回归预测和二分类(即按照是否大于0.5进行分类)模型的输出层中。优点:...
2020-10-21 22:12:24
1605
原创 AI强度相关的研究:Balancing Constant
AI强度相关的研究:Balancing Constant我们旨在创建一个具有两个同时要针对的隐性目标的Agent:学习如何玩游戏,同时学习如何与玩家保持联系以维持游戏的发展。RL任务的关键部分是我们如何根据学习者在环境中的行为来奖励或惩罚学习者。 为了解决游戏的平衡问题,奖励功能必须预见Agent在游戏环境中的行为(例如,如何移动或如何战斗)以及平衡本身(如何不比玩家差或好得多)。 因此,我们提出了一个基于游戏的奖励功能,该功能包括一个平衡常数,旨在指出Agent如何成为玩家的公平对手。这样,他
2020-10-20 17:49:02
151
原创 Leetcode 21. 合并两个有序链表 C#解法
递归方法public class ListNode{ public int val; public ListNode next; public ListNode(int val = 0, ListNode next = null) { this.val = val; this.next = next; }}public class Solution{ public ListNode MergeTwoLists(Li
2020-10-19 19:52:24
156
原创 数据结构 查找总结
一、查找的基本概念1. 静态查找表与动态查找表的区别:是否需要动态地插入或删除。2. 适合静态查找表的查找方法:顺序查找、折半查找、散列查找等。适合动态查找的查找方法:二叉排序树的查找、散列查找等。3. 顺序查找缺点:当n较大时,平均查找长度较大,效率低;优点是对数据元素的存储没有要求,顺序存储或链式存储皆可。4. 顺序查找中若有n个查找成功结点,则必相应有n+1个查找失败的结点。5. 折半查找只适用于有序的顺序表。适合折半查找的存储结构必须具有随机存取的特性。6. 折半查找不成功时
2020-10-15 20:32:19
796
原创 数据结构 图总结
一、图的基本概念1. 简单图:不存在重复边、不存在顶点到自身的边。2. 有n个顶点的无向图最多有n(n-1)/2条边、有n个顶点的有向图最多有n(n-1)条边。3. 连通图、连通分量是无向图的说法,强连通图、强连通分量是有向图的说法。4. 无向图中的极大连通子图称为连通分量。极大要求该连通图包含其所有的边;极小连通子图是既要保持图连通,又要使得边数最少的子图。5. 边最少的问题:连通无向图:n-1条边(树);强连通有向图:n条边(环)。6. 连通图的生成树是包含图中全部顶点的一个极小
2020-10-14 19:34:58
2353
原创 数据结构 树与二叉树总结
一、树1. 二叉树不是树(感觉有争议,说法不一)。树可以为空,叫空树。二叉树是二叉链表(有左右子树的指针),树通常是兄弟孩子链表(有孩子指针,兄弟指针,两个指针)。二叉树区分左右,非有序树不区分左右。2. 树中一个结点的子结点个数称为该结点的度,树中结点的最大度数称为树的度。3.度大于0的结点称为分支结点(又称为非终端结点),叶子结点又称为终端结点。课后题易错:树的路径长度是从树根到每一结点的路径长度的(总和)。 树的总结点数等于总分支数加一。二、二叉树1. 只有一个..
2020-10-13 21:27:33
1494
原创 游戏中的设计模式之优化模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version优化模式中包含了四种不同的模式,分别是:数据局部性 脏标识 对象池 空间分区这里实现了对象池和空间分区,四种模式的说明详见笔记部分。基本思想:数据局部性 CPU缓存读写速度大于内存读写速度,所以要尽量减少缓存不命中(CPU从内存读取信息)的次数 用连续队列代替指针的不断跳转 不过此模式会让代码更复杂,并伤害其灵活性 脏标识模式 需要结果时才去执行工作
2020-10-12 21:41:03
300
原创 游戏中的设计模式之解耦模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了组件模式 本质上是功能的模块化,延伸了面向对象的解耦思想 U3D的编程思想就是面向组件的,MonoBehaviour的子类都可作为组件挂在GameObject上 事件序列 就像银行办事需要排号一样——每个顾客要处理的事都是一个事件,编号后就形成了天然的事件序列,银行会按一定规则来依次处理队列中的事件 一般在底层实现,但宏观上依然存在,例如RTS游戏中通过Shi
2020-10-12 12:52:53
304
原创 游戏中的设计模式之行为模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了字节码 享元模式、原型模式中,不同的属性被存储在数据库中,而字节码是将行为存在数据库中 可用于实现可视化脚本编辑工具 子类沙箱 子类使用基类方法,或在基类方法上扩展 类型对象 其实是享元模式、原型模式的一种应用,以不同数据(而不是不同类)区分对象类型 ...
2020-10-12 12:49:01
156
原创 游戏中的设计模式之序列模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version包含了双缓冲模式 当一个缓冲准备好后才会被使用——就像一个集装箱装满才会发货一样;当一个缓冲被使用时另一个处于准备状态,就形成了双缓冲 在渲染中广泛使用,一帧准备好后才会被渲染到屏幕上——所以准备时间太长就会导致帧率下降 游戏循环 可参考脚本生命周期 更新方法 同上,实际上是Unity通过反射在生命周期不同时刻调用MonoBehaviour中的相关方法 这三
2020-10-11 20:50:32
157
原创 游戏中的设计模式之状态模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionSwitchCase版本,用按键控制一盏冷暖灯,关灯状态下,按一次打开暖光,再按切换为白光,再按变为暖白光,再按关闭 状态类版本,交通灯 停止、通行、闪烁、等待的切换基本思想:现在状态和条件决定对象的新状态,状态决定行为(Unity内AnimationController就是状态机)为什么要使用它:使流程清晰化、结构化 简化判断逻辑,比如嘴的状态是洗牙,那.
2020-10-11 20:28:00
194
原创 游戏中的设计模式之单例模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionU3D中利用MonoBehaviour初始化单例非常简单,只要在Awake中加入Instance = this,不过要注意的是,别的类不能在Awake里使用这个单例单例在普通C#中还有其他做法,甚至有些泛型、线程安全的扩展,也都不复杂,可以自行查询。基本思想:使用单例意味着这个对象只有一个实例,这个实例是此对象自行构造的,并且可向全局提供为什么要使用它:减少.
2020-10-11 19:49:06
154
原创 游戏中的设计模式之原型模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_VersionUnity中Prefab本质就是此模式里的原型,而Spawner要做的只是调用Instantiate方法 新的Prefab被生成以后,通过读取Dragons.txt里配置的信息来设置克隆体的名称和尺寸注:这里为了快速实现使用txt记录配置表,但实际项目里,往往使用SQL、Json、csv等方式进行配置基本思想:将一个或多个对象当做原型,通过统一的生成器克隆出很多类似.
2020-10-11 11:20:51
239
原创 游戏中的设计模式之观察者模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version基本思想:事件与其他对象行为的解耦——例如一个代码描述了日本核电站爆炸的事件,世界人民买盐这种行为显然不应该由核电站爆炸直接调用,而是通过卫星电视告诉广大群众,群众想买盐还是想买仙人掌就由他们自己决定了~好处:解耦,物价局改了粮价不需要挨家挨户通知公民,只需要让电视台播个新闻就好 如果要挨家挨户通知,物价局必须有每个公民的地址,这显然不合理,也会浪费很多资源 扩展困难——
2020-10-10 16:59:12
169
转载 游戏里常见的动态难度调节机制(DDA, dynamic difficulty adjustment)
原作者:Caleb Compton在上周的文章中,我探讨了一些游戏中最有趣也最常见的隐藏机制。然而,有一类隐藏机制相比之下更加多样化且普遍——调整游戏难度和平衡的机制。这些机制被总称为动态难度调节(dynamic difficulty adjustment,下文简称DDA)。DDA是电子游戏根据玩家水平调整游戏难度的过程。若玩家表现优秀,游戏将加大难度和挑战。相反,若玩家打得很吃力,游戏可能会降低难度帮玩家度过难关。DDA分为短期和长期两种。短期DDA与游戏的随机数生成器挂钩,目的是为了防止玩家
2020-10-10 11:33:47
6704
原创 游戏中的设计模式之享元模式 笔记
原文来自:https://github.com/TYJia/GameDesignPattern_U3D_Version左半部分为享元模式下,只有一个CubeBase,通过ObjInstancing(int num)讲共享的网格、材质及一个Transform信息表传递给GPU,只有一个Draw Call,所以效率极高右半部分为关闭享元模式后的做法,每生成一个Cube都会重新实例化一个立方体,并向GPU发送一次网格、材质和位置信息,所以1000个立方体就需要1000个Draw Call,效率极低
2020-10-10 00:38:37
163
原创 游戏中的设计模式之命令模式 笔记
源代码来自:https://github.com/TYJia/GameDesignPattern_U3D_Version命令模式基本思想:将命令封装,与目标行为解耦,使命令由流程概念变为对象数据(需要大量实例化命令对象)缺点:可能会导致大量的实例化,从而浪费内存扩展:可用享元模式代替大量的实例化命令变成了数据,也就变成了可被传递、存储、重复利用的:通过命令数据 队列/栈 可以轻易实现撤销、重做、时光倒流 命令数据还可以形成日志,用于复现用户行为,便于重复测试同样序列命令对各种目标的影响
2020-10-10 00:11:17
204
原创 数据结构 栈和队列总结
第三章 栈和队列一、栈1. 栈空条件:S.top == -1;栈满:S.top == MaxSize – 1; 栈长:S.top + 1;以上当然是顺序栈的情况。或许之前存储的元素仍然在栈中,但top指针已经指向了新的栈顶,也就起到了删除的作用。 进栈操作:指针先加1,再入栈。 S.data[++S.top] = x; 出栈操作:先出栈,指针再减1。 x=S.data[S.top--];注:上述是栈顶指针指向的就是栈顶元素的情况,若指针初始化为S.top=0,则入栈操...
2020-10-09 18:46:19
5059
转载 蒙特卡洛树搜索 Monte Carlo Tree Search
什么是 MCTS?全称 Monte Carlo Tree Search,是一种人工智能问题中做出最优决策的方法,一般是在组合博弈中的行动(move)规划形式。它结合了随机模拟的一般性和树搜索的准确性。MCTS 受到快速关注主要是由计算机围棋程序的成功以及其潜在的在众多难题上的应用所致。超越博弈游戏本身,MCTS 理论上可以被用在以 {状态 state,行动 action} 对定义和用模拟进行预测输出结果的任何领域。基本算法基本的 MCTS 算法非常简单:根据模拟的输出结果,按照节点构造搜索树
2020-10-08 17:29:11
4191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人