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