意訳 > The science of Spherical Harmonics at Weta Digital

https://www.fxguide.com/featured/the-science-of-spherical-harmonics-at-weta-digital/

### 背景

- 翻訳者の英語能力について
  - 18年くらい英語勉強してます
  - 英語資料を憶えてないくらい作成、翻訳してきました
  - でも英語はまだまだ勉強中の身分
- 翻訳者の数学能力について
  - 独学で特殊関数を3年くらい週末勉強しました
  - 数学は基本的に苦手です
  - 偏微分方程式など解けません
  - 特殊関数も自分で数値計算で使えません
- 以下の文書について
  - 正確な訳でなく、概略がわかればと「意訳」にしてます
  - 専門用語はあえて英語のまま記載することもある
  - 正確な内容を知りたい人は原文を読んでください
  - ~~最後まで訳すかは、気分次第です~~
    - 最後まで訳しました (2016/09/07)
    - 誤訳がいくつかあるかと思いますが、とりあえずこれで

### Spherical Harmonics are...節の意訳

球面調和関数は製品レンダリングに欠かせないもので、ゲーム業界において共通的に使われています。でも、それを理解し、かつどのように使われているか、について知る人はほとんどいない。

### Spherical Harmonics (SH) are a data...節の意訳

球面調和関数(SH)を使うと、多量のデータセットを使った驚異的な画像がわずかな時間で作れる。ここではSHについて説明し、Weta DigitalでのSHの使用について説明する。SHは色々な分野で使われる (heat equations, gravitational, electric fileds, quantum chemistry, 電子の配置の物理など)。

CGにおいては以下のような所で使われる。

- scattering phenomena such as modeling or solving
- volumetric scattering effects
- environmental reflections
- その他

### Spherical Harmonic lighting...節の意訳

Spherical Harmonic lightingは2003年にSony Computer EntertainmentのRobin Greenによって定義された。すなわち、IBL sourcesからの3Dモデルに対するlighting の計算手法である。それによりglobal illumination style imagesをリアルタイムにcapture, relight, displayできる。2002年のSiggraph にてSloan, Kautz and Snyderによる論文においてモデルのfast realistic lighting用手法として紹介された。

> Note: IBL sourceについては不明

### In the graphics community節の意訳

CG業界において、様々なグラフィックスの問題解法の簡略手法(?)として「何かをspherical harmonicsで解いた」と言ってきた。しかしながら、実際はSHはアルゴリズムではない。それはただの「データ表現」である。例として「Precomputed Radiance Transfer」はアルゴリズムで、SHsを使っている。それは重要になってきたが、TDs(?)を除くほとんどの人がSHを理解していない。その使用は複雑と思われるが、実はそれはただの「数学言語としての障壁」である。数学を使わなくてもSHの原理を理解することは可能。複雑な数学コーディングを知らずにMPEG encodingを理解できるのと同様に。

> Note: TDsとは何か分からなかった

### One of the first areas to...節の意訳

SHを徹底的に使っている分野の１つはゲーム業界である。マイクロソフトのPeter-Pike Sloanが2008年のGDCで発表していた「shperical harmonicsは一見面倒くさそうだが、実際は率直なものだ。それは単位円に対するフーリエ基底を球座標に対応させたものだ。それは数値解析が簡単だ。信号処理で使われるフーリエ基底と同様に、級数の項を打ち切る時に注意が必要だ (項の打ち切りはビデオゲームでよくやっている)。その注意によりリンギングの問題を減らす。」


### What are Spherical Harmonics?
It is a way of encoding things.

### You can encode the...節の意訳

ある地点での directional occlusionとIBLをエンコードできる。 そして、その地点のlighting の寄与を評価するため、エンコードしたものをconvolve するのは数値計算的にコストがかからない (convolution はoccluded lightを取り除く)。両者 (directional occlusionとIBLのこと?)のSH表現はbroad diffuseの項しか含まず、standard environment mapのような詳細は含まない(not in sharp high detail)。light and occlusion のこのような数学表現は非常に有用であり、 (the occlusion part) はdirectional ambient occlusionとして考えられる。


### Another way to think of SH is that it is a way...節の意訳

SHを別の点からみると、それは画像をsphere上で周波数表現にてエンコードする方法である(入射する light, occlusionや他のデータを含む)。論理的に無限の項(infinite bands)を考慮した場合、どのような分解能も表現できる。しかしながら、一般的に、最初の複数項(bands)が使われる。

### Overall, Spherical Harmonics:節の意訳

総合的に見て、Spherical Hamonicsとは

