返回介绍

GLSL着色器程序

发布于 2021-06-20 00:15:04 字数 991 浏览 959 评论 0 收藏 0

除了使用 Cg/HSL 着色器程序,还可直接编写 OpenGL 着色语言 (GLSL) 着色器。

然而,仅推荐将原始 GLSL 用于测试,或是在您确定您的目标仅为与 Mac OS X 或 OpenGL ES 2.0 兼容的移动设备的时候。在大部分普通情况下,Unity 会将 Cg/HLSL 交叉编译为优化的 GLSL(默认情况下,这是为移动平台进行的操作,但可以通过 #pragma glsl 有选择地为桌面平台开启此功能)

GLSL 代码片段

GLSL 程序代码片段被编写在 GLSLPROGRAM 和 ENDGLSL 关键字之间。

在 GLSL 中,所有的着色器函数进入点都必须被称为 main()。Unity 在加载 GLSL 着色器时,会使用顶点 (VERTEX) 预处理器定义为顶点程序加载一次源代码,然后再使用片元 (FRAGMENT) 预处理器定义为片元程序加载一次。因此,在 GLSL 代码片段中区分顶点和片元程序部分的方法是用 #ifdef VERTEX .. #endif 和 #ifdef FRAGMENT .. #endif 将它们包围。每个 GLSL 代码片段都必须包含一个顶点程序和一个片元程序。

标准包含文件与提供 给 Gg 着色器的那些包含文件相匹配。只是它们的扩展名为 .glslinc:UnityCG.glslinc。

顶点着色器输入来自预定义 GLSL 变量(gl_Vertex、gl_MultiTexCoord0 等)或为用户定义属性。通常,仅切线向量需要用户定义属性:

    attribute vec4 Tangent;

从顶点程序到片元程序的数据是通过变化 (varying) 变量传递的,例如:

    varying vec3 lightDir; // vertex shader computes this, fragment shader uses this

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文