Contents
Unity引擎中的Cg编程要比OpenGL或者Direct3D中的Cg编程容易的多
引言(Preliminaries)
可以从Unity的下载页面下载适用于Windows和MacOS的免费版本的Unity。所有包含的教程都使用免费的版本。需要注意几点:
- 首先,这部分是关于在Unity标准的3D内置管线中的顶点(Vertex)和片元(Fragment)着色器(Shader)。这种着色器编程特别灵活,可以让你编写非常高效的shaders,当渲染性能受限制时这通常很重要,例如:在移动设备上。它对于图形特效以及了解GPU的大体工作方式也非常有用.如果要考虑Unity的标准光照,那么对顶点和片元着色器编程将不太有用。(在这种情况下,Surface Shaders和Shader Graph更适合于在Unity中使用。)
- 第二,本部分假设读者已经对Unity有所了解。如果不是的话,读者应该查阅Unity手册的前面几节内容。
- 第三,Unity不区分Cg(Nvidia的着色器语言)和DirectX 9样式的HLSL(Direct3D 9的着色器语言),因为这两种语言非常相似。因此,这些教程中的大部分也适用于DirectX 9样式的HLSL 。
- 此外, Nvidia’s Cg Tutorial和 Nvidia’s Cg Language Specification记录了Cg。但是这些描述都缺少关于Unity的详细内容。另一方面, Unity着色器文档侧重于Unity的ShaderLab语法,并假设读者熟悉Cg。因此,在没有Cg的准备知识情况下在Unity中学习Cg编程可能会比较困难。此Wikibook试图通过提供Unity中的Cg编程来弥补这段缺口,而不要求先有Cg的知识。
教程(Tutorials)
注意,这些教程假设您已经按照此处显示的顺序阅读,也就是每个教程假设您已经熟悉之前介绍的概念和技术。如果您不熟悉Cg或者Unity,请至少阅读教程中的“基础(Basics)”部分。
基础(Basics)
- Minimal Shader(关于着色器Shaders,材质Materials和游戏对象Game Objects)
- RGB Cube(关于顶点Vertext输出参数)
- Debugging of Shaders(关于顶点输入参数)
- Shading in World Space(关于uniforms)
透明表面(Transparent Surfaces)
- Cutaways(关于片元的减少和三角形面的剔除)
- Transparency(关于混合)
- Order-Independent Transparency(无关顺序的混合)
- Silhouette Enhancement (关于法向量的变换)
基础光照(Basic Lighting)
- Diffuse Reflection (关于每个顶点的漫反射光照和多种不同类型的光源)
- Specular Highlights(关于每个顶点光照)
- Two-Sided Surfaces(关于顶点两面的光照)
- Smooth Specular Highlights (关于每个像素的光照)
- Two-Sided Smooth Surfaces (关于每个像素两面的光照)
- Multiple Lights(关于在一个Pass中处理多个光源的for循环)
基础材质(Basic Texturing)
- Textured Spheres(关于球体的纹理化)
- Lighting Textured Surfaces(关于漫射照明的纹理)
- Glossy Textures (关于光泽贴图)
- Transparent Textures(关于使用alpha纹理丢弃片段,进行alpha测试和混合)
- Layers of Textures(关于多重纹理)
3D中的纹理(Textures in 3D)
- Lighting of Bumpy Surfaces(关于法线贴图)
- Projection of Bumpy Surfaces(关于视差贴图 )
- Displacement Maps(关于顶点着色器中的纹理查找)
- Cookies(关于塑造光的投影纹理映射)
- Projectors(关于投影仪的投影纹理映射)