第八章 Gleaming the Cube
本章介绍图形学相关主题的分类,主要包括skybox rendering,environment mapping,fog,以及color blending(天空的渲染,背景环境的纹理映射,雾境,颜色混合)。前两种effects有一个共同点:都是通过texture cubes实现的。学习这些知识将会让你在图形学的道路上走得更远。
Texture Cubes
一个texture cube(也称为cube贴图)是一个6个2D纹理的集合。每一个纹理对应于以world space原点为中心,轴对齐的立方体的一面。这些纹理可以分别单独存储在一个文件中,或者存储在同一个DDS格式(第3章,“Tools of the Trade”讨论了DDS格式)的文件中。图8.1显示了所有纹理存储在同一个文件中的texture cube,并标出了对应cube的每一面。
图8.1 A texture cube. Each face is labeled with the corresponding axis. (Texture by Emil Persson.)
Creating Texture Cubes
有各种各样的工具可以创建texture cubes。比如,NVIDIA的DDS通用程序包中包含了一个命令行工具nvDXT,就可以创建texture cubes(本书的配套网站上提供了链接)。nvDXT以一系列单个的纹理作为命令行参数,把这些纹理编译到一个texture cube中,并存储为DDS格式的文件。
Microsoft提供了DirectX Texture Tool用于创建DDS文件,该工具包含在独立的DirectX SDK安装包中(而不是Windows SDK的一部分)。图8.2中,使用DirectX Texture Tool加载了一个texture cube,并选择了主菜单下的Cube Map Face菜单项。使用该菜单荐可以指定显示cube map的某一面。
Microsoft提供了DirectX Texture Tool用于创建DDS文件,该工具包含在独立的DirectX SDK安装包中(而不是Windows SDK的一部分)。图8.2中,使用DirectX Texture Tool加载了一个texture cube,并选择了主菜单下的Cube Map Face菜单项。使用该菜单荐可以指定显示cube map的某一面。
图8.2 The DirectX Texture Tool. (Texture by Emil Persson.)
要新建一个cube map,选择主菜单的File-->New Texture,并指定纹理类型为Cubemap Texture(如图8.3所示)。然后设定纹理的分辨率,MipMap Levels的数量,以及纹理格式。创建了一个空的texture cube之后,就可以给cube的每一面指定一个纹理图,选择主菜单View-->Cube Map Face指定Cube的某个面,然后选择主菜单File-->Open Onto This Cubemap Face添加一张图片。
图8.3 The New Texture dialog box of the DirectX Texture Tool.
警告
我曾经见过DirectX Texture Tool在cube map每个面上都增加了一个1-pixel宽的边框。如果你得到的texture cube中出现了明显的接鏠,你可能想要检查一下这个问题。使用Adobe Photoshop打开该DDS文件,并放大纹理图就可以看到接缝。
我曾经见过DirectX Texture Tool在cube map每个面上都增加了一个1-pixel宽的边框。如果你得到的texture cube中出现了明显的接鏠,你可能想要检查一下这个问题。使用Adobe Photoshop打开该DDS文件,并放大纹理图就可以看到接缝。
除了使用一系列textures创建一个texture cube外,还有另一问题要处理,如何创建这些单个的纹理。有多种工具用于创建纹理,比如Planetside Software的Terragen和e-on software的Vue。有很多网站上提供了免费的工具,以及免费的纹理图。本书的配套网站提供了部分资源的链接。
Sampling Texture Cubes
对一个Texture cube进行sample,使用一个以cube中心为起点的三维方向向量。根据该向量与cube相交的那一面选择纹理。图8.4描述了这个概念。第5章,“Texture Mapping”所讨论的texture filtering settings在texture cube中依然适用。
图8.4 An illustration of texture cube sampling. (Texture by Emil Persson.)