GLSL Programming/Unity

维基教科书,自由的教学读本

在 Unity 环境下进行 GLSL 开发比起使用编写独立的 OpenGL, OpenGL ES 或者 WebGL 应用程序无疑会更为简单。可以直接导入 mesh,图片资源(如 Textures);mipmap 和 normal map 会被自动计算;大部分 GLSL vertex attributes 和 uniforms 变量都是预定义好的,可以直接用;一些 OpenGL 状态变量可以直接设置。等等。

准备工作[编辑]

可以在 Unity's download page上下载到免费版本的 Unity,有多种平台版本,Windows,MacOS,Linux等。下面陈述的所有实例都可以在免费版本上实作运行。有几点需要注意:

  • 第一,Windows 用户启动 Unity 开发环境时需要传入如下参数 -force-opengl ,以便可以在 Unity 开发环境中使用 GLSL shader [1]。Windows 默认情况下使用 DirectX。可以参考如下做法避免每次都要从命令终端启动 Unity :右键单击 Unity 桌面图标,编辑属性选项,例如 "C:\Program Files\Unity\Editor\Unity.exe" -force-opengl(在MacOS 上默认使用的就是 OpenGL)。另外Windows 下还不支持 Web 浏览器里面使用 GLSL shader
  • 第二,我们假设读者朋友们已经熟悉 Unity 开发环境,如果答案是否定的,那么推荐先阅读一下 Unity User Guide [2]部分前三节(Unity Basics, Building Scenes, Asset Import and Creation)。

另外,Unity 是支持 GLSL 1.0.x 版本的,也就是 OpenGL ES 2.0(请参考“Khronos OpenGL ES API Registry”),然而 Unity 官方 shader [3]文档内容主要关注于 Unity 自己的 “Surface Shader”和 Cg/HLSL[4],仅仅用很少的文字来描述 GLSL 部分[5]。所以这一份 wikibook 也许可以作为 Unity 环境下 GLSL 开发的补充,不过关于优化部分并没有过多涉及 (请参考这篇博客)。


示例教程[编辑]

以下示例教程内容具有关联性,后面的章节一般会依赖于前面的部分,所以请按照顺序来阅读。如果您还没接触过 GLSL 或者 Unity,至少应该首先阅读“Basic”部分!

Basics[编辑]

Transparent Surfaces[编辑]

Basic Lighting[编辑]

Basic Texturing[编辑]

Textures in 3D[编辑]

Environment Mapping[编辑]

Variations on Lighting[编辑]

Non-Standard Vertex Transformations[编辑]

Graphics without Shaders[编辑]

关于 tutorials about graphics programming in Unity without shaders 的一些资料可以在 Cg Programming wikibook 上面找到.

参考链接[编辑]

Template:GLSL Programming BottomNav