LightWave で NPR:筆描き表現を目指して その3

上の記事に続いて、以前紹介したことのある LightWave のシェーダープラグインunReal Xtreme2」を使ったモノクロ筆描き表現を試みた。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

プラグインをインストールしておく。Layout でビューはVPRにしておく。背景を白にしておく(これは ToonTracer のオプションで設定してもよい)。

オブジェクトごとに線を違う太さにしたい場合はサーフェイスを分けるといったように、出したい輪郭線の設定によって任意にサーフェイスを調整しておくとよい。今回も前回同様に『終りなき戦い』のコンバットシェル(改変版)を利用しているが、コンバットシェルとその他のオブジェクトでサーフェイスを別にしている。

そして以下のようなMatCap用画像を用意する。作成方法は前回参照のこと。パーツ(サーフェイス)ごとに質感を分けたいなら、その分だけ別の画像も用意する。

今回は輪郭線を描画するブラシに画像テクスチャを設定する(つまりテクスチャで輪郭線を描く)ので、そのために以下のような少し濃い目の画像も用意した。

また、今回も平面対策として変形(Displacement)ノードを使いオブジェクトに微小な凹凸をつけている。これも設定方法は前回参照のこと。

サーフェイスにMatCapを設定する

Layout(Modeler でも可能)にて、左上メニュー[色・質感編集](ショートカット【F5】)で[Surface Editor]を開く。サーフェイスを選択して[基本]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

プラグインがインストールされていれば左のノード欄に[unReal]という項目が出来ているので、[unReal]>[unReal2::PaintmapCoordinate]から[PaintmapCoordinate]ノードを出す。そして[2D Textures]>[Image]で[Image]ノードを出す。

[PaintmapCoordinate]ノードの[U Offset]出力を[Image]ノードの[U Offset]入力へ、[V Offset]出力を同じく[V Offset]入力へ、[Position]出力を[Position]入力へとそれぞれ繋ぐ。最後に[Image]ノードの[Color]出力を[Surface]ノードの[Diffuse Shading]に繋ぐ。

[Image]ノードをクリックして編集パネルを出し、[Image]>[(load image)]から質感を適用するMatCap用画像を読み込む。すぐVPRのビューに反映されるだろう。これを適用したいサーフェイスすべてでおこなう。


EdgeTracer をセットする

そのまま[Surface Editor]にて、[シェーダ]タブの[シェーダ追加]プルダウンメニューで[unReal2::EdgeTracer]を選択する。

追加されたその名称部分をダブルクリック(または右クリック>[プロパティ])して出てきた[グループID]欄に番号を振る。今回は2種類のサーフェイスにそれぞれ「0」と「1」を割り当てた。この「グループID」を割り振ることで、IDごとに太さを変えたりといった輪郭線設定の調整ができる。


ToonTracer を設定する

Layout 左上メニュー[ウィンドウ]>[イメージプロセッシング]で[特殊効果]ウィンドウを開く(ショートカット【Ctrl+F8】)。[プロセシング]タブ>[ピクセルフィルタ追加]から[unReal2::ToonTracer]を選択して追加。

追加されたその名称部分をダブルクリック(または右クリック>[プロパティ])して[unReal Xtreme2 - ToonTracer]設定パネルを出す。このパネルで線の描画設定をおこなう。

まず[タイプ]を[画像]にして、右の[(Load Image)]からあらかじめ用意したブラシ用画像を読み込む。ブラシAAは[高]にした。

次に[ブラシ設定]タブの各パラメータを設定する。[サイズ]は30、[柔らかさ]は100%、[圧縮率]は20%、[角度]は10°、[不透明度]80%、[中心点X]と[Y]は共に20%にしてみた。

ここのブラシ設定でノイズ系のプロシージャルテクスチャを利用することで、手描き風の効果を出すことができる。まず[サイズ]の右にある[T]ボタンを押して[テクスチャ編集]パネルを開き、[レイヤー種]を[プロシージャル]にして、[プロシージャル種]でノイズ系のプロシージャルテクスチャを選択する。ここでは[Turbulent Noise]にしている。

このノイズによってブラシサイズが均一ではなく、線の太さが不規則に変化するようになる。[柔らかさ][圧縮率][角度]でも同様にプロシージャルテクスチャを適用する。ちなみに[T]ボタンは【Shift】を押しながらクリックすると解除できる。なお、[優先順位チェック]は[深度]にした。

[境界設定1]タブでは[オブジェクト境界][サーフェイス境界][グループ境界][深度境界]にチェック、[境界設定2]タブでは[法線の折り目][アウトライン]にチェックした。

ToonTracer ではブラシ設定と描画設定を1つのレイヤーとして扱う。先ほどサーフェイスに設定したグループIDごとに太さを変えたいので、ここでレイヤーを分けたい。左の[レイヤー]リストで現在のレイヤーを選択し、上の[レイヤー複製]ボタンを押して複製する。パネル上部の[レイヤー名]で分かりやすいようにレイヤー名を変更する。今回は「NewLayer0」と「NewLayer1」にした。

各レイヤーを選択してから左下[グループ]リスト一番左の欄で、それぞれ描画を適用するグループIDを決めてチェックする。ここでは「NewLayer0」にグループ「0」、「NewLayer1」にグループ「1」をそれぞれ適用させている。左から2番目の欄では描画から除外するグループIDにチェックする。

ここではコンバットシェルのサーフェイスに割り当てたグループ「0」を「NewLayer0」へ適用させ、それ以外のサーフェイスに割り当てたグループ「1」を「NewLayer1」に適用させた。そしてコンバットシェルつまり「NewLayer0」の輪郭線を20pxにして、30pxとしていた他のサーフェイス(レイヤー)よりも細く設定した。その他の設定は一緒。

すべてのサーフェイスに設定し終えたら、ショートカット【F9】でレンダリングして画像に出力。作成したサーフェイス設定を保存するならオブジェクトの保存を忘れずに。

静止画ではそれなりだが、動画だと輪郭線の途切れなどが目立つ。まだ設定が甘いのかもしれない。静止画でレタッチ前提なら使えるかも。動画のレンダリング時間は前回の手法よりも圧倒的に早かった。

筆書き風の画像を出力する手法として前回と比較すると、スフィアマッピング機能があり、テクスチャで線を描け、レンダリングが早いという3点くらいしか「unReal Xtreme2」を使う利点がない気がする。

ライセンス

