为什么图形学人才这么少?
为什么图形学人才这么少? 图形程序员(或可包括物理和动画方面的程序员)比一般程序员的门槛稍为高一些,例如主要编程语言是 C++,需要较多数学的应用(线性代数、解析几何、微积分等),需要了解 GPU 架构(一般程序员可能只需了解 CPU 架构)。另外,较常见的图形学方面的功能,一般商业游戏引擎或是渲染器已提供,图形程序员主要是按项目需要做出一些修改,或是研发一些较专门的新功能。对比一般业务方面的工作,这些工作的难度相对较大,不是人力密集的工作。
图形学的研发不纯粹追求正确性,要追求「好看」,最好具备一些审美能力。
图形学一般对性能比较敏感,特别是实时应用(如游戏),每帧可能只有 16.6 毫秒的上限,对编程的要求较高。
图形学一般不是大学必修课,而本科的图形学课程内容一般太基础,与实际工业应用的距离很远。很多时候工业上的研发工作也需要阅读论文及实现当中的算法,研究生会较适合。以我所知,大部分图形程序员的专业知识都是纯粹自学的。
图形学的主要就业方向就是游戏和影视,还有少量图形硬件和图形相关软件,相对其他行业的人才需求少得多。如果投入大量精力去学习钻研这个学科,却找不到相关工作,图形学的知识比较难应用至其他计算机应用场合。
但,管他呢,喜欢就好。
记得我小四时才会用 Basic 画圆。儿子九岁时用 Scratch 画了下图,我没搞清楚是怎么画出来的。也许,搞图形学也需要一些直觉。
锻炼的机会越来越少了呗,以前是家游戏公司都要研发自己的图形引擎,没有标准化,也没有成熟的商用引擎,更没有完善的开源引擎。
那么你但凡一家公司要做产品,势必要有一批人研发自己的引擎,大公司有时间自己慢慢搞全新的,中小公司没资源从头做,至少也要会修改 irrlicht 和 ogre,改着改着也就成自己的东西了,不想改也没关系,挖个拿着上家公司祖传源码的 “牛人” ,过来魔改一堆接口名称,一个新的引擎就诞生了。
那么你一个才毕业的应届生,即便以前从没碰过这一块,只要灵光点,是有很多机会接触到相关工作的,引擎要不断的升级,不断的开发周边工具,经过一个个项目的实战,总能不断成长,哪天碰到公司内外的新项目机会或者上面的人离职了,就能够把各大引擎按照自己的想法再抄一遍,再一不小心给新项目挖几个坑,有幸填完的话,一个新的图形学人才就这么锻炼出来了。然后进可以到大公司从事更专业的工作,退可以到中小公司当个“大牛”。
大公司肯定需要这样的人,发财的中小公司愿意两倍薪水挖这样的人,没发财的中小公司会意识到自己没发财很大原因是没有牛人导致图形效果不好,卡顿和崩溃。
所以人才得以上下流动,对应届生也能一步步的阶梯化成长。而现在就完全反过来了。
除了大公司外,98%的中小公司老板不愿意投资引擎,风险高,见效慢。而且关键是但凡一家外包美术公司,如果你用标准引擎,他们都能给你按标准格式输出各种素材,都能熟练使用标准引擎的各种上下游编辑器。游戏公司自己即便作出个引擎来。周边工具的缺失和非标准化所带来的成本是无可估量的。
作为游戏项目的技术团队,如果同时有公司内闭源引擎和 u3d,除非公司强制,或者前者特定领域下能秒杀后者,否则大部分时候都会选用u3d,因为于公而言,内部引擎文档匮乏,找人困难,培训时间长,找个有经验的人进来也要熟悉一半天。于私而言,自己花几年把经验积累到公司内部引擎上,换家公司,这些经验就白费了,人家需要的东西自己还很不熟,何必呢?
所以当有成熟引擎可用时,不论老板还是员工,因公还是因私,利益最大化的选择都是用现成的而非自研。
你可以说用同样引擎的游戏画面千篇一律,u3d做出来都像乐高玩具,ue34做出来画面看起来都很脏,cry做出来太刺眼,3A大作都有自己的引擎,所以画面才有自己的特点。
这说的没错,但是还有一个边际效应问题,现在不像过去做端游,手游夜游生命周期平均也就几个月,你能指望公司养你半年做引擎?而一款成熟的自研引擎无疑都是要成年计算的迭代时间和无数个项目的试错才可能成熟。游戏生命比过去缩短了三倍,然而引擎的研发周期和复杂度却增长了三倍,人员工资也上涨了三倍,相应整体投资风险也比过去也就高了二十七倍了。
所以除不差钱的大公司外,上到老板,下到项目组和上下游企业,都更愿意选择标准化的外部引擎而不是自研的话,原有的引擎团队的重要性就会降级,就会被打散或者重组,或者没有高薪资自然被分流。
那么一个毕业生,就再也难以有机会从事到相关工作中去了,没有真刀真枪的项目锤炼,没有百万用户终端上填过各种坑的技术,是很难有突破性成长的。
就算你有幸进入到了还有引擎团队的公司里去,你也会因为担心离开这里不好找对口的工作,而不得不考虑转方向的后路。
和以前任何一个图形程序员离职一堆公司疯抢的情况已经完全不同了,需求直接砍去了一大半。
当然,你特别牛的话就可以照样跳出三界外不在五行中,我讨论的大量普通水平的从业人员。而今天的牛人也是从过去普通水平的人里进化出来的。
而现在需求断了,导致人才流动的路径变窄,最终锻炼机会没了,三角循环,自然人才就少了。 作为非图形学相关的工作者,我想分享下我工作中遇到的事情,应该能从另一个角度看待这个问题。
我本职是3d服装设计师,工作内容是用CLO(Marvelous Designer的姐妹软件,更面向服装行业)设计3d服装。去年我被调到了针织组,又多了份做设计花形,制作贴图的工作。
这是我们平时所做的花型和成衣效果图,大概一天能出两件,一群读裁缝专业出来的设计师做3d,效果也自然一般,只能用于给客户展示大致成衣效果。
工作久了,设计师出身的3d主管见我们积累了如此多的素材,便考虑向香奈儿等品牌的3d部门i一样,进军广告展示。所以,必须把我们做的效果图更加精细,还要能动起来走秀。
这工作就落在了我头上。(明明我也读的是裁缝专业……)
于是,我先是花了两个星期自学c4d,做了个走秀的视频(很烂很粗糙,不好意思放)给主管看,告诉她我们得再做绑定的,做3d动画的才能让人动起来走秀。
然后,我再自学了点substance designer,照着教程做了wool knit的材质,告诉主管,我们得再招会做材质的,才能让效果图更加精细,更加立体。
https://www.artstation.com/artwork/wVBQZ
最后,我还找到了毛衣仿真技术的论文,《Anisotropic Elastoplasticity for Cloth, Knit and Hair Frictional Contact》,对概论稍微做了下翻译,介绍给了主管,推荐她招些图形学程序员,一劳永逸地解决所有问题。
我真的一个字一个字地这篇和相关的几篇读了一遍
然后,我这很传统fashion designer的主管,在我这大当量的信息轰炸下决定不做了。
这看起来像是个传统行业不自量力地向科技行业进军的故事,但实际上,我在的部门,在澳洲,伦敦,印度等多个同样的工作室,公司所属的集团,在全球有着上万名员工,是全球最大的服装供应链公司,并且在两年前,就决定向数字化转型。我们主管,也是能向集团上层领导直接汇报。
钱只是小事,问题就在于他们不懂,出身传统行业的整个公司就没多少人懂这个,不懂就不敢做。
所以说国内,又有哪家非影视游戏行业的公司能够认识图形学,并利用图形学来增强自身竞争力呢?真的很少很少。 注:下方XX可以联想成国内任何一个主流游戏大厂。
听人家背地里谈论,XX原来也做过高端游戏,但终于没有做成,又不会培养人才;于是愈过愈穷,弄到将要靠垃圾手游坑钱了。幸而运营质量还行,便靠着社交渠道,养养用户。可惜他又有一样坏脾气,便是游戏质量奇差。坐不到几天,一个游戏没怎么认真做,就先砍掉了。如是几次,认真做游戏的制作人也没有了。XX没有法,便免不了偶然做些垃圾的游戏。但他在我们行业里,效率却比别人都高,就是更新特别快;虽然间或没有版本,暂时放个预告,但不出一月,定然更新,从预告上拭去版本名字。
XX一到店,所有开发游戏的人便都看着他笑,有的叫道,“XX,你新项目又开始吹画面了?”他不回答,对柜里说,“我要招人,985211硕士,图形学方面的。”便排出50K月薪。他们又故意的高声嚷道,“你一定又要招人做垃圾手游了!”XX睁大眼睛说,“你怎么这样凭空污人清白……”“什么清白?我前天亲眼见你写实游戏里各种手绘Unlit材质,被骂成狗。”XX便涨红了脸,额上的青筋条条绽出,争辩道,“技术要为业务服务……业务!……大厂的开发,能一样么?”接连便是难懂的话,什么“敏捷开发”,什么“多人协作”之类,引得众人都哄笑起来:店内外充满了快活的空气。
在这些时候,我可以附和着笑,大佬是决不责备的。而且大佬见了XX,也每每这样问他,引人发笑。XX自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你学过渲染么?”我略略点一点头。他说,“学过渲染,……我便考你一考。BRDF高光怎么计算?”我想,只会Unlit的公司,也配考我么?便回过脸去,不再理会。XX等了许久,很恳切的说道,“不知道罢?……我教给你,记着!这些算法应该记着。将来做TA的时候,写算法要用。”我暗想我和TA的等级还很远呢,而且我们TA也从不自己撸光照算法;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是GGX么?”XX显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……常用的高光算法有四种,你知道么?”我愈不耐烦了,努着嘴走远。XX刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。
……
……
有一天,大约是中秋前的两三天,大佬正在慢慢的写代码,打开知乎,忽然说,“XX已经很久没发新游戏了。还跳票了呢!”我才也觉得他的确长久没有动态了。一个喝酒的人说道,“他怎么会发?……他们工作室砍人了。”大佬说,“哦!”“他总仍旧是抄和凑活。这一回,是自己发昏,竟直接开始给用户喂屎玩情怀了。情怀的东西,能随便玩的么?”“后来怎么样?”“怎么样?先被骂成狗,后来是凉了,玩家人数走一半,人数越来越少。”“后来呢?”“后来彻底凉透了。”“凉透了怎样呢?”“怎样?……谁晓得?许是死了。”大佬也不再问,仍然慢慢的写他的代码。
中秋之后,秋风是一天凉比一天,看看将近初冬;我整天的靠着火,也须穿上棉袄了。一天的下半天,没有一个新游戏,我正合了眼坐着。忽然间听得一个声音,“再招两个图形开发。”这声音虽然极低,却很耳熟。看时又全没有人。站起来向外一望,那XX便在柜台下对了门槛坐着。他脸上黑而且瘦,已经不成样子;穿一件破夹袄,盘着两腿,下面垫一个蒲包,用草绳在肩上挂住;见了我,又说道,“要985211的。”大佬也伸出头去,一面说,“XX么?你还没发新游戏呢!”XX很颓唐的仰面答道,“这……下回再说罢。这一回是新项目,IP要好。”大佬仍然同平常一样,笑着对他说,“XX,你又开垃圾项目了!”但他这回却不十分分辩,单说了一句“不要取笑!”“取笑?要是不做垃圾,怎么会凉透?”XX低声说道,“资金,资,资……”他的眼色,很像恳求大佬,不要再提。此时已经聚集了几个人,便和大佬都笑了。我摸出简历,端出去,放在前台上。他从破衣袋里摸出5K工资,放在我手里,见他满手是泥,原来他便用这手走来的。不一会,他看完简历,便又在旁人的说笑声中,坐着用这手慢慢走去了。
自此以后,又长久没有看见XX。到了年关,大佬取下代码说,“XX还欠个新版本呢!”到第二年的端午,又说“XX还欠个新版本呢!”到中秋可是没有说,再到年关也没有看见他。
我到现在终于没有见——大约XX的确凉透了。 坐标:末流985 凤尾双一流 三维建模与渲染实验室
隔壁人工智能实验室or大数据实验室都爆满,今年招到近10个研究生了,我们实验室还不见来新人。
看大家讨论的那么激烈,再多说一点吧:
科研热度。如一开始我所描述,真的很低,鄙实验室坐拥多块RTX煤气灶也没人来,浙大的图形学实验室那种热度是宝藏了。本科教育。如本答案下另一位答主所说,图形学相关的本科教育有缺失。拿鄙校举个例子,鄙校本科安排有「交互式计算机图图形学」一课,也仅仅是大体上通了一遍图形学相关的知识和方向,没有其他更加深入的课程(如南加大开设的「Real-Time High Quality Rendering」等课程)。想要更深入,全靠自学。然鹅又缺少科普与引导,我接触的很多本科生完全不知道图形学中有「渲染」「仿真」「建模」等这么有趣的方向。市场需求。简单点说,国内对「自研引擎」「自研计算机动画&建模软件」「自研渲染器」需求目前还是非常小。难。看看三块砖的厚度,再看看这组图:
研究生时期主要科目就是图形学,老师发作业全是写shader,全各种数学,每种效果还经历了好几种优化,语言cpp,不光写pc的,还要写ps2和psp的。这个方向基本很偏计算机低层了,一直走下去就是科研,游戏,转行到以gpu优化为主的行业,那个时候cuda才2.0。后来我们班十个人,就两个去搞游戏了,其他都去搞其他的了。国内走的都是应用路线,能出活就行,轮子越来越多,真正在头部搞显示算法优化的就那么几个位置,除非出现革命性的硬件提升。用的时候翻翻手册就好了,深入研究到opengl内部怎么实现的,再优化,少少少,领导不会给你时间的。终究还是市场需求决定了,vodoo死了,s3死了,matrix死了,via的破卡也死了,现在就只有n,a,i三家了,还研究个 猫,图形感觉就像现世界的物理学,在固定的设备下,他就这么发射三原光,叫显示计算学还差不多 因为图形学并不是刚性需求啊!
经济基础决定上层建筑,我国的经济基础,或者说世界上除了美国之外的国家的经济基础还没到对图形学的基础研究有足够投入的地步。
没有好的渲染技术动画只是丑或者假,但是靠好剧本还是能看的
没有好的渲染性能,电脑界面大不了用命令行
红白机图形性能差,也不妨碍超级玛丽魂斗罗统治世界
没有足够的需求,自然没有自下而上的研发体系,那这些操作系统,影视,等等行业末端的点睛之笔自然是需要大量 富余的 追求 去完成的
而美国到底富余到什么地步?
我的leader在NASA呆了八年,一次他讲到他的经历。同一个项目,如果农业部申请,经费只有几百万美元,NASA申请就是几千万美元。
外部冷战,内部经济腾飞的大环境下,NASA代表的一众硅谷企业和研究机构,比如施乐,在那个年代做的很多事情不是因为它有什么商业价值。只是因为觉得有意义,觉得难
登月计划带来美国民族自信爆棚,以及很多先进技术军转民用的阶段。
集合了全世界的聪明人,也做出了领先全世界的科技
那个时代他们认为,美国人就是牛逼,所以越难的事情,越有意义,美国人就应该做这些事。 做人类文明的灯塔(名不虚传)
借流浪地球的概念,应该就是高品质的饱和式研发
那个时代的美国精神,确实如同肯尼迪的登月演说一般,令人钦佩
科技相关的工作者也都能从自己的相关经历中感受到二十世纪60年代到90年代,美国的科研几乎相当于世界的科研。
回到图形学而言,无论是渲染的基础理论,第一台图形界面的pc,离线渲染技术,cg影视特效,等等现代图形学的原型无一不诞生在那个时代的美国。
中国如果现在把研发强度提升到韩国,以色列的水准,相信我们的图形学会迎来一个很大的发展,到时候图形学作为一门门槛较高的专业,肯定会被本科研究生教育再度重视的。就业,也就更不成问题了。
但是现在,不行。
调调open GL,改改shader,调调参数,用最基础的积分器跑个图,这离真正的图形学还差得远啊! 网上一堆深度学习的框架、教程、代码,鲜见简明扼要的图形学“入门”教材…
我就是业余想手撸一个超级简单的软件渲染程序,也是在翻看了scratchpixel等一票英语资源之后,才稍微搞懂了点投影、裁剪、光栅化、着色之类的大概。
更不要提手撸的时候……用的还是各位都不愿意在入门的时候学习的c语言………
然后写完了只是一个固定管线的,只支持一个光源和Blinn-Phong的平面…跟隔壁卷积神经网络比起来,这个入门需要更强劲的学习动机吧…
而我已经没有动力再做下去了……
这个真的是Blinn-Phong。。之前我把shininess调太低了……
代码在 https://github.com/njzwj/vec2pix 欢迎讨论(ω) 因为难,而且不热门,教程少。
难是不仅对数学有一定要求(但没有人工智能高),而且特别的复杂,API特别的多。举个例子:用DirectX12在屏幕上绘制一个简单的立方体至少需要1000行代码,用到数十个API。
网上一大堆人工智能的算法的详解,包括最新的模型的详细介绍,很容易搜索到。可是图形学除了PBR,光照阴影,SSAO之类的算法(在Learn OpenGL里都有),更高级的渲染方法根本旧没有教程,只能自己去找代码,尝试去理解。
搞图形学的不是“调包侠”,图形学没有什么通用的框架,各种效果基本上都需要手工实现。想100行写一个简单的效果是不可能的。
我最近遇到一个情况:要实现一个光线追踪。
DirectX12 Raytracing Fallback Layer是一个完整的用GPU进行光线追踪的库。
在GPU上用 Morton Code建造 BVH 的方法,这个本人可以看懂,分为以下步骤:
求出场景AABB盒的最大值最小值。根据最大值最小值计算AABB盒的Morton Code对Morton Code排序对Morton Code寻找分割点,建造二叉树根据建造完的二叉树,设定中间节点AABB
具体算法可以看:
Thinking Parallel, Part III: Tree Construction on the GPU | NVIDIA Developer Blog用Morton Code建造 BVH的速度很快,但是质量不太好,所以就要对BVH进行优化。DirectX12 Raytracing Fallback Layer有一个文件叫,TreeletReorder 方法。一种对BVH进行SAH优化的方法。像了解可以看这里:
http://research.nvidia.com/sites/default/files/pubs/2013-07_Fast-Parallel-Construction/karras2013hpg_paper.pdf这个TreeletReorder本人还无法彻底理解。
这还是2013年的论文,可是除了上述论文和DirectX12 Raytracing Fallback Layer外,我找不到任何的可供参考的文章。
Shader调试也难。DirectX还好,有Visual Studio自带的图形调试器,可以对Shader下断点调试。但是它经常出问题,特别是Compute Shader时,经常的在调试器中显示的buffer和我 从host端读取的不一样。有时候某些变量被编译器优化掉了,无法查看。
图形API很底层。最新的图形API如DirectX12,Vulkan 把原本驱动完成的交给了程序员。包括状态转换,使用时每一次都要手动转换状态。还有什么Descriptor Heap,Root Signature之类的,都要手动管理。
我们搞游戏引擎的基本上就是抄代码,前提是能看懂并理解。如果能抄了一个非常好的效果的代码(比如Nvidia的Island11,下图)并整合进自己的渲染管线里,我认为能力已经很不错了。图形学的代码为了执行效率,耦合性一般很高,经常的牵一发动全身。
Nvidia Island11 Demo
还有物理引擎,本人看过Bullet物理引擎的代码。求解约束的部分就是求解雅可比矩阵, 一直看不懂。没有任何教材帮助理解。
图形API和图形硬件的工作细节很少是公开的。比如DirectX Compute Shader 中,groupshared int 连续访问不会有 Bank Conflict ,但是int2类型我就不知道了,我认为编译器会对groupshared内存布局进行优化,避免 Bank Conflict,但如果int2的内存布局是连续的数组,就会出现Bank Conflict ,导致性能下降。
StructuredBuffer 内存访问会不会合并(Coalesced ),int int2 int4类型肯定会被合并,我测过。但int3类型呢?如果内存布局是连续的数组,性能就会下降。我认为编译器肯定会优化int3类型的内存布局。
不过图形学也有好的一面,图形学找工作(游戏引擎)一般本科学历就可以胜任了,竞争不激烈。像我这样的破烂学历就可以找到游戏开发的岗位,还是零工作经验进去的(走的是社招,第一份工作),面试就面了30分钟就过了。而人工智能都需要研究生学历,而且竞争特别激烈。
图形学不仅仅可以用于游戏,还有其他的用途。比如:自动驾驶模拟器。我没做过自动驾驶模拟器,但我认为它的复杂度比一般的游戏如GTA5复杂多了。不仅要模拟道路,景物,车辆,行人等游戏都有的,还要模拟信号灯,标志牌,甚至路障。模拟器渲染出的图像直接作为汽车的传感器的输入数据,汽车就会认为在真实的路上。模拟器测试已经成为了自动驾驶必不可少的一部分。