Painted Shaderガイド

『Painted Shader』を使用すると、シーンの中に直接描画する事が出来ます。これには多くの用途があります。最も単純な使用法として、サーフェスレイヤーの色を描画するために使用する事が出来ます。しかしながら、この機能はサーフェスレイヤーの分布やポピュレーションが出現する場所などをコントロールするために使用する事の出来るマスクの描画に最も適しています。また、サーフェス上にディスプレースメントを作成するためにも使用する事が出来ます。

『Painted Shader』の具体的な設定については、ノードリファレンスのPainted Shaderを参照して下さい。

目次

  1. 描画の基礎
  2. ストローク
  3. どこに描画出来ますか?
  4. 描画時の効率改善
  5. 『Painted Shader』の例

描画の基礎

『Painted Shader』で描画を開始する最も簡単な方法は、3Dプレビューの上部にあるペイントセッションボタンを使用する事です。このボタンには小さな絵筆アイコンがあります。新しいシェーダを作成して描画を開始するには、"Start painting shader"サブメニューから"Create and paint new shader"を選択します。既存のシェーダで描画したい場合は、サブメニューに示されたシェーダから選択する事が出来ます。一度に1つのシェーダしか描画出来ませんが、複数の3Dプレビューを開くと、それぞれに異なるシェーダを使って描画する事が出来ます。
描画を開始すると、3Dプレビューでペイントセッションが開始されます。シーンがグレー表示になるため、ペイントセッションが起動している事が分かります。これは、描画したストローク(筆筋)を目立たせるのに役立ちます。さらにペイントセッションボタンのメニューも変更します。このメニューを使用してペイントセッションを終了するだけでなく、描画モードと消しゴムモード(「ストローク」の項目で説明)間で切り替える事が出来ます。
3Dプレビューがペイントセッションで使用中は、描画時に役立つ2つの手掛かりが表示されます。1つは、シーン内のブラシサイズの目安を示す破線の黄色の円です。もう一つは、ストロークの中心を示す強調された黄色の三角形があります。この時に注意する点は、3Dプレビューのレンダリング状態によって、フラクタル地形の三角形の大きさが変動する事です。描画に直接影響はありません。

マウスをクリックしてドラッグする事で描画します。マウスボタンを押している間ストロークが描かれ、マウスボタンを離すとストロークを終了します。この一連の動作で1ストローク(一筆書き)になります。

シェーダがどのくらい速くストロークポイントを捕らえる事が出来るかは限界があります。シェーダが捕えきれなかった隙間を埋めるので、一連のストロークが得られます。ただし、非常に速く描画しようとすると、ストロークが滑らかな曲線の代わりに直線のチェーンのように見えるかもしれません。このような症状に気付いたら、よりゆっくりと描画して下さい。

描画が終了したら、ペイントセッションボタンメニューから"Stop painting"を選択するか、Escキーを押してペインティングセッションを終了する事が出来ます。

注意すべき重点は、『Painted shader』を作成しても自動的にシーンに組み込む事が出来ない事です。これの一番の影響は、ペイントセッションを終了すると、たった今描画した『Painted shader』のストロークを見る事が出来なくなる事です。ペイントセッション時外のシーンでシェーダを表示するには、シェーダをサーフェスシェーダのネットワークに接続するか、マスクシェーダとして割り当てるなどの操作を行う必要があります。


ストローク

マウスをクリックし、ドラッグしながら描画を行いマウスボタンを離すたびに、新しいストロークがシェーダに追加されます。各ストロークは個別に記録されますが、個別に編集する事は現段階では出来ません。新しいストロークは、すべての古いストロークの上に重ねられます。

ストロークには、"Paint"ストロークと"Erase"ストロークの2種類があります。ペイントセッションボタンメニューから、2種類のストロークを切り替える事が出来ます。

"Paint"ストロークは通常のストロークです。シェーダに色を描きます。複数の色を使って描画した『Painted shader』の出力を、Functionノードを使って色を分けてコントロールする事が可能なので、境界が緻密なマスク処理を行う時に有用です。

"Erase"ストロークは、"Paint"ストロークと非常によく似た動作です。大きな違いは、シェーダーに「何も描かない」という事です。 "Erase"ストロークが動作を簡単に言うと、以前に描いたストロークのすべての部分を、"Erase"ストロークで覆い隠してしまいます。それはあたかも描画が消えたように見えます。
ここで重要なのは、ストロークの消去の扱いについてです。以前に描画した多くのストロークを消去する場合は、『Painted shader』の"Clear"を使ってやり直す方が効率的かもしれません。以前に描画したストロークは、"Erase"ストロークによって覆い隠し、あたかも消去されたように見えますが、エリアの下は実際には削除されずシェーダの一部としてデータが残っています。描画されたストロークの大部分を消去(覆い隠す)する事で、『Painted shader』がレンダリングに必要な速度よりも遅くする可能性があります。また、保存されたプロジェクトファイルが必要以上に大きくなる事も意味します。『Painted shader』の"Clear"は、必要なストロークを再描画する手間を掛ける事で実用的ではないかも知れませんが、考慮する必要があります。

