“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
什么是 OSL 着色器
OSL 是 Open Shading Language 的首字母缩写。OSL 最初是在 Sony Pictures Imageworks 为 Arnold 渲染引擎开发的,它是一种类似 C 语言的编程语言,可以使用它开发定制的材质、纹理和阴影效果 —— 即 OSL shaders (*.)osl
文件),许多流行的渲染引擎都支持这些文件。
OSL 允许通过 场景输入参数
【如阴影点的世界位置向量,法向量,UV 坐标等】,和 光学光线跟踪函数
【 BSDF* 的或 “颜色闭包”,如它们在 OSL 中被称为: 漫反射、光滑、折射 光散射等等】,然后与 C 逻辑和数学编程相结合,开发复杂的纹理和阴影效果。
*.osl
文件被编译为用于渲染的 *.oso
文件。大多数支持 OSL 着色器的渲染引擎都附带一个 OSL 编译器。
基本的例子
下面的渲染示例展示了如何将两个基本的 OSL 着色器(其中一个是介质材质着色器,另一个是颜色/角度混合程序纹理)结合在一起,在不同的渲染引擎中渲染时产生相对较一致的结果。
注意相同值(
0.1
)的镜面、光面、粗糙度所表现出的差异。
在此下载这两个基本的 OSL 着色器。
Maya 的 Arnold
3ds max 的 V-Ray
Blender 的 Cycles
网上一些有用(bai piao)的 OSL 着色器库
这些是 3ds max 2019 或更新版本附带的 OSL 着色器,并提供纹理和图案处理工具,但不提供材质。
OSL 中所涉及的材质着色器或 “闭包”,它们是不被 3ds max 的原生实现的 OSL 所支持的。
注意事项
- 一般来说,OSL 着色器只在 CPU 渲染 中被支持,而 GPU 渲染器 并不被支持。有一些尝试为 GPU 渲染器开发 OSL 支持,但据我所知,它们是受限的。
- 一些 OSL 着色器可以在一个或多个渲染引擎上工作,而不能在其他预想的渲染引擎上工作。原因是每个渲染引擎都有自己的 OSL 实现。这些差异可能导致不同的渲染结果甚至编译失败。