OSL 着色器入门简介

626 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

什么是 OSL 着色器

non_manifold_bn.png

OSLOpen Shading Language 的首字母缩写。OSL 最初是在 Sony Pictures ImageworksArnold 渲染引擎开发的,它是一种类似 C 语言的编程语言,可以使用它开发定制的材质、纹理和阴影效果 —— 即 OSL shaders (*.)osl 文件),许多流行的渲染引擎都支持这些文件。

OSL 允许通过 场景输入参数【如阴影点的世界位置向量,法向量,UV 坐标等】,和 光学光线跟踪函数BSDF* 的或 “颜色闭包”,如它们在 OSL 中被称为: 漫反射光滑折射 光散射等等】,然后与 C 逻辑和数学编程相结合,开发复杂的纹理和阴影效果。

*.osl 文件被编译为用于渲染的 *.oso 文件。大多数支持 OSL 着色器的渲染引擎都附带一个 OSL 编译器。

基本的例子

下面的渲染示例展示了如何将两个基本的 OSL 着色器(其中一个是介质材质着色器,另一个是颜色/角度混合程序纹理)结合在一起,在不同的渲染引擎中渲染时产生相对较一致的结果。

注意相同值(0.1)的镜面、光面、粗糙度所表现出的差异。

在此下载这两个基本的 OSL 着色器。

Maya 的 Arnold

image.png

3ds max 的 V-Ray

image.png

Blender 的 Cycles

image.png

网上一些有用(bai piao)的 OSL 着色器库

  1. Chaos Group 网站
  2. Autodesk 开发者网络 Github 仓库

这些是 3ds max 2019 或更新版本附带的 OSL 着色器,并提供纹理和图案处理工具,但不提供材质。

OSL 中所涉及的材质着色器或 “闭包”,它们是不被 3ds max 的原生实现的 OSL 所支持的。

  1. 一个由 Shane Ambler 收集的 OSL 着色器库

注意事项

  1. 一般来说,OSL 着色器只在 CPU 渲染 中被支持,而 GPU 渲染器 并不被支持。有一些尝试为 GPU 渲染器开发 OSL 支持,但据我所知,它们是受限的。
  2. 一些 OSL 着色器可以在一个或多个渲染引擎上工作,而不能在其他预想的渲染引擎上工作。原因是每个渲染引擎都有自己的 OSL 实现。这些差异可能导致不同的渲染结果甚至编译失败。

参考

  1. OSL read-list
  2. Using OSL shaders in Arnold for Maya
  3. Using OSL shaders in V-Ray for 3ds max
  4. Using OSL shaders in Blender & Cycles
  5. Writing a basic OSL color shader