Skip to content

Commit

Permalink
修正少量翻译
Browse files Browse the repository at this point in the history
  • Loading branch information
kanition committed May 25, 2021
1 parent ec0738d commit 5424c0f
Show file tree
Hide file tree
Showing 12 changed files with 52 additions and 54 deletions.
21 changes: 10 additions & 11 deletions content/chap0102.tex
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ \section{逼真渲染和光线追踪算法}\label{sec:逼真渲染和光线追
\item \keyindex{相机}{cameras}{camera相机}: 相机模型决定了从哪里、怎样观察场景,
包括场景的图像是怎样记录到传感器上的。
许多渲染系统从相机处开始生成视线并追踪到场景中。
\item \keyindex{光线-物体交点}{ray–object intersections}{}: 此外,我们需要确定
\item \keyindex{光线-物体相交}{ray–object intersections}{}: 此外,我们需要确定
交点处物体的特定属性,例如曲面法线或材质。
多数光线追踪器都有测试光线与多个物体相交的功能,
典型的例如沿光线返回最近交点。
Expand Down Expand Up @@ -116,15 +116,14 @@ \subsection{相机}\label{sub:相机}
\refsec{逼真相机}介绍了这类模型的实现)。


\subsection{光线-物体交点}\label{sub:光线-物体交点}
\subsection{光线-物体相交}\label{sub:光线-物体相交}

相机每次生成射线时,
渲染器第一个任务就是确定
如果有的话,哪个物体和该射线最先\keyindex{相交}{intersect}{},
交点在哪里。
如果有的话,哪个物体和该射线最先在哪里\keyindex{相交}{intersect}{}。
\keyindex{交点}{intersection point}{point点}是沿射线可见的,
我们想要模拟光在该点与物体的相互作用。
为了找到交点,我们必须把场景中的所有物体拿来和该射线测试,
为了找到相交处,我们必须把场景中的所有物体拿来和该射线测试,
并选出与该射线首先相交的那个。
给定一射线${\bm r}$,首先将其写成\keyindex{参数形式}{parametric form}{}:
\begin{align*}
Expand Down Expand Up @@ -162,9 +161,9 @@ \subsection{光线-物体交点}\label{sub:光线-物体交点}

当然,绝大多数场景含有多个物体。
暴力法指依次用每个物体对射线测试,
从所有交点中选出$t$的最小正值来求得最近交点。
从所有相交中选出$t$的最小正值来求得最近交点。
该方法虽然正确但对哪怕适度复杂的场景也很慢。
更好的方法是在射线交点处理中
更好的方法是在光线相交处理中
并入一个\keyindex{加速结构}{acceleration structure}{}快速否决整组物体。
快速剔除无关几何体的能力意味着光线追踪常能以$O(I\log{N})$的时间运行,
其中$I$是图像像素数目,
Expand All @@ -181,11 +180,11 @@ \subsection{光线-物体交点}\label{sub:光线-物体交点}
(然而构建加速结构本身至少需要$O(N)$时间)。

pbrt为各种形状实现的几何接口将在第\refchap{形状}介绍,
加速接口和实现在第\refchap{图元和交点加速}。
加速接口和实现在第\refchap{图元和相交加速}。

\subsection{光分布}\label{sub:光分布}

光线-物体交点阶段给出了要着色的点和该点的局部几何信息
光线-物体相交阶段给出了要着色的点和该点的局部几何信息
回想我们的最终目标是找出从该点出发朝相机方向传播的光量。
为此需要知道有多少光\emph{到达}了该点。
这同时涉及到场景中光的\emph{几何}和\emph{辐射}分布。
Expand Down Expand Up @@ -260,8 +259,8 @@ \subsection{可见性}\label{sub:可见性}
其端点是表面上的点,方向指向光源。
这种特殊射线称为\keyindex{阴影射线}{shadow ray}{ray射线}。
如果追踪这些射线穿过环境,
我们就能检查在射线原点与光源之间能否找到交点
方法是沿射线方向比较交点和光源位置的相应参数值$t$
我们就能检查在射线原点与光源之间能否找到相交处
方法是沿射线方向比较相交处和光源位置的相应参数值$t$
如果光源与表面之间没有遮挡物,
就应考虑该光源的作用。

