跳转到内容

GLSL 编程/Unity

来自维基教科书,自由的教科书

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

预备知识

[编辑 | 编辑源代码]

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

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

请注意,教程假设你按照此处介绍的顺序阅读它们,即每个教程都假设你熟悉前一个教程介绍的概念和技术。如果你不熟悉 GLSL 或 Unity,你至少应该通读“基础”部分的教程。(现在你被警告了!)

透明表面

[编辑 | 编辑源代码]

基本光照

[编辑 | 编辑源代码]

基本纹理

[编辑 | 编辑源代码]

3D 纹理

[编辑 | 编辑源代码]

环境映射

[编辑 | 编辑源代码]

光照的变体

[编辑 | 编辑源代码]

非标准顶点变换

[编辑 | 编辑源代码]

没有着色器的图形

[编辑 | 编辑源代码]

一些额外的关于在没有着色器的情况下在 Unity 中进行图形编程的教程可在 Cg 编程维基教科书中找到。


< GLSL 编程

除非另有说明,本页面的所有示例源代码都授予公有领域。
华夏公益教科书