2014年2月26日水曜日

BitWrk ピアツーピアレンダリングサービス

BitWrk ピアツーピアレンダリングサービス

原文:BitWrk - A Peer to Peer Rendering Service

http://blenderartists.org/forum/showthread.php?325908-BitWrk-A-Peer-to-Peer-Rendering-Service

----
2014年2月2日 01:04 indyjo氏による投稿

俺はCGアーティストじゃないんだが、ドイツ在住のプログラマで、2011年に思いついてから数年間続けてる自分のプロジェクトを紹介したい。手前味噌だがこれはBlenderユーザーには大きく役に立つと思う。なのでみんなに参加してもらいたい。

このプロジェクトの名称はBitWrkで、PCの計算能力のオープンマーケットのようなものだ。株の取引のような働きをし、買い手と売り手がいて、コンピュータのタスクを取引する。皆が買い手になれるし同時に売る側にもなれる。通貨としてビットコインを使い、現実のコミュニティプロジェクトとして運営できる。

Blenderを使って説明すると、インターネットの力をかき集めて少額の対価でレンダリングのための時間を大幅に節約できる。なにかに登録する必要はなく、レンダーが必要なだけ重量制で行える。これは個人が営利目的に他のメンバーにレンダリングサービスを提供することによって、参加する全員が彼らの高価なコンピュータを借りることができるというものだ。Blenderのレンダーだけにとどまらず、ほかのソフトウェアでも膨大な計算能力の恩恵をうけることができる。

Blenderがその最初のケースになる。



このスクリーンショットはBlenderがタイル1枚毎にBitWrkサービスでレンダリングジョブを処理しているところだ。

すまないが、現在のところBitWrkはまだ簡単には使えない。しかし現在のフェーズでみんなのフィードバックがほしい。

ソフトウェアはまだ鋭意開発中だが、すでに稼働はしているし、ソースは公開されている。決済のシステムはまだ実装してないので現実の金が発生したり失われたりすることはない。現在はCyclesレンダーのみサポートしている。

どうやって使うかについての詳細な情報はホームページを読んでほしい。

http://bitwrk.net/ を見てくれ。もし本当にプロジェクトに興味があるなら寄付やCPUパワーの支援を頼む。実験に参加してくれる新しいユーザーは大歓迎。

BitWrkを試してくれるみんなを喜んでサポートするよ。

んじゃまた

ジョナス

2014年2月9日日曜日

フィギュアの髪のマテリアル

ヘアパーティクルを使わない、こういったマテリアルはテクスチャで髪を丁寧に描いて貼るのが王道らしいのだが、Cyclesだし手抜きしてプロシージャルだけでいいやみたいなノード。Cyclesのマテリアルは内蔵レンダーのように完成形を予想しながら作るというのが難しい。理由のひとつはジオメトリノードやテクスチャ座標ノードが与える影響の度合いがいまいち予想しづらいところにある。

ねんどろ風喜緑さん



髪の毛の上から下に向かってグラデーションを入れようと試していて辿り着いたので、理屈はいまいち理解していない。ただ内蔵レンダーのテクスチャ座標の指定とは若干違うらしいことは分かった。通常はグラデーション+カラーランプを貼るとジオメトリの中心から外に向かって貼られてしまうのでなにも起こってないように見える。マッピングノードで回転や長さを変えると方向がわかるようになる。あらかじめカラーランプの色を赤青などの対照色にして試すとよい。

さらに髪の毛をUV展開しておくとテクスチャが走る方向が分かりやすい。この髪ジオメトリは展開する前に頂点を細かくしすぎてしまったので展開せずそのまま貼っている。

トーンBSDFは照明の位置と強さでハイライトが変わるので、このノードでいじれるのはハイライトの広さと境界線のぼけ具合だけだ。0.1でもかなりなじむ。

ねんどろ風黒子



