跳至内容

Cg 编程/Unity/简介

来自维基教科书,开放的世界,开放的书籍

关于 Cg

[编辑 | 编辑源代码]

Nvidia 的编程语言 Cg(C 代表图形)是几种常用的实时渲染着色语言之一(其他例子有 Direct3D 的 HLSL 和 OpenGL 的 GLSL)。这些着色语言用于编程着色器(即或多或少的小程序),这些着色器在 GPU(图形处理单元)上执行,即计算机图形系统的处理器——而不是计算机的 CPU(中央处理单元)。

GPU 是大规模并行处理器,非常强大。今天游戏中和其它交互式图形应用程序中的大多数实时图形,如果没有 GPU 都是不可能实现的。然而,为了充分利用 GPU 的性能,有必要直接对其进行编程。这意味着必须编写可以由 GPU 执行的小程序(即着色器)。编写这些着色器的编程语言是着色语言。Cg 就是其中之一。事实上,它是 GPU 的第一个高级着色语言之一,并且已在几个 3D 图形 API(应用程序编程接口)中实现,最重要的是 OpenGL 和 Direct3D。今天,它流行的主要原因是它与 HLSL 的相似性,HLSL 是微软 Direct3D 的着色语言。在实践中,Cg 和 HLSL 着色器之间通常没有区别。

关于这本维基教科书

[编辑 | 编辑源代码]

这本书是为那些不喜欢编程也不喜欢数学的学生写的。这本书的基本动机是观察到,如果学生参与特定项目,他们学习编程环境、编程语言和 API 的动机要强得多。这些项目通常是在特定平台上开发的,因此本书的方法是在游戏引擎 Unity 中介绍 Cg。

本书的第 1 章到第 9 章包含带工作示例的教程,这些示例会产生某些效果。请注意,这些教程假设您按照它们的呈现顺序阅读它们,即每个教程都假设您熟悉前一个教程中介绍的概念和技术。如果您不熟悉 Cg 或 Unity,您至少应该通读第 1 章“基础”中的教程。

关于可编程图形管道和 Cg 语法的一般信息包含在“关于可编程图形管道和 Cg 语法”的附录中。不熟悉 GPU 或 Cg 的读者可能至少想浏览一下这部分内容,因为对该管道和 Cg 语法的基本了解对于理解教程非常有用。

关于 Cg 在 Unity 中的使用

[编辑 | 编辑源代码]

在游戏引擎 Unity 中进行 Cg 编程比为 OpenGL 或 Direct3D 应用程序进行 Cg 编程要容易得多。网格和图像(即纹理)的导入由图形用户界面支持;mipmap 和法线贴图可以自动计算;最常见的顶点属性和一致变量是预定义的;OpenGL 和 Direct3D 状态可以通过非常简单的命令设置;等等。

可以在Unity 的下载页面上为 Windows 和 MacOS 下载免费版本的 Unity。所有包含的教程都适用于免费版本。需要注意三点

  • 首先,这些教程假设读者对 Unity 有所了解。如果不是这样,读者应该参考 Unity 用户指南的前三部分[1](Unity 基础、构建场景、资产导入和创建)。
  • 其次,Unity 不区分 Cg(Nvidia 的着色语言)和 HLSL(Direct3D 中的着色语言),因为这两种语言非常相似;因此,这些教程中的大多数也适用于 HLSL。
  • 此外,Cg 由Nvidia 的 Cg 教程Nvidia 的 Cg 语言规范进行文档化。但是,这些描述缺少 Unity 特定的细节。另一方面,Unity 的着色器文档[2]侧重于用 Unity 自己的“表面着色器”格式编写的着色器,而 Cg/HLSL 中的着色器文档非常有限[3]。因此,在没有 Cg 方面的先验知识的情况下学习 Unity 中的 Cg 编程可能相当困难。本书试图通过在不需要事先了解 Cg 的情况下提供 Unity 中的 Cg 编程简介来弥合这一差距。


 


马丁·克劳斯,2013 年 3 月

华夏公益教科书