开放着色语言(OSL)
开放着色语言(OSL)是一种获得奥斯卡奖的着色语言,具有类似 C 的语法,用于描述材质、纹理、相机和图案生成,最初由 Sony Pictures Imageworks 开发(技术成就奖,2017 年)。OSL 被发布为开源,以便其他视觉效果和动画工作室以及渲染软件供应商可以使用。它是一种经过验证的编程语言,用于许多电影中。
OctaneRender® 在整个应用程序中实现了 OSL,包括 OSL 位移、 OSL 纹理 和 OSL 相机。本主题旨在为这些主题添加背景信息。
使用 Octane,您可以使用开放着色语言创建高度详细的纹理。如果您只有一点耐心并且能够承受学习曲线,您就拥有了一个非常先进的纹理创建工具。如果您对编程感兴趣,或者您是程序员,您可以使用 OSL 产生几乎无穷无尽的纹理变化。此外,OSL 不仅限于纹理创建 — 还有相机和投影选项。如果您想超越标准材质和纹理,值得花时间学习 OSL。
以下信息是从 Imageworks Github 中的 OSL 介绍总结的。请遵循本文末尾的链接以获取完整资源。
OSL 介绍
OSL 类似于 C 编程语言。也就是说,OSL 是专门为计算机图像渲染设计的。OSL 在许多产品中的广泛实现使 OSL 非常有吸引力且非常便携,从应用程序到应用程序,当然,受到每个主机应用程序实现的限制。
如果您熟悉其他着色语言,您会注意到 OSL 有一些与其他语言不同的特定概念。这些概念涉及基于物理并支持光线追踪和全局照明的视角,而不是这些特性的近似。
辐射单位,而非最终颜色
OSL 不像一个"黑盒",在被调用为像素着色时吐出最终颜色。相反,OSL 的体积和表面着色器计算体积或表面实际散射光线的方式。结果是辐射单位,并存储在称为"闭包"的数据结构中。闭包非常灵活,允许评估给定方向、首选方向,并且可以保存以供以后评估或根据需要重新评估。这有助于 OSL 正确符合基于物理的着色。
表面或体积着色器无需光循环
OSL 表面着色器内不会创建明确追踪的照明光线,因为描述给定表面如何散射光线的辐射闭包由"积分器"针对指定灯光进行评估,用于确定应追踪哪个方向的光线。明确光线是辐射闭包的一部分。这允许集成和采样功能被批处理或重新排序,以增加光线相干性、用于最佳 BSDF 采样的光线预算、双向光线追踪/大都会光传输,以及快速评估新照明场景,而无需强制重新评估着色器。
无需单独的灯光着色器
在 OSL 中,没有单独的表面或灯光着色器。相反,所有灯光都被视为区域灯光和发光表面。
无需透明度属性定义
透明度未明确定义为属性。相反,它只是包含在主辐射闭包中的另一个光交互。
无需 AOV;改用光路表达式
使用光路表达式而不是 AOV;只需通过光路表达式告诉渲染器需要什么作为输出。
网络,而非单体着色器
OSL 着色器实际上是网络,可以动态连接和重新连接,无需后续编译。这发生在渲染时,输出仅从依赖它们的下游节点中提取。这一切都发生在动态分配的图(DAG)中 — 着色器编写者无需处理这些细节。)
有关 OSL 的更多信息以及开始编写自己的 OSL 着色器,请遵循此 链接。
