ランダムに本を配置する
イントロダクション
前のチュートリアルではパラメトリックな棚を作成するためにRailCloneを使用しました。このチュートリアルでは、引き続きRailCloneを使用して、これらの棚の中でランダムに本を配置します。本を生成するパスを作成するには、さまざまな方法がありますが、このチュートリアルでは、各シェルフの背面に沿ってスプラインを配置した1次元配列の使用に焦点を当てます。これは、棚の高さが等しくない場合に理想的です。またシェルフが均等に配置されている場合は、単純な高さと幅のディメンションに基づいてすべてのシェルフを自動的に作成するために、2Dアレイで同じ手法を使用することができます。両方のテクニックの例については、シーンファイルを参照してください。
シーンファイルのダウンロード
このチュートリアルを完了すると、次のことが可能になります
ジオメトリをランダムにし、選択したセグメントの確率を制御する
マテリアルをランダムにする
transformオペレータを使用したalignment、rotation、translation、scaleパラメータの調整
conditionalオペレータを使用して、スプラインセグメントに沿って距離をテストする
ネストジェネレータを使う
ジオメトリの準備
このスタイルで使用される本のための特別なモデリングは必要ありません。さまざまなサイズとシェイプを使用することで多様性とリアリズムが向上しますが、1つの本ジオメトリでも同様にセグメントの Properties > Transform > Randomise > Scale controlsを使用してサイズをランダム化することができます。
本は2つのマテリアルIDを使用します。ID:1はページのエッジ部分に使われ、ID:2はカバー部分に割り当てられます。RailCloneオブジェクトに既に適用されているマルチサブマテリアルには、ID 2〜100のブックカバーテクスチャが99個あります。
本のテクスチャ
このチュートリアルで使用されているテクスチャはNikita Gushchinによって作成されました。ライセンスの制限により、チュートリアルファイルには含まれませんが、 HQ Detailsを通じて無料で入手できます。
コンテンツのダウンロード
このチュートリアルの演習ファイルには、V-RayおよびMental Rayと互換性のある次の.maxシーンが含まれています。
books_start.max:
チュートリアルに従う際のスタートファイル
books_end.max:
完了したチュートリアルの結果
books_2d_array.max:
2次元配列で使用されているものと同じスタイルのデモンストレーション
books_plus_shelf.max:
このチュートリアルのテクニックを以前のチュートリアルと組み合わせて、1つのオブジェクトに本棚と本を自動的に作成する方法を示す例です。
スタイルを作成する
ステップ1:並べられたを作成する
シーンから「RC_books」を選択し、スタイルエディタを開きます。時間を節約するために、すでにスタイルに11冊の本が追加されていますが、セグメントのデフォルト設定は変更されていません。
新しいLinear 1S(L1S)オペレータとSplineノードを追加し、それらを接続します。
Splineノードを選択し、シーンから「spline_shelves」を割り当てます。
本のテクスチャをランダム化するには、新しい
Materialオペレータを追加します。カバーはマテリアルID:2にあるので、Replace Material ID値を2に設定します。使用するマップの数を反映する
Fromと
Toの値を設定します。この場合、99個のテクスチャがあるので、
Fromの値を
2に設定し、
Toの値を
100に設定します。
新しく
Randomiseオペレータ(
)を追加します。11冊の書籍すべてを入力に接続し、出力を
Materialノードに配線します。Materialノードはジェネレータの
Default入力に接続します。スプラインに沿ってランダムに選択された書籍が表示されます。
スプラインが本棚の背面を表すように、Y軸上のアライメントポイントを移動する必要があります。すべてのセグメントでこれを個別に行う必要がないようにするには、RandomiseノードとMaterialノードの間に新しい
Transformオペレータを追加します。Transformオペレータの設定に移動し、
General > Alignment > Yの値を
Topに変更します。
より多くのバリエーションを追加するために、少しだけサイズとYの位置をランダム化することができます。Transformオペレータで
Transform > Randomに移動し、
Scale と
Translationをオンにします。次のスクリーンショットに示すような設定を使用します。
スプラインの終端部分でにいくつかの本がスライスされていることがわかります。これを防ぐためにジェネレータのadaptiveモードをオンにすることができますが、ランダムな幅のセグメントで使用すると、時折オーバーシュートが発生し、理想的ではありません。代わりに、Conditionalオペレータを使用して、スプラインセグメントの長さの終わり近くにセグメントが生成されないようにします。これを行うには、TransformノードとMaterialノードの間に新しいConditionalオペレータを追加します。
Conditionalオペレータの
Spline設定で、
Positionをオンにしてドロップダウンメニューから
on Sectionを選択します。パーセント値を98.6%に設定します。この値は、スプラインの長さに応じて調整する必要があるため、簡単にアクセスできるように書き出すことができます。
積み重ねられたり、傾いたりしている本を作成するために、複数のRailCloneオブジェクトをネストします。次の2つのステップでは、これらの2つの新しいスタイルを作成し、最終ステップでそれらを組み込みます。
ステップ2:積み重なった本を作成する
作成した「RC_books」オブジェクトをクローンし、「books_stacked」という名前を付けます。
新しいRailCloneオブジェクトを選択した状態で、スタイルエディタを開き、Splineノードを見つけ、シーンから「spline_stack」を選択します。
現在本の束ができていますが、配置を変更する必要があります。
Transformノードのパラメータを開き、
Yと
Z Alignmentを
Centerに変更します。
スタックにランダム化を追加するには、Transformノードの設定でTransform > Random > Translation をオンにし、YとZの最小値(左側のボックス)を-0.02mに設定し、最大値(右側のボックス)を0.02mに設定します。
Transform > Random > Rotationをオンにし、
最小値を
-15に、
最大値を
15に設定します。
スタックの最上部で本がスライスされるのを防ぐには、L1Sジェネレータを選択し、
Properties > Rules > Default> Mode を
Adaptiveに設定します。
本は積み重ねられていますが、シード値を変更すると、常に同じ高さになることがわかります。さまざまな高さの積み重なりを作成するために、シーケンスに空のセグメントをランダムに追加することができます。パディング値を持たない空のセグメントを追加すると、配列が「中断」します。これは、そのポイント以降にセグメントが出現しないことを意味します。
Randomizeオペレータを追加しTransformノードを接続します。このRaodomizeノードをMaterialノードに接続し、既存のConditionalノードは削除します。上記のノードツリーを参照してください。
新しいセグメントを作成し、Rondomオペレータの2番目の入力に接続します。シード値を変更すると、積み重ねられたの本の冊数が変わることがわかります。空のセグメントが選択される確率を変更するには、RandomizeオペレータのプロパティからPresence%を変更します。空のセグメントのpresenceを減らすと、重ねられた本の高さが高くなります。
ステップ3:傾いた本を作成する
角度付きブックを作成するには、作成した「books_stacked」オブジェクトを複製し、名前を「Books_angled_left」に変更して 「spline_books_left」というスプラインを割り当てます。
スタイルエディタを開き、Transformノードを選択します。
Properties > General > Alignment Y の
Top、
Zを
Automaticに変更します。
randomのtranslationと rotationのランダム化チェックボックスをオフにします。
本に角度をつけさせるには、
Properties > Transform > Fixed > X > Rotationの値を
-5に変更します。
最後に、傾いた本がもたれかかるの通常の真っ直ぐな本を追加する必要があります。これを行うには、本のセグメントに直接接続されているRandomiseノードを新しいTransformオペレータに配線します。新しいTransformノードのProperties > General > Alignment Yパラメータをtopに設定し、これをL1SジェネレータのStart入力に配線します。
これで左に傾いた本ができました。新しいスタイルを作成して右に傾いた本を作るには、このRailCloneオブジェクトのクローンを作成し、その名前を
「Books_angled_right」に変更し、新しいオブジェクトを選択して、スタイルエディタを開きます。\\
「spline_books_right」という名前のスプラインを割り当てます。
本を傾けるTransformオペレータを見つけ、 Properties > Transform > Fixed > Xの値を5に変更します。
新しい
Composeオブジェクト(
)を作成し、ジェネレータのStart入力からTransformノードを外して、新しいComposeノードの最初のスロットに接続します。空のセグメントを新しいCompeseノードの2番目のスロットに接続します。
最後に、2番目のRandomizeノードの空のSegmentを、作成したComposeオペレータに置き換えます。
ステップ4:RailCloneオブジェクトをネスティングする
シーンから「rc_books」を選択し、スタイルエディタを開きます。
上記のステップで作成したRailCloneオブジェクトごとに新しい
Segmentノードを追加し、シーンから「books_stacked」、「books_angle_left」、および「books_angle_right」を選択します。空のセグメントによって配置が停止されるのを防ぐため、
0.001mの
left-paddingを「books_stacked」セグメントに追加します。
新しいセグメントごとに、
Properties > Deform > Nestのチェックボックスをオンにします。これにより、埋め込まれたRailCloneオブジェクトの各インスタンスが新しいランダムシードを取ることが保証されます。
新しくRandomiseオペレータを作成し、これらの新しいセグメントを接続します。
これらの大きなセグメントがスプラインの端に近づきすぎてスライスされないようにするには、既存のConditionalオペレータを複製し、新しいRandomizeノードをFalse入力に接続します。本のRandomizeノードをTrueに接続します。このConditionalノードの Position on Spline Segmentを約90%に減らしTransformノードに接続します。
最後に、もう1つ新しくRandomizeノードを作成し、既存の2つのRandomizeオペレータに接続し、新しくConditionalオペレータを作成しTrue入力に接続します。Randomizeオペレータのパラメータでは、Conditional入力のpresenceを10%に設定します。
presenceの値を調整するだけで、スタイルに表示される斜めに積み重ねられた本の数を制御できます。
このスタイルでは、3つのRailCloneオブジェクトを入れ子にして、ランダムな角度のついた積み重ねられた本を作成しました。本を生成するために、このスタイルでは1つのスプラインを1つのシェルフで使用していますが、A2SジェネレータのX Evenlyスロットで全く同じテクニックを使用して、単純なスプラインと高さのディメンションから等間隔の本棚を自動的に生成することもできます。あるいはこれを以前の本棚のチュートリアルに組み込んで、棚と本を1つのスタイルで生成することもできます。これらの方法の例は、ダウンロードできるシーンファイル内にあります。