Expand Down
39 changes: 19 additions & 20 deletions content/chap0103.tex
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
\section{pbrt:系统概述}\label{sec:pbrt:系统概述}

pbrt是使用标准的\keyindex{面向对象}{object-oriented}{}技术构建的:
重要实体都定义了抽象\keyindex{基类}{base class}{class类}(例如
pbrt是用标准的\keyindex{面向对象}{object-oriented}{}技术构建的:
重要实体都定义了抽象\keyindex{基类}{base class}{class类}(
抽象基类\refvar{Shape}{}定义了所有几何形状必须实现的接口,
光源的抽象基类\refvar{Light}{}也有相似设计)。
系统大部分都纯粹是由这些抽象基类提供的接口来实现的
例如检查光源与着色点之间遮挡物体的代码
系统大部分都纯粹是由这些抽象基类提供的接口实现的
如检查光源与着色点之间遮挡物体的代码
调用\refvar{Shape}{}的相交方法
而不用考虑场景中出现的特定类型的形状。
这种方式使得扩展系统变得很容易
新增一种形状只需要实现一个完成\refvar{Shape}{}接口的类并链接到系统。
该方式让扩展系统变得很容易
新增一种形状只需实现一个完成\refvar{Shape}{}接口的类并链接到系统。

pbrt用10个关键抽象基类写成,列于\reftab{1.1}。
向系统添加这些类的新实现很简单;
Expand All @@ -21,8 +21,7 @@ \section{pbrt:系统概述}\label{sec:pbrt:系统概述}
\sidenote{译者注:原书此处似乎链接错误,已纠正。}
将讨论这种扩展系统的方法的更多细节。


\begin{table}[h]
\begin{table}[htbp]
\centering
\begin{tabular}{l l l}
\toprule
Expand Down Expand Up @@ -302,7 +301,7 @@ \subsection{场景表示}\label{sub:场景表示}
因为它实现了\refvar{Primitive}{}接口,
所以从单个图元到系统其余部分似乎没什么区别。
聚合体的实现用加速的数据结构存储了所有场景图元,
减少对远离给定光线的图元做不必要的光线交点测试量
减少对远离给定光线的图元做不必要的光线相交测试量
\begin{lstlisting}
`\initcode{Scene Private Data}{=}\initnext{ScenePrivateData}`
std::shared_ptr<`\refvar{Primitive}{}`> `\initvar{aggregate}{}`;
Expand Down Expand Up @@ -330,7 +329,7 @@ \subsection{场景表示}\label{sub:场景表示}
light->`\refvar{Preprocess}{}`(*this);
\end{lstlisting}

\refvar{Scene}{}类提供两个与光线-图元交点相关的方法
\refvar{Scene}{}类提供两个与光线-图元相交相关的方法
它的\refvar[Scene::Intersect]{Intersect}{()}方法跟随给定光线到场景中并
返回表示光线是否与某一图元相交的布尔值。
如果是,它便把沿光线最近交点的信息填入提供的结构体\refvar{SurfaceInteraction}{}。
Expand All @@ -342,8 +341,8 @@ \subsection{场景表示}\label{sub:场景表示}
}
\end{lstlisting}
一个紧密相关的方法是\refvar{Scene::IntersectP}{()},
它沿光线检查交点的存在性但不返回任何关于这些交点的信息
因为这个例程不需要搜索最近的交点或计算任何关于交点的额外信息
它沿光线检查相交的存在性但不返回任何关于这些相交处的信息
因为这个例程不需要搜索最近的相交处或计算任何关于相交的额外信息
所以它一般比\refvar{Scene::Intersect}{()}更高效。
这个例程用于阴影射线。
\begin{lstlisting}
Expand Down Expand Up @@ -803,7 +802,7 @@ \subsection{Whitted光线追踪积分器}\label{sub:Whitted光线追踪积分器
\protect\refvar{SamplerIntegrator}{}中的主渲染循环
计算一条相机光线并将其传给方法\protect\refvar{Li}{()},
返回沿该光线到达光线起点的辐亮度。
找到最近交点后,它计算交点处的材料属性,以BSDF的形式表示它们。
找到最近相交处后,它计算交点处的材料属性,以BSDF的形式表示它们。
然后再用场景中的灯光来确定照明。
同样,它们给出了计算交点处沿光线反射回去的辐亮度所需的信息。}
\label{fig:1.19}
Expand All @@ -820,13 +819,13 @@ \subsection{Whitted光线追踪积分器}\label{sub:Whitted光线追踪积分器
}
\end{lstlisting}