CyclesでもそのうちベイクできるようになるのでこれをそのままUVマップに焼いておけばかなり短時間でレンダーできるようになると思う。もちろんAOも焼ける。

初心者の頃(というかまだ1年そこそこ前だが)ビットマップとプロシージャルのどっちを使うべきか、その基準が分からずずいぶん迷った。長時間のアニメを作るならまだしも1枚静止画のみで、可能なら内蔵の照明とシェードだけで表現したいと考えていた。よくよく見るとプロシージャルは飽きるしやっぱり情報量が足りない。読者の評価もいまいちである。理想はビットマップを基本にしてプロシージャルを補完的に使うのがエレガントなのではと思う。

Cyclesレンダーによるベイクを試す実験ブランチ



Cyclesレンダーによるベイクを試す実験ブランチ


だいぶ前からCyclesでベイクができたらなーというつぶやきがあったのだが、とうとう実装されたそうだ。以下翻訳

原文:
http://www.blendernation.com/2014/02/08/try-baking-for-cycles-with-this-experimental-branch-now/


2014年1月14日火曜日

kworkerのCPU過負荷

デスクトップを録画中にCPU90%以上の高負荷に見舞われた。数分間ディスクアクセスが続きその間はキーボードもマウスも受け付けない。LVMで2台目のHDをくっつけた数日後のことだったのでパフォーマンスが下がったのかと思っていたのだが、単なるディスク書き込みならI/Oをすべて奪い取るようなことはない。いつこれがはじまったのか記憶は曖昧だがカーネル3.8.0-33からだったかもしれない。

4コア中の1個目のコアのみに負荷がかかっているので、起動しているいずれかのプロセスの1個の特定のスレッドだけがCPUを使い果たしているのではないかと考えた。

ところがプロセスリストを見ると [kworker] なるプロセスが12個ほど発生していて、普段はOS起動時にちらっと1個だけ存在する極めて控えめなやつのはずだったものが、ここに来てオラオラ邪魔だどけ的に振る舞い始めている。頭にカーネルのkバッジを掲げる官憲みたいなプロセスの正体はほとんど知らなかった。topやiotopを見てもどのプロセスが呼んでいるかはわからない。実体がわかる名前くらい書いてもらいたいものだが。


フォーラムで調べてみるとかなり前から観察されている現象らしい。というか2年前から未解決のままかよ。

要約すると:

http://askubuntu.com/questions/176565/why-does-kworker-cpu-usage-get-so-high

共通の症状は、CPUの動作は通常通りで1つめのCPUコアだけが高負荷になっているところ。たとえば3つあるプロセスのうち2つが kworker で1つは gonem-system-mo である(topコマンドリストに出てくる最初の2プロセス)。
kworker はカーネルが起動するスレッドのプレースホルダープロセスであり、これは実際にカーネルプロセスのほとんどを実行しているものである。割り込みやタイマー、I/Oなどの特定のケースで使われる。これらは典型的にプロセスを実行するシステムタイムの大部分を占めている。
これをシステムから安全に排除する方法はなく、KDEとは無関係である(プログラムがカーネルに要求するいくつかのシステムコールを除く)。


1. カーネルをディストリが配布する最新のものにアップデートする。
2. unameコマンドでカーネルのバージョンが2.36以上であることを確認する。バージョン2.36以降が重要で、このバージョン以降がカーネルのDRM_KMS_POLLINGを無効化できるためである。2.5カーネルではDRM_KMS_POLLINGを無効化できない。たぶん2.35のバグフィックスでパッチが当たったのかもしれない。
3. 新しいカーネルで再起動し以下のコマンドを実行する。 
sudo echo N>/sys/module/drm_kms_helper/parameters/poll 
これは強制的にシステムの負荷を軽減し通常の状態に戻す。このコマンドが有効なのはシステムが再起動されるまでである。再起動後に値はpoll=Yに戻ってしまう。この効果を維持したい場合は以下のコマンドを実行する。
echo "options drm_kms_helper poll=N">/etc/modprobe.d/local.conf
追記:カーネル3.8xから3.9-rc5では、i915チップでIRQの衝突が起こるかもしれない。またdrm pollパラメータは何らかの理由で無効にされる。この解決方法はもう使えないかもしれない。スキルがあるなら以下の内容を試してほしい:
1. カーネルを3.2x系にダウングレードする
2. /etc/rc.localに「echo N> /sys/module/drm_kms_helper/parameters/poll」を追記するか、「drm_kms_helper.poll=0」をgrubの起動パラメータに追加する。
これは単なる応急処置なので続けて解決策を探ってほしい。

