Open Shader语言和GLSL之间的主要区别是什么

时间:2017-09-07 10:09:57

标签: opengl glsl

我对GLSL的工作原理有一点了解,但Open Shader Language(OSL)对我来说是新的。

据我了解,OSL被用作电影制作级CG渲染器的着色器语言,并且打算成为开创性的Renderman软件套件中等效语言(RSL)的竞争对手。

对于我所理解的东西,OSL就像GLSL一样,是一种基于C语言的简洁DSL,具有许多原始值和专门用于处理计算机图形基元(如曲面,像素,顶点等)操作的BIF。

但乍一看,似乎存在很多差异。 OSL似乎比GLSL更容易阅读,因为命名函数似乎是OSL开始时的一个关键特性。

另一个观察是GLSL,着色器如何仅在绘制顶点时(顶点着色器)和场景被栅格化(片段/像素着色器)时应用。然而,OSL在调用着色器程序时似乎允许很大的自由。

可能还有很多其他差​​异(在OSL中似乎没有提到'统一'变量,但它们甚至在OSL程序中是否需要?),但我真正追求的是对博弈范围的博学比较两种语言相互关联,并解释在任何一种语言的程序之间可以实际共享的内容(如果有的话)。

我在网上搜索了一些信息,但两种语言相对于每种语言的范围的明确比较似乎难以捉摸。

非常感谢指导。

1 个答案:

答案 0 :(得分:3)

GLSL通常在GPU上实时运行,而OSL通常在CPU上脱机运行。这是一个非常粗略的陈述,但解释了为什么没有供应商在消费级硬件上实现GLSL noise()原语,而OSL具有有效集成在半球上的函数调用。

关于GLSL的函数命名和每个基元操作的观点似乎是错误的。您可以在GLSL中使用命名函数,使用计算着色器[0]可以对任意缓冲区数据进行操作。

请注意,RSL现已过时,因为新的RenderMan架构使用OSL进行模式定义,使用C ++进行积分器和Bxdf插件。还有许多其他渲染器,包括实时和离线,使用C ++作为着色语言...... Arnold和Metal浮现在脑海中。

总的来说,我通过阅读RSL上的Gritz和Cortes书籍,了解了最多关于着色语言的知识。它们都有类似的语法,这是重要的基础。您可能会喜欢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。