我对GLSL的工作原理略知一二,但Open Shader Language (OSL)对我来说还是个新手。
据我所知,OSL被用作电影制作级CG渲染器的着色器语言,旨在成为先驱Renderman软件套件中的等效语言(RSL)的竞争对手。
就我所知不多的是,OSL和GLSL一样,是一种简洁的、基于C的DSL,它有许多原始值和BIF,专门用来处理计算机图形原语(如表面、像素、顶点等)上的操作。
但乍一看,似乎存在大量差异。OSL似乎比GLSL更容易阅读,因为命名函数似乎是OSL的一个关键特性。
另一个观察是GLSL,着色器是如何仅在绘制顶点时应用着色器(顶点着色器)和光栅化场景时应用着色器(片段/像素着色器)。然而,OSL似乎允许在调用着色器程序时有很大的自由度。
可能还有许多其他的差异(在OSL中似乎没有引用“统一”变量,但在OSL程序中是否需要它们?),但我真正追求的是两种语言之间相互关系的范围的博学比较,并解释在这两种语言的程序之间实际上可以共享的东西。
我在网上搜索了一些信息,但似乎很难清楚地比较这两种语言各自的范围。
将会非常感谢您的指导。
发布于 2017-09-09 06:44:32
GLSL通常在GPU上实时运行,而OSL通常在CPU上离线运行。这是一个非常粗略的说法,但解释了为什么没有供应商在消费级硬件上实现GLSL noise()原语,而OSL的函数调用可以有效地集成到整个半球。
您关于GLSL的函数命名和每个基元操作的观点似乎是错误的。可以在GLSL中具有命名函数,并且可以使用计算着色器对任意缓冲区数据进行操作。
请注意,RSL现在已经过时了,因为新的RenderMan架构使用OSL进行模式定义,将C++用于集成器和Bxdf插件。还有许多其他的渲染器,无论是实时的还是离线的,都使用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是一种类似的向量语言,用于胡迪尼套件中的几何和着色操作:
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
还可以通过使用变换反馈(即使在WebGL中也可用)或仅将输入纹理视为全局数据来对任意数据进行操作。这项技术被称为GPGPU。
https://stackoverflow.com/questions/46093694
复制相似问题