最初のスレに /sys/firmware/acpi/interrupts/ の値が高いものをdisableしろと書いてあるのだがいずれも値はゼロのままで、ここには割込みらしきものが出ていない。

2つ目のスレの解決策は古いし3.8付近では無効らしいので理屈がわかっている場合のみ適用したほうがいい。
なかにはUSBモジュールがボトルネックだとか、カーネルがやっていることだからお前が心配することじゃないよみたいな殿様カキコがあったりするのだが、いくつかはdrm_kmsに言及している。

DRM(Direct Rendering Manager)はXアプリがサーバを介せずに直接アクセスする手段を提供するもので、特定のビデオチップのためのカーネルモジュールらしい。KMS(Kernel Module Settings)とはカーネルからモニタの解像度や色数を設定するもの。

うちの構成はNVIDIAプロプライエタリドライバなのでKMSは使われてないはずなのだがどこかで衝突してる可能性はある。


とりあえずカーネルとドライバをアップデートして、 grub2の起動オプションに に drm_kms_helper.poll=0 を追加して様子を見る。これが有効になったかどうかはdmesgには出てこない。

20140115: topの観察を続けていたらディスクアクセスが起こっている最中にupdatedb.mlocateが起動されている。簡単に言うとファイルのインデックスを作っているだけなのだが、cronで1日1回明け方にまわしているだけだと思っていたのだがな。なんらかの拍子に起動されることがあるのかと思ったのだがそういう説明はないっぽい。

20140117:DRM_KMSのpollを0にしてupdatedbを止めてから症状が出なくなったが原因が特定できない。ただのswapだった可能性もあるが今のカーネルは空きメモリをキャッシュに使うのでメモリの使用量からではスワップアウトかどうかが追えないのでなんともいえない。もしかすると最初に見たkworker群と後に見たupdatedbは関係ないのかもしれん。





2014年1月13日月曜日

Cyclesでボリュームマテリアルテスト その3

ボリュームシェーダーのコードが11日に2.69.8公式ツリーにマージされたようだ。レンダリングがかなり軽くなった。いくつか変更点がある。
  • レンダータブのアルゴリズムの選択がなくなりボリュームサンプリングのステップ値と上限の設定が追加された
  • 等方性ボリュームノードはボリューム拡散(Volume Scatter)とボリューム吸収(Volume Absorption)に別れた。引数gの名称は異方性に修正
  • blenderartistスレの11日のDingto氏の書き込みによるとワールドにおけるサーフェスのライトは見えなくなったかまたは無効になった。サンプル画像にあるようなスポットライトの表現はできなくなったので、もし必要なら大きめの立方体などを使ってボリュームを適用してくれとのこと

散光星雲

レンダー所要時間:3時間40分 1000サンプル

ガス部分のマテリアルノード

最初にイメージしていたものにかなり近づいてきた気がする。きれいに透過したい場合はやはりボリュームノードの密度にアルファ値を食わせるのがいいらしい。しかしこれが前回のようなガワだけでなくボリューム内部まで正しく点描されているかどうかは不明だが、カメラを雲に突っ込むようなアニメーションにするのでないかぎり目的は果たせていると思う。

