首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Open Shader语言和GLSL之间的主要区别是什么

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

Stack Overflow用户
提问于 2017-09-07 18:09:57
回答 1查看 3K关注 0票数 5

我对GLSL的工作原理略知一二,但Open Shader Language (OSL)对我来说还是个新手。

据我所知,OSL被用作电影制作级CG渲染器的着色器语言,旨在成为先驱Renderman软件套件中的等效语言(RSL)的竞争对手。

就我所知不多的是,OSL和GLSL一样,是一种简洁的、基于C的DSL,它有许多原始值和BIF,专门用来处理计算机图形原语(如表面、像素、顶点等)上的操作。

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

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

可能还有许多其他的差异(在OSL中似乎没有引用“统一”变量,但在OSL程序中是否需要它们?),但我真正追求的是两种语言之间相互关系的范围的博学比较,并解释在这两种语言的程序之间实际上可以共享的东西。

我在网上搜索了一些信息,但似乎很难清楚地比较这两种语言各自的范围。

将会非常感谢您的指导。

EN

回答 1

Stack Overflow用户

发布于 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。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46093694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档