第一步是找到光线与场景中形状的首个交点。
方法\refvar{Scene::Intersect}{()}取一条光线并
返回表示它是否和形状相交的布尔值
对于找到交点的光线,它用交点的几何信息
第一步是找到光线与场景中形状的首个相交处。方法
\refvar{Scene::Intersect}{()}
取一条光线并返回表示它是否和形状相交的布尔值
对于找到相交处的光线,它用相交处的几何信息
初始化提供的\refvar{SurfaceInteraction}{}。

如果没有找到交点,那可能因为光源没有关联几何体而就沿光线携带辐射。
如果没有找到相交,那可能因为光源没有关联几何体而就沿光线携带辐射。
这类光源的一个例子是\refvar{InfiniteAreaLight}{},
它能表示来自天空的光照。
方法\refvar{Light::Le}{()}允许这样的光源返回其沿给定光线的辐亮度。
Expand All @@ -840,7 +839,7 @@ \subsection{Whitted光线追踪积分器}\label{sub:Whitted光线追踪积分器
}
\end{lstlisting}

否则就找到了可行的交点
否则就找到了可行的相交处
积分器必须确定光在交点处如何被形状表面散射,
确定有多少光照从光源到达该点,
并用\refeq{1.1}的近似计算有多少光沿视察方向离开表面。
Expand Down Expand Up @@ -878,7 +877,7 @@ \subsection{Whitted光线追踪积分器}\label{sub:Whitted光线追踪积分器
`\refvar{Vector3f}{}` wo = isect.`\refvar[Interaction::wo]{wo}{}`;
\end{lstlisting}

如果找到交点,就需要确定表面材质如何散射光照。
如果找到相交处,就需要确定表面材质如何散射光照。
负责这项任务的是方法\refvar[SurfaceInteraction::ComputeScatteringFunctions]{ComputeScatteringFunctions}{()},
它求取纹理函数来确定表面属性
然后再初始化该点处BSDF(也可能是BSSRDF)的表示。
Expand Down
6 changes: 3 additions & 3 deletions content/chap0105.tex
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ \section{如何继续阅读本书}\label{sec:如何继续阅读本书}
\refvar{RayDifferential}{}中。

本书剩下的内容分为四个主要部分,每部分都有几章。
首先,第\refchap{几何与变换}到第\refchap{图元和交点加速}定义了
首先,第\refchap{几何与变换}到第\refchap{图元和相交加速}定义了
系统的主要几何功能。
\refchap{几何与变换}有诸如
\refvar{Point3f}{}、
\refvar{Ray}{}和
\refvar{Bounds3f}{}等底层类。
\refchap{形状}定义\refvar{Shape}{}接口,
给出了大量形状的实现,
展示了如何进行光线-形状交点测试
\refchap{图元和交点加速}有加速结构体的实现,
展示了如何进行光线-形状相交测试
\refchap{图元和相交加速}有加速结构体的实现,
通过跳过测试已表明一定不会有光线相交的图元来加快光线追踪。

第二部分涵盖了成像过程。
Expand Down
4 changes: 2 additions & 2 deletions content/chap0106.tex
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ \subsection{代码优化}\label{sub:代码优化}
以从内存缓存获取高性能的方法组织算法和数据结构
比减少执行指令总量更能极大加速程序执行。
附录\refsec{内存管理}讨论了高效内存编程的一般原则;
这些思想大多用于第\refchap{图元和交点加速}的
光线交点加速结构和\refsub{MIP映射},
这些思想大多用于第\refchap{图元和相交加速}的
光线相交加速结构和\refsub{MIP映射},
尽管它们影响了整个系统中许多设计决策。
\end{itemize}

Expand Down
4 changes: 2 additions & 2 deletions content/chap0108.tex
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ \section{扩展阅读}\label{sec:扩展阅读1}
描述了其设计和整体结构。
Hall和Greenberg\parencite*{4037684}描述了它的前身。
该系统是一组松散耦合的模块和库,每个都设计为处理单一任务
(光线-物体交点加速、图像存储等)
(光线-物体相交加速、图像存储等)
并以易于组合适当模块以研究和开发新渲染算法的方式写成。
该试验平台很成功,为康奈尔众多的渲染研究奠定了基础。

Expand Down Expand Up @@ -83,7 +83,7 @@ \section{扩展阅读}\label{sec:扩展阅读1}
Eric Haines编辑的电子通讯《\emph{Ray Tracing News}》
\sidenote{译者注:详见\url{http://www.realtimerendering.com/resources/RTNews/html}。}可追溯至1987年且仍偶尔出版。
它是了解通用光线追踪信息非常好的资源,
尤其是对交点加速方法、实现问题和平衡技巧等都有有益的讨论。
尤其是对相交加速方法、实现问题和平衡技巧等都有有益的讨论。
最近,许多有经验的光线追踪开发者经常访问论坛\url{https://ompf2.com}。

用于构建pbrt的面向对象方法让系统易于理解
Expand Down
4 changes: 2 additions & 2 deletions content/chap0205.tex
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ \section{射线}\label{sec:射线}
因此当射线被传入一个接收{\ttfamily const Ray \&}的方法时,
该方法不允许修改其端点或方向但能修改它的范围。
这个约定符合系统中射线最常见的用法,
即作为光线-物体交点测试例程的参数
\refvar{tMax}{}记录最近交点的偏移量
即作为光线-物体相交测试例程的参数
\refvar{tMax}{}记录最近相交处的偏移量
\begin{lstlisting}
`\refcode{Ray Public Data}{+=}\lastnext{RayPublicData}`
mutable `\refvar{Float}{}` `\initvar{tMax}{}`;
Expand Down
2 changes: 1 addition & 1 deletion content/chap0206.tex
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ \section{边界框}\label{sec:边界框}

方法\refvar[MaximumExtent]{Bounds3::MaximumExtent}{()}返回
三轴中最长者的索引。
例如在构建一些光线-交点加速结构需要决定要细分哪个轴时这很有用
例如在构建一些光线-相交加速结构需要决定要细分哪个轴时这很有用
\begin{lstlisting}
`\refcode{Bounds3 Public Methods}{+=}\lastnext{Bounds3PublicMethods}`
int `\initvar{MaximumExtent}{}`() const {
Expand Down
2 changes: 1 addition & 1 deletion content/chap0209.tex
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ \subsection{定界移动边界框}\label{sub:定界移动边界框}
给定经过动画变换的\refvar{Bounds3f}{},
计算包围了动画时段里全部运动的边界框很有用。
例如,如果我们能定界动画几何图元的运动,
我们就能在按光线时间插值图元边界以检查交点并承担开销之前
我们就能在按光线时间插值图元边界以检查相交性并承担开销之前
用光线与该边界的相交性来确定光线是否会与物体相交。
方法\refvar[MotionBounds]{AnimatedTransform::MotionBounds}{()}
执行该运算,接收边界框并返回\refvar{AnimatedTransform}{}时间段内其运动的边界框。
Expand Down
4 changes: 2 additions & 2 deletions content/chap0210.tex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
\section{交互作用}\label{sec:交互作用}

本章最后的抽象\refvar{SurfaceInteraction}{},表示在2D曲面上某点的局部信息。
例如,第\refchap{形状}的光线-形状交点例程在\refvar{SurfaceInteraction}{}里
例如,第\refchap{形状}的光线-形状相交例程在\refvar{SurfaceInteraction}{}里
返回在交点处的局部微分几何相关信息。
之后,第\refchap{纹理}的纹理代码计算\refvar{SurfaceInteraction}{}表示的曲面上给定点的材料属性。
紧密相关的类\refvar{MediumInteraction}{}用于表示在烟或云等介质中发生光散射的点;
Expand Down Expand Up @@ -52,7 +52,7 @@ \section{交互作用}\label{sec:交互作用}
`\refvar{Vector3f}{}` `\initvar{pError}{}`;
\end{lstlisting}

对于沿光线(要么来自光线-形状交点要么来自在介质中传播的光线)的交互作用,
对于沿光线(要么来自光线-形状相交要么来自在介质中传播的光线)的交互作用,
负的光线方向保存于\refvar[Interaction::wo]{wo}{},
对应于$\bm \omega_{\mathrm{o}}$
即我们计算一点光量时用来表示出射方向的记号。
Expand Down
4 changes: 2 additions & 2 deletions content/chap03.tex
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ \chapter{形状}\label{chap:形状}

pbrt将图元的细节隐藏在两层抽象后。
\refvar{Shape}{}提供对图元原始几何属性的访问,
例如其表面面积和边界框,并且提供光线交点例程
例如其表面面积和边界框,并且提供光线相交例程
\refvar{Primitive}{}封装了关于图元的额外非几何信息,例如其材质属性。
然后渲染器剩余部分只处理\refvar{Primitive}{}抽象接口。
本章将关注只与几何相关的类\refvar{Shape}{};
\refvar{Primitive}{}接口是第\refchap{图元和交点加速}的关键内容。
\refvar{Primitive}{}接口是第\refchap{图元和相交加速}的关键内容。

\input{content/chap0301.tex}

Expand Down
14 changes: 7 additions & 7 deletions content/chap0301.tex
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ \section{基本形状接口}\label{sec:基本形状接口}

\refvar{Shape}{}还保存了调用\refvar[SwapsHandedness]{Transform::SwapsHandedness}{()}
来进行物体到世界变换的返回值。
每次找到光线交点就调用的\refvar{SurfaceInteraction}{}构造函数需要该值,
每次找到光线相交处就调用的\refvar{SurfaceInteraction}{}构造函数需要该值,
所以\refvar{Shape}{}构造函数一次性计算并保存它。
\begin{lstlisting}
`\initcode{Shape Method Definitions}{=}\initnext{ShapeMethodDefinitions}`
Expand Down Expand Up @@ -60,7 +60,7 @@ \subsection{边界}\label{sub:边界}
例如,如果一条光线没有穿过某个包围盒,对于该光线pbrt可以避免处理里面所有物体。

轴对齐边界框是方便的包围盒,因为它们只需要六个浮点值保存且适合很多形状。
而且测试光线与轴对齐边界框的交点的成本极低
而且测试光线与轴对齐边界框相交性的成本极低
因此每个\refvar{Shape}{}实现必须能
\refvar{Bounds3f}{}表示的轴对齐边界框包围自己。
有两种不同的包围方法。
Expand Down Expand Up @@ -89,18 +89,18 @@ \subsection{边界}\label{sub:边界}
}
\end{lstlisting}

\subsection{光线-边界交点}\label{sub:光线-边界交点}
\subsection{光线-边界相交}\label{sub:光线-边界相交}
有了\refvar{Bounds3f}{}实例包围形状的用法后,我们将添加一个\refvar{Bounds3}{}方法,即
\refvar{Bounds3::IntersectP}{()},以检查光线-框交点
并且如果有的话还返回交点的两个参数$t$值。
\refvar{Bounds3::IntersectP}{()},以检查光线-框相交性
并且如果有的话还返回相交处的两个参数$t$值。

认识边界框的一种方式是将其看作三块厚板\sidenote{译者注:原文slab。}的交集,
每一块是两平行平面之间的空间区域。
为了求光线与框的相交性,我们让光线依次与框的三块厚板相交。
因为厚板与三个坐标轴对齐,在光线-厚板相交中可以应用大量优化。

基本的光线-边界框交点算法算法工作如下
我们从一个参数化区间开始,它沿我们想要求交点的光线覆盖了位置$t$的范围;
基本的光线-边界框相交算法算法工作如下
我们从一个参数化区间开始,它沿我们想要求交的光线覆盖了位置$t$的范围;
该范围通常是$(0,+\infty)$
然后我们先后计算光线与每个厚板相交的两个参数化$t$位置。
我们计算每个厚板相交区间与当前相交区间的交集,
Expand Down
2 changes: 1 addition & 1 deletion content/chap04.tex
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
\chapter{图元和交点加速}\label{chap:图元和交点加速}
\chapter{图元和相交加速}\label{chap:图元和相交加速}

\input{content/chap0401.tex}

Expand Down

0 comments on commit 5424c0f

Please sign in to comment.