2022.5.7 腾讯天美暑期实习(更新中)

2022.5.7 一面(30min)

Q1:上来简单自我介绍

Q2:你玩过什么游戏?

A:主机和单机游戏比较多吧(哈哈),老头环黑魂123只狼血源,忠实的魂玩家;巫师123赛博朋克2077,美国末日12,战神1234、双人成行等等,网游的话就是LOL,DNF,原神等等,手游就是吃鸡王者还有其他一些。

Q3:简单说说你对游戏开发的理解吧

A:(问了一嘴,大概指什么方面?是指游戏开发的岗位分工还是什么?面试官说都可以)我就大概简单说了说岗位分工,游戏客户端、游戏服务端、游戏引擎、游戏美术等,这个就是行业科普知识了~

Q4.项目

(开始问项目,因为我一直在实习,所以就大部分时间都在问实习项目。主要是UE4的东西如下:

①这个游戏项目大概是什么?你用的AirSim是什么?

A4.1:AirSim是微软开发的一款基于UE的仿真系统,是用来对自动驾驶和无人机进行模拟的。我们这里利用他的系统并进行一些改进,进行仿真。 

②你在项目中担任了什么工作?

A:担任游戏角色的一部分动作开发(抓取,放下,蹲下),以及系统构建工作

③能说说大概的开发流程吗?

A:刚开始入门的时候是用UE的蓝图去完成人物的动作测试,以及利用美术做好的动画资源。后续开发中由于性能和系统需求 需要把大部分蓝图转换为C++,只留取部分蓝图内容。

④说说你是如何在开发中实现抓取和放下的动作的?

A4.4:实现的话核心就是Two Bone IK了,我在C++逻辑中对Alpha值实现一个合理的过渡,使得人物手部可以以一个平滑的过渡到物体目标位置。剩下的就是利用美术制作的动画资源了(抓取和放下动作的动画)

⑤那你来说说如何在一个场景中抓不同的物体?比如我抓起了一个苹果,要把它放到柜子里,接下来要去抓一个香蕉,然后放到桌子上。因为苹果和香蕉大小完全不同,这时会不会有穿模的问题?以及该如何让player去放到柜子上?

2022.9.8 回看:回答的不好,建议多看看场景题吧,可能更关注的是思路。

A4.5:(有点小蒙,问了一下详细的需求,其实也是争取时间思考)举例来说,在平时玩的游戏中如果玩家拿了一个物品,并且要放到一个位置的话,这时player面前应该是根据场景不同会有不同的选项,比如在一个柜子面前,那么就会有一个放到柜子的选项,如果面前是一个桌子,也会有一个放在桌子的选项,如果什么都没有,那么直接就扔到面前。这些都是在程序内部逻辑判断location的,而不是让玩家去设定放下的location。穿模的问题的话,我会让角色根据物体的大小来确定移动的位置,不能让玩家“穿模”过去,从而实现抓取动作的自然性,大概就这样(感觉像是瞎说的)

⑥如果让你用C++去从零构建这个需求,你会用什么数据结构去实现?

2022.9.8 回看:这部分答的实际上不好,应该详细说出你建立的UE4的C++类,里面详细调用了什么类型的指针和函数

A:(。。有点懵,具体问了一些细节)简单来说是,建立一个Character类,里面有AnimInstance*,是一个动画序列的指针,根据指令去指向并调用不用的动作的动画;然后是各个动作分别建立相应的类,里面会保存相应的成员变量比如TwoBoneIK的Alpha值,和一些成员函数比如插值函数来实现Alpha从零到一的过渡等等。。

Q:OK,很好(。。。)

刚开始还以为是要用什么牛b的复杂数据结构来构建呢。。

⑦好,那你说说基于UE的C++与正常的C++有什么区别吗?

2022.9.8 回看:不是UE的C++映射关系,是UE4中的反射系统

A:一些宏定义和一些变量上的不同吧。比如UE中的FString、FName和std::string,FVector等等吧。

面试官:嗯嗯,好。那你知道UE的C++映射关系吗?

我:???(想了半天)您是指UPROPERTY和UFUNCTION这种吗?

面试官:嗯嗯是的,看来你知道的

我:(。。。)嗯嗯

⑧你用了TwoBoneIK,那你能说说TwoBoneIK的原理吗?

2022.9.8 回看:回答的不好,Effector坐标系为World Space,Joint的坐标系为Bone Space,Two Bone IK根据余弦定理,解算出骨骼夹角,但是这样使得Joint围绕一个轴旋转,必须确定Joint Target的位置才能限制在二维平面上。

A:IK就是逆向运动学,先说正向运动学,通俗来讲FK就是一个一个骨骼去设置位置等参数,从而完成一个部位的动作(说的也不是很专业),那么IK则是相反,是根据目标位置从子骨骼反向推算父谷歌骨骼的位置从而达到一个比较自然合理的动作。在TwoBoneIK中,顾名思义,有两根骨骼(小臂,大臂),三个点(手,肘,肩),根据手部的位置反向推算肘和肩的位置。

面试官:好的,那其中的一些数学原理你有了解吗?我们知道IK的推算解不是唯一的

我:。。。了解一些,大概是根据三个点组成的角度和余弦定理来推算,大概是在三维空间中确定这三个点组成的平面,然后确定角度balabala。。。(原理细节忘了)

面试官:好的好的,可以

我:。。。。。。好的

Two Bone IK - 知乎 (zhihu.com)

⑨听你刚开始说的游戏经历还挺丰富的,你了解过什么应用在游戏上的技术吗? 

A:了解过,比如Motion Matching,在美国末日2中有广泛的应用。

面试官:好的,那你能介绍一些吗?

我:先说解决了什么问题,我理解的Motion Macthing是为了解决传统的动画状态机问题,我自己也用过状态机,实现一些简单的动作序列,比如走、跑、跳,通过状态机结点连线可以达到一个序列的效果,但是如果是开发一款大型游戏,会使得状态机十分复杂并难以维护。所以育碧在2016年提出了Motion Matching这项技术。我理解MM(Motion Matching)就像一个实时的动画搜索引擎,他需要一个动作捕捉数据库支撑,根据玩家和环境的实时输入的一些特征来与数据库中的动画进行匹配,选取匹配度最高的动画作为接下来几帧或几秒的动画去播放,同时其中会有动画之间的过渡。(大致解释,感觉不是很严谨,具体需要看论文)

面试官:好,那你能说说其中的特征是如何匹配的吗?

我:。。会选取一部分特征,比如轨迹(trajactory),骨骼的朝向角度和骨骼运动速度。。。(论文的细节记不清了)动捕数据库也会利用这几个特征来生成一个特征数据库,可以与玩家实时输入的指令和其他环境的特征来进行匹配,这里有一个匹配函数(细节也忘了)来实现这个匹配过程。

面试官:好,那你说说具体的匹配过程?

我:。。。有些忘了,(具体在论文里)之后会进行一些科研上的调研

Q5:C++八股文

①C++的多态是如何实现的?

A:静态多态是通过模板和重载的方式来实现的,动态的话就是通过虚函数来实现的

面试官:好,那你来说说虚函数的底层实现原理?

我:(八股文,这里懒得写了)

面试官:那有一个问题,构造函数里有一个虚函数,那它调用的是谁的虚函数?

我:。。。(这个知识点盲区了,随口说了一个父类的ba)

面试官:是父类的吗?

我:。。是吧。。

面试官:好的,没关系

在构造函数中调用虚函数_Lailikes的博客-CSDN博客_构造函数调用虚函数

②说一说C++指针和引用的区别? 

A:

指针是一个变量,可以赋值为空,引用不可以,必须初始化;

指针变量可以改变,引用一旦初始化就无法修改;

指针是一个值,而引用只是一个变量别名;

C++中指针和引用的区别_昔拉天使的博客-CSDN博客_c++指针和引用的区别

这里答的感觉还是有疏漏

③C++STL用过吗?里面的实现了解过吗?比如map?

A:map底层实现是红黑树,能实现map根据键值有序排列

Q:那你能说说红黑树是什么吗?怎么实现的?

A:。。。红黑树是一种。。特殊的平衡二叉树。。原理。。没有深入了解过

Q:好的

图解:什么是红黑树? - 知乎 (zhihu.com)

④了解过排序算法吗?都有什么排序算法?

A:快速,归并,堆,希尔,桶。。。

Q:那你说一下堆排序的原理

A:(有点忘了。。)就是,分为大顶堆和小顶堆,把序列构建成一棵二叉树,然后根据规则交换结点。。。具体的有些忘了

Q:没关系,那你还记得快速排序吗?

A:(这个记得,八股文了,不赘述)

堆排序_guanlovean的博客-CSDN博客_堆排序

Q6:你有什么问题想问我的吗?

A:emmm请问腾讯用UE比较多还是Unity还是自研的引擎?

面试官:用UE很多,自研的话基本都是北极光工作室在做。

A:手游也是UE吗?

面试官:是的,都是UE

一面总结:

总体感觉还好吧,只是有些基础知识掌握的不牢固。可能实习项目写的多了一些,所以大部分时间都在问项目的细节,以及思路。还有就是你自己平时的积累,比如这次问到的有关科研的应用到游戏的黑科技。OK,一面结束,学到很多东西,滚去刷题了/(ㄒoㄒ)/~~,希望有二面吧~

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值