本記事に使用したオブジェクトの元データは、作成者の rogerharkavy 氏によりクリエイティブコモンズ・ライセンスの「Attribution-NonCommercial-ShareAlike(表示-非営利-継承)」で配布されているため、その派生物である本記事内の出力画像にも同じライセンスを適用する。

クリエイティブ・コモンズ・ライセンス
rogerharkavy, Ditty を著作者とするこの 記事内の画像クリエイティブ・コモンズの 表示 - 非営利 - 継承 4.0 国際 ライセンスで提供されています。
http://www.thingiverse.com/thing:21308にある作品に基づいています。

LightWave で NPR:筆描き表現を目指して その2

上の記事に続いて、以下のページで扱われている水墨画風の表現方法に LightWave で挑戦してみる。

スフィア環境マッピング

この質感が墨で筆描きしたような塗りになっているのは、MMDのスフィアマップ機能というもので実現されているらしい。正式には「スフィア環境マッピング」といい、球体の画像からその色や陰影をオブジェクトのサーフェイスに適用する技術である。これに使われる画像素材を MatCap (Material Capture) と呼ぶ。ある質感をもった球体の画像(2次元なので円になるが)を用意すると、その画像をオブジェクトの形状(正しくはカメラに対する法線の向き)に合わせて質感として適用してくれる。

ただし、色だけでなく陰影や反射なども元画像に描かれたものが適用されるため、別にライトや陰影を設定しているとレンダリング画像に違和感が生じることも多いので注意。そして技術の原理からいって、カメラに対する法線の角度変化が多いような、つまりは曲面の多い形状には向いているが、逆にのっぺりした広い面が多い形状にはあまり向いていない気がする。

LightWave にはスフィア環境マッピングのメニューが標準搭載されていない(多分)ので、外部プラグインで実現させる。現時点では以下の2つのプラグインのどちらかを使えばできる。ここでは「AS MatCap Node」を使った手順を紹介する。

結論としては、以下の画像を出力できた。


事前準備

まず、以下のような画像を用意する。最初に紹介したページと同じくパーツ(サーフェイス)ごとに質感を分けたいなら、その分だけ別の画像も用意する。

これは、Photoshop で正方形キャンバスを新規に作り、それに内接するような円の範囲(以下参考)内に画像を描いている。なお、あまり厳密に内接していなくてもよい。

本来は反射とか陰影のついた球体の画像を描くのだが、今回は水墨画調を目指すので白いキャンバスに黒色で墨がにじんだようなタッチを描いた。

ペイントソフトに筆のようなブラシがなければ、それを探すか作ることから始めよう。自作するなら以下の記事が参考になる。もしくは Photoshop なら普通のブラシで描いたのち、水彩画フィルターや墨絵フィルターをかける方法も使えるかもしれない。

市販の Photoshop ブラシセットであれば、中国産のこれが最も優秀だと感じた。

こちらも紹介しておく。

画像作成時、円の面積いっぱいまで塗るとサーフェイスの端まで塗りつぶされて墨絵っぽくならないので、外側はある程度空けておくのがよい。画像サイズは大きいほうが何かとよいだろう。今回は1200×1200ピクセルで解像度400ppi。描いたらPSDかPNGあたりの任意形式で保存しておく。

LightWave における手順

前述のプラグインをインストールしておく。今回も前回と同様、簡単な直方体(モノリス)と球、歯車、そして以前に紹介し再配布している『終りなき戦い』のコンバットシェル(改変版)を利用している。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

Layout にオブジェクトを置いて背景は白に設定する。左上の[ウィンドウ]>[背景オプション](【Ctrl+F5】)>[特殊効果]ウィンドウ>[背景]タブ>[背景色]で設定。

[オブジェクトのアイテムプロパティ]>[輪郭]タブで、アイテムごとに出したい輪郭線を有効にしてそれぞれ太さを決める。

輪郭線のノード編集で[Edge]ノードの[~Taper]と[~Opacity]にプロシージャルテクスチャを入力する。ここでは[Scalar Layer]ノードでプロシージャルのレイヤーを作成して設定している。今回は光による線の強弱は設定していない。詳しくは前回記事を参照のこと。

【F5】キーで[色・質感編集]パネルを開き、サーフェイスを選択して[基本]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

プラグインがインストールしてあれば左のノード欄に[ASTool]という項目が出来ているので、[ASTool]>[Shader]>[Diffuse]>[MatCap]で[MatCap]ノードを出す。[MatCap]ノードの[Color]出力を[Surface]ノードの[Diffuse Shading]に繋ぐ。[MatCap]ノードをクリックして編集パネルを出し、[Image]をクリックして[load image]から質感を適用するMatCap画像を読み込む。すぐにVPRのビューに反映されるだろう。なお、アンビエントオクルージョンなどは設定していない。

すべてのサーフェイスに設定し終えたら、ショートカット【F9】でレンダリングして画像に出力。作成したサーフェイス設定を保存するならオブジェクトの保存を忘れずに。

見て分かるように、曲面の多い形状のものにはかなり有効だが、広い平面が多い形状にはあまり向いていない。動画にもしてみたが、平面では陰影のちらつきが目立つ。


変形ノードを使った修正

この平面部分にムラを付けてのっぺりさせたくないのだが、原理的に1枚ポリゴンでは無理なので、ポリゴンを細分化してから微小な凹凸をつける必要があるだろう。フラクタル化([マルチ加工]タブ>[細分化]>[フラクタル化])やジッター([変形]タブ>[変換]>[ジッター])で処理しても構わないが、それだと元のオブジェクト形状も変化してしまう。そこで、Displacement(変形、変位、ディスプレースメント)ノードを使う方法を記しておく。

まず Modeler で、ムラを付けたいオブジェクト(アイテム)を細分化する。もし5頂点以上のポリゴンを三角分割で細分化するなら、その後に外部プラグインの「EdgeRelax」を使うと綺麗な分割になる。当然だが細分化前のオブジェクトを残しておきたい場合は別途保存しておくこと。

また、今回はいつものように[グローブ]で作成した球を使ったのだが、変形させてみたら両極付近がひきつって不要な線が出てしまったので、極部分のない球に作り直した。球体で変形ノードを使う場合は、プリミティブのボール作成時に数値入力パネルで[グローブ]ではなく[モザイク]にしておくとよいだろう。

左が[グローブ]で作成した球。右が[モザイク]で作成した球。

Layout に移り、[オブジェクトのアイテムプロパティ]パネルで[現在のオブジェクト]から該当のオブジェクトを選択し、[変形]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

