原文链接:http://en.wikibooks.org/wiki/Cg_Programming/Unity
在 Unity 游戏引擎中编写 Cg 程序要比在 OpenGL 或 Direct3D 应用中编写 Cg 程序容易,因为导入的网格和图像(即纹理)有图形用户界面支持,而且多重纹理格式(mipmaps)和法线贴图也会被自动的计算,并且最常用的顶点属性和 uniforms 也都是预定义的,另外我们还可以通过非常简单的命令来设置 OpenGL 和 Direct3D 的状态等等。
教程准备
我们可以从 Unity 下载页面 下载 Windows 和 MacOS 平台下免费版本的 Unity 软件,本系列所有教程都是免费的,但是我们需要注意以下三点:
首先:这系列教程假定你熟悉 Unity,如果你不熟悉 Unity 话,你首先应该参考《Unity 的用户指南》来学习 Unity。
其次:Unity 不区分 Cg(Nvidia 着色器语言)和 HLSL(Direct3D 着色器语言),因为这两种语言非常相似,因此大多数的教程也适用于 HLSL。
此外:Cg 文档有《Nvidia's Cg Tutorial》和《Nvidia's Cg Language Specification》,然而 Unity 对 Cg 编程的具体细节描述比较缺乏,另一方面,Unity 着色器的文档侧重于 Unity 自己的表面着色器,所以 Cg/HLSL 着色器文档是非常缺乏的。因此,如果没有 Cg 相关的知识的话,那么在 Unity 中学习 Cg 编程将是比较困难的,Wikibook 试图在 Unity Cg 编程方面填补这个空缺而不要求你需要 Cg 相关知识。
系列教程
请注意,本系列教程假设你按照下列章节有序的学习,即后面每个章节的教程都假设你熟悉前面章节中的概念和技术,如果你是 CG 或者 Unity 新手,那么你至少要先了解本系列教程的“基础部分”。
基础部分
第一章节:最简单的着色器(关于着色器,材质和游戏对象)
第二章节:RGB 立方体(关于顶点输出参数)
第三章节:在着色器中调试(关于顶点输入参数)
第四章节:世界空间中的着色器(关于 uniforms)
透明的表面
第五章节:剖面模型(关于片段擦除和三角形面剔除)
第六章节:透明度(关于混合)
第七章节:顺序无关的透明度(关于顺序无关的混合)
第八章节:轮廓加强(关于转换法线向量)
基本光照
第九章节:漫反射(关于每顶点漫反射和多光源漫反射)
第十章节:镜面高光(关于每顶点光照)
第十一章节:双面表面(关于双面每顶点光照)
第十二章节:光滑的镜面高光(关于每像素光照)
第十三章节:双面平滑表面(关于双面每像素光照)
第十四章节:多个灯(关于在一个 pass 中遍历处理多个光源)
基本纹理
第十五章节:纹理球(关于纹理球面)
第十六章节:表面纹理光照(关于纹理漫射光照)
第十七章节:光泽纹理(关于光泽贴图)
第十八章节:透明纹理(关于在片段擦除、混合中使用 alpha 纹理)
第十九章节:纹理层(关于多重纹理)
3D 纹理
第二十章节:凹凸表面光照(关于法线贴图)
第二十一章节:凹凸表面投影(关于视差贴图)
第二十二章节:Cookies(关于投影纹理贴图塑造光的形状)
第二十三章节:投影(关于使用投影纹理贴图实现投影)
环境贴图