跳转至内容

使用 XNA 创建游戏/3D 开发/天空盒

来自 Wikibooks,开放世界开放书籍

天空盒

[编辑 | 编辑源代码]

天空盒给游戏一个周围的环境和基础。无论是赛车、第一人称射击游戏还是太空模拟,天空盒都让游戏感觉更真实。在最原始的版本中,它只是将 6 张图像投影到无穷远处一个假想立方体的各个侧面。在这里,我们将向你展示如何轻松地创建简单的天空盒。但天空盒也可以更复杂。它们可以是圆顶形状的,可以模拟日落和黎明,以及升起的太阳。另外还提供了如何创建这些天空盒的示例。

创建简单的天空盒

[编辑 | 编辑源代码]

首先你需要为每个立方体面创建六张图像。有多种方法可以实现这一点。然而,这取决于你想要在场景中呈现什么。因此你可以拍摄一些数码照片并从中生成天空盒。另一种可能性是使用其他人创建的天空盒(公有领域)。当然,如果你从头开始创建一切,你将拥有最大的自由。这就是我们要做的事情。在下面的示例中,我们将使用 Terragen 2(非商业版本)。

使用 Terragen 2 创建天空盒图像

[编辑 | 编辑源代码]

我的重点是为你带来快速的结果,而不是深入的信息。如果你想更深入地研究,请查看我为我的指南提供的教程。

启动 Terragen 后,你会看到默认场景,包括一个带有大气层的扁平星球。第一步是将这个扁平空间改造成更有趣的地形。

添加地形

[编辑 | 编辑源代码]

你可以使用 高度场过程生成 在 Terragen 2 中生成地形。

使用高度场
[编辑 | 编辑源代码]
  • 在“地形”部分选择“高度场生成”节点
  • 点击“立即生成”按钮,等待进程完成。3D 预览现在显示了新的地形。
  • 放大右上角 Terragen 窗口的“导航面板”
  • 它将变为完整的导航控制
  • 你可以使用这些控件在场景中导航。点击“立即生成”按钮,使用这些参数进行试验,以了解它们如何影响地形。
  • 然后找到一个你喜欢的点,例如山顶或山丘。
  • 在 3D 预览部分下面的工具栏中找到“复制到当前相机”按钮。点击它将改变渲染相机到你当前的视角。执行此操作。
  • 点击顶部工具栏中的“打开渲染视图”(R)按钮,然后按下“渲染”按钮。

等待渲染器完成,欣赏你的第一个渲染视图。现在使用“导航控件”移动到地面上方的位置,这样你就可以看到地平线。你会注意到仍然有很多平坦的表面。这是因为高度场的限制。现在,我们可能想要使用过程生成来改变这一点。

由高度场生成的山形


使用过程生成
[编辑 | 编辑源代码]
  • 首先通过选择“高度场着色器”并取消选中“启用”复选框来禁用它。
  • 现在表面将再次变得平坦。
  • 点击“添加地形”,然后选择“动力分形”。
  • 节点列表中将出现一个新的“动力分形”节点。你可能想要给它一个好名字,并将其重命名为“山脉”。
  • 注意整个地形是如何改变的。到处都是山脉!
  • 现在再次使用“导航控件”选择一个合适的视角点。选择一个具有良好海拔高度组合的点,例如被山脉环绕的谷底。
  • 然后再次点击 3D 预览部分下面的工具栏中的“复制到当前相机”按钮。
  • 点击顶部工具栏中的“打开渲染视图”(R)按钮,然后按下“渲染”按钮。
由动力分形过程生成的山形

使用着色器纹理化

[编辑 | 编辑源代码]

现在我们将使用着色器添加更鲜明的颜色和纹理。

修改山地地面颜色
[编辑 | 编辑源代码]
  • 打开“着色器”布局
  • 选择列表中的“基本颜色”节点,并查看点击“颜色”选项卡时呈现的参数。
  • 为“高亮颜色”选择棕色,并通过调整滑块来调整“亮度”。你现在可以保留“低亮颜色”。