左のノード欄から[Spot]>[Spot Info]ノード、[Layers]>[Scalar Layer]ノード、[Math]>[Vector]>[Scale]ノードを出す。[Spot Info]ノードの[Smoothed Normal]出力を[Scale]ノードの[Vector]入力へ、[Scalar Layer]ノードの[Scalar]出力を[Scale]ノードの[Scale]入力へ繋ぎ、[Scale]ノードの[Result]出力を[Displacement]ノードの[Input]入力へと繋ぐ。

[Scalar Layer]ノードをクリックして開き、[レイヤー種]を[プロシージャル]にして、[プロシージャル種]でノイズ系テクスチャを選択する。ここでは[Crumple]にした。ビューをVPRにしながらパネルの各数値をいじって変形具合を調整。これをオブジェクトごとにおこなう。ここでは4つのオブジェクトを全て変形ノードでわずかにデコボコさせている。最後に【F9】でレンダリング。のっぺりしていた面に少しだけムラができているのがわかる。

動画にもしてみたが、やはり動かすと輪郭線の途切れやムラの入り具合などに違和感がある。もう少し設定を詰めるべきか。静止画ではそこそこのレベルになったとは思う。

今回はすべてひとつの画像をベースにしているが、数種類の画像を用意してパーツ(サーフェイス)ごとに割り当て、それぞれ質感を変えるのもいいだろう。

(2018-10-02追記)続きとして、以下で「unReal Xtreme2」を使う方法についても書いた。


ライセンス

本記事に使用したオブジェクトの元データは、作成者の rogerharkavy 氏によりクリエイティブコモンズ・ライセンスの「Attribution-NonCommercial-ShareAlike(表示-非営利-継承)」で配布されているため、その派生物である本記事内の出力画像にも同じライセンスを適用する。

クリエイティブ・コモンズ・ライセンス
rogerharkavy, Ditty を著作者とするこの 記事内の画像クリエイティブ・コモンズの 表示 - 非営利 - 継承 4.0 国際 ライセンスで提供されています。
http://www.thingiverse.com/thing:21308にある作品に基づいています。

LightWave でフローリングや床模様を描く

LightWave で床のタイルやフローリングパターンを、標準機能のプロシージャルテクスチャ(計算で自動生成されるテクスチャ)からモノクロ画として描画する方法。壁面などのパターンにも応用できる。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

モノクロ画像用なので、ここではあらかじめサーフェイス色を白く、さらに自己発光度を100%にしておく。今回は検証用なので背景は黒のままにしてある。適用したいサーフェイスを選択し、[色・質感編集]>[基本]タブの[ノード編集]脇のチェックボックスを有効化してからボタンをクリックして[Node Editor]を出す。なお、今回は10m×10mの地面オブジェクトを使用している。

方形タイル