ストロークは一見、実際には3Dである事が判りにくいかもしれません。各ストロークは球で構成されています。ストロークは平坦ではなく、体積を有しています。ストロークの球は、「塗料の滴」としての滴と呼ばれます。滴は、ストロークに沿って間隔を置いて配置されます。実際の描画効果は体積です。"Brush falloff"と"Flow"パラメータは、球の体積の密度をコントロールします。

デフォルトで『Painted shader』は描画するシェーダの"Plan Y(見下ろす)"投影を使用して、ストロークを平坦に見せかけています。『Painted shader』の"Projection"パラメータを"3D"に変更すると、『Painted shader』の球の一群のように扱う事が出来ます。「Transform」タブを使用して、3D空間内でストロークを配置する事が出来ます。

この"3D"の機能は、『Painted shader』の高度で実際には完全には開発されていない状況です。これらの機能を使っていろんな実験が可能である事を気づかせるために単に言及しています。


どこに描画出来ますか?

描画する事の出来るシーンにはいくつかのエレメントがあります。主なものは、地形と背景球(『Background』の球オブジェクト)です。背景球は、空と大気のレンダリングに使用される惑星を囲む非常に大きな球です。『Plane』、『Disc』、『Sphere』など、描画可能なオブジェクトもいくつかあります。インポートされたオブジェクトや、『Rock』、『Grass Clump』、『Card』などの他のオブジェクトに描画する事は出来ません。
『Painted shader』がストロークを描画をする場所をどのように識別しているかを理解する事は有用です。3Dプレビューのシーンは、実際のシーンの低解像度バージョンのような三角形の一群としてレンダリングされます。ペイントセッション中にマウスを動かすと、マウスの下に黄色の三角形が描かれます。プレビューのレンダリングに使用されるフラクタルの三角形です。『Painted shader』は、マウスの位置から想像線(または光線)をシーンに射影し、それらの三角形のうち最も近いものを見つける事によって、3D空間でストロークを描画する場所を認識します。想像線がその三角形に命中する位置は、「塗料の滴」が3D空間に配置される場所です。

これは少し技術的に見えるかもしれませんが、『Painted shader』の動作のいくつかの側面を理解するのに役立ちます。これらの1つとして、レンダリングされたプレビューの部分しか描画する事が出来ない事です。プレビューのビュー方向を変更した時に、時々一部が即座にレンダリングされなかったり、3Dプレビューを一時停止しているため全くレンダリングされない事があります。シーンのこれらの部分には描画する事が出来ません。
薄赤く塗り潰されたエリアが、"Pause(一時停止)"モード時にシーンのビューを動かした時に生じるレンダリングされない場所。

地平線の近くの地形に描画している時に、注視するもう一つの事があります。地形からはみ出て背景球に塗りつぶした場合、予想外の結果を招く場合があります。背景球は地形から遠く離れているので、地形からはみ出て背景球を塗り潰すと、ストロークが空間を大きく飛び越える必要があります。これにより、予期した地形上にストロークが表示されないだけでなく、ストロークの終端が地形に戻るまで描画が大幅に遅延する可能性がある事を意味します。

上で述べたように、地形と背景から離れて描画する事が出来るオブジェクトがいくつかあります。これらは、『Plane』、『Disc』、『Sphere』です。これには多くの潜在的な用途があります。1つの例は、雲の形を描く事です。山の頂上に任意の形の雲が欲しいとしましょう。雲に描画したい場合、雲は3D空間に存在していますが、『Painted shader』には塗り潰すサーフェスが必要なため、雲が3D空間のどこにあるのか見当を付ける事が出来ないため、雲に描画する事は少し難しいです。これを行う1つの方法は、雲の上からストロークして地面に描画する事です。"Projection"が"Plan Y"に設定されている限り、ブラシストロークは雲を突き抜けるでしょう。ただし、3Dプレビューの「Finished rendering」状態でレンダリングされた雲に描画しようとしても実際には出来ません。これを補う方法として、シーン内に雲層と同じ高さの『Plane』オブジェクトを配置する事で、あたかも雲層に描画しているように見せかける事は出来ます。
上の画像を見ても分かる通り、『Plane』上に描画をしても、下の地形にまで描画されます。"Plan Y"は、Y軸上のすべての対象に描画します。『Painted shader』を雲ノードの"Final density modulator"に関連付け、『Plane』ノードは無効にしてレンダリングを止める事で、任意の雲の形を作成します。
雲の形の位置を変更する場合は、『Painted shader』の「Transform」タブのパラメータを使用する事が出来ます。ここでは最終のレンダリングは行いませんが、3Dプレビューでも描画した形状の雲が作り上げられているのを確認する事が出来ます。


