povray[0] = 第一幅画

2

前言

povray 是用来画画的,它的全称是 Persistence of Vision Raytracer。

我不会画画。我的一个朋友遭遇短期囹圄之灾后,一直闭门在家画画……不过,没遭此灾时,他也是一直闭门在家画画。他最近在学 3D MAX。我说,可以学 povray 阿,他说这玩意能画 18X 吗……

不能!povray 虽然也能画,但是它能画的东西,是 CSG 形体,也就是可以用球、方块、锥体、圆柱、圆环等基本形体堆砌而成的形体。理论上,任何三维形体可以用一堆小方块堆砌而成,这些小方块叫做体素。简而言之,povray 适合画 Minecraft。

povray 虽然不擅长绘画,但是它擅长摆弄光线。没有了光,我们只能画一群乌鸦在夜里飞。povray 提供了一种三维场景描述语言。利用这种语言,可以描述相机是如何摆放的,物体的位置以及它们的表面是什么颜色的,光源在哪个方位以及它发出什么颜色的光。povray 可以根据这些描述,绘制一幅「照片」级别的画。

可通过以下命令在 Gentoo 中安装 povray:

$ sudo emerge -avt povray

下面,通过这种三维场景语言,描述一个只存在一个球体的三维场景,初步了解一下 povray 的能耐。

下文中的 povray 三维场景代码,是以 orez 源文件中的代码片段的形式给出的。可从「orez 的故事」了解 orez 的用法。

准备

可能是从 3.7 版本(我写此文时最新的 povray 版本)开始,povray 的三维场景文件的首部必须放置版本声明语句:

@ 版本声明 #
#version 3.7;
@

相机

下面的代码定义了一个相机,它位于 (0, 2, -3),所拍摄的画面的中心位于 (0, 1, 2)

@ 设定相机 #
camera {
  location <0, 2, -3>
  look_at  <0, 1,  2>
}
@

若要在大脑中构建出这个相机的方位,需要了解 povray 的坐标系。povray 的坐标系是左手系。以计算机屏幕为参考平面,X 轴表示水平方向,自左向右;Y 轴表示竖直方向,自下向上;Z 轴表示垂直于屏幕的方向,自外向内。坐标原点位于屏幕中心。

物体

在相机拍摄的画面的中心位置 (0, 1, 2) 放置一个半径为 2 的黄色球体:

@ 球体 #
sphere {
  <0, 1, 2>, 2
  texture {
    pigment { color Yellow }
  }
}
@

按照 povray 三维场景语法,Yellow 实质上是:

rgb <1, 1, 0>

由于它是常见的颜色,povray 在 colors.inc 文件中对它进行了定义:

#declare Yello = rgb <1, 1, 0>;

colors.inc 文件的位置依赖于操作系统以及你的安装方式而定。在我的机器上,它位于 /usr/share/povray/include。若在场景文件中使用 colors.inc 中定义的颜色,需要使用 #include 指令加载它:

@ 预定义的场景文件 #
#include "colors.inc"
@

光源

(2, 4, -2) 处放置一个白色光源:

@ 设定光源 #
light_source {
  <2, 4, -2>
  color White
}
@

渲染

将上述语句块组合起来便可得到一份完整的 povray 三维场景文件:

@ 只存在一个球体的场景 #
# 版本声明 @

# 预定义的场景文件 @

# 设定相机 @

# 设定光源 @

# 球体 @
@

现在,可将这份描述了相机、物体以及光源等信息的三维场景文件交由 povray 解析、渲染、输出。

可以使用 orez 工具,从本文档中提取全部的三维场景代码:

$ orez povray-0.md -t -e "只存在一个球体的场景" -o sphere.pov

其中 povray-0.md 是本文档的文件名,sphere.pov 是存放三维场景代码的文件。

照顾一下不懂 orez 的人,下面给出 sphere.pov 文件的全部内容:

#version 3.7;
#include "colors.inc"

camera {
  location <0, 2, -3>
  look_at  <0, 1,  2>
}

sphere {
  <0, 1, 2>, 2
  texture {
    pigment { color Yellow }
  }
}

light_source {
  <2, 4, -2>
  color White
}

使用以下命令,可将场景文件 sphere.pov 交由 povray 解析,以获得渲染结果 sphere.png :

$ povray sphere.pov

在 X11 环境(大部分 Linux 桌面的基本图形环境)中,povray 会在自身运行过程中,将渲染结果逐渐的在一个 X11 窗口中显示出来,待其运行过程结束后,这个 X11 窗口会自动关闭,最终的渲染结果默认保存于 PNG 格式的图片文件。

对于上述示例而言,会出现类似于下图所示的 X11 窗口:

sphere

渲染结果会被保存为 sphere.png 文件。


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

载入中...