我想主要从事金属级的工作,但我需要一些对象的PBR。我认为在SceneKit (基于金属)中不应该做任何事情,而不能在金属本身中完成。但现在我对PBR呈现感到困惑,因为它似乎是独家的SceneKit功能。它是怎么工作的?是否有一些众所周知的着色器或其他东西,它能在金属水平上复制吗?
发布于 2018-03-29 18:02:33
PBR不仅仅是关于着色器,它是一种整体的,经验的方法来表示和近似物理现象。
SceneKit的PBR实现只是将PBR技术集成到呈现引擎中的一种方法。金属没有明确的支持PBR,因为金属是一个低水平的API,和不可知的渲染技术。
如果您想要“SceneKit外观”,您可以假设抛出SceneKit用来实现其呈现的金属着色器,但这只是图片的一部分。您需要了解如何从这些着色器函数构建呈现管道对象,并构建一个多通道渲染器来与它们绘制网格(不仅仅是绘制到HDR呈现目标的初始传递,还需要执行后续处理效果的后续传递,如布卢姆、维格尼特、色调映射等)。你还需要确保你所呈现的资产具有物理上合理的材料,这本身就是一门艺术。
我的GLTFKit框架包括一个Metal示例实现。它更多地是用于指导而不是生产用途,但您可能会发现阅读PBR着色源很有趣。
关于同样问题的另一个例子,请参阅苹果的功能专业化的LOD示例;它有一些漂亮、干净的PBR金属着色器。
如果你想深入了解这里发生了什么,我鼓励你读一些已经发表过的关于这个主题的论文和样本。其中最基础的是Burley 2012、Karis 2013和拉加德2015。在这个问题上也要咨询乔伊·德弗里斯的文章。在过去的几年里已经取得了很多的进步,但是这些东西对开始是有好处的。
https://stackoverflow.com/questions/49547543
复制相似问题