OSL 概述
OctaneRender® 支持使用开放着色语言创建高度详细的纹理。如果您对编程感兴趣,或者您是程序员,您可以使用 OSL 产生几乎无穷无尽的纹理变化。此外,OSL 不仅限于纹理创建 — 还有相机和投影选项。如果您想超越标准材质和纹理,值得花时间学习 OSL。有关更多信息,请参见标题为 开放着色语言(OSL) 的部分。

将 OSL 纹理分配给材质
首先创建一个 Octane 漫反射材质并打开节点编辑器。将您创建的漫反射材质拖放到节点编辑器中。然后从节点编辑器左侧的 OSL 组中选择所需的 OSL 节点,并将其拖放到编辑器区域中。将此 OSL 节点连接到漫反射材质的"漫反射"通道。

现在,选择 OSL 纹理节点。选择节点后,转到右侧设置窗口中的"代码组"标签。此窗口允许基本编辑和部分创建操作。Otoy 在"脚本类别"中提供了一些经过验证的 OSL 脚本,在"脚本预设"部分中有分类的脚本。您还可以在脚本组下拉菜单下的参数下拉菜单中修改脚本参数。

创建和编辑 OSL
要执行此操作,首先按下"编辑器"按钮,如下图所示。

这将打开 Octane OSL 编辑器。您将在此编辑器中编写、编译和完成代码。

保存和分类您的 OSL 脚本
您可以在编辑器窗口中保存编写的脚本或创建新类别。要执行此操作,按"保存"按钮,将弹出 Windows 资源管理器或 Mac 查找器窗口。默认情况下,插件会将您带到保存脚本的文件夹。但是,保存脚本的位置是"C:\Program Files\MAXON\ Cinema 4D [version]\plugins\ OctaneRender for Cinema 4D\ res\ osl_scripts"文件夹。在这里,您还可以打开新文件夹并将脚本保存到其中。这将创建一个新类别,您可以在 OSL 脚本窗口中看到它。

使用 OSL 时需要注意的事项
OSL 脚本假设在通用环境中运行。Otoy 已努力提供与 OSL 规范版本 1.9.13 的兼容性。在该规范之外运行的 OSL 脚本可能无法可靠工作。请记住这一点。
OSL 是一种编程语言。因此,您可以编写可能导致 Octane 崩溃的代码。您有责任确保遵循良好的编码实践,并熟悉 OSL 和 Octane 上下文中允许的内容。
支持的功能
规范中的某些功能可以在 Octane 中提供,而其他功能则不能。大多数纹理基元(噪波、图像纹理和算术)将按预期工作。在 Octane 中实现的两个主要扩展是相机着色器和纹理输入的延迟求值。
不支持的功能
材质着色器和 闭包 变量
点云函数
字典查找函数
消息传递通常不受支持,但位于此 链接 下的 Octane 扩展下列出的内置函数除外。
导数
trace ()。对于类似 AO 的效果,您可以添加 颜色 输入并将输入插针连接到污垢节点。
struct 变量类型。
全局变量 Ps 和 dPdt
部分支持的功能
noise () 不支持 4D 噪波,也不支持 "simplex" 和 "gabor" 噪波类型
全局变量 time 始终具有 0 到 1 之间的值,表示子帧内的时间。
getmessage 和 gettextureinfo 必须具有字符串字面量作为属性名称。
更多信息可在"功能和限制"主题中找到,来自 此 链接。
编译事项
选择或修改预定义预设脚本时,您可能需要按"编译"。当渲染在实时查看器中不能正确响应时,请执行此操作。
使用外部 OSL 脚本
虽然 Otoy 提供了许多经过验证可在 Octane 内运行的 OSL 脚本,但您有时会发现一些您想要尝试的 OSL 着色器示例。您可以使用这些示例,但您可能需要更改这些着色器的某些方面,以符合 Octane 中的 OSL 实现。
例如,您在下面图片中看到的一些代码是在网上找到的。当我们在 Octane OSL 编辑器中尝试使用此代码时,我们遇到"输出"错误,因为 Octane OSL 目前不允许使用多个输出。只有一个输出可用。

另一个例子是您在下面图片中看到的内容。在这里,使用"col.x"读取"col"参数的第一个组件失败。正确的用法显示在右侧。