添加类似草的纹理
[编辑 | 编辑源代码]
  • 点击节点列表上方的“添加层”按钮,然后从下拉菜单中选择“表面层”。节点列表中将出现一个新的着色器节点。
  • 现在转到新添加的着色器的“颜色选项卡”,并使用“颜色选择器”选择绿色/黄色色调。
  • 你可能想要将其重命名为“草”,因为我们将使用这个着色器来为世界添加草。
  • 转到“海拔高度约束”选项卡,并选中“限制最大海拔高度”复选框。
  • 将“最大海拔高度”设置为 400-500 之间的值。
  • 将“最大海拔高度模糊区域”更改为约 100 的值(海拔高度约束处的截止点的锐利程度)。
  • 转到“坡度约束”选项卡,并选中“限制最大坡度”复选框。
  • 将“最大坡度角”设置为约 30 的值。
  • 将“最大坡度模糊区域”更改为约 15 的值。

你可能想要花一些时间调整上面提到的所有参数,以便将所有东西都按照你想要的方式塑造。渲染以查看调整的效果。

控制草层的显示
[编辑 | 编辑源代码]
  • 转到覆盖和分解选项卡。覆盖控制此图层将覆盖的底层表面的数量。分形分解控制图层的分布。
  • 将覆盖设置为 0.7,将分形分解设置为 1 以获得良好的效果,但可以根据需要进行调整。

如您所见,Terragen2 是一个强大的工具,但这仅仅是开始。您可以继续添加雪山、快速山谷和水,然后整合大气和闪电。我们现在将其留待处理,并开始构建我们的天空盒。

渲染的图像带有水、草和雪纹理、大气和阳光

相机设置

[编辑 | 编辑源代码]

现在,您必须决定您想在项目的天空盒中呈现哪个视角。继续并使用导航控件找到一个好位置。

  • 单击屏幕顶部的渲染器布局按钮。
  • 选择/完整渲染,然后单击添加按钮。在下拉菜单中选择创建新相机。创建另外四个相机。

切换到相机布局在这里,您将看到新相机的列表以及默认的渲染相机。我们将使用这六个相机来渲染天空盒所需的所有视图。但首先,我们必须配置它们。

  • 选择第一个相机,并将其重命名为北。三个位置字段描述了您的实际位置,并将与我的不同。
  • 将旋转字段的三个值设置为 0。
  • 选择透视单选按钮,然后选择使用水平视野单选按钮。将值更改为 90 度。

按以下表格编辑其他相机

相机 01 相机 02 相机 03 相机 04 相机 05 相机 06
名称 西
位置 a/b/c a/b/c a/b/c a/b/c a/b/c a/b/c
旋转 0/0/0 0/90/0 0/180/0 0/270/0 90/0/0 270/0/0
透视 已选中 已选中 已选中 已选中 已选中 已选中
水平 FOV 已选中 已选中 已选中 已选中 已选中 已选中
90 90 90 90 90 90

注意:a/b/c 是您的位置值的占位符。找到要用于天空盒的相机位置后,您只需将相同的值复制到所有六个相机即可。

返回渲染器布局

  • 选择快速渲染,并使用渲染器详细信息视图中的添加将六个相机中的一个分配给它。
  • 单击渲染图像以查看其低质量渲染。
  • 您可能想要重复此操作以检查所有相机。

渲染/质量设置

[编辑 | 编辑源代码]

Terragen 2 中有两个预配置的渲染器。完整渲染旨在生成高质量的输出。因此,您只会在想要测试项目真实外观或想要渲染和导出时使用它。这取决于您的设置,但预计此渲染器将花费一些时间。快速渲染旨在让您快速了解,因此渲染时间很短。当然,您可以根据需要配置它们,或创建其他渲染器。