描画時の効率改善

描画時の効率改善させるために出来る事がいくつかあります。

「どこに描画出来ますか?」の項で述べたように、描画は3Dプレビュー用に生成された三角形に連携されています。おそらく、時間の経過に伴い3Dプレビューのディティールが増えている事に気づいたでしょう。これは、プレビューが精緻化するにつれて生成される三角形が細かくなるためです。これらの小さな三角形は2つの方法で描画に影響します。最も重要なのは、3Dプレビューがより精細になるにつれて、『Painted shader』のプレビューのクオリティが向上する事です。これは、比較的小さなブラシを使用している場合に特に顕著です。プレビューのディティールが増えるにつれて、描画もちょっと精密になります。

また、ストロークの描画が終了すると、3Dプレビューは再度最低画質から精緻化を開始しますが、これが描画をより遅くする処理だと気付くでしょう。

より高いクオリティのプレビューでの描画と、よりスムーズな描画の両方を叶える方法は、3Dプレビューで高ディティールレベルに精緻化した後、一時停止する方法です。プレビューを一時停止するとディティールが高く保たれ、ストロークを終えるたびにプレビューレンダリングがやり直されなくなります。この唯一の欠点は、プレビューのビュー方向を変更すると、未然レンダリングされていないシーンの部分が表示され、それらのシーンに描画する事が出来なくなる事です。解決方法は、プレビューの一時停止を解除し、希望のディティールまでレンダリングさせてからもう一度一時停止する事です。また、マウスのドラッグを早く動かく事で生じるストロークの隙間も、一時停止中は、補間されないので注意が必要です。

そして【Terrain】レイアウトでは、3Dプレビューは単純なグレーだけのレンダリングなので、描画が最も早く処理されます。

その他に考慮すべきは、描画しているエリアに渡ってのサイズに対して適切なブラシ設定を選択する事です。例えば背景球に描画したいとして、デフォルトシーンで開始した場合、地平線のすぐ上の背景球は約19万kmの向こう側です。『Painted shader』のデフォルトのブラシは、直径が1000メートル(1km)の絶対ブラシです。
"Absolute brush(絶対ブラシ)はシーンに合わせて近くから遠くに行くほどブラシサイズのオレンジの破線は小さくなりますが実際のブラシサイズは変わりません。真上から描画を見ると、ストロークは一定サイズなのが確認できます。

このデフォルトサイズが、19万kmの広さに大きな影響を与える事など出来るはずもないブラシだと想像に容易いです。そのまま描画する事は出来ますが、広大なエリアを塗り尽すためにどれだけストロークを早く描画しても、描画作業が酷く遅くなる事に気付くでしょう。『Painted shader』が多くのデータを書き込む必要があるため、描画が次第に遅延していきます。

広大、または非常に遠いエリアを描画する時は、"View-relative brush"の方がはるかに優れています。ビューに相対するブラシサイズは、プレビューサイズに比例します。これは、遥か遠くを描画している時、ブラシが相対的に大きいままである事を意味します。つまり、より迅速にエリアを塗り潰す、この両方を叶えるだけでなく、描画そのもの処理が何倍もの速さで反応しやすくなる事が判るようになります。
"View-relative brush(相対ブラシ)"は3Dプレビューの中で一定のサイズを保ったまま描画するため、近くから遠くへストロークを伸ばしてもブラシサイズのオレンジの破線は同じ大きさですが、真上から見ると、ストロークは遠くへ行くほど太くなっています。つまり、遠くに行くほど実際のブラシサイズは大きくなっています。このブラシは距離に関係なく大きなエリアを塗り潰す時などに有用です。


『Painted Shader』の例

以下のサンプルプロジェクトは、『Painted shader』を使用するいくつかの異なる方法を挙げています。メインウインドウ左下の[Project Settings...]ボタンをクリックすると、『Project』ダイアログが開き、"Comments"にプロジェクトの説明を読む事が出来ます。各プロジェクトファイルは右クリック(Windows)"で名前を付けてリンク先を保存"、またはOptionキー(Mac)を押して直接ダウンロードして下さい。
ポピュレーションの密度 TGD: Painted_shader_population_density.tgd

このプロジェクトは、『Painted shader』を使用してポピュレーションの密度をコントロール方法を紹介しています。
描画した雲 TGD: Painted_shader_cloud.tgd

このプロジェクトは、『Painted shader』を使用して雲層の形成をコントロール方法を紹介しています。
ディスプレースメント TGD: Painted_shader_displacement.tgd

このプロジェクトは、『Painted shader』を使用して地形上のディスプレースメントをコントロール方法を紹介しています。
サーフェスカラー TGD: Painted_shader_surface_colour.tgd

このプロジェクトは、サーフェスレイヤーに色を塗る方法を紹介しています。