GLSL 编程/Unity
外观
< GLSL 编程
在 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,你至少应该通读“基础”部分的教程。(现在你被警告了!)
- 漫反射(关于每个顶点的漫反射光照和不同类型的多盏光源)
- 镜面高光(关于每个顶点的光照)
- 双面表面(关于双面每个顶点的光照)
- 平滑镜面高光(关于每个像素的光照)
- 双面平滑表面(关于双面每个像素的光照)
- 多盏光源(关于在一次着色器通道中处理多盏光源的 for 循环)
- 拉丝金属(关于各向异性镜面反射)
- 轮廓上的镜面高光(关于镜面反射的菲涅尔系数)
- 天空光的漫反射(关于半球光照)
- 半透明表面(关于背光漫射和前向散射透射)
- 半透明物体(关于降低对比度的漫射光照和轮廓上的漫射背光透射)
- 球体的软阴影(关于渲染球体的本影和半影)
- 卡通渲染(关于非真实感渲染)
- 屏幕叠加(关于从物体空间到屏幕空间的直接变换)
- 广告牌(关于物体视图对齐投影)
- 非线性形变(关于顶点混合)
- 平面上的阴影(关于将阴影投影到平面上)
- 镜子(关于镜像物体和使用 alpha 缓冲区进行模板化)
一些额外的关于在没有着色器的情况下在 Unity 中进行图形编程的教程可在 Cg 编程维基教科书中找到。
- Unity 着色器参考:http://unity3d.com/support/documentation/Components/SL-Reference.html
- Unity 中的 Cg 着色器(包括内置着色器):http://www.unifycommunity.com/wiki/index.php?title=Shaders#Unity_3.x_Shaders
- Unity 用户论坛关于着色器:http://forum.unity3d.com/forums/16-ShaderLab
- 关于优化 iOS 着色器的博客文章:http://aras-p.info/blog/2011/02/01/ios-shader-tricks-or-its-2001-all-over-again/
- 关于 SIGGRAPH 上关于着色器优化的演示的博客文章:http://blogs.unity3d.com/2011/08/18/fast-mobile-shaders-talk-at-siggraph/
- 用于分析 PowerVR GPU(例如所有 iOS 设备)上着色器性能的工具:http://www.imgtec.com/powervr/insider/powervr-pvrshaman.asp
< GLSL 编程
除非另有说明,本页面的所有示例源代码都授予公有领域。