现在,我们将配置完整渲染器,然后为天空盒创建所有图像。

转到渲染器布局

  • 选择完整渲染,并将图像宽度图像高度更改为 512。
  • 使用添加按钮选择一个相机,并将其分配给渲染器。
  • 质量选项卡中,将细节参数设置为 1。
  • 现在,从相机下拉列表中选择第一个相机,然后按渲染图像按钮。
  • 等待渲染器完成。
  • 单击保存按钮将图像保存到磁盘。由于我们将与 XNA 一起使用,您可能需要将其保存为 Windows 位图 (.bmp)
  • 然后渲染其他相机。

关于在场景中使用 GI 的说明
您可能想要通过将GI 相对细节GI 样本质量GI 模糊半径设置为零来关闭 GI(全局照明)。
这是因为 GI 会导致天空盒中出现可见的边缘。您可能需要调整照明配置以照亮场景。

渲染完所有相机后,您可能想要在您喜欢的图像编辑程序中对齐图像,并检查它们是如何拼凑在一起的。

天空盒图像按其在天空盒中的位置对齐

XNA 集成

[编辑 | 编辑源代码]

创建天空盒立方体贴图

[编辑 | 编辑源代码]

将天空盒添加到 XNA 项目的一种方法是生成立方体贴图文件,您可以稍后轻松加载它。一个快速简便的方法是使用 ATI 的名为CubeMapGen 的工具。

使用 CubeMapGen 创建天空盒立方体贴图

在 CupeMapGen 中

  • 选择D3D 立方体作为导出图像布局。
  • 在显示部分选择天空盒复选框。
  • 现在,您可以将天空盒图像应用到立方体面,方法是从下拉菜单中选择立方体面,然后加载相应的图像,并单击加载立方体贴图面按钮。

根据之前创建的天空盒图像的对齐方式,轴映射如下

西
X+ X- Y+ Y- Z+ Z-

完成时,通过单击保存立方体贴图 (.dds) 按钮将立方体贴图保存为 DDS 文件。

在 XNA 中集成天空盒立方体贴图

[编辑 | 编辑源代码]

教程

天空穹顶

[编辑 | 编辑源代码]

与天空盒相同的概念,但使用的是球体而不是立方体。可用于模拟大气和太阳运动(黎明、黄昏)。
请参阅有关如何创建这些的教程。

http://www.planetside.co.uk/wiki/index.php/Terragen_2_Tutorials#360.C2.BA_Panoramas_.2F_SkyBoxes
http://www.planetside.co.uk/wiki/index.php/Main_Page

天空盒

[编辑 | 编辑源代码]

http://en.wikipedia.org/wiki/Skybox_(video_games)
http://wiki.delphigl.com/index.php/Skybox

天空盒教程

[编辑 | 编辑源代码]

http://wiki.delphigl.com/index.php/Skybox
http://www.stromcode.com/2008/03/30/building-an-xna-skybox-with-blender/
http://rbwhitaker.wikidot.com/skyboxes-1
http://wiki.delphigl.com/index.php/Tutorial_Skyboxen

天空盒

[编辑 | 编辑源代码]

准备好的可免费使用的天空盒(公有领域)
http://rbwhitaker.wikidot.com/texture-library

天空穹顶

[编辑 | 编辑源代码]

http://wiki.delphigl.com/index.php/Skydome

天穹教程

[编辑 | 编辑源代码]

http://www.xnamag.de/article.php?aid=40
http://www.flipcode.com/archives/Sky_Domes.shtml
https://wikibooks.cn/wiki/Blender_3D:_Noob_to_Pro/Build_a_skybox

http://en.wikipedia.org/wiki/Cube_mapping

参考文献

[编辑 | 编辑源代码]

http://www.planetside.co.uk/docs/tg2/first-scene.pdf
http://www.outpt.co.uk/how-to-create-a-terragen-2-skybox/

arie

华夏公益教科书