星雲のうち白い部分は本当は黄色にしたかったのだがなぜか緑が混じってしまい、ボロノイテクスチャの拡大縮小値を下げてしのいだ。白い部分は実はボロノイ模様の円と円の隙間の部分になっている。
上のカラーランプはガス全体を左から右にグラデーションをかけているもので、下のカラーランプで色分けをしている。

右下の千切れている部分は単にオブジェクトに潰れたICO球を追加しただけのもの。これをいくつか点在させればひつじ雲のようなものも作れるかもしれない。しかしながら、本来なら密度係数だけで、たとえば立方体オブジェクトの中にいくつもの雲の形を表現できるのがボリュームの機能なのだが、たぶんそれをやるとメモリを大量に消費するかもしれない。
その2で紹介したWoodcockの論文には、ボリュームを仮想パーティクルのように扱う手法を提唱していたので、オブジェクト内部の任意の座標に置かれた点の集まりをいかに軽量に扱えるかでアルゴリズムの良否がわかれるところだろう。

追記:スレでボリュームの密度にアルファ値を食わせるのは正しい使い方なのかと質問してみたのだが、特に指摘されなかったのでレンダー結果よければすべて良し的な。実際どういう使い方ができるかというのを検証するスレなので問題はないらしい。



2014年1月5日日曜日

トーマス・デンジーズ氏インタビュー記事

トーマス・デンジーズ氏 CyclesのOpen Shading Languageの開発者インタビュー

Dingtoリポジトリのコードを書いている本人のインタビュー記事。

原文:
BlenderDiplom.com Interview: Thomas Dinges on OSL in Cycles

http://blenderdiplom.com/en/interviews/540-interview-thomas-dinges-on-osl-in-cycles.html




2013年12月31日 ゴットフリート・ホフマン氏による執筆

トーマス・デンジーズ氏はBlenderの開発者であり、CyclesへのOpen Shading Language(以下OLS)の実装の推進を支えた一人である。さらにOpenShading.comのWebサイトの最新情報を担当し、関連情報のサポートやチュートリアルなどを紹介している。

