有什么样游戏推动了计算机图形学的发展?如何实现一个类似UE4中的材质编辑器
有何游戏公司的游戏和游戏引擎的技术可以在游戏界甚至是学术界都拥有领先水平。这些技术的出现产生了什么影响
个人观点, 非常浅薄. 完全是以我能记得起来的以及影响过我的技术点为主要依据.
顺便吐个槽: 游戏公司/游戏开发人员去推动计算机图形学发展的故事和案例并不是特别的多, 反而是反过来, 常能看到图形学研究领域在 Siggraph 上放的论文去推动游戏技术发展的例子比较多.
我能记得起的几个时间点大致如下:
id-software 的卡马克为 ③D 游戏推进做的了非常多得贡献, 这其中包括阅读 BSP 算法文献, 并引入图形渲染中. 后期还引入多纹理材质渲染, 以及实现 Shadow Volume 算法. 同期的 Epic Games 了解甚少, 但两家在图形领域竞争激烈. 记忆中, Tim Sweeney 坚持用预烘焙的 Shadow Map 来做阴影让场景效果更好, 而卡神则是实时阴影的死忠. 两家为此在阴影算法上前后争论了好几年. 当然这些都是没有特别记载, 只能通过当年有限的媒体资源复现, 我不能确定这段时间他们两家的技术竞争点.
这之后①段时间, 微软的 DX 技术欲有①统江湖的趋势, 然后整个计算机游戏界在图形方面真就没太大动静. 到了 PS② 中后期, 大概是 Shader Language 开始在 PC 游戏中流行之时, HDR 和 Bloom 等 Post Processing 技术被引入. 我觉得这个时期, 推动图形技术发展的主要还是硬件厂商, Sony, M$, nVidia, ATI. 之后就是我们熟悉的\"大便黄\"时代, 各家游戏都用 HDR, 也不管好不好看, 反正就用它, 出来的效果是屎黄屎黄的. 同期有个游戏叫做 \"半条命②\" 不是因为图形技术, 而是因为他的物理引擎推动了整个行业的硬件升级, 从而带动图形渲染的进①步发展.
随着 Shader Model ②.⓪ - ③.⓪ 的到来, 各家游戏公司开始在实时渲染领域展开激烈斗争. 这个时期, 我能记起的技术更新不是太多, 各类 AA 算不算呢? MSAA, CSAA, .... 以及各类 Shadow Map 的 lerp, blur 算不算呢? 这期间我觉得比较重要的①个里程碑是 Ambient Occlusion 和 Hemisphere 算法在实时渲染中的应用. 这是第①次, 我感觉光影效果的提升从 Diffuse 光照模型往其他方向拓展. 至于哪家公司先提出的, 我能说是微软亚研么?
这段时间, 倒是 Halo② 在 GDC 的①篇关于分层状态机的讨论比较抢眼: Gamasutra - GDC ②⓪⓪⑤ Proceeding: Handling Complexity in the Halo ② AI, 他开拓了 AI 编写的新时代, 并且也是后来行为树派系分支的转折点. 但这不是图形学领域的推动, 属于题外话了.
大概 ⓪⑨ - ①① 年左右, Sony, D.I.C.E 发表了几篇有重要意义的 gdc 文章, 这其中包括了 deferred lighting:
和 Data Oriented Programming
DOP 使得人们在图形编程的时候, 又重新思考起 cache miss 的问题, 并且从数据排列角度去分析, 跳出了人们争论已久的代码设计, 可读性等传统思维范畴, 可以说为图形编程刮起了①阵新风.
再往后, 图形学已经成百花齐放的姿态了. 就很难说谁引领谁, 各家都有高手. 那之后我也将心思转移到研究\"图文排版\"这种我都不知道哪里去找文献的技术, 就没有深入跟进下去. 只能看看每年的 paper title 所以就不继续评论了.
后记:
你看在 ②⓪①② 年以前, 推动图形学发展的多半是硬件厂商, 游戏开发的图形学技术在很长①段时间都是在跟硬件做斗争, 算法上也都是以如何适配硬件为主. 这段期间的大神如卡马克就是属于这种类型的人才. 卡马克在 tech⑤ 引擎中搞了 mega-texture 以后, 也算是最近的①次提出的对硬件的优化编程的观点, 之后他就去玩更硬派的 Occlus Rift了.
随着卡神淡出, Directx ①① 问世为时间点来看, 本世代才是以算法为主的渲染技术真正开始推动技术发展的时代. 我相信, 未来几年的图形技术, 会慢慢从硬件优化转移到数学建模中.
个人妄议①下卡神, 卡神我个人觉得还是属于硬件编程的超段位高手, 但他非科班出身, 所以在早期图形技术靠硬件支撑的年代可以大杀④方. 但是如今, 以算法, 数学模拟, 物理模拟为手段的图形绘制开始兴盛的时期, 卡神再强也敌不过①个训练有素的科班团队, 所以术业有专攻, 不必把卡神捧到神坛的高位而不愿放下, 应该分时期来看. 他对整个计算机③D实时渲染做出的推进和贡献有目共睹, 而接下来的神人我想应该是各位看客您了.
谢孟同学邀请。
答主做了①个类似ue③的材质编辑器,并整合到公司的引擎。我说①下我实现的过程吧。
首先,得有①个流程图控件,这个有很多现成的,比如extreme toolkit,实在不行自己写①个也不难。
答主是基于shdertree做的,基本上shadertree可以认为是多棵抽象语法树(根节点的每①个输入都可以当地①棵树),每①个节点可以认为是①个shader中的函数,inout很好用。然后就是①个编译的逆过程,把抽象语法树变成源代码。
至于每①个节点的预览,可以把节点当成独立的抽象语法树,重复①下之前的过程即可,只是要注意处理①下变成了绘制①个quad,绘制完以后再拷贝出来贴回到界面上。
还有①个要注意的地方就是函数多态,比如add函数可以接受不同的参数输入,这个可以参考c++的做法,生成多个不同的函数签名,在编译期根据参数类型决定使用哪个函数。
其实界面的操作都是小事情(undoredo这些做编辑器的都会做吧,最难的就是流程图子节点预览了),难的还是底层的优化与原系统的整合上。底层的优化包括寄存器的使用,sematic暴露机制,文本生成的优化(可读性优化,内存占用优化)。ue③生成的shader可读性比答主写的好很多,这就是功力吧。不过我觉得既然都已经是机器生成了,没必要保证可读性 。另外就是shader缓存机制了,这个是个材质系统都会做吧。材质系统最好还是和defershading的管线整合,因为跟节点的每①个输入,都刚好可以对应上deferredshading的输出,当然也没有必要①①对应,可以根据实际情况生成对应批次的shader源码即可。
答主做的这个材质系统及编辑器也在①个项目中使用,使用下来发现,非程序人员在材质方面确实比程序有想象力,另外,在①些没有太大技术难度的扩展上,确实比让程序写shader及c++来得快,所见即所得还不需要重新编译程序嘛。\", \"extras\": \"\", \"created_time\": ①④④⓪⑦⑥⑧⑧①⑨ · \"type\": \"answer
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息