IEG Intern Log & Talks

IEG游戏客户端暑期实习面经,记录得十分潦草,当然也有一些对未来的看法。

所谓人生不失意、焉能暴己知,也只是在向不知何来的安全感揶揄妥协。

有幸两面过关,现在回过神来也感觉不可思议,这是夹杂了多少缘分多少运道。

事前也是从一同学那里听见了他们大学的内推机会,甚是酸爽,便在纠结是否考研的同时投了一份临时起草的简历。

如往日在A岛乱逛时,收到从广东广州打来的电话,全身一阵激灵,语无伦次,把一面直接定在了三小时后的当日下午两点。这三小时真的是紧张,饭也不顾硬是看面经,学习速率可谓人生巅峰。


### 一面(技术面)

上来自我介绍,扯项目。

项目

(全程看你GitHub和website)

地形一般是怎么实现的?答材质转换为等高线。碰撞做了没?做了。什么做的?胶囊。lowpoly怎么做的?答c4d减面。水面会不会写?骨骼蒙皮怎么做的?怎么写一堆鱼群的移动?答贝塞尔曲线+噪波。不行,不生动,还有什么办法?答那只能AI了?

详细说说这个项目的post shading?算亮度,嵌套if选择材质pattern正片叠底(乘上去),uv用的屏幕空间。

C++

听到我说C++面试官楞了一下,你不是写u3d+C#的么?说最近项目在写,就只好问了。

const与static区别?瞎答,事后看了,是何时空间释放问题。

const引用与指针的关系?const int* const问题。

class与struct区别?分别默认private和public。

多态有哪几种类型??不知。事后查了查,静态(重载、模板)、动态(覆盖,虚函数)。

写个快排吧。行,写了几分钟发现太麻烦,我说可以换js么?行,就换了。写了个分治(10min)。

能不能不用额外空间?难顶(10min)

一定一定要管理好面试环境,我不幸,单手拿相机,单手写代码。面试官可能感觉我太辛苦,让我写完了叫他。

Unity

渲染和玩法编程更喜欢哪个?主渲染。

unity模块分为哪几个?我不懂,也不敢问?Editor和Mono,还是各种Components?

MonoBehavior生命周期?

给你10000个小球,怎么算碰撞?Compute Shader?不行,有没有算法上的实现?分块、视野割离?可以。

Rendering

从哪里学习新知识?答知乎大佬、公众号。

报几个名字上来?答???

体积光写过没?莫有写过。

看你写过OpenGL,shadermap有没有了解??莫有了解

Animation Instancing?莫有……

移动端TBDR优化?莫……

前向渲染和延迟渲染区别?终于有个会的了。

你有什么问题?

面对那些独立游戏工作室,大厂是如何对待他们的?比如技术共享与发行方式。

他也不知,相视一尬笑。然后我就“谢谢谢谢”end。


中场休息

一面问的十分的全面,主要考察简历的真实性和代码能力。若是对自己的项目能够如数家珍,想必没有什么难度。

时隔十日,我收到了复试邀请函,又是心力憔悴地复习了若干天,期间还穿插了字节跳动和完美世界的笔试,终于在15号下午接通了二面的会议邀请。


### 二面(总监面)

我是完全没想到是Milo Yip神仙来面我,吓出一身冷汗。从入学时就关注了这位巨佬,也是看他的文章渐入图形学大坑,如今隔了一道麦克风,有些晃神。

按照惯例自我介绍,谈一谈项目中自认为最有意思的点,谈的主要是自己实现的部分。

选一个熟悉的语言开始面试:C++。

Milo估计在搜索题库,过了一会念了一道题:new关键字的使用时机。可能是我答的方面不太对,纠正了我两三次。

第二题是STL中map和unordered_map之间的异同——经典问题。我从底层方面来答,他说有没有调用上的不同。

谈到map是由红黑树构成的,就问我key排序依据是什么。我想了半天说可能存在一个比较函数需要重写,他给出答案说是operator<,那么给定一个类float2{x,y},怎么处理operator<呢?我一开始谈到了求出length,他说不是很行。最后提示strcmp函数的实现,我这才发现只要分开比较就好了(眩晕)。

接着给出了一个用例:在一个RPG游戏中,每个装备有一个ID,狗策划把所有的装备信息放在了同一个xml文件中,这个xml经常被修改所以显得非常乱。你需要设计一个方法可以迅速在策划修改后(只读)的xml中迅速找到一个id匹配的,以在游戏中使用。我说可以在初始化时将它排序,再用二分。Milo问为什么不用map呢?红黑树查找也是O(logn)。我没有把握地说红黑树占用额外指针空间,使用二分可以省下这一部分空间。面试官没说话,我还是没get到这一问该怎么正确回答。

接着聊到了老生常谈的shader,讨论了很久PBR、BSDF的本质,如函数的构成、入射出射角关系等。这里我说的不是很明白,他给我很仔细地讲了一遍(大好人)。

那么来了个问题,shader中在何种条件下使用加和乘两个符号?加号用于光线的叠加,乘号用于材质对光线的吸收。(这里也亲切地把材质的本质给我科普了一下)

“来,做道数学题”:空间中有线段AB和点P,求P到AB的最短距离。我傻愣愣地用三角函数说了半天,最后经Milo提醒才想起来可以向量投影+Clamp。

接着就聊了聊过往的游戏制作史,谈为什么喜欢做游戏。

反问部分我又问了一面同样问的内容——独立游戏团队现状,这次的解答太丰富了,谈到国内外独立工作室产出、发行等等,谈了太吾绘卷和DOOM,提到了Next Idea,视野很开阔。

二面结束后,官网显示HR面。


扪心后我发现,自己可能并不适合如此高压的环境,也是后话了。生活在一个三线城市,难免会沉醉于这种*蓝调生活*,燃烧热情这种事对我来说可能显得有些过分奢侈。

创造游戏这件事对我来说似乎成为了挺抽象一人生目标。事实上,自己所追求的可能更接近于创作。单说画画这件事,也仅是喜欢上了画完的那一刻,导致的潦草收笔,更是没耐性重新补上缺失的细节。所谓画同人一时爽,看同人一直爽。所以在游戏和画画中找出共性,更多的是满足自己表达欲的同时,显得更加吸睛。

某种意义上,这些事情可以在工作之余作为副业,不过想要活命另说。

四月十七日晚上吃饭的时候,收到了hr的微信,一看状态“已完成”,算是告一段落,等待暑期的深圳旅行。

Share