このインタビューはFMX 2013( http://www.fmx.de/about/history/fmx-2013.html )で行われ、ドイツ語版のデジタルプロダクション誌で公開されたものである。

BlenderDiplom:トーマスさんはBlender CyclesレンダーエンジンへのOSLの実装に携わった開発者の一人だと伺っていますが、ご自身の経歴について簡単に教えてください。

トーマス:OSLは開発の早い段階からCyclesと関わっていました。2011年頃だったと思います。その頃OSLはすでに実装されていましたがまだ稼動可能状態にはありませんでした。Cyclesのメインの開発者であるブレヒト・ファン・ロンメル氏がCyclesを設計するときにOpen Shading Languageを拡張して使っていました。OSLはCyclesの開発プロセスで重要な要素でした。今でもその名前とツール類、それからワークフローを見ることができます。OSLは予定していた2つのシェーディングエンジンのうちのひとつでしたが、残念ながらそのときにはまだ動いていませんでした。

CyclesはCPUとGPUの両方でレンダーできるよう意図されていたため、OSLはCPUレンダリングのみで動き、ブレヒト氏が設計した2つ目のシェーディングエンジンはGPUで動いていました。この2つ目のエンジンはCyclesを開発しているときに皆の注目を集めましたが、それはOSLのプロジェクトがちょうど停滞しようとしていた矢先のことでした。

2012年の夏にOSLは稼働可能な状態になりました。それは私が若干のソースコードを読み小さな変更といくつかのデバグが施されたときでしたが、私は2011年時点のシェーダーシステムのすべての変更点をOSLに移植しなければなりませんでした。ルーカス・トン氏と共同作業し実行可能なプロタイプの公開にこぎつけました。

そのときにはすでにトン氏の設計したスクリプトノードが実装されていました。そこでようやくOSLシェーダースクリプトをCyclesで使うことができるようになったのです。

BlenderDiplom:話に聞いていたところではBlenderは2011年と2012年にいくつかのOSLに対応して使えるようになるとのことでしたが、2013年になってもBlenderは依然としてOSLシェーディング市場の独占状態にあります。ほかのエンジンはなぜOSLの採用に手をこまねいているのでしょうか?

トーマス:主な理由は利用可能なOSLが2012年以前にはまだ公開プロジェクトにはなかったからだと思います。「メン・イン・ブラック3」とか「ホテルトランシルバニア」とか「アメイジングスパイダーマン」などが公開され、これらはそれぞれ単独でOSLシェーディングが実際に使われた最初の映画です。それまでOSLはあまり知られていませんでした。

SONYイメージワークスで使われていることが知られていましたが、ほとんどの人はOSLの導入は時期尚早と考え、それで映像を作ることに懐疑的でした。今ではV-RayがOSLを実装する予定との情報があり、FMX 2013でそれが確認されました。

残念ながらそのネタはまだ守秘義務があるので詳細については公式に発表されるまで数週間ばかり待たなければいけません。

BlnderDiplom:それでBlender CyclesはOSLによるパストレーシングエンジンなわけですね。すでにたくさんのスクリプトが書かれたと聞きました。これらのスクリプトはほかのレンダリングエンジンのユーザーにも使えるリソースになるでしょうか?

トーマス:完全に再利用できると思います。それがシェーダー言語が設計された基本概念ですから。ほかのエンジンはおよそRenderman(訳注:ピクサースタジオのシェーダー言語)互換なのでシェーダーを変えても簡単に使えると思います。

ただしOSLの仕様ではない部分、BRDFやシェーダーなどは異なりますが、これらの部分はシンプルな関数呼び出しなのでシェーダー内部でそれを修正することは簡単にできると思います。

たとえばユーザーがプロシージャルテクスチャが実装されているあるシェーダーを使っているとして、ディフューズシェーダーを出力しようとしたら、ほかのエンジン名に名前を変更するだけです。

今のところはまだスクリプトはすべてのOSL対応レンダーエンジンをサポートできているわけではないですが。

BlenderDiplom:つまり再利用が可能で、また将来的にはBlender Cyclesのために書かれたスクリプトも他のレンダーエンジンのユーザーにも使えるというわけですね。

ところでOSLのWebサイトを運営なさっていますが現在のところCyclesでのOSLの使い方のみに限定されているようですが、ほかのレンダリングエンジンについても扱う予定でしょうか?

トーマス:もちろんです!

今のところOpenShading.comはCyclesに注視していますが、それは一般に公開されているレンダーエンジンで唯一のものだからです。

でもほかのエンジンがリリースされたらその情報も追加していきたいと考えています。V-RayなどがOSLをサポートするようになり、たくさんの実用的なOSLスクリプトを集めてユーザーが使えるように便宜を図ることは非常に価値があることだと思います。


訳注:おっさんかと思ってたら若いわ(´・ω・`)

2013年12月31日火曜日

Cyclesでボリュームマテリアルテスト その2

この記事を書いている間に2.69.8にマージされてボリュームシェーダーのノード構成が変わったので参考までにしてください


以前に内蔵レンダーでこういうのを作ったことがあって



要はサーフェスにマテリアルを貼っていない見えないオブジェクトの内側にライトを2個くらい置いて、ボリュームマテリアルに内側から光を当てている。Cyclesで同じことができないかと考えていたら2.7で実装されるらしいと聞いた。ボリュームマテリアルというのは、こういうオブジェクトの内側を点描するような、早く言えば雲とか煙を表現するのに向いている。現在のCyclesにはまだマテリアルをいじれる雲addonはなかった気がする。

Cyclesのシェーダーはもともとサーフェスに貼られたマテリアルを対象としているので内蔵レンダーにあるようなHaloやボリュームには向いてないと聞いているがどうやって実現しているのかかなり興味がある。

svn.blender.orgのDingtoリポジトリをビルドして試してみた。


どら焼きのようなICO球オブジェクトにポイントライトとエリアライトを1個ずつ置いた。色はライトそのものに薄い黄色と白を付けた。球のマテリアルノードはこれだけ。




一見すると星がきれいに表現されているように見えるが実はこれがただのノイズだったりするのだったw
密度を上げてみるとノイズが減って確かにきれいに見えるがボリューム全体がのっぺりしてしまう。オブジェクトの透明感と光のグラデーションの滑らかさは反比例するらしい。

等方性ボリュームのg値については soc-2013-dingto/intern/cycles/kernel/volume.h に以下のようなコメントがあるが:
レイ間に与えられたコサイン値は光子が軌道に沿って反射する確率密度を返す。引数gはそれが球状にどれくらい離れているかを決める。値が0のときデフューズのような形状になり、1のときは鋭い1本の光線のようになる。
このオブジェクトでいう光の減衰に影響するんじゃないかと思う

現在のところCPUレンダーのみ対応。機能セットは実験的にしておく。




Blender Cycles memo( http://cycles.wiki.fc2.com/ )
の翻訳によると、Cyclesのボリュームシェーダは、オブジェクト内を光が通過する際の作用を表現している。ボリューム内を通過する光は任意の点で分散するか吸収するかまたは放射される、とある。ガラスや光沢と組み合わせると氷のようになる、と書いてある。



グラスBSDFを足してみると若干滑らかになる。グラデーションを滑らかにする方法はほかにもあるかもしれない。無論コンポジットでごまかすこともできるのだが、アニメーションした場合フレーム間で微妙なズレが生じ絵の動きによってはチラつきが目立ってしまう。コンポジットは1枚の静止画のレンダー後にレタッチをするのと同じことなので補助的な編集ツールにすぎないと考えている。オブジェクトレベルで高い精度があればいくら動かしても劣化せずに使える。

銀河系



銀河系を作ってみたのだがかなり悩んだ。中心にあるどら焼き型の光はボリューム。外側の渦巻きの4色の点々はパーティクル。赤いガス星雲はボリュームにボロノイを貼っているが最初は綺麗にガスっぽい感じが出てたのにいじりすぎて元に戻せなくなってしまった。以下はガス星雲のマテリアルノード。


霧も光もオブジェクト内にある点の存在は、すべて等方性ボリュームの密度の値で行われる。なのでオブジェクト内の座標(あえてジオメトリの位置として呼称している?)にボロノイやウェーブテクスチャを食わせてスポンジのような効果を作り出すこともできる。千切れ雲とかちぎりこんにゃくの集合みたいな形状も可能らしいのだが、その場合はいずれかのノードのディスプレイス値を使うらしいということしか分からなかった。たぶんマテリアル出力にあるディスプレイスだと思うがやり方がわからない。それが理由でガス星雲の部分はオブジェクトの表面にぺったりと貼り付けたようになっている。

将来修正されるであろう不具合。同じレイヤー上に2つ以上のボリュームオブジェクトがあるとアルファ透過してくれない。同じボリュームマテリアルを貼ったオブジェクト同士は重なった部分がきれいに表現できない。今回はレイヤーを分けてコンポジットで重ねた。同じオブジェクトに複数のマテリアルを重ねられない。

2つ以上のボリュームマテリアルを混ぜて使いたい場合はノードエディタ上で2系統作りミックスか追加シェーダーで合成してやればよい(なかなかうまく混ぜられないが)。

透過させるにはカラーの出ているノードからアルファ値を密度に食わせてやればよい。

散光星雲


レンダー所要時間:46時間37分
(4コア3.6GHz 8Gメモリ CPUレンダリング500サンプル)

冒頭にある散光星雲を作ってみたのだがレンダーにかなり時間かかっちまって、たぶん実装がまだpythonコードだからだと思うがいろいろと調整が必要だということを感じた。レンダータブにある2つのアルゴリズムはそれぞれ特性が違っていて所要時間も違う。実はサンプリング1000と2000も試したのだが開始から2日目くらいでフリーズして諦めて500に戻した。GPUレンダならよくあることだが今回はOSカーネル自体が固まったのでメモリを食い尽くしてしまったのかもしれん。サンプル数を上げていくとスムーズな点の減衰になることは分かった。

ガス部分のマテリアルノード

星雲は単にディスプレイスで凸凹させているので実際にはボリュームが減衰しているわけではない。真ん中にライト代わりの凸凹オブジェクトを埋め込んでいるのでこういう光になっている。
等方性ボリュームを2つにしたのは、上は周辺の赤い部分の色、下は中心に若干赤紫を足したかったためだが、両方をバランスよく出すのは難しかった。この値では外側の赤が強い。ボロノイにノイズテクスチャを食わせているのはblenderartistのスレでこういう使い方をしているのを見て真似してみたのだがどういう原理で機能しているのかは分からない(そもそももっさりとしたCPUレンダーなので値をちまちま変更して変化を見るという検証ができない)。

点の密度が外側に向かって緩やかに減衰していくのを期待しているのだが、思ったようなグラデーションが出ていない。つまり減衰にはサインカーブが使われているはずなのだが内蔵レンダーのボリュームマテリアルで表現されるような減衰が行われていない。
ボリュームマテリアルは霧や雲ジェネレータのような元になるものなのでこういう感じにぷっつり切れてしまうというのは機能的に美しくない。

等方性ボリュームの密度入力にサイン値を与えてみているのだが密度が厳密に何を指すのかわかってないので意味がなかったかもしれない。むしろレンダータブのボリュームセクション内にある「密度係数」を下げるほうが効果があった。係数は乗数らしい。ワールドの点の減衰が綺麗なのはこの値を直接使っているからではないかと思う。むしろ裾野が緩やかに伸びるアークタンジェントのようなカーブが欲しかった。

2つのアルゴリズム

レンダータブにはInhomogeneous(不均一)にRay marchingとWoodcockのアルゴリズムがあるが簡単に言うと:

Ray Marching:レイ上を一定距離のステップでオブジェクトに進み、交点を探索してその点の色を計算するもの。オブジェクトの複雑さと面積に比例して計算量が増加する。割と古くから使われている光子マッピングの手法。光線の上を一歩ずつ歩測する様子からこの名前になっているらしい。

Woodcock:ボリューム中を通過するレイ上の最初の点を探しだす。このときの点の散布は透過率と等しくなる。2点間の透過率は点の間のパスの衝突の平均値になる。Ray Marchingの代替手段として考案されたもので比較的計算が早い。

ということらしい。Ray MarchingはOpenGLなどのCGプログラマがロジックを説明している日本語のページがいくつかあるが、いずれにしてもCG学会で発表される論文レベルの知識が必要なので方程式を見てもなんのことやらだった。


ハンガリーブダペスト情報経済大学の論文(PDF): http://sirkan.iit.bme.hu/~szirmay/woodcock1.pdf


この論文ではWoodcockの利点を解説している。抜粋すると、Ray Marchingのアルゴリズムはボクセルの配列が大きい場合や吸光係数の平均値が小さい場合に大量のボクセル配列を要求する。つまりメモリを消費する。
Woodcockレイトレースは吸光係数(光がある媒体に入射したときどれくらい光を吸収するかを表す定数)が最大値でパスの長さが無制限なサンプリングができ、最大距離でサンプリングしたレイの改善、最大確率の点の使用と不使用の選択などを提供する、また解像度に依存しない自由なパスのサンプリングを提供する、とのことだ。

欠点もいくつかあるらしいのだがいまいち理解できなくて申し訳ない。