GLSL 编程/Blender/简介
本页面是 维基教科书:合集/GLSL 编程在 Blender 中 的介绍,不应被其他页面引用。 |
GLSL(OpenGL 着色语言)是几种常用的实时渲染着色语言之一(其他例子包括 Cg 和 HLSL)。这些着色语言用于编写着色器(即或多或少的小程序),这些着色器在 GPU(图形处理单元)上执行,即计算机图形系统的处理器——与计算机的 CPU(中央处理单元)相反。
GPU 是大规模并行处理器,非常强大。当今游戏和其他交互式图形应用程序中的大多数实时图形如果没有 GPU 都是不可能的。但是,要充分利用 GPU 的性能,必须直接对其进行编程。这意味着必须编写可以由 GPU 执行的小程序(即着色器)。编写这些着色器的编程语言是着色语言。GLSL 就是其中之一。事实上,它是几个 3D 图形 API(应用程序编程接口)的着色语言,即 OpenGL、OpenGL ES 2.x 和 WebGL。因此,GLSL 通常用于台式机、移动设备和网络的应用程序。
本维基教科书是针对那些不喜欢编程或数学的学生编写的。本书的基本动机是观察到学生在进行具体项目时,对学习编程环境、编程语言和 API 的兴趣要高得多。这样的项目通常是在特定平台上开发的,因此本书的方法是在 Blender 中介绍 GLSL。
本书的第一部分包含带有工作示例的教程,这些示例会产生某些效果。请注意,这些教程假设你按顺序阅读,即每个教程都会假设你熟悉之前教程中介绍的概念和技术。如果你不熟悉 GLSL 或 Blender,你至少应该通读“基础”一章中的教程。
附录包含有关 OpenGL 管道和 GLSL 语法的一般信息,这些信息与 Blender 无关。不熟悉 OpenGL 或 GLSL 的读者可能希望至少浏览一下这部分内容,因为对 OpenGL 管道和 GLSL 语法的基本理解对于理解教程非常有用。
Blender 是一款流行的开源建模和动画工具,支持 Windows、MacOS X、Linux 和 FreeBSD,并包含游戏引擎。(通过 GameKit,它将来也可能会支持 Android 和 iOS 的游戏开发。)由于网格、纹理、光源等可以在图形用户界面中编辑,因此比在 OpenGL(ES)或 WebGL 应用程序中更容易定义复杂的场景。Blender 支持 GLSL 中的顶点和片段着色器(即“GLSL 程序”;不要与内置的“GLSL 材质”或“GLSL 着色”混淆)。
Blender 可以从 Blender 基金会下载页面 下载。需要注意一些事项。
- 首先,Blender 的 Python API(它用于指定 GLSL 程序和 OpenGL 状态)在 Blender 2.5 版本中发生了重大变化;因此,你可能在互联网上找到的大多数关于 Blender 中 GLSL 编程的教程和示例在当前版本中都无法使用。
- 其次,Blender 的 Python API 仅支持单一渲染通道,我不清楚如何为特定材质或对象设置 OpenGL 状态(混合和统一变量除外)。因此,可能性是有限的。
- 第三,GLSL 程序仅限于 Blender 的游戏引擎;因此,它们只在游戏启动时显示。(这在编辑着色器参数时尤其不方便。)
Martin Kraus,2012 年 5 月