左のノード欄から[2D Textures]>[Grid2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、いわゆる一般的な方形タイルパターンを作成できる。


フローリング

左のノード欄から[2D Textures]>[Planks2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、いわゆる一般的なフローリングパターンを作成できる。

モザイクパーケット

左のノード欄から[2D Textures]>[Parquet2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、これでモザイクパーケット(寄木張りフローリング)を作成できる。少し古い学校の教室によく使われている床パターンである。

頑張ればヘリンボーン模様などもできそうだが、そこまでは検証していない。

[Color Layer]ノードでプロシージャルテクスチャを使う

[Layers]>[Color Layer]で、[レイヤー種]を[プロシージャル]にして調整すれば各種プロシージャルテクスチャが使えるので、こちらを使うのもよい。しかし、[2D Textures]ノードにあるものがこちらになかったり、またその逆もあるので注意。

以下はレンガやハニカムを設定した例。


遠くをかすませる

距離に応じてパターンをかすませ、遠くへいくほど白飛びして消えていくようにしたい。

ノードを使う(その1)

左のノード欄から[Math]>[Vector]>[Distance]ノードを出す。最初から出ている[Input]ノード(もしくは[Spot]>[Spot Info]ノード)の[Object Spot]出力を[Distance]ノードの[To]に繋ぐ。[Item Info]>[Item Info]ノードを出したらクリックしてカメラに設定し、[World Position]出力を[Distance]ノードの[From]に繋ぐ。これでカメラからオブジェクト(の各点)までの距離が得られる。

そして、段々と消えていくようにするというのは要するに勾配(グラディエント)をつけることなので、[Gradient]>[Gradient]ノードを出したら、[Distance]ノードの[Result]出力を[Gradient]ノードの[Input]へと繋ぎ、[Color]出力を上の項で出してある[2D Textures]ノードの[Bg Color]へと繋ぐ。

[Gradient]ノードをクリックしてグレーのグラディエントを設定する。キーを1つ作成し、グラディエントバーの上が黒、下が白となるようにする。消したい距離に合わせて下のキーの[Position]値を入力する。[Position]値に合わせて[End]欄の値も調整すると分かりやすい。


ノードを使う(その2)

[Color Layer]ノードを使うやり方もある。[Layers]>[Color Layer]で出し、クリックして設定。[レイヤー種]を[グラディエント]にして、[ブレンドモード]は[アルファ]、[入力パラメータ]は[Distance to Camera(カメラからの距離)]に設定したら、キーを1つ作成し、グラディエントバーの上が黒、下が白となるようにする。消したい距離に合わせて下のキーの[パラメータ]値を入力する。それに合わせて[終了]欄の値も調整すると分かりやすい。

上の項で出してある[2D Textures]ノードの[Color]出力を[Color Layer]ノードの[Color]入力へと繋ぐ。このとき[Color Layer]ノードの[Color]出力をそのまま[Surface]ノードの[Color]へ繋ぐと、以下のようになってしまう。

この奥に向かって黒くなる闇を反転して白くすればよいので、[Math]>[Scalar]>[Invert]ノードを出す。これは入力値を反転させて出力するノードなので、[Surface]ノードの手前に繋ぐ。

今度はテクスチャが反転してしまうので、[2D Textures]の該当ノードをクリックして開き、[Invert]欄にチェックを入れて反転させればよい。

また、すでに[Color Layer]ノードにてプロシージャルテクスチャもしくは画像のテクスチャを使っている場合は、その上に[グラディエント]のレイヤーを追加して上記を参考に設定し、[Invert]ノードを噛ませればよい。白黒の階調が反転していたら、各レイヤーの[レイヤー反転]欄をチェックして調整する。


手前をくっきり

これまでのレンダリング画像を見れば分かるが、カメラから近い箇所でもうっすらと消えてしまっている。手前はもっとくっきりさせて奥だけを抜きたければ、グラディエントバーにキーをもうひとつ作成する。その[Position]値([Color Layer]ノードなら[パラメータ]値)を半分程度にしたら、その位置における色を黒(最初のキーと同じ)にすればよい。


参考

LightWave で NPR:光に影響された線の強弱

LightWave において、光源の方向や位置をもとにして線に強弱をつける方法について。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

あらかじめ、Layout のビュー表示をVPRにしておく。そしてオブジェクトとカメラの位置を決める。さらに、背景を標準の黒から白にしておく。Layout 画面左上の[ウィンドウ]>[背景オプション](ショートカット【Ctrl+F5】)>[特殊効果]ウィンドウ>[背景]タブ>[背景色]で、カラーボックスをクリックして白 (RGB: 255, 255, 255) に設定。済んだら[特殊効果]ウィンドウは閉じてよい。

さらに、出す輪郭線の種類を決めておく。左下で[オブジェクト]を選択して右の[プロパティ]から[オブジェクトのアイテムプロパティ]ウィンドウを出し(ショートカット【p】)、[輪郭(Edges)]タブの欲しい輪郭線項目にチェックを入れて有効化する。線の太さは任意だが、太めの方が分かりやすい。ウィンドウの上部にある[現在のオブジェクト]から続けて選択して、すべてのオブジェクトごとに欲しい輪郭線項目を設定する。しかし、このままだと均一な線になってしまうので、この線に手を加えていく。

[輪郭(Edges)]タブの[ノード編集]ボタン右隣のチェックボックスをオンにし、[ノード編集]ボタンを押して[Node Editor]を開く。

方法その1

[Node Editor]の左に並んだ中から[Layers]>[Scalar Layer]を選択して、[Scalar Layer]ノードを出す。

[Scalar Layer]ノードの右にある[Alpha]から矢印をドラッグし、[Edge]ノードに並んでいる[Silhouette Edges Taper]や[Sharp Creases Taper]など、手を加えたい線の項の[~Taper]に矢印をそれぞれ接続していく。

[Scalar Layer]ノードをクリックして編集パネルを開く。[レイヤー種(Layer Type)]を[グラディエント(Gradient)]にする。[入力パラメータ(Input Parameter)]を[Light Incidence](ライトの入射)にして、[ライト(Light)]で適用するライトを選択。

グラディエントバー(左にある縦長の帯)をクリックしてグラディエントのキーを1つ作成する。キーの[値(Value)]は「0.01」、[パラメータ(Parameter)]は「90.0」にして、白から黒へのグラデーションを設定する。これで明るい部分の線が細くなる。

F9】でレンダリング

方法その2

[Node Editor]の左に並んだ中から[Shaders]>[Diffuse]>[Lambert]を選択し、作業領域に[Lambert]ノードを追加する。Lambert というのはランバート反射のことで、面から光源を指すベクトルと法線ベクトルとの内積ドット積)を使って計算される。要するに、光の当たり具合を0-1の階調で表現できる。

なお、[Lambert]ノードは LightWave 2018 で消えてしまったらしいが、配布プラグイン「Single Light Lambert」で代替できる。

この[Lambert]ノードの[Color]出力を[Edge]ノードの[~Taper]に繋いでみると分かるが、光が当たっている方が太く、当たっていない方が細い線になる。これは光の当たり度合いがそのまま線の太さに入力されるためだ。これを逆にして、光が当たっている方を細く、当たっていない方を太くしたい。そこで使うのが、入力値を反転させる[Invert]ノードである。[Math]>[Scalar]>[Invert]で[Invert]ノードを出す。

[Lambert]ノードの[Color]出力を[Invert]ノードの[In]に繋ぎ、[Invert]ノードの[Out]から、[Edge]ノードの任意の[~Taper]へと繋いでいく。これで光が当たっている方を細くすることができる。なお、[~Opacity]へ繋げば光が当たっている方の輪郭線の不透明度も下がるので、光の影響を受けた濃淡を線につけられる。

F9】でレンダリング

直方体の輪郭線で妙に太くなっている箇所があるが、おそらくこれは影のせいだろうと思い、[オブジェクトのアイテムプロパティ]>[レンダリング]タブ>[影を落とす]と[影を受ける]のチェックを外して再レンダリングすると消えた。

ちなみに、[Shaders]>[Diffuse]>[OrenNayer]で出る[OrenNayer]ノードがオーレン・ネイヤー反射というランバート反射の改良版らしく、こちらを使っても同じようなことができる。

方法その3

[Node Editor]の左に並んだ中から[Item Info]>[Light Info]ノードを出す。ライトの設定を出力するノード。

[Light Info]ノードをクリックして編集パネルを開き、[Light]で適用するライトを選択して閉じる。

[Gradient]>[Tools]>[Incidence]ノードを出す。このノードにベクトルを入力すると、そのベクトルと現在のヒットポイント(光線が当たった位置)間の角度が出力される。

[Light Info]ノードの[Direction]から、[Incidence]ノードの[Vector]へと繋ぐ。この[Direction(方向)]というのは、ライトの方向を表すベクトルを出力する。

[Gradient]>[Gradient]ノードを出す。

クリックして編集パネルを開く。グラディエントバー(左にある縦長の帯)をクリックして下方にキーを1つ作成する。色は黒のままで、[Position]はとりあえず「1.0」に。そして上のキーを選択したら[Color]のカラーボックスから色を白にして、グラディエントバーの上を白、下を黒にする。

[Incidence]ノードの[Result]から、[Gradient]ノードの[Input]へ繋ぎ、[Gradient]ノードの[Color]を[Edge]ノードにある任意の[~Taper]へと繋ぐ。

F9】でレンダリング

この方法の場合、[Gradient]ノードを開いてキー位置をずらしたり、任意の位置に新たなキーを追加することで、線の抜き具合を調整できる。

例えば上のような位置にキーを追加した場合、このような画になる。

線に粗さを入れる

また、線に粗さを入れたくば、[Turbulent Noise]ノード([3D Textures]>[Turbulent Noise])などのノイズ系テクスチャのノードを利用すればよい。

このとき使うのが[Multiply]ノード([Math]>[Scalar]>[Multiply])。これを使えば、ひとつのスカラー値を他の値で乗算できる。要するにノードの出力結果を掛け合わせられる。

方法その1なら[Scalar Layer]ノードの[Alpha]から、方法その2なら[Invert]ノードの[Out]から、方法その3なら[Gradient]ノードの[Color]から[Multiply]ノードの入力へ繋ぎ、ノイズ系テクスチャのノードをもうひとつの入力に繋ぐ。そして[Multiply]ノードの[Result]を[Edge]ノードにある任意の[~Taper]へと繋げばよい。


以上、調べた限りの方法を紹介したが、これ以外にもあるかもしれない。どれも球体や曲面の場合はよさそうだが、それ以外では線を太くすると角部分にはみ出してしまうのが難点。以下の記事のように、ノイズ系テクスチャのノードを利用した手描き風の粗い表現でなら使えるかもしれない。

LightWave で NPR:筆描き表現を目指して その1

再挑戦

LightWave4年前に挫折した表現への再挑戦。ノンフォトリアリスティック・レンダリング (Non-Photorealistic Rendering; NPR) として、3DCGで水墨画風というか、筆で描いたようなモノクロ画を出力する試み。

もともとは以下の v11.5 機能紹介動画で水墨画風を実現しているように見えたので、どうすればこれができるのかと思ったのがきっかけ。

この動画で使われているのは[Turbulent Noise]ノードで、これを[Edge]ノードの[Silhouette Edges Opacity]へと繋げていることまでは動画の画面から見て取れる。そして「背景を白にしてオクルージョンノードと組み合わせることで、水墨画のような表現もおこなうことができます」と解説されており、どうやらサーフェイスでのノード編集も必要なようなのだが、この動画だけでは詳細が不明だった。そこで LightWave 日本版販売元である D-STORM のテクニカルサポートへ問い合わせてみたところ、解説付きでデータを頂けた(感謝)。以下はエッジのノード編集設定。

そこで分かったが、ここでは[Occulusion2]ノード([Shaders]>[Diffuse]>[Occulusion2])を[Surface]ノードの[Color]入力へ繋げている。[Occulusion2]ノードの編集パネルでは、[Color Mapping]を[Backdrop]にしてある。

そして[レンダー]タブ>[オプション]>[レンダーオプション](ショートカット【Ctrl+p】)>[大域照明]タブの[ラジオシティ有効]にチェックを入れて、ラジオシティを利用するようにと解説されていた。だが、受け取ったデータでレンダリングしてみたところ問題が生じた。

……あまり水墨画っぽくない。さらに言えば、筆で描いたようにもそこまで見えない。画像の上方が薄くなっているのは、よくわからないが何かの設定が原因だろう。しかしこの際それは問題ではない。

動画内でも見られるVPR (Viewport Preview Renderer) 、つまり簡易レンダリング画面ではざらついた様子でかなり好ましい印象なのだが、実際にレンダリングしてみると「これじゃない」感じを受けてしまった。[Occulusion2]ノードを使った薄墨表現にあたる部分も単なるぼけたグレーに見えてしまい、墨っぽい粒子感は消えている。

そこで、もう少し「それっぽい」表現ができないか試行錯誤してみた結果、最終的にこのような画を出力することができた。

簡単な直方体(モノリス)と球、歯車、そして以前に紹介し再配布している『終りなき戦い』のコンバットシェル(改変版)を利用している。なお、テクスチャは面倒なので使用していない。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。以下にその Layout における手順を記しておく。

手順

あらかじめ、Layout のビュー表示をVPRにしておく。そしてオブジェクトとカメラの位置を決める。さらに、背景を標準の黒から白にしておく。Layout 画面左上の[ウィンドウ]>[背景オプション](ショートカット【Ctrl+F5】)>[特殊効果]ウィンドウ>[背景]タブ>[背景色]で、カラーボックスをクリックして白 (RGB: 255, 255, 255) に設定。済んだら[特殊効果]ウィンドウは閉じてよい。

出したいエッジを決める

まず、出す輪郭線の種類を決める。左下で[オブジェクト]を選択して右の[プロパティ]から[オブジェクトのアイテムプロパティ]ウィンドウを出し(ショートカット【p】)、[輪郭(Edges)]タブの欲しい輪郭線項目にチェックを入れて有効化する。線の太さは任意だが、太めの方が分かりやすいので、よく分からなければ20-25ピクセル程度にしてみるとよいだろう。ウィンドウの上部にある[現在のオブジェクト]から続けて選択して、すべてのオブジェクトごとに欲しい輪郭線項目を設定する。しかし、このままだと均一な線になってしまうので、この線に手を加えていく。

ところで、曲面については浅めの角度でスムージング設定していても、分割数が低いとカメラ距離が近い場合にカクついた輪郭線が出力されるので、多少は細かく割ったもののほうがよい。今回の例でいえば、球体は[サイド]が「48」、[分割数]が「24」のボールとして作成し、コンバットシェル含めてサーフェイスの[スムースしきい値]は「30.0°」にしてある。[サイド]が「24」、[分割数]が「12」だとカクカクな輪郭の球になった。

輪郭線のノード編集

[輪郭(Edges)]タブの[ノード編集]ボタン右隣のチェックボックスをオンにし、[ノード編集]ボタンを押して[Node Editor]を開く。

左に並んだ中から[3D Textures(3Dテクスチャ)]>[Turbulent Noise]を選択して、[Turbulent Noise]ノードを出す。Turbulent は「乱れの、乱流の」という意味。この[Turbulent Noise]ノードを使うと、フラクタルノイズのプロシージャルテクスチャ(計算で自動生成されるテクスチャ)を追加できる。要するに、ここでは線に手描きっぽい粗(「太さの乱れ」や「濃淡」)を加えられるということである*1

[Turbulent Noise]ノードの右にある[Alpha]から矢印をドラッグし、[Edge]ノードに並んでいる[Silhouette Edges Taper]と[Silhouette Edges Opacity]、[Sharp Creases Taper]と[Sharp Creases Opacity]など、手を加えたい線の項の[~Taper]と[~Opacity]に矢印をそれぞれ接続していく。ちなみに今回の例では[Intersection Edges Opacity(交差エッジの不透明度)]に繋げていないが、これは結果を見たら交差エッジの線が消えていたので、それを出すためにあえて外してある。

なお、[Edge]ノードのパネル表記と日本語訳との対応は以下。Silhouette Edges 以下それぞれに Taper(先細り)、Color(色)、Opacity(不透明度)等の項目がついて並んでいる。

  • Lines Taper:点/線の太さ
    • ここへの入力は0-1の範囲に値を変更されて「点/線の太さ」に乗算される。つまりエッジに対する影響ではなく、影響するのは1頂点と2頂点ポリゴン。
  • Silhouette Edges:シルエットエッジ
  • Unshared Edges:共有しないエッジ
  • Sharp Creases:鋭角の折り目
  • Surface Borders:サーフェイス境界
  • Patch Borders:パッチ境界
  • Other Edges:その他エッジ
  • Intersection Edges:交差エッジ
    • Intersection Edges Angle:交差エッジ角度

その後、[Turbulent Noise]ノード自体をクリックして編集パネルを出し、VPRを見ながら細かな設定を詰めていく。[Blending]は「Multiply(乗算)」にして、[Opacity(不透明度)]は100%だと薄く、200%だと濃い気がしたので150%にした。[Blending]で設定するブレンドモード (Blending Mode) の詳細についてはリファレンスマニュアル参照のこと。下部の[Scale(スケール)]値もいじる。

[Turbulent Noise]ノードの編集パネル中央に並んでいるのはフラクタル関係のパラメータ。以下の説明は相当ざっくりなので、詳細はリファレンスマニュアル参照のこと。

  • Increment(増加、増分):連続する細部間の振幅、つまり強度。
  • Lacunarity(空隙性):連続する細部間における穴や隙間の変化量。高くするとフラクタルに隙間や穴が多くなる。
  • Octaves(オクターブ):Lacunarity が細部間の変化量を決めるのに対して、Octaves は細部の数を決める。「1」のときは基本パターンのみが使われ、増やすと[Lacunarity]値に合わせてサイズを変えたパターンが重ねられていく。
  • Noise Type(ノイズ種):パーリンノイズ、バリューノイズ、グラディエントノイズ等々といったノイズ形式を決める。
  • Bump Amplitude(バンプ振幅):よくわからない。

VPRのビューは全表示にした方が分かりやすいが、あくまでプレビューなので、最終的には「1枚試しにレンダリング→ノードの入力値を微調整」という作業をして最適な値を見つければよい。

ちなみに、[Turbulent Noise]以外でもノイズ系の3Dテクスチャであれば似たような効果を得られる。例えばよく似た[Turbulence(乱流)]ノード、そして[Crumple(しわ)]ノード、[MultiFractal]ノード、[Crackle(ひび)]ノードなど、色々と試してみると面白いだろう。

別のノードでも可能

なお、[Turbulent Noise]ノードではなく、[Scalar Layer]ノードを使ってもおそらく同様のことが設定できるようなのでメモしておく。

[Layers]>[Scalar Layer]を選択して、[Scalar Layer]ノードを出したら、右にある[Alpha]から矢印をドラッグし、[Edge]ノードに並んでいる[Silhouette Edges Taper]と[Silhouette Edges Opacity]、[Sharp Creases Taper]と[Sharp Creases Opacity]など、手を加えたい線の項の[~Taper]と[~Opacity]に矢印をそれぞれ接続していく。

[Scalar Layer]ノードをクリックして編集パネルを開く。[レイヤー種]を[プロシージャル]にする。[プロシージャル種]で[Turbulent Noise]を選択すると、前述した[Turbulent Noise]ノードと同じ設定項目が出るので、[増加]、[空隙性]、[オクターブ]、[ノイズ種]等を設定し、[スケール]もいじる。上と同じならやはり[ブレンドモード]は「乗算」にして、[レイヤー不透明度]は150%。[Texture Value(テクスチャ値)]は、テクスチャパターンの最もはっきりした部分における値。正の数も負の数も指定可能。


サーフェイスを設定する

輪郭線の[ノード編集]パネルを閉じ、サーフェイスのノード編集に移る。[色・質感編集]>[Surface Editor](ショートカット【F5】)を開いて任意のサーフェイスを選択し、[基本]タブの一番上[ノード編集]ボタン右隣のチェックボックスをオンにし、[ノード編集]ボタンをクリックして[Node Editor]を開く。なお、今回は簡略化のため、コンバットシェルのサーフェイスはすべて1つにまとめている。

ここでサーフェイスを白くする。ひとつの方法としては、サーフェイスの[自己発光度]を100%にすること。[Surface Editor]にて[自己発光度]を100%に変更してもよいが、すでに設定してあるサーフェイス設定をこのために変えたくなければ、[Surface]ノードを使うのがよい。ノード欄で[Constant]>[Scalar]を選択し、[Scalar]ノードを出す。ダブルクリックし、値が「1.0」になっていることを確認して閉じたら、[Scalar]ノード右端の緑の丸をクリックし、[Surface]ノードの[Luminosity]へとドラッグして繋ぐ。これでサーフェイスの[自己発光度]が 100% になり、真っ白になる。

もうひとつの方法として、[レンダー]タブ>[オプション]>[レンダーオプション](ショートカット【Ctrl+p】)>[大域照明]タブ>[ラジオシティ有効]にチェックを入れる手法もある。ラジオシティとは、サーフェイスに当たった光を乱反射させて、それを現実世界と同じく間接光の光源にするという効果。レンダリング時間は長くなるのだが、今回は自己発光度をいじるよりもラジオシティを使った方が好みの画が出力できたため、後者にした。

さて、陰となる部分に薄墨っぽい表現を加えたいので、ノード編集でアンビエントオクルージョン機能を使う。アンビエントオクルージョンとは、シーン内の「どの部分が環境光 (ambient) をどの程度さえぎられる (occlusion) か」を計算して陰影を作るレンダリング方法。裂け目・折り目のような凹部では環境光がさえぎられるため、陰影が強めに出る。

今回はフリーで配布されているアンビエントオクルージョンノードのプラグイン「SG_AmbOccNode」を利用した。標準搭載の[Occlusion II]ノード([Shaders]>[Diffuse]>[Occlusion II])でも似たような結果を得られるのだが、出力画を比較した結果、こちらの方が好ましかった。調べると標準搭載のオクルージョンノードよりも陰部分のノイズが目立たないらしいが、今回はあまり関係ない。ただしこのノード、いい加減な繋ぎ方などをするとクラッシュするので注意。

ダウンロードしたらいつものように[プラグイン追加]で導入すると、[ノード編集]パネルの[Shaders]>[Diffuse]に[SG_AmbOccNode]が追加され、ノードとして利用できるようになる。もし追加されない場合は再起動してみること。[SG_AmbOccNode]ノードを出したら、その[1-Occlusion]出力を[Surface]ノードの[Color]もしくは[Diffuse Shading]に繋ぐ。ノードをクリックして編集パネルを開く。

  • Rays:光線の数。この値は高くすると陰のフチがボケて滑らかになるので、墨のようにざらついた粒子感を出すためには低くすればよい。なお、0にしてみたらクラッシュした。今回は5にしてみた。
  • Angle:光線の最大散乱角。この値が高いと陰の面積が広がるので全体がグレーになる。ここでは下げ、5°にした。
  • Range:光線の最大範囲。光線がこの値よりも離れた距離のサーフェイスに当たった場合は、当たってないように扱われる。この値を下げると陰が小さく薄くなるので、今回は0.5-1.0m程度がよい感じだった。

VPRとレンダリングもして比較したら、[Surface]ノードの入力は[Diffuse Shading]ではなく[Color]の方が好みの画だったので、そちらに決めた。

レンダリング

いつものようにショートカット【F9】でレンダリングして、画像に出力。

ふと、オブジェクトをまとめて360°回転させる動画にしてみようと思い立ったのでやってみた。自分はふだん静止画のみで動画作成しないので、手順をメモしておく。

左下[アイテム]でオブジェクトを選択し、アイテム名の右横にあるボタンを押してアイテムピッカーウィンドウを出したら、【Shift】を押しながらオブジェクトを複数まとめて選択する。もしくは[アイテム]タブ>[選択]>[全て]>[すべてのオブジェクトを選択]で選択。

右下のフレーム数に任意の値を入力する。デフォルトだと30フレーム/秒だが、今回は160フレームにした。そしてオブジェクトを回転させてキーフレームを打つ。下部の[自動キー:全モーション]にチェックが入っていればオブジェクトを動かした時点で勝手にキーが打たれるので、最終フレーム目で選択オブジェクトを360度回転させればよい。

右下(トランスポート・コントロール)の再生ボタンで動きを確認。このときビューはVPRではない方がよい。

問題なければ[レンダー]タブ>[オプション]>[レンダーオプション](ショートカット【Ctrl+p】)>[出力]タブで保存形式を選択する。[アニメ保存]にして直接動画を作成してもよいが、今回は静止画像も取得したかったので、[RGB保存]を選択し、連番のRGB画像として新規フォルダに出力。今回は160フレームにしたら自分の環境では総レンダリング時間が4時間程度だった。

CLIP STUDIO PAINT でアニメーション動画を作成

連番で出した複数の静止画からアニメーション動画を作成できるならソフトは何でもよいが、今回は CLIP STUDIO PAINT を使用した。ざっくり手順をメモしておく。

[ファイル]>[新規]で作品の用途「アニメーション」を選択。基準サイズを設定(今回は1920×1080、解像度72)して[OK]。[フレームレート](=1秒あたりのフレーム数)の設定や、[再生時間]ではフレーム数も設定できるので、ここで決めておくと楽。

レイヤーパネルに[アニメーションフォルダー]ができてその中に1枚新規レイヤーが作成されているが、このレイヤーは不要なので削除する。

[アニメーションフォルダー]を選択して[ファイル]>[読み込み]>[画像]から、読み込みたい画像を全部選択して[開く]で[アニメーションフォルダー]内に読み込める。

[アニメーション]>[タイムライン]>[設定変更]で、[終了フレーム]の値を任意に変更できる。注意点として、例えば全部で240フレームあるならここの値は241にする。また、[アニメーション]>[タイムライン]>[フレームレートを変更]で、フレームレートを変更できる。

[アニメーションフォルダー]を選択して、[アニメーション]>[セル指定]>[セルを一括指定]から[既存のアニメーションセル名から指定]を選択して[OK]で、一括してタイムラインに登録される。[フレーム数]で、各画像を何フレーム続けて並べていくかを指定できる。

タイムラインを右にスクロールして見れば分かるが、[用紙]はファイル新規作成時に設定したフレーム分までしか出ないので、もし総フレーム数を変更した場合はレイヤーパレットで[用紙]レイヤーを削除し、[新規レイヤー]から再び作成すると全フレーム分に出る。

タイムラインの[再生]ボタンでアニメーションを確認し、問題がなければ[ファイル]>[アニメーション書き出し]>[ムービー]から、ファイル名とファイル形式(AVIかMP4)を決めて保存。


光に影響された線の強弱

ここからさらに、光源の方向や位置に影響されて線に強弱がつくようにしてみる。要するに、光の当たる方向に向いた線を細くする。

輪郭線のノード編集

[輪郭(Edges)]タブから[Node Editor]を開き、先ほど[Turbulent Noise]ノードから[Edge]ノードへと繋げた矢印を全て外す。

左に並んだ中から[Layers]>[Scalar Layer]ノードを出す。

さらに、[Math]>[Scalar]>[Multiply]ノードを出す。

[Multiply]ノードを使えば、ひとつのスカラー値を他の値で乗算できる。要するにノードの出力結果を掛け合わせられるので、今回は線を筆描きっぽく加工できる[Turbulent Noise]ノードと、光の影響による強弱(というよりも正しくは勾配、グラディエント)をつけられる[Scalar Layer]ノードの出力結果を掛け合わせることを目指す。

[Turbulent Noise]ノードの右にある[Alpha]から矢印をドラッグし、[Multiply]ノードの[A]入力に繋ぐ。そうしたら[Scalar Layer]ノードの右にある[Alpha]から矢印をドラッグし、[Multiply]ノードの[B]入力に繋ぐ。

[Multiply]ノードの[Result]から矢印をドラッグし、[Edge]ノードに並んでいる[Silhouette Edges Taper]と[Silhouette Edges Opacity]、[Sharp Creases Taper]と[Sharp Creases Opacity]など、手を加えたい線の項の[~Taper]と[~Opacity]に矢印をそれぞれ接続していく。

[Scalar Layer]ノードをクリックして編集パネルを開く。[レイヤー種(Layer Type)]を[グラディエント(Gradient)]にする。[入力パラメータ(Input Parameter)]を[Light Incidence](ライトの入射)にして、[ライト(Light)]で適用するライトを選択。グラディエントバー(左にある縦長の帯)をクリックしてグラディエントのキーを1つ作成する。キーの[値(Value)]は「0.4」、[パラメータ(Parameter)]は「90.0」にして、白から黒(というかグレー)へのグラデーションを設定する。

[輪郭(Edges)]タブで各輪郭線の幅を調整し、いつものようにショートカット【F9】でレンダリングして画像に出力。[ラジオシティ有効]のチェックは外してある。

それなりの画にはなっているが、線の強弱もはっきりせず、いまいち足りないのでいろいろと調整してみた。

上でも記したように、[Turbulent Noise]ノードではなく[Scalar Layer]ノードでも同じようなノイズ設定ができるので、そちらに変えてみることにする。

[Layers]>[Scalar Layer]を選択して、[Scalar Layer]ノードを出したら、クリックして編集パネルを開く。[レイヤー種]を[プロシージャル]にする。[プロシージャル種]で[Turbulent Noise]を選択すると、前述した[Turbulent Noise]ノードと同じ設定項目が出るので、[増加]、[空隙性]、[オクターブ]等を設定し、[スケール]もいじる。上と同じならやはり[ブレンドモード]は「乗算」にして、[レイヤー不透明度]は150%。

設定したら右にある[Alpha]から矢印をドラッグし、[Multiply]ノードの[A]入力に繋ぐ。すでに[Turbulent Noise]ノードからの矢印が繋がっているだろうが、いちいち外さなくともそのまま新しい矢印を被せれば繋ぎ替わる。

F9】でレンダリングして画像に出力。

かなりよい雰囲気になったが、白飛びしている箇所が気になった。[レンダー]タブ>[オプション]>[レンダーオプション]>[ライト]タブ>[ライトの明るさ]を「10%」にしてレンダリングしてみる。

ふたたび動画化してみた。

以上、面倒なので画像テクスチャを使わずにそれっぽい画を出そうとしてみた結果をまとめたが、画像テクスチャを使えばもっと水墨画っぽい画を出力できるはず。今後の課題としておく。

(2018-09-22追記)以下に続きを書いた。


ライセンス

本記事に使用したオブジェクトの元データは、作成者の rogerharkavy 氏によりクリエイティブコモンズ・ライセンスの「Attribution-NonCommercial-ShareAlike(表示-非営利-継承)」で配布されているため、その派生物である本記事内の出力画像にも同じライセンスを適用する。

クリエイティブ・コモンズ・ライセンス
rogerharkavy, Ditty を著作者とするこの 記事内の画像クリエイティブ・コモンズの 表示 - 非営利 - 継承 4.0 国際 ライセンスで提供されています。
http://www.thingiverse.com/thing:21308にある作品に基づいています。

*1:線以外でも、均一にしたくないものに対して使えるノードなので、例えばノードを使ったインスタンスの際に複製のスケールをばらけさせる等にも使える……はず。

『あさりよしとおのロケット日記』掲載リスト

ニューモデルマガジンX誌に不定期で連載された『あさりよしとおのロケット日記』の掲載リスト。なぜ車雑誌でこんな連載をしていたのか。

  • 第1回 2014年11月号
  • 第2回 2015年1月号
  • 第3回 2015年4月号
  • 第4回 2015年9月号
  • 第5回 2015年11月号
  • 第6回 2016年5月号


蛇足

この連載前、同誌にはイラストを描いていたらしい。


グレッグ・イーガン『シルトの梯子』読書メモ

先日、グレッグ・イーガンシルトの梯子Schild’s Ladder(ハヤカワ文庫SF)を読了した。

シルトの梯子 (ハヤカワ文庫SF)

シルトの梯子 (ハヤカワ文庫SF)

2万年後の遠未来。量子グラフ理論の研究者キャスが〈ミモサ研究所(ステーション)〉で行った実験は、まったく新たな時空を生み出してしまう──それから数百年後、人類はその生存圏を浸蝕し拡大し続ける新たな時空の脅威に直面し、生存圏の譲渡派と防御派が対立していた。両派共有の観測拠点〈リンドラー〉号にて、譲渡派のチカヤは幼なじみのマリアマと再会し動揺する……深刻な対立と論争の果てに人類が見たものは!?

シルトの梯子 | 種類,ハヤカワ文庫SF | ハヤカワ・オンライン

作中に登場する量子グラフ理論はループ量子重力理論の上位互換という設定なので、あらかじめループ量子重力理論について以下などで多少知っておくと、本編を読むのが少し楽になるかもしれない。

すごい物理学講義

すごい物理学講義

なお、『すごい物理学講義』にはスピンフォーム(スピンの泡)の頂点形状としてイーガン提供の図が掲載されているのだが、これがまさにイーガンのサイトにある量子グラフの図と似たものだった。

恥ずかしながらループ量子重力理論についてはこれまであまり馴染みがなかったが、個人的には対抗馬である超弦理論よりも好み。とはいえ概要をざっくり調べただけだが。

その他の登場する科学トピックについては、不明な箇所が出てきたら前野氏の巻末解説を適宜参照しながら読むといいかもしれない。というか、そうやって読んだ。また、「クァスプ」という量子力学的架空ガジェットについては、短編「ひとりっ子」(短編集『ひとりっ子』所収)にも登場しているので、そちらも参照するとよいだろう。

ひとりっ子 (ハヤカワ文庫SF)

ひとりっ子 (ハヤカワ文庫SF)

本筋とは無関係だが、作中のキャラ同士の会話中で「白色矮星シリウスBを太陽系へ押し込んで地球を運び去らせる」という案が出てきて(p.109)、イーガンもこの手の天体工学ネタに興味があるんだなと印象に残った。

カバー画担当のRey.Hori氏がTwitterに画をupしてくれているので、それも紹介しておく。イーガン曰く「very cool」だと。


以下はイーガン公式サイトにある作品ページ。

以下は板倉氏による関係者のTweetまとめ。

なお、この作品に登場する架空理論「量子グラフ理論」についてのショートショートSF "Only connect" が公式サイトで公開されている(初出はNature誌)ので、訳しながら読んでみた(でも理解したとは言わない)。『シルトの梯子』にも名前が出てくるサルンペトが提唱した量子グラフ理論について、最初の検証実験(2049年~)の成功報告と共に理論をざっくり解説する記事の体裁になっているという、お話というよりも単なる設定開陳でしかない作品だった。私訳に興味がある方は個人的に連絡を下さい。

ところで、事前情報だと『シルトの梯子』は真空崩壊の話だという触れ込みだったが、ちょうど発売中のNewtonが真空崩壊を特集しているので、つい買ってしまった。

作中では新真空の広がる速度が光速の半分となっているが、なぜそうなるのかについての説明はない。本来の真空崩壊であれば光速で広がるはずなのに、そうしてしまうと物語が作れないので光速にしなかったという創作上の理由は分かる。ある方に指摘されて気づいたが、新真空はローレンツ不変性をもたない(=相対論に従わない)ため、光速では広がらないという設定じたいはおかしくない。ただし、なぜその速度が光速の半分なのかという点については、イーガンが理屈をつけているかというと実は怪しい。そんな中、板倉氏がこんなツイートをしていたので引用しておく。