- 画像をsphere上で表現したもの (cube-mapのようであるが、cube-mapではない)
- 周波数-時間空間での表現 (フーリエ変換を球に対応したもので、画像データに適用)
- 一連の項(bands)とインデックス上で作用する - 多くのbandsやlevelsはより詳しい結果を生成する。しかし各項(band)自体が役に立つ

### SH have some great properties:節の意訳

SHは偉大な特性をもつ:

- 連続的、rotationally invariant - camera viewに依存しない
- no sharp edges, no “[lumpiness](http://www.dictionary.com/browse/lumpiness)” - no seams, no pinching ('cat's arse'), no sudden popping at the lower levels or bands
- ベクトル処理 (加算や積算といった操作)が簡単
- 実にcompact - 最初のn bandsだけでも有用 (注記：even without the following ones:は??? n+1の項だろうか)
- cacheにおいて使われる解法

### In computer graphics, ...節の意訳

CGにおいて、SHはlighting 情報のキャリアである。これは、まずSH fileにおける「あるデータ」を計算することから始まる。そして、レンダリング中にその情報を解釈する。

### Once you convert...節の意訳

いったんlight dataをSHに変換すれば、一連の"weights"値を取得する。SH dataに対する数学適用は簡単だ。使用される基底関数は正規直交である。つまり、それは直交するものであり、単位ベクトルである (すなわち、2つのSHを足すことは、そのweightsを足すことに対応する)。

### SH is used in games for diffuse light. ...節の意訳

SHはゲームにおいてdiffuse lightに対して使われる。SHがゲームにおいて偉大だ。なぜならそれはスムーズな結果を生成し、疎に保存できる (それはMB単位のファイルに付随する巨大な何かではない)。わずかな値だけ保持すれば補間ができ、鋭利な非連続は生じない。しかしながら、ゲームにおいてはハイエンドレンダリングでの使用時と比べてそのlevelまたはindex levelsは少ない。いくつかのゲームはハイエンドレンダリングよりも低品質のSH data levelsを使う。理由として、ゲームエンジンはリアルタイム性を優先し、メモリ制約があるためだ。それら制約はハイエンドレンダリングにはない。しかし、いくつかのゲームは3つのbandsを使う。Wetaのようなフィルムパイプラインにおいて (しかし、Wetaのチームはそれらをより多くのポイントで使う、もしくはパイプラインの多くの場所で使う)。

### Why do we need SH?の節

Why do we need SH?

Rendering works a little like this:

### Imagine one light: the diffuse is the strength ...節の意訳

1つの光を例に挙げよう。diffuseは光の強さだ。しかしながらその光の角度により和らげられる (read: surface normalと光の方向の単位ベクトル間のスカラドット積が積算された光の強さ)。

diffuseはそのオブジェクトの色にも明らかに影響される (read: すべてがsurface colorを積算される)。

そのため、diffuse surface reflection model は時々「dot product lighting」として知られる。

### Now, imagine more lights - they all contribute ...節の意訳

では次に、より多くの光を想像しよう。それらの光はすべて結果に寄与する(そのため、各光源に対して、光の強度はスカラドット積が積算される。そのスカラドット積というのはunit surface normal Nと光源L方向の単位ベクトルの積である。 この値にはさらにsurface colorが積算され、最終結果である反射光が得られる)。Wetaのような場所で使われる方法は、directional occlusionのエンコードである。

### Ambient occlusion takes one parameter that represents...節の意訳

Ambient occlusionは１つのパラメータを取る。そのパラメータは二者の積である(1. ある点から見える空の割合、2. そのfactorによる外向きのエネルギー)。SHは同じことをするが、occlusion はSHにエンコードされる。そのため、occlusion はある光の方向をマスクする。


### In plain English, you could say...の節

平易な英語では、レンダリングは以下のように動作すると言える：

"レンダリングは入射光を計算する。そして、入射方向と表面のなす角によりスケーリングする。次にsurface functionの成分が積算される。"

しかし、光源は多数ある...そのためレンダリングは以下のように動作する:

"レンダリングは「すべての」入射光を計算する。その計算においてはすべての光源を取扱い、すべてのsurface functionを積算する。"

### Simple? It is, if the lights are point lights and ...の節

単純ですか? 点光源かつ世界が単純ならそうです。simple directional lightsを扱うのはたいしたことはない。でも、次のものだったらどうですか? 一連のspot lightsではなく、大きな空のドームがあり、あらゆる方向から光が来るとしたら? (IBL) - レンダリングは計算的にコストがはねあがる。

> Note: IBLが括弧書きで出てきた。

### SH is used to precompute some maths and store it, storing...節

SHは前計算を行うために使い、その結果を保存する。その保存は、skydome自身、オブジェクト、シーンに対して行う。そして、キャッシュをrunする(?)。そのキャッシュというのは一回の数学計算を行い、それ以降は再利用できる。SH is in Mental Ray with final gathering (MRはfinal gatherをSHとして保存する)。 SH はPixerのRenderMan であり、内部的にはpoint-based color bleedingであり、特にPR17がリリース以降はより一層そうなっている。

### Spherical Harmonics vs Fourier transforms節

Fourier とSpherical Harmonics: SHとFourier を関連づける時、フーリエ変換の基底(二次元の単位円上の表現)を考えるといい。一方で、Spherical Harmonicsは単位球上の表現である。

### The Fourier 'series' is used in electrical engineering...節

フーリエ級数は電子工学、振動解析、音響学、光学、信号処理、画像処理、そして、量子力学で使われる。数学において、フーリエ級数は周期的な関数（あるいは信号）を単純なoscillating functions(sine, cosines)による重ね合わせに分解する。その研究は「フーリエ解析」と呼ばれる。それらの組合せを「フーリエ級数」と呼ぶ。

### This idea of making one signal a sum of its...節

この、１つの信号を複数の周波数成分での総和とする考えは、人々が「周波数領域で処理をした」と言う手段である。二次元画像を周波数領域でフーリエ変換を用いて処理したい場合以下を行う：

- 元となる2D imageを取り込む
- それを一連の級数項に展開する (低周波数からどんどん高周波数へ)
- いったん級数展開すると、各級数項に対する係数が必要となる。その係数を用いて基底関数を積算することにより、元の画像を取り出せる
- 元画像を取り出すため、可能な限り多くの級数項を足すのが良い（より多くの級数項により詳細になるが、データも多くなる）
- より多くの級数項で元の画像により近くなる（わずかな級数項での足し合わせでは詳細な部分が失われた画像になる）
- 現実的には、SinとCos関数の振幅とdirection(位相?)があればいい

SHもこういうものだ。ただし、二次元画像ではなく、方向成分を持つ3Dデータに適用される。そのため、3Dレンダリングのパイプラインで使われる。

### AO vs SH節

偉大な質問は、SHがどのようにしてAmbient Occlusion (AO)と関連づけられるかだ。AOは長年正確なlightingの近似に使われる技術であった。

### "Ambient occlusion is one of those techniques ...節

Research and Development Supervisor at Weta DigitalのNick McKenzieは次のように説明する。"Ambient occlusionというのは近似的なgeometric blockingを描画する当時確立した方法の１つであった。ここで、geometric blockingの周囲の環境は点であり、表面からのambient lightは分離できた。それは「どんより」した日を描写するようなものであり、そこで光があらゆる方向から来るとした時に影がどうなるか、を言うようなものだ。"

### "Computing the ambient term is done in the same way...節

McKenzieは続けて言う。"ambient項を計算するのはレイトレーシングや他のsample環境を使うのと同じ方法で計算される。どの方向がブロックされるかを扱う。通常はそれらの値を足し合わせて、ray castの数で割ることでブロックしている項目を平均化する。しかし、Harmonics を用いる場合、Harmonic encodingを通してdirections を足していき、directionalityを再構築する。"

### One can still use SH as an AO pass...節

SHをAO passとしても使える。しかし、さらに進めてdirectionalityの再構築ができる。外部環境に置かれたオブジェクトがあるシーンを想像しよう。空の片方にはオレンジ色の雲があり、もう片方の空は青空だ。AOを用いると、オレンジと青色の平均色を得ることになる。あらゆる空からの寄与を１つの値にしたものだ。SHを用いると各地点に対して値を得る。特定の地点ではオレンジ光からブロックされ、その陰は青色がかっている。より深いambient light levelとcolorを得ることもできる。何故なら、SHによりオレンジはカメラの左側からきて、その点はその側からの光によってぼんやりしていることが分かるからだ。

> Note: AO passの意味は不明

### If one thinks about it, AO is...の節

AOはglobal illuminationの近似手法であり、真っ白なsky domeに対するオブジェクトの可視性にすぎない。creases and cracksにおいては、AOは真っ黒となる。それは白のsky domeの光から上面と側面が隠された状態である。Spherical Harmonic Occlusionはこれを改良する。低いオーダーのspherical harmonicsに対してaggregate visibility を計算するからだ。SHからdirectional ambient occlusionが得られる (十分なlevels(項)を計算したとする場合)。


### Indexes & weightsの節

Indexes & weights

bandsやlevelsとは何か? それらは一連の関数群であり、球領域 (spherical domain)において特定の周波数を表現するものだ。特定のbandsの関数はindexによって指定できる。フーリエ基底とのアナロジーを続けると、bandごとに正確に１つの関数を持つ。Weights は積算時の係数である。

### The number of SH bands can be thought ...の節

SH bandsの数は検討したいSHの詳細のレベルとみなせる。Jpeg圧縮のように考えられる。スケールが0-100でないことを除く。それはフーリエ変換に似ている。低周波数の詳細は低レベルにあり、より詳細の情報はレベルやbandsを進めると加えられる。無限のbandsを用意することもできるが、少しばかりのレベルでも役に立つ。

### SH is a data format and it is done as:...の節

SHはデータ型であり、それは以下のように処理される:

- N個のweights (or 係数) - これが現実のデータを保持する
- 各weightは通常RGB色である (IBLに対しては。Occlusion に対してはスカラー値である)
- 各基底関数にweightを積算して、合計したものが結果である
- 基底関数の数はいくらでも増やせる。しかし最初の9個の係数はdiffuse lightingに十分である
- ゲームでは4つの係数を使う。リアルタイムでない場合は9つを使う。
- それは、9つの浮動小数点数 (9個のRGB値)であり、任意の点のSH (color directional occlusion)を表す
- SHは「超圧縮環境マップ」のようなものだ

### Weta: SH and PantaRayの節

Weta: SH and PantaRay

Nick McKenzie はfxguide(我々)に対して、何故SHの数学がハイエンドコンピュータグラフィックスで役に立つか説明してくれた。

"レンダリング方程式は積分である。それはあらゆる入射光(通常は半球から来る）の合計である。SHの１つの利点は全球状の領域(entire spherical domain)から光の情報を描写することだ。2つ目の利点は、非常によい特徴だ。すなわち、コンピュータ処理が簡単だ。SHがなければ非常に難しい。通常のレイトレーシングやレンダリング方程式ではレイの数を制限しようとする。そしてその結果を足し合わせる。SHで表現するとdot productになる。dot productの結果が全球の合計となる。"

### In other words, the maths not only ...節

言い換えれば、SHの数学は光の情報をよい形で保存するだけではない。あとの処理においてもオブジェクトが足しあわされ、結果となるシーンはとてもエレガントで、コンピュータ処理も簡単だ。

SHを使うゲームを置いといて、レンダリング用のSHを使って素晴らしい実装は、Avatarの時にWetaで実行された。Wetaの研究開発部門のスタッフはNvidiaからの少しの助けを後で受けて、ある計画を思いついた。その計画では非常に大きなシーンに対して思慮深い?(sensible)レンダリング時間しかかからない。cacheとSHを使うことによって。

> Note: sensibleのもっといい訳がありそう

### Sebastian Sylwan, Weta CTO, told ...節

WetaのCTOであるSebastian Sylwanはfxguide(我々)に次のように言った。"単純に考えると、レンダリング方程式をlighting 成分と可視性(visibility )成分に分割できる。我々がSHで行っていることは、その可視性(visibility )をある方法でエンコードしている。それは扱いやすく、コンピュータ処理で実用的だ。人々が疑問に持つのは、「この点でこの方向で空が見えるのか？」ということだ。それらすべてに対する回答はSH表現にエンコードできる。"

### "To use a concept that any TD would be familiar with...節

Sylwanは続けて言った。"どのTDも馴染みのあるコンセプトを使ってみよう。時間領域(time domain)におけるあらゆる関数を周波数領域にマッピングすることを考えると、関数を調和関数の級数(componentsの級数)で表せる。ここでしていることは、調和関数のbandsの１つ１つに対して係数がある、と言うことができる。"

> Note: TDがまた出てきた。TDのlong formは不明。

> Note: TDとは[Technical Director](http://www.3drender.com/jobs/TD.htm)のことかもしれない。

### The first coefficient would be an overall value...の節

最初の係数は方向性のない全体的な値だろう。つまり、ベースレベルの１つの値である。そこから球を分割してどんどん高い周波数に移る。各bandにおいて、あるセットの係数がある。十分なbandsを使うと十分な数の係数が使えて、球上のどのようなパターンも表現できる。しかし、それは無限のcaseになるだろう。CGIにとっては近似で十分であり、本当に役に立つ近似は9つの係数で、それは3bandsだけで得られる。

> Note: CGIは不明

- 1bandsは1つの係数だけ必要
- 2bandsは追加で3つの係数が必要で、トータル4つ (ほとんどのゲームで使用)
- 3bandsは追加で5つの係数が必要で、トータル9つ (PantaRayが使っているもの)

### NB the first band is often called I0...節

NB, 最初のbandはl0(エルゼロ)またはlevel zeroと呼ばれ、2つめはl1、3つめはl2と呼ばれる。。。

> Note: NBは不明

限られた数の係数を保存することで、光の近似を保存する。ambient diffuse lightingでは詳細な情報(fine detail)は必要ない。

### The first band of SH is ambient occlusion ...節

SHの最初のbandはambient occlusionだ。たとえば(say)この表面のこの点にいるとしよう。この点に入射する多くのincident illuminationを知りたいとする。そして、この表面はフラットであるから、それはオブジェクトの表面の半球である。しかしこの値は方向性を持たない。ambient occlusion の値がxの時、これらの光がどこにあるかについては全く分からない。すべての光がオブジェクトからずっと離れた場所にあるのかどうか、すべてがオブジェクトに向いているかどうか、分からない。ambient occlusionの1つのx値を使うのは完全な間違いだろう。ある意味、平均化されたAOは、平均値であり、非常にまれな場合にしか正しくない。そして、多くの場合は不正確である。AOの値は十分に役立てることはできるだろうが、もしambient lightのsourceを知ることができたなら、computer graphicsはずっと正確になるだろう。

> Note: because say this surface is flatあたりの訳はあやしい

### At just one level or band higher, one first gets the direction...節

level(またはband)を1つだけ上げるとdirectionを最初に得る。それにより「ambient lightは私の前にあるのか、後ろにあるのか？」という疑問の答えを得る。bandを2つ上げると非常に良い近似を得る。「lightは私の前にあるのか、後ろにあるのか？」という疑問の答えを得、さらにその相対強度(relative intensities)も継ぎ目なく得られる。ここから分かるのは、たった2つ上のbandsで1つのAO値の結果よりもずっと良い最終結果を得られることだ。全領域を1つのAO平均値で表す場合から、たった9つの係数(合計3つのbands)に移ることで、現実の描写の再現性をはるかに高める。悪夢のようなコンピューターレンダリング処理を避けることができながら。

> Note: in front of behind me? は in front or behind meの誤植だろう

### The genius of the Weta solution is not to be the first to use SH...節

Wetaのsolution のうまいところは最初にSHを使ったことではない。すべてのオブジェクトに対してSHを前計算してキャッシュし、すべての情報をエンコードしたことだ (同時にBRDF materialのようなエンコードもしている）。このコンピューター処理は非常に重いものであるが、一度だけ実行されるにすぎない。または、最終のきれいな結果を得る前にだけ実行されるにすぎない。さらに言えば、この非常に重いpre-process処理はultra fast GPU上で実行されcacheされる。つまり、巨大で非常に複雑なシーンはコンピューター処理時間をそれほど長くせずとも精巧に作られる。そうでないとき（コンピュータ処理時間が長すぎると）、iterationは不可能だしシーンレンダリング時間は使い物にならないものになる。PantaRay とそのGPU処理能力、cacheの組合せがなければ、PandoraもMiddle-Earthも成功にはいたらなかっただろう。

### If you break it down, the implementation is simple,...節

その方法を分解してみると原理的に実装は簡単だ (しかし実用はずっと難しい)。

Wetaは誰かが何かを作るときにSH cacheを保存する。artistがモデルを使う時、それはシーンに追加され、SHに関する数学としては単純に加算と積算をしているだけだ。ステージを追加するのは簡単だ。すでに機能しているcameraに依存しないcacheを持っているので、lighting とレンダリングはずっと速い。

最初にstage renderを行うソフトは実際はPantaRay(GPU)だ。それによってWetaは最終レンダリングにRenderManを使える。それはずっと速い。あるいは、ずっと広大で複雑なシーンを同じ時間でレンダリングできる (Blinn's law)。

### PantaRay calculates the cache, PRman renders the image...節

PantaRayはcacheを計算する。PRmanは画像をレンダリングする。そのため、SHは処理の主要でないし、アルゴリズムでもない。しかし、cacheされたdataを保持するという役割は実装において不可欠だ。

Wetaはこの仕事に多くの努力をした。なぜなら、lighting はユーザの時間を使う、非常にコストのかかるartist やuserの時間を使うからだ。Weta Digitalが極めて専門的な仕事を行うことにより、Wetaによるシーンは非常に大きくできる。

PantaRay はアドオンではない。それはWetaのレンダリングパイプラインの中枢である。

### So the PantaRay solution slashes production time by...節

そのため、PantaRay solutionはGPUsを使ったcachingとpre-renderingによりproduction timeを削減できる。 PantaRay はNvidiaのGPUでの計算処理を使って開発された。SiggraphにおいてWetaが最初に発表した時、WetaとNvidiaがWetaのPantaRay engineをCUDA使用のGPU処理バージョンに移植したものをNvidia Tesla S1070 GPUのサーバーを使った場合、以前のCPU単体処理と比べて25倍速くなるだろうと推定した。Ray-traced occlusionはしばしば計算処理要求が高い。なぜなら非常に多くのincoherent ray castsが必要だから。PantaRay システムはGPU ray tracingを使い、さまざまな空間階層を持ち、SH occlusionを計算するもの(other things)を使う。PantaRayにおいてはTD(Technical Director)はocclusion計算にshading pointごとに512か1024のrayを打ち込むことができる。結果として、Avatorからの1つのテストフレームは16時間と5200億のraysを使って1つのocclusion passを計算している。

### But GPU only provides part of the solution, given...節

しかしながら、GPUはsolutionの一部でしかない。Wetaの巨大なデータモデルに対しては、caching は同じように重要だ。

Pandoraにおいて葉っぱ一枚や木一本のようなオブジェクトに対して、PantaRay はあらゆる方向に対する処理をする。その方向には葉っぱのこの点の光をブロックしている(ものもある)。それはドーム型のlight、soft shadows、area lightsや他のものすべてを扱う。それ(caching?)は実際のPandorian forestに木を追加する前に行われる。そしてそれら値の9つのweights を保存する。オブジェクトのマップ上のSHを保存する。artist が森に木を追加する時は、係数を足すだけになる。


### If the camera moves or tracks by a tree then the cache remains...節

カメラが移動して、木によるtracks(とそのcache)が有効のままであれば、再計算は必要ない。木々上の葉っぱが風によりゆっくり動いたとしても、一連のkey (左、右、中間の係数）は求めることができ、その中間は補間で処理できる。SHは非常にスムーズであるため、補間というのは非常に役に立つ。アニメーションが多い、高速移動する物体、例えば疾走する馬のようなものは、PantaRay cacheをフレームごとに再計算する必要がある。しかしながら多くの場面に見られるような森林内部や、部屋や、洞窟など、大量の幾何的地形はそれほど動的には動かない。カメラが上空を通過(して地形を撮影）するかもしれない。しかし、completeかつuniqueなオブジェクト移動だけがcacheを無効にする。疾走する馬の背後にある何千もの木々の葉っぱのどれもがSHを再計算する理由にはならない。

> Note: If the camera moves or tracks by a tree then the cache remains valid の部分は文法的に成り立たない文章だ。typoなのだろう。

### To be clear, the cache is not a low res preview or just the maths ...節

明らかなように、cacheというのは低解像度のプレビューでもなければ、lighting TD(Technical Director)として偶然見ている場面の数学でもない。PantaRay cache solution frontはレンダリングの複雑な計算を読込む。artistsが一場面を開く時までに一連の計算処理は終わっている。artistsが時刻に合わせて太陽を動かしたとして、前計算とcache-ingにより新しいレンダリングを即座に終了できる。それはレンダリングされた画像のcacheではなく、先に解法が得られたmathsのcacheである。それにより、その日最後のRenderManはずっと早くレンダリングをして、artistはたくさん試行錯誤ができ、彼らのデスクトップモニタ上でlightingを適正な位置に配置できる。

### If SH was not camera independent, it would be a lot less useful...節

もしSHがカメラ非依存でなければ、SHはほとんど役には立たないだろう。いくつかのシステムではframeのmathをcacheしてlighting を調整できるようにしている。しかし、frameを前に進めると新しいcacheの構築が必要となる。SHとPantaRayを使うとcacheはそのオブジェクトに対してオブジェクトのモデル時に構築される。そして、よほどのアニメーションがない限りはそのcacheは有効のままとなる。しかしながら、ただ単に"現在のフレーム"というよりもlighting scenesにかかわる前計算だけでなく、dome lightsやsky lightsのような回転調整にもよく応答する(適用できる)。

### "You can have the same SH and rotate your representation ...節

Sylwanは説明する。"同じSHを使って、物体を回転できる。物体の周辺の光を回転するには計算コストがかからず早い。SHを回転するのは計算処理が簡単で、それは屋外のlightingにとても関係する"。それは別の計算でもコストを下げる。オブジェクトをシーンに置いた時、光に対してオブジェクトを回転させるのは計算コストがかからない。そのオブジェクトに対するcacheは、場面に合わせるために回転できる。例えば、光の位置を固定にしてオブジェクトを回転することはcacheを無効にはしない。シーンにオブジェクトを正しく配置したり、シーンに対する光を回転することは数学的に比較的簡単で計算が軽い。そのシーンが巨大であったとしても。

### The SH data does add to the huge data size of scenes, ...節

各オブジェクトのサンプルポイントに対して9つの係数を保存する必要を考えると、SH dataはシーンのデータサイズを飛躍的に増大するのは確かだ。幸運なことに、SH dataは表面に渡って補間ができる。この補間はworld空間、あるいはオブジェクト/target空間において補間できる (オブジェクト/target空間での補間はWetaではほとんどしないが)。これによりオブジェクトごとのcacheされるサンプルの量は大きくはあるが扱えるサイズにしてくれる。ちょっとした計算をしてみよう。Weta DigitalのRendering Research LeadのLuca Fascioneは言う。"ポイントごとの9つの係数は3色の値が保存されるファイルサイズに等しい - 9つの浮動小数点, ポイントごとに36バイト -。計算してみるとファイルごとに数ギガバイト以上となる。" そして、それらのデータを扱うdata managementが通常はあり、dataを扱えるようにしている。

### Weta does not use a standard point cloud format they have their own...節

Wetaは標準的なpoint cloud formatを使わない。彼らは独自の"topo-clouds"を持っている (a pun on point clouds crossed with Topology. それは多分岐する接続情報を保持するpoint cloudである)。それらはmicro polygon meshesに非常に似ている。Wetaは以下の2つの理由のために独自フォーマットを使っている。

- cachingとaccess patternを非常に正確にコントロールできるように。そして、filersをoverloadしないように。
- typology informationを保持できるように。それはSH value pointsの補間において使用される。2つのSH samplesを補間したいとき、それらを同じ表面に置きたい。そうでないと補間はうまくいかない。"そうでなければ、ただ単に近い点を見つけるだけだ。表面上の近い点を欲しいだろう。そうすればより品質の高い結果となる。"とFascioneが付け加えた。

### In addition to the per object caching that has been discussed...節

議論されてきたオブジェクトごとのcachingに加えて、シーン全体に対する、また別のcacheが使えそうだ。"Scene Harmonicsにより非常に大きいアセットに対するSHの幾分粗いcachingを持てる"とFascioneは言う。"例えば、数億のrangesに対してのカウントだとか"。PantaRay はGPU上でとても速いが、この巨大なスケールでフレームごとのレンダリングをするのはまだいらっとする。そのためOpenGLによるもっと粗いcachingを使う。それによってそのような負荷を処理できるし、local Harmonics の扱いを楽にして近似的な方法でそれらを組み合わせることができる。それにより、非常に巨大な量(シーン)を得ることができる。

> Note: so we have a much courser caching は so we have a much coarser cachingの誤記だろう。

### For example, a scene of a character near a tree in a forest -...節

例として、森の中の一本の木の近くに一人のキャラクタがいるシーンを考えてみよう。そのシーンはskydomeで照らされている。sky domeは比較的小さいセットの値を持つ。キャラクタとその近くの木は個別のSH cacheを持つ。木が静止している状態の時(being still)、それは静的なcacheであり、キャラクタはフレームごとのcacheを持つ。遠くの森は近似的なcombined static SH cacheを持つ。それは、すべての木々の相互作用の関係を考慮したものとなる。これらすべては前計算され保存されている。この"baking of cache"はsimのbakingのようなものではなく、最後のlightingの直前に生じる (happends)。

### Most of this article has focused on sky domes and yet Weta...節

この記事の多くはsky domesにフォーカスしてきた。しかし、Wetaはさらに先を行っている。SHはWetaにおいて時々area lightsのcloser viewsのために使われる。"それはshadowingをするのにどういう風に選択するかによる"とNick McKenzieは説明する。"我々はarea lightsにHarmonic shadowsを使うように選択できるし、それはもっと広域のシーン(softer shadowsが欲しいシーン)に対する何かでもある。それが機能する理由は、我々のvisibility dataがどのように保存されているかに基づく。"

### "Our occlusion data is sampled at lots of different points in the world,"...節

"我々のocclusion dataはその世界の多くの異なる点においてサンプルされる。"とMcKenzieは付け加える。"そして、これらのそれぞれは、その世界において物体がどのようにそれをocclude(遮蔽）しているかを表す異なるpictureを持っている。そのため、地上のポイント、例えば馬の下の点だった場合、それは上面に巨大な馬を見ることになる。あるいは、少なくとも巨大な馬の近似を見る。一方で、馬から遠く離れた点からは「しみ(blob)」が見えるだけだ。そしてこれらの2つの機能のどちらもがarea lightに使用できる。そして、それはray castingをある方法で逆にたどることになる。

### PantaRay has developed over time for production rendering at Weta....節

PantaRayはWetaにおいて長い時間の経過の中でproduction renderingのために発展してきた。PantaRay以前、WetaはRenderManをcache作成に使っていた。Avatar製作において、製作チームは多くの構成物(modular pieces)から構成されるいくつもの場面を作るようになった。それらの構成物というのは浮遊する山であったりした。"そこで、それらは前計算されたcahceであった。そのため、それらとのinteractionはほとんどできなかった。例えば、1つの浮遊する山から別の山に対するsoft shadowingというのは見ることができなかった。"とMcKenzieは短く述べた。しかしながら製作チームがより多くのcharacter workや込み入った破壊シーンなどに移るにつれ、より複雑なものへのsolutionが必要となった。"そして、PantaRayがそこから生み出された。つまり、多くのデータセットにを処理できる必要性から"と彼は言う。今日、PantaRayとSHは大きなdomeのgeneral lightingに使われている。そして、"extremely fine soft shadowsにも。"

### Both lookdev and rigging use the cached models, in addition to final lighting...節

lookdevもrigging も最終のlightingに加えてcacheされたモデルを使う。そのcacheはassetに対してpollingしているasset management systemによってトリガーがかかる。木々のような、モデリング時点ですぐにcacheを得るいくつかのオブジェクトもあるが、多くのものはWetaのasset managementが「そのオブジェクトが使用される」と判断された時にcacheされる。

cacheはWetaによりオブジェクトの生成から最終成果品の完成までの間保守される。それはモデルに対して常に保存され、違う映像作品に同じオブジェクトが使われるときになれば再利用することができる。

### How general is this?

これはどれくらい一般的なのか?

### Some other facilities do have advanced SH pipelines...節

他の施設のいくつかではより進んだSH pipelinesを持つ。あるいはWetaほど進んでいるのはほとんどない(完全でもなければ、強固でもない)。例として、他のpipelinesとは違い、Wetaにおいて物質特性を変更することはlighting cacheに影響を与えない。もし、あるオブジェクトがちょっと湿っているように見せたいなら、そのspecを調整してspotをせまくhighlightをつけることになるが、それはたいていcacheを無効にはしない。

### Is SH worth doing if you are not Weta Digital? ...節

あなたがWeta Digitalの人でなければ、SHを使う意味はあるだろうか? Sylwan は指摘する。WetaはSHを開発することによって巨大な量の複雑なものから抽象性を得ることができるようになった。それによってartists はちょっとした光の調整に対して、よりfriendly な環境で何時間も待たないで済むようになった。もちろん別の指摘としてはWetaの今日のscene complexityは隣の人の今から6ヶ月先、12ヶ月先のscene complexityかもしれない。

> Note: 最後の文の意味はいまいち分からない。
> Note: Wetaだと今日処理できるものが、他の施設では6ヶ月、12ヶ月かかる、ということかもしれない。

### As far as Pixar is concerned, SH makes sense. Weta is one of the largest...節

Pixarが関係する限りでは、SHを使うことに意味はある。Wetaは世界で最大のRederMan usersの一つである。PantaRay solutionはPixarと幅広く議論されてきた。そして、RenderMan teamはPRmanのversion 16においてSHをより直接的に取り入れた。今日、PRmanは独自のSHを生成できる。WetaはPantaRayの前にPRman内部に独自のソフトを使い続けてはいるが。

### As said at the outset of this story, SH is a part of the key maths...節

この話の最初に述べたように、SHは主要な数学の一部である。それはWetaのpre-rendering cache lighting solutionにおいて使われる。実のところ、もし誰かがdiffuse ambient lightを表現する新しい改良された数学実装を発表したとしたら、WetaはパイプラインのSH成分を置き換えることができる。そして、パイプラインはそれでも有効である。

### 最後の節

しかしながら、そのような驚異的なtoolを作り出したのは、この新しいハイレベルの抽象化の組合せと、非常に実用的な実装によってである。それにより、世界で最も複雑なrenderingを可能としている。ごくわずかな数の会社だけがそのような巨大なデータセットを使った写実的な結果やデジタル環境を扱うことができる。Spherical Harmonicsは抽象的なコンセプトのように見えるかもしれない。巨大なMiddle-Earthの風景が完全に3Dで、高解像度のステレオとしてレンダリングされるまでは。そして、光を操り息をのむ画像を作るartistsがどのようにSHとそれに関するするツールを必要としているかを認識するまでは。