Cg 编程/Unity
外观
< Cg 编程
在游戏引擎 Unity 中进行 Cg 编程比为 OpenGL 或 Direct3D 应用程序进行 Cg 编程要容易得多。网格和图像(即纹理)的导入由图形用户界面支持;可以自动计算 mipmap 和法线贴图;大多数常见的顶点属性和统一变量都是预定义的;OpenGL 和 Direct3D 状态可以通过非常简单的命令来设置;等等。
可以在 Unity 的下载页面 下载适用于 Windows 和 MacOS 的 Unity 免费版本。所有包含的教程都适用于免费版本。需要注意几点
- 首先,这部分内容介绍了 Unity 标准 3D 内置管线中的顶点和片段着色器。这种着色器编程特别灵活,允许您编写非常高效的着色器,这在渲染性能有限的情况下(例如,在移动设备上)通常很重要。它对于图像特效和了解 GPU 的总体工作原理也非常有用。如果需要考虑 Unity 的标准光照,则顶点和片段着色器的编程用处不大。(在这种情况下,在 Unity 中首选使用表面着色器和着色器图。)
- 其次,这部分内容假设读者对 Unity 有一定的了解。如果不是这样,读者应该查阅 Unity 手册的前几节内容(Unity 基础、资源工作流程 和 主要窗口)。
- 第三,Unity 不区分 Cg(Nvidia 的着色语言)和 DirectX 9 样式的 HLSL(Direct3D 9 中的着色语言),因为这两种语言非常相似;因此,这些教程中的大多数也适用于 DirectX 9 样式的 HLSL。
- 此外,Cg 由 Nvidia 的 Cg 教程 和 Nvidia 的 Cg 语言规范 进行记录。但是,这些描述缺少 Unity 特定的细节。另一方面,Unity 的着色器文档 侧重于 Unity 的 ShaderLab 语法,并假设读者熟悉 Cg。因此,在没有 Cg 先验知识的情况下学习 Unity 中的 Cg 编程可能相当困难。本维基教科书试图通过提供 Unity 中 Cg 编程的入门教程来弥合这一差距,而无需 Cg 的先验知识。
请注意,教程假设您按照此处显示的顺序阅读它们,即每个教程都假设您熟悉前面教程中介绍的概念和技术。如果您是 Cg 或 Unity 的新手,您至少应该通读“基础”部分中的教程。(现在您已经得到警告了!)
- 漫反射(关于每个顶点的漫反射光照和不同类型的多个光源)
- 镜面高光(关于每个顶点的光照)
- 双面表面(关于双面每个顶点的光照)
- 平滑镜面高光(关于每个像素的光照)
- 双面平滑表面(关于双面每个像素的光照)
- 多个光源(关于用于在一个着色器通道中处理多个光源的 for 循环)
- 拉丝金属(关于各向异性镜面反射)
- 轮廓处的镜面高光(关于镜面反射的菲涅尔系数)
- 天空光的漫反射(关于半球光照)
- 半透明表面(关于背光漫反射和前向散射透射)
- 半透明物体(关于对比度降低的漫反射光照以及轮廓处漫反射背光的透射)
- 球体的软阴影(关于渲染球体的本影和半影)
- 卡通渲染(关于非真实感渲染)
- 最小图像特效(关于使用片段着色器进行基本的图像后期处理)
- 计算图像特效(关于使用计算着色器进行图像特效)
- 计算颜色直方图(关于使用计算着色器计算颜色直方图)
- 计算最亮像素(关于使用计算着色器查找最亮像素)
- 贝塞尔曲线(关于二次贝塞尔曲线和样条曲线)
- 埃尔米特曲线(关于三次埃尔米特曲线和样条曲线)
- 旋转(关于欧拉角和四元数)
- 虚拟现实投影(关于离轴透视投影)
- 镜子(关于使用渲染纹理渲染平面镜)
- 传送门(关于使用模板缓冲区渲染到另一个场景的传送门或魔法镜头)
- 雾
- 光照贴图
- 粒子
- 光晕
- 球谐光照
- 使用 ReadPixels 生成立方体纹理
- Unity 图形管线
- 每顶点计算与每片段计算
- 混合和丢弃(以及 Alpha 测试)
- 变量精度
- 纹理采样
- 其他建议
- [stub:] 水反射和折射(关于水)
- 阴影贴图
- Z 优先级
- 色键
- 发光线条
- 球体环境光遮蔽(来自天空光的球体软阴影)
- 水波(过程法线贴图)
- 曲面镜(光线追踪反射)
- 无模板缓冲区的阴影体积
- 动画精灵
- 过程纹理(噪声)
- 闪光效果
- Unity 着色器参考:https://docs.unity3d.org.cn/Manual/SL-Reference.html
- Unity 社区 Wiki 中的着色器:http://wiki.unity3d.com/index.php/Shaders
- Unity 用户论坛关于着色器:http://forum.unity3d.com/forums/16-ShaderLab
- 图形方面的视频教程:http://unity3d.com/learn/tutorials/topics/graphics
- 关于 SIGGRAPH 上着色器优化演示的博客文章:http://blogs.unity3d.com/2011/08/18/fast-mobile-shaders-talk-at-siggraph/
< Cg 编程
除非另有说明,否则本页面上的所有示例源代码均授予公有领域。