开放式明暗处理语言 (OSL)

通过开放式明暗处理语言 (OSL),您可以使用新的 OSL 贴图(各种 OSL 贴图的统一类别),并且可以使用开发工具创建自己的 OSL 贴图以用于任何渲染器。

开放式明暗处理语言 (OSL) 是比较容易理解的开源明暗处理语言。可以采用多种不同的方式使用此语言。您可以使用 OSL 贴图,这是 3ds Max 内部的 OSL 明暗器执行环境,其工作方式类似于任何常规的内置 3ds Max 贴图。还有一个可以轻松使用的预加载 OSL 贴图类别。此外,还可以使用从 Internet 下载的任何 OSL 贴图。最后,您可以使用我们的开发工具通过 OSL 创建明暗器或贴图。与开发等效于 3ds Max C++ 贴图的功能相比,使用此方法创建自定义贴图要简单得多。

OSL 可在支持常规 3ds Max 明暗处理 API 的任何渲染器(扫描线、vRay、Corona 等)中使用。它也可以在渲染器之外、3ds Max 中需要常规贴图的任何位置(例如在置换修改器中)使用。它还可以在本身支持 OSL 的渲染器(例如 Arnold)中使用。在这些情况下,不使用 OSL 贴图内的执行环境,而是将 OSL 源代码、参数值和明暗器绑定发送到渲染器,由渲染器执行 OSL 代码。每天都会出现更多本身支持 OSL 的渲染器。

只要明暗处理树中的所有明暗器都是 OSL 明暗器,OSL 便会对整个明暗处理树一次性进行即时编译和优化。您可以混合使用 OSL 明暗器和常规明暗器,但优化将会受影响。

注: 计算机图形术语并不总是精确,在不同的上下文、应用程序和渲染器中使用时,明暗器、贴图、纹理、程序和材质等词表示不同的内容。由于 3ds Max 中的 OSL 不支持闭合,因此它显示为贴图。但是,由于 OSL 是明暗处理语言,因此在 OSL 上下文中,术语明暗器和贴图将作为同义词使用。
注: 原始的渲染 API 不支持多个输出。这是后来引入的扩展。因此,大多数材质和贴图无法识别与具有多个输出的贴图连接。为了解决此问题,引入了输出选择器贴图,作为在具有多个输出的对象与无法识别多个输出的对象之间自动插入的中间对象。在 Slate 材质编辑器中会自动隐藏输出选择器贴图,在那里它就像普通连接(除了连线是蓝色,而不是红色)。可以从 Slate 材质编辑器中的“选项”菜单选择“首选项”,然后切换“隐藏单一贴图输出选择器”来启用或禁用该选项。

OSL 限制

在 3ds Max 中,OSL 贴图存在几个限制。

限制 描述
仅支持贴图,不支持材质

采用 OSL 编写的明暗器可以有多个返回不同数据类型(例如颜色、浮点值、整数、字符串等)的输出。对此全部支持。

但是,OSL 还支持称为闭合的特殊类型。您可以将闭合视为材质。对此不支持。实际上,这意味着 OSL 贴图只能用于构建程序纹理(贴图),不能用于构建材质。

因此,建议的工作流是采用 OSL 构建程序纹理贴图,但将输出连接到定义明确且与渲染器无关的标准化材质(例如物理材质)。

如果您在网上找到的 OSL 明暗器看上去无法进行任何操作,或看上去没有任何输出,则可能是 OSL 材质。

只支持纯数据类型

3ds Max 中的 OSL 贴图只支持纯数据类型:颜色、向量、浮点数、整数和字符串。它不支持阵列或结构作为输入。

实际上,一般情况下这不是问题,因为很少有 OSL 明暗器实际使用阵列或结构作为输入。只有参数存在此限制,在 OSL 代码内,阵列和结构仍可正常使用。

无 #include 语句

3ds Max 中的 OSL 代码不能包含 #include 语句。如果您的 OSL 代码包含 #include <stdosl.h>,这是不需要的,可以删除。文件 stdosl.h 由编译器隐式包含。

视口支持

现在,许多 OSL 贴图将其实际明暗器用于视口显示,从而提高性能并大幅改善视觉表示。要执行此操作,请在“有贴图的真实模式”下运行视口。在“材质编辑器”中,使用此明暗器的 OSL 贴图将在其参数上方显示通知“视口: 使用的明暗器”。但是,仍使用烘焙纹理的 OSL 贴图将显示“视口: 使用的烘焙纹理”

请注意,以下 OSL 明暗器当前仍使用烘焙纹理:

UVW

场景

注: 此外,始终使用烘焙纹理的 Arnold 材质也不支持此视口改进举措。