如何评价UE4全部内置的shader系统和Unity尽可能外露的shader编写系统的区别?
如何评价UE4全部内置的shader系统和Unity尽可能外露的shader编写系统的区别? UE4并非全部内置,如果希望自己写乃至自定义管线都是可以的,从商业级产品角度必须实话实话虚幻比unity更专业. UE4的材质系统其实跟3dsMax的材质系统类似,更抽象一点地说,跟很多美术工具的材质编辑类似,所以对美术工具有经验的的人更友好一些,(max,sb这些游戏常用制作工具都是类似的材质编辑概念和界面)unity之前只做了后端,可以说没前端,所以只能把材质编辑让你直接写shader,不过目前unity已经在赶了.(前有shader forge,后有2018新材质编辑系统。)另外说下两个引擎的设计思路:
UE作为老牌商业引擎,一开始就追求的是尽量成熟的产品功能.什么叫成熟?就是功能尽量该有的全做好,不需要使用者去自己再二次开发。由于UE在这方面不仅技术领先,而且时间也够早,经验也丰富。所以unity跟ue正面刚显然不明智,所以unity发力移动端的同时,设计思路是给框架,使用者自己写大量自己需要的功能。这种方式虽然可以让使用者标榜自己技术水平,但是从引擎商业角度而言,不能更好服务技术能力不强的团队。(从使用者角度:必然希望是别人用这个引擎达到的效果自己也可以较为容易的达到,不然干嘛选同样引擎?).
进一步说,UE做的是让使用者把它当工具,拿来用,不需要做游戏逻辑之外的诸如引擎本身特性和工具开发;而unity其实是偏程序思维:拿来个框架,需要什么自己再做二次开发。
但是由于游戏设计本身的特性,总有需求需要去改引擎,所以UE和unity都给了用户去做某些定制化功能的途径:UE是完全的源码+入门曲线相对陡的学习。unity则是固定的框架+入门相对简单的学习曲线。
这里讨论哪种方式好显然实际意义不大,因为两种方式都有偏好的使用者,就好像有人吃饭就喜欢先吃自己喜欢,而有人就是喜欢最后再吃自己喜欢的. 偶尔看到这个问题引起了我比较大的兴趣,根据个人的从业经验来看,首先unreal4和unity的shader代码都是开源的,并且在应用层面都做了高度的封装,如果你对编写shader有了解你应该会有感触,其实当前版本两个引擎的材质系统表面来看最大不同在于对于美术来说是否友好,很多材质效果是服务于美术表现为主的,所以一个对美术友好的材质系统很重要,所以unreal为美术提供了图形界面的材质编辑系统,而unity也慢慢认识到了这一点,它也有几款图形材质编辑插件共美术使用,据说今年也会原生支持一套这样的材质编辑系统。但是做成图形编辑界面有利也有弊,高度的封装在美术不了解底层的情况下滥用功能会引起图形绘制指令的急剧增长影响性能,因此即便使用图形界面方便了美术其实后续也是需要从代码层面做深度优化的,而游戏开发的重中之重就是在效果和效率之间拿捏好平衡才是良策。 区别你自己不是都已经说了吗。一个是内置的一个是暴露在外的。
如果你想问哪个好哪个不好。很容易变成引战贴。做个不恰当的比喻,你是喜欢自己DIY自己的电脑呢,还是喜欢直接买个整机呢。我想不同的的人有不同的答案。 Unity 的 shader 系统是比较值得称道的。外露大概就是模块独立而且对外提供方便接口吧。如果不定义 shading model,那么 surface shader 就像代码版的 UE 材质图,想定义 shading model 时又是那么方便。惟一感到不方便的地方是 surface shader 比较死板,vertex 函数里算个 clip 空间位置自己用,等于多算一次,又拿不到他帮你生成的 clip 空间位置。2018 的 Scriptable Render Pipeline 是一个类似 Frostbite 的 Fragment Graph 的东西,也是很先进的,而且比之 Frostbite Fragment Graph,Unity 这个又是程序员友好的代码形式。
很重要的一点,UE4 是区别写材质和写 shading model 的,并不能很方便地定义 shading model,需要改源代码。材质系统有很多 UE3 的历史遗留设计。还有通过写 C++ 插件来加代码 shader,这个设计也是过于繁琐了。 正好最近在给自己的一个metal引擎写shader优化模块,也开始了解shader编写系统的工作,我的感觉是在工程可控的条件下,对应于二次开发人员,应该开放shader编写,引擎关注的核心是如何高效完美的呈现shader的内容,以及如何加速shader。
我能理解UE和U3d的用意,特别是Unity他的资源和生态以及非常丰富,而把shader编写外露一个目标无疑是更近一步的向美术和二次开发开放。这是生态强者强盛的关键,框架并不完美,好在给你留了锤子,砍刀,实在不行自己开干呗,反正能有地方用。 全部内置?不是可以写插件么?那些usf 文件。
页:
[1]