Cg编程
游戏引擎中的Cg编程对于OpenGL或Direct3D应用程序,Unity比Cg编程要容易得多。网格和图像(即纹理)的导入由图形用户界面支持; mipmap和法线贴图可以自动计算; 最常见的顶点属性和uniforms是预定义的; OpenGL和Direct3D状态可以通过非常简单的命令设置,等等
准备
可以在Unity的下载页面下载适用于Windows和MacOS的免费版Unity 。所有包含的教程与免费版本一起使用。
应该注意几点:
- 首先,这部分是关于Unity的顶点和片段着色器。这种着色器编程特别灵活,可以让您编写非常高效的着色器,这在渲染性能有限时(例如在移动设备上)通常很重要。它也对图像效果非常有用,并且了解GPU如何工作。如果要考虑Unity的标准照明,编程顶点和片段着色器就不太有用。(在这种情况下,Surface
Shader更适合Unity)- 其次,这部分假设读者对Unity很熟悉。如果不是这样,读者应该参考Unity手册(Unity基础知识,资源工作流程和主窗口)的前三部分。
- 第三,Unity不区分Cv(Nvidia的阴影语言)和DirectX 9风格的HLSL(Direct3D 9中的着色语言),因为这两种语言非常相似; 因此,大多数这些教程也适用于DirectX 9风格的HLSL。
- 此外,Cg由Nvidia的Cg教程和Nvidia的Cg语言规范记录。但是,这些描述缺少特定于Unity的细节。另一方面,Unity的着色器文档专注于Unity的ShaderLab语法,并假定读者熟悉Cg。因此,在Unity中学习Cg编程,而没有Cg的先前知识可能是相当困难的。这本wikibook试图通过在Unity中提供Cg编程的介绍来弥补这个差距,而无需事先知道Cg。
教程
请注意,这些教程假定您按照它们在这里呈现的顺序阅读它们,即每个教程将假设您熟悉以前教程中介绍的概念和技术。如果您是Cg或Unity的新手,请至少阅读“基础知识”部分的教程。(以此警告!)
基础知识
- 最小着色器(关于着色器,材质和游戏对象)
- RGB立方体(关于顶点输出参数)
- 着色器的调试(关于顶点输入参数)
- 世界空间阴影(关于uniforms)
透明曲面
- 剔除(关于丢弃片段和三角面剔除)
- 透明度(关于混合)
- 顺序无关的半透明渲染(关于顺序无关的混合)
- 轮廓增强(关于转换法线)
基本照明
- 漫反射(关于逐顶点的漫反射照明和不同种类的多种光源)
- 镜面高光(关于逐顶点的照明)
- 双面显示(约双面逐顶点照明)
- 平滑的镜面高光(关于逐像素照明)
- 平滑的双面显示(关于双面逐像素照明)
- 多个光源(关于在一个着色器过程中处理多个光源)
基本贴图
- 纹理球体(关于纹理球体)
- 纹理表面光照(关于漫射照明的纹理)
- 光照贴图(关于光照贴图)
- 透明纹理(关于使用alpha纹理丢弃片段,Alpha Test和混合)
- 纹理层(关于多重纹理)
3D纹理
- 弯曲表面光照(关于正常映射)
- 凹凸表面的投影(关于视差映射)
- Cookies(关于塑造光的投影纹理贴图)
- 投影机(投影机投影纹理贴图)
环境映射
- 反射曲面(关于反射映射)
- 弯曲玻璃(关于折射映射)
- Skyboxes(关于渲染环境地图作为背景)
- 多光源(关于图像照明)
照明变化
- 拉丝金属(关于各向异性镜面反射)
- 轮廓的镜面高光(关于镜面反射的菲涅尔因子)
- 天光漫反射(关于半球照明)
- 半透明表面(关于背光的漫反射和前向散射传输)
- 半透明体(关于散射照明,减少对比度和弥漫背光在轮廓上的传播)
- 球体的软阴影(关于渲染球体的阴影和半影)
- Toon Shading(关于非真实感渲染)
非标准顶点变换
- 屏幕叠加(关于从对象空间到屏幕空间的直接转换)
- 广告牌(关于对象的视图对齐投影)
- 非线性变形(关于顶点混合)
- 飞机上的阴影(关于将阴影投射到飞机上)
图像效果和计算着色器
- 最小图像效果(关于片段着色器的基本图像后期处理)
- 计算图像效果(关于使用计算着色器进行图像效果处理)
- 计算颜色直方图(关于使用计算着色器计算颜色直方图)
- 计算最亮的像素(关于使用计算着色器找到最亮的像素)
杂项
- 贝塞尔曲线(Bézier曲线和样条曲线)
- Hermite曲线(关于立方体Hermite曲线和splines)
- 旋转(欧拉角和四元数)
- 虚拟现实投影(关于离轴透视投影)
- 镜像(关于渲染平面镜与渲染纹理)