跳转到内容

GLSL 编程/Unity/简介

来自维基教科书,开放的书籍,开放的世界

关于 GLSL

[编辑 | 编辑源代码]

GLSL(OpenGL 着色语言)是几种常用的实时渲染着色语言之一(其他例子包括 Cg 和 HLSL)。这些着色语言用于编程着色器(即或多或少的小程序),这些程序在 GPU(图形处理单元)上执行,即计算机图形系统的处理器 - 与计算机的 CPU(中央处理单元)相反。

GPU 是大规模并行处理器,功能极其强大。今天大多数游戏和其他交互式图形应用程序中的实时图形如果没有 GPU 就不可能实现。然而,要充分利用 GPU 的性能,有必要直接对它们进行编程。这意味着必须编写可以由 GPU 执行的小程序(即着色器)。编写这些着色器的编程语言就是着色语言。GLSL 就是其中之一。事实上,它是几个 3D 图形 API(应用程序编程接口)的着色语言,即 OpenGL、OpenGL ES 2.x 和 WebGL。因此,GLSL 在台式计算机、移动设备和网络的应用程序中普遍使用。

关于这本维基教科书

[编辑 | 编辑源代码]

这本维基教科书是针对那些不喜欢编程也不喜欢数学的学生编写的。这本书的基本动机是观察到,如果学生们在具体的项目上工作,他们会更有动力去学习编程环境、编程语言和 API。这类项目通常是在特定平台上开发的,因此本书的方法是在游戏引擎 Unity 中介绍 GLSL。

本书第 1 章到第 8 章包含带有工作示例的教程,这些示例会产生某些效果。请注意,这些教程假设您按它们提供的顺序阅读它们,即每个教程都将假设您熟悉以前教程中介绍的概念和技术。如果您是 GLSL 或 Unity 的新手,您至少应该通读第 1 章“基础”中的教程。

关于 OpenGL 管道和 GLSL 语法的更多细节包含在“关于 OpenGL 管道和 GLSL 语法的附录”中。不熟悉 OpenGL 或 GLSL 的读者可能至少想快速浏览一下这部分内容,因为对 OpenGL 管道和 GLSL 语法的基本理解对于理解教程非常有用。

关于 GLSL 在 Unity 中的应用

[编辑 | 编辑源代码]

在游戏引擎 Unity 中进行 GLSL 编程比为 OpenGL、OpenGL ES 或 WebGL 应用程序进行 GLSL 编程要容易得多。网格和图像(即纹理)的导入受图形用户界面支持;可以自动计算mipmap 和法线贴图;最常见的顶点属性和制服是预定义的;OpenGL 状态可以通过非常简单的命令设置;等等。

可以在 Unity 的下载页面 上为 Windows 和 MacOS 下载 Unity 的免费版本。所有包含的教程都适用于免费版本。需要注意三点

  • 首先,Windows 用户必须使用命令行参数 -force-opengl [1] 在启动 Unity 时才能使用 GLSL 着色器;例如,通过将桌面图标属性中的“目标”设置更改为:"C:\Program Files\Unity\Editor\Unity.exe" -force-opengl 。(在 MacOS X 上,默认使用 OpenGL,因此使用 GLSL。)请注意,GLSL 着色器不能在 Windows 上以 Web 浏览器运行的 Unity 应用程序中使用。
  • 其次,本书假设读者对 Unity 有所了解。如果不是这样,读者应该参考 Unity 用户手册 [2] 的前三部分(Unity 基础、场景构建、资产导入和创建)。
  • 此外,从 3.5 版本开始,Unity 支持类似于 OpenGL ES 2.0 的 1.0.x 版本的 GLSL(规范可在 “Khronos OpenGL ES API 注册表” 中找到);但是,Unity 的着色器文档 [3] 侧重于使用 Unity 自己的“表面着色器”格式和 Cg/HLSL [4] 编写的着色器。只有很少的细节记录了 GLSL 着色器的具体内容 [5]。因此,这本维基教科书可能也有助于弥补 Unity 文档中的一些空白。但是,优化(例如,参见 此博客)通常不会讨论。


 


Martin Kraus,2012 年 8 月

华夏公益教科书