Open Shader Language和GLSL之间的关键区别是什么?

7
我知道一些关于GLSL的工作原理,但是Open Shader Language(OSL)对我来说是新的。
据我所知,OSL被用作电影级CG渲染器的着色器语言,并旨在成为先锋Renderman软件套件中等效语言(RSL)的竞争对手。
就我所理解的而言,OSL像GLSL一样是一种简洁的基于C的DSL,具有许多原始值和BIF,专门编写以处理计算机图形基元(如表面、像素、顶点等)上的操作。
但是乍一看,似乎存在许多差异。OSL似乎比GLSL更容易阅读,因为命名函数似乎是OSL的一个重要功能。
另一个观察结果是,在GLSL中,着色器仅在绘制顶点(顶点着色器)和场景光栅化时(片段/像素着色器)应用。然而,OSL似乎允许随时调用着色器程序。
可能还有许多其他差异(在OSL中似乎没有对“统一变量”的参考,但在OSL程序中是否需要它们?),但我真正想知道的是两种语言的范围之间的博学比较,并解释可能在任一语言中实际共享的内容(如果有的话)。
我在网上搜索了一些信息,但两种语言范围之间的明确比较似乎很难找到。
感谢您的指导。

BIF 代表什么? - user
1
内置函数。 - Charlie
1个回答

8
GLSL通常在GPU上实时运行,而OSL通常在CPU上离线运行。虽然这是一个非常粗略的说法,但它解释了为什么没有供应商在消费级硬件上实现GLSL noise()原语,而OSL具有有效地集成半球的函数调用。
关于GLSL中的函数命名和每个基元操作的观点似乎是错误的。您可以在GLSL中拥有命名函数,并使用计算着色器[0]对任意缓冲区数据进行操作。
请注意,RSL现在已经过时,因为新的RenderMan架构使用OSL作为模式定义和C ++作为积分器和Bxdf插件。还有许多其他渲染器,包括Arnold和Metal,都使用C ++作为其着色语言。
总的来说,我从阅读Gritz和Cortes关于RSL的书籍中学到了最多关于着色语言的知识。它们都具有类似的语法,重要的是基础知识。您可能会喜欢Rob Cook撰写的第一篇可编程着色论文。

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.93.9645&rep=rep1&type=pdf

另一本不错的书是Cg教程,与GLSL更相似,而不是OSL:

http://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter01.html

VEX是一种类似的向量语言,用于Houdini套件中的几何和着色操作:

http://www.sidefx.com/docs/houdini/vex/_index

最后,现在Vulkan和OpenGL都支持SPIR-V中间表示,因此可能会有更多人设计自己的实时着色语言。

https://www.khronos.org/news/press/khronos-releases-opengl-4.6-with-spir-v-support

[0] 你也可以使用变换反馈(甚至在WebGL中也可用)或将输入纹理视为全局数据来操作任意数据。这种技术被称为GPGPU。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接