天美L2(还是没听清工作室)的二面面经
上次天美一面是在2022/4/21,大概进行了40分钟,一面面经在此:https://www.nowcoder.com/discuss/937951?source_id=profile_create_nctrack&channel=-1
今天是2022/4/22,大概是二面,进行了30-40分钟,工作室好像在成都
这次面试可以说是非常不寻常,没有接触过这样的面试,然后感觉发挥就不是很好。
上来面试官就说:我看你的几次面试(之前还面试了天美的其他地方的工作室)评价是语言基础比较好,我们今天就不谈这个,看看你的项目经历。感受出来是总监组长级别的面试官了!
一说我就紧张起来了,因为我的项目不算复杂,那意味着引申内容会非常多,需要很广的知识面
因为我做过跟《守望》、《LOL》相关的内容,所以问题基本是用这个来引申的
提前申明我的回答不一定准确
项目及其引申
Unity和UE的使用感受,回答UE更专业,提供各种各样的API,但也更吃电脑性能,Unity自由
有问我自己喜欢什么方向,我回答是倾向技术美术和技术策划。
看到我有的项目跟深度学习有关,问了解游戏跟深度学习结合的例子。我回答是DLSS,结合强化学习搞AI,用深度学习自动检测骨骼权重之类的,不知道对不对。复盘时回想,发现还可以跟路径规划结合。
是否愿意做深度学习相关,我会考虑DLSS
LOL内,若美术做了动画,策划要求在某个时间执行某个行为,比如德莱文丢斧子要在前摇后,怎么同步,以及解决攻速问题。我回答根据原始动画的时间和前摇时间定义时间差,然后根据攻速做一定的比例,增长或缩短时间,然后调整动画速度之类的。
渲染相关的内容,如怎么实现水流,怎么实现金属的外观。我回答水流可以使用模拟的方式,例如刚体模拟每个小球的位置,然后根据位置渲染效果,或者用简单的方式,在一个平面上,对每个点定义移动方式,按照三角函数波动,实现水流效果。金属外观答得漫反射+镜面反射,就是PBR那一套。
LOL内,小兵跟有碰撞的英雄相撞(卡兵线),要怎么解决,小兵怎么看到敌方英雄攻击。我回答在Unity内举例,小兵有碰撞器,跟英雄碰撞器相撞,小兵就想垂直方向移动一点距离,如果到某个距离,小兵再向前移动。小兵有很大的触发器可以在一定范围感受敌方英雄,如果感受到了,打一条射线看是否能碰到敌方,碰到就攻击,追着打。下来复盘时感觉没有说全,比如仇恨吸引之类的,应该在英雄上也有一个触发器,在有方被打了,在触发器范围通知小兵检测敌方,并转移目标打敌方英雄。
状态同步和帧同步相关,我自己在聊忘了什么问题提出的,然后还问了外挂之类的,面试官有指出我的这方面还需要学习,回答有问题。
网上查的:状态同步和帧同步的主要区别就是战斗的核心逻辑在哪处理。状态同步的战斗逻辑在服务端,也就是说每个客户端把玩家的操作发给服务端,服务端计算各个玩家的属性和状态返回给客户端,客户端只负责根据服务端返回的数据进行展示;帧同步的战斗逻辑在客户端,客户端把玩家的操作发给服务端后,服务端会把操作转发给其他相关的客户端,然后由客户端进行逻辑计算后展现出来。
LOL的同步方式。我之前看的一个帖子说是帧同步,也许是记错了,现在看起来不是。面试官说LOL是状态同步,LOLM是帧同步。
网上查的状态同步举例:一个英雄要释放一个非指向性技能(例如伊泽瑞尔的Q),具体的过程就是,客户端通知服务端“我要释放一个技能”-》服务端通知客户端“在某地以什么方向释放某技能”-》客户端根据这些信息创建一个特效放在某地,然后以某个方向飞行-》服务端根据碰撞检测逻辑判断到某个时刻,这个技能碰到了敌方英雄,通知客户端-》客户端根据服务端信息,删除特效,被打的英雄减血同时播放受击特效。
守望先锋的死亡回放功能怎么做。我回答像队列一样,控制死亡回放时间长度,然后每个英雄各自记录自己的数据,然后自己死亡后找服务器要这段数据在自己的屏幕播放。现在想想觉得不是很合理。
网上查的:
通常来说有三种方式,我们会逐一的展开来讲:
-
逐帧的录制游戏画面:就像现实中体育赛事用摄像机捕捉现场画面那样,我们可以游戏渲染的时候直接从底层抓取画面信息来持续的生成一个视频流文件,然后通过任意的一个视频播放器都进行解析和回放。
-
逐帧录制玩家的输入操作:其实游戏本身就是一个可视化的软件程序(或者说是一个渲染器),每一时刻的画面都是通过玩家的操作逻辑来驱动的。在考虑游戏内进行回放的情况下(比如死亡回放),我们完全没有必要去录制冗余的画面信息,只需要记录玩家的输入信息然后去驱动游戏逻辑改变画面就可以了。
-
定时录制玩家以及游戏场景对象的状态:所谓的状态信息就是某一时刻的对象身上附带的状态信息,比如玩家的生命值、移动位置等。如果我有了每一帧玩家的坐标信息,我就可以完美的处理播放、快进、跳跃等逻辑,但很明显这样要记录的数据要多很多。
其他
实习城市在成都愿意吗? 非常愿意,我爱成都(doge