【综述】渲染龙时代的来临,究竟是黎明还是永夜?
一、前言
自渲染龙实装以来,批判渲染龙已然成为了国内社区的主流风气,前两天官方人员在国外社区就这方面的一些内容和国外社区成员进行了讨论,我写这篇文章的目的,一方面是想把官方的一些回应呈现在大家面前,另外一方面,也是希望能给各位提供另外一个看待问题的角度。当然如果您觉得我在文章里阐述的内容与您的认知不符,您也可以选择忽视这些,这是您的权利。但相信我,无论您对此抱有什么看法,渲染龙的更新对社区的影响是不会停止的,恰恰相反的是,这才只是个开始而已,至于这个所谓的“影响”是好是坏,我个人认为,现在就给它下定论或许还有些为时尚早了。
二、“419事变”

4月19日,官方发布了基岩版1.18.30正式版,在该版本中,官方正式将渲染龙实装到了包括安卓、IOS、UWP x86架构的更多平台上(史称“419事变”(x)),于此同时,社区第三方光影在这些平台上全部失效,其中不乏大部分基岩版玩家们所使用的几个主流平台,说是现有基岩版光影圈的至暗时刻都不为过。

同时在更新日志中,官方提到:“我们知道社区已经找到了在HAL(社区之前一直在使用的光影接口所依赖的渲染引擎)上构建着色器的方法,随着渲染龙的更新,这些着色器将失去效用。我们理解这(HAL接口)对玩家和创作者社区来说是一个有价值的功能,我们正在研究如何以官方支持的方式向玩家和创作者提供这种创造能力。虽然我们现在没有什么可分享的,但请留意未来的更多细节”。这是官方的态度,翻译一下就是:“我们知道社区需要着色器接口,但没办法,渲染龙更新了HAL接口就没法用了,不过放心,我们将来会提供相关的接口给各位使用的”。

看到这里,有人可能会说,就这?当然不是,就在当天,官方的工作人员在discord频道上与社区开发者们就着色器相关内容进行了深入的讨论(高强度对线(x))。通过这些讨论内容,我们或许可以从中看出一些端倪。
三、“不存在”的着色器
关于着色器,官方人员的说法是:“着色器从来都不是一个受支持的特性”,换言之,目前为止,官方从来没有正式支持过着色器这一特性。

而对于社区开发者们来说,HAL渲染引擎所提供的接口一直都是基岩版光影开发者们所依赖的特性,开发者们耗费了大量精力去研究、探索相关接口的使用方式以及相关特性,但即便如此,非常遗憾的是,HAL着色器接口本质上更倾向于一个“意外产物”,您也可以理解为是官方的某个烂尾工程的遗留产物。

所以到这里我们不难看出,对于官方与社区开发者来说,其实二者的立场是不同的,在社区开发者们的眼里,HAL着色器接口的使用方式是他们费尽心思所探索研究出来的,同时他们也期望官方在某天能够开放更多着色器接口,让他们能创作出更多更优质的作品;而在官方的眼里,至少目前为止,他们从未支持或者说是维护过着色器的接口,换言之,他们从未公开正式对基岩版着色器相关接口及内容进行宣发与支持过。立场的不同让双方思考问题的角度也变得不同。社区开发者们迫切需求的是更多更完善的接口,而对于官方来说,从之后的一些对话中我们不难看出,他们所优先考虑的,其实更多的是全平台特性的统一性,以及项目维护的便捷性。这些方面的因素,都直接导致了在着色器接口方面社区成员与官方之间的矛盾,即社区成员对完善接口的迫切需求与官方迟迟无法实现对着色器接口支持的矛盾。
而渲染龙的逐步实装,则进一步激化了这个矛盾。
四、呼啸而来的“恶龙”
渲染龙(Render Dragon)自官方开始实装起,一直以来都是社区所诟病的事物,关于渲染龙,官方人员的说法是这样的:“渲染龙是一个在基岩版上用以实现新的特性和功能的现代化渲染堆栈。RTX是渲染龙最早启用的功能之一。现在渲染龙已经实装到了更多的平台上,我们可以把注意力集中到接下来的一些事情上去了”。

根据这些回应我们不难看出,渲染龙存在的意义,就是统一渲染引擎,减少各个平台之间在渲染方面的特性差距。我们知道,在渲染龙实装之前,基岩版各个平台使用的渲染引擎并不是完全相同的,这也就造成了不同平台之间的渲染以及引擎实现存在着一些差异,而渲染龙的出现,则可以抹平这些差异,统一引擎后,官方后续的一些工作(比方说开放接口)也能够更便捷的开展。
但本质上真正让社区诟病的,并非渲染龙的实装本身,而是渲染龙目前拥有的数量众多的Bug以及其实装后所引发的HAL着色器接口的失效。
首先是关于渲染龙的Bug,官方人员的回应如下:
“我们正在积极修复渲染龙的Bug。(译者注:渲染龙实装的)平台越多,(译者注:修Bug)就越容易。”

“任何渲染堆栈提升和转移都非常复杂,不会给开发者带来短期利益。但它确实为我们提供了长期投资,社区将从中受益匪浅(就我的观点来看)。”

(关于放弃HAL转而使用渲染龙的目的)“新的技术伴随着新的Bug。我们实现这次渲染引擎转移过程中的目标是让大多数开发者都注意不到(编者按:你们失败辣 [裂开])。对于大多数玩家来说,性能和功能的集合应该要几乎相同。但肯定会有新的Bug出现”

“OK.. 你们想要一些有形的东西么?关于滞后问题 - 随着渲染龙在大多数平台上的实装,我们可以开始考虑性能问题,因此这一点的优先级会增加。”

从上述发言中我们可以看出,官方明白渲染龙的实装短期内将对社区造成一定冲击,但他们更在意的其实是渲染龙未来能做的事情。而就官方的说法,在Bug如此之多的情况下逐步实装也是为了更好的修复Bug与优化引擎,关于渲染龙的这一点,社区成员Lich的看法如下:
“我不确定您对公司的工作流程有多熟悉,但这(编者注:渲染龙的实装)基本上是一个分层部署的教科书级别案例。他们创建了一个新功能,将其推广到特定平台,现在正在进一步推广。永远不会有100%无Bug的研发。等待着某人的是第22条规定(编者按:“Waiting for one is a catch-22.”这句话的翻译可能不太准确,有了解的大佬欢迎在评论区斧正)。 我的意思是,如果你真的担心渲染龙在你的设备上无法运行(编者按:这是之前有个社区成员一直在提渲染龙的Bug),这是可以理解的,但我对此持高度怀疑态度。不管怎么说,强迫每个人加入渲染龙几乎将保证相关的bug得到更快的修复,因为开发焦点会更加集中,理论上也会有更多的bug报告(尽管我也注意到你在这个问题上有深刻的体会,但你并没有为相关bug投票)。”

而关于渲染龙实装后HAL着色器接口的失效这一问题,渲染龙本质上就是个渲染引擎,而HAL也是个渲染引擎,“一山不容二虎”,渲染龙的上位也就意味着HAL的停用,且由于社区之前所编写的着色器程序是依赖HAL渲染引擎运行的,而渲染龙的实装,使得HAL无法运行,那么相对应的之前的着色器接口也就失去效用了。
对于现有的基岩版光影圈的开发者来说,HAL着色器接口是他们赖以实现各种优质作品的基石,但对于官方来说,HAL作为一个无法实现全平台统一的陈年老方案,在他们的眼里,它是过时的,应该被弃用的方案。且私以为当下光影社区对HAL被禁用反应如此巨大的原因在于,社区成员认为官方关闭了本来可访问的接口,致使他们无接口可用,是在开历史倒车,且在渲染龙完全实装之前,短期内官方又无法拿出相应的解决方案。但官方认为,HAL作为旧有工程的遗留产物,在已有新一代渲染引擎项目的情况下,无论是从未来的发展角度还是从项目的维护角度来说HAL被废止是合乎情理的,而相对应的,这就造成了一个更大的矛盾:社区开发者对光影接口的需求与官方发展渲染龙为未来全平台统一渲染引擎及接口实现做准备的矛盾,短期内的冲击便在于此。
但如果从官方的角度来看HAL的弃用,对于一个商业公司来说,同时维护多个同质项目一定程度上对开发效率也存在着一定的影响(这一点对官方在渲染龙相关方面的决策有着相当深远的影响)。关于这一点,Lich的看法是:“我在一家大型科技公司工作,放弃对旧事物的支持一直是我们(开发)速度的巨大助推器。有时候那些shit玩意儿会把你拖下水”。(编者按:当然私以为即便是这么说官方在开发效率上表现依然拉胯,具体参考GameTest框架接口的开放以及数据驱动接口的开放)

而如果说HAL被禁用是社区对渲染龙不满情绪的来源之一的话,那么着色器接口的开放问题便是其根源所在。
五、黎明前的黑暗,还是永夜的开端?
关于着色器接口的开放,官方人员的说法是:“由于平台的限制,我们无法在基岩版上开放着色器,我们支持的某些平台只允许在应用程序的二进制文件中附带着色器代码。所以我们无法允许资源包包含着色器代码。我们需要找到其他方法来实现同等水平的自定义”。

根据这条信息,我们可以得出三个结论:
首先,着色器代码在渲染龙时代基本上可以说是退出基岩版历史舞台了。因为某些平台只允许在程序二进制文件中附带着色器代码,也就是编译过后的着色器代码,那么在这种情况下,对于这些平台来说,直接使用自定义的着色器代码显然是不现实的。那有人可能会说了,那对这些平台单独做编译适配不就好了,或者说只允许支持着色器代码的平台使用相关功能不就好了?对此,官方人员的说法是:“这不是不可能的,但这确实降低了方案的价值。我认为我们可以在不受平台限制的情况下做很多事情来改善许多玩家的体验”

“可能只是我们试图在不同平台之间保持一致。减少独有方案的数量。”

从上述回应中我们不难看出,官方的开发理念相对来说更倾向于寻找一个全平台统一的解决方案,而不是单独为某些平台开小灶。
第二,官方在未来会开放相关的接口给社区使用,至于形式如何,我们目前不得而知。
第三,未来开放的相关接口的自定义能力还得和着色器代码是同等级的。
六、结语与展望
经过几年的研发,渲染龙终究还是来到了这个方块世界,总的来说,渲染龙给社区带来的阵痛是有的,正所谓最残忍的不是让一个人从未得到某样事物,而是让他在得到后再失去某样事物,私以为现如今的众多社区开发者所产生的抵触情绪便一定程度上便来源于此。
而在渲染龙时代下,基岩版光影这艘小船又会驶向何方?或者还是让我们回到标题的那个问题上来:“这究竟是黎明前的黑暗,还是永夜的开端呢?”,我们不得而知,也只有时间能告诉我们答案。但从官方给出的回应中我们或多或少还是可以窥见些官方对着色器接口开放方面的想法,它会是一套全平台通用的、可以绕过某些设备对着色器代码限制的,且自定义能力与着色器同等级的解决方案,但目前为止,这也只是官方的说法罢了,至于真正意义上的落到实处,可能还需要很长的一段路要走。
时代的洪流裹挟着我们每个人向前,这是我们无法改变的,而我所期望的是,在很多年以后,当我们回望今天所发生的事情,我们能笑的无比大声。

