色
色は、効果的なビジュアルを作成するためだけではなく、ビジュアル プログラムの出力で差異をレンダリングするためにも重要なデータ タイプです。抽象的なデータや変化する数値を操作する場合、何がどの程度変化するのかを確認するのが難しいことがあります。Dynamo は、色の処理に優れたアプリケーションです。
色を作成する
Dynamo では、ARGB 入力を使用して色を作成します。これは、アルファ、赤、緑、青の各チャネルに対応しています。アルファは色の透明度を表し、他の 3 つのチャネルは、色のスペクトル全体を生成するための原色として組み合わせて使用されます。
アイコン | 名前 | 構文 | 入力 | 出力 |
---|---|---|---|---|
ARGB Color | Color.ByARGB | A、R、G、B | color |
色の値のクエリー
次の表に記載されている各ノードにより、色を定義するアルファ、赤、緑、青の各プロパティのクエリーが実行されます。Color.Components ノードは、これら 4 つのプロパティをそれぞれ異なる出力として生成します。そのため、色のプロパティのクエリーを実行する場合は、このノードを使用すると便利です。
アイコン | 名前 | 構文 | 入力 | 出力 |
---|---|---|---|---|
Alpha | Color.Alpha | color | A | |
Red | Color.Red | color | R | |
Green | Color.Green | color | G | |
Blue | Color.Blue | color | B | |
Components | Color.Components | color | A、R、G、B |
次の表に記載されている色は、HSB 色空間に対応しています。 色を、色相、彩度、明るさに分割すると、より直感的に色を解釈することができます。たとえば、最初に処理する色を決め、次にその色の彩度と明るさを設定します。このように、色相、彩度、明るさをそれぞれ個別に設定していきます。
アイコン | クエリー名 | 構文 | 入力 | 出力 |
---|---|---|---|---|
Hue | Color.Hue | color | Hue | |
Saturation | Color.Saturation | color | Saturation | |
Brightness | Color.Brightness | color | Brightness |
色範囲
色範囲は、セクション 4.2 で説明した、数値のリストを別の範囲に再マッピングする Remap Range ノードに似ています。 ただし、色範囲は、数値の範囲にマッピングされるのではなく、入力された 0 から 1 までの数値に基づいて色のグラデーションにマッピングされます。
現在のノードは正しく機能しますが、最初からすべてを正しく機能させるのは少し大変です。色のグラデーションを理解するための最適な方法は、色のグラデーションを対話式に試す方法です。ここでは、簡単な演習を行い、数値に対応する色の出力を使用してグラデーションを設定する方法を確認します。
- 3 つの色を定義する: Code Block ノードを使用して 0 から 255 までの適切な数値の組み合わせに接続することにより、赤、緑、**青を定義します。
- リストを作成する: 3 つの色を 1 つのリストにマージします。
- インデックスを定義する: 0 から 1 までの範囲で、各色のグリップ位置を定義するリストを作成します。 緑の値が 0.75 になっていることに注意してください。これにより、色範囲スライダの水平方向のグラデーションの 4 分の 3 が緑色になります。
- Code Block ノードを設定する: 0 から 1 までの値を入力することで、グラデーションを色に変換します。
色のプレビュー
Display.ByGeometry ノードを使用すると、Dynamo のビューポート内でジオメトリに色を付けることができます。 この機能は、ジオメトリの各種タイプを区別する場合、パラメータの概念を表現する場合、シミュレーション用の解析凡例を定義する場合に便利です。この場合の入力は単純で、ジオメトリと色だけです。上の図のようなグラデーションを作成するには、color 入力を Color Range ノードに接続します。
色の操作に関する演習
この演習に付属しているサンプル ファイルをダウンロードしてください(右クリックして[名前を付けてリンク先を保存...]を選択): Building Blocks of Programs - Color.dyn。 すべてのサンプル ファイルの一覧については、付録を参照してください。
この演習では、パラメータを使用して、ジオメトリと並行して色の管理を行います。この演習で使用するジオメトリは、単純ならせん構造です。このらせん構造は、Code Block ノード (3.2.3) を使用して定義します。 これは、パラメータを使用する関数をすばやく簡単に作成するための方法です。この演習の目的は、ジオメトリではなく色を操作することであるため、コード ブロックを使用してキャンバスを見やすい状態に保ったまま、らせん構造を効率的に作成します。この手引ではより高度なマテリアルを取り上げるようになるため、ここからは、コード ブロックを頻繁に使用することになります。
- Code Block ノードを使用して、上図に示す式を持つ 2 つのコード ブロックを定義します。 これは、パラメータを使用してらせん構造をすばやく作成するための方法です。
- Point.ByCoordinates ノードの座標(x,y,z)に Code Block ノードの 3 つの出力を接続します。
これで、らせん構造を形成する点の配列が表示されます。次の手順では、このらせん構造の点群から曲線を作成して、完全ならせん構造を作成します。
- PolyCurve.ByPoints ノードの points 入力に Point.ByCoordinates ノードの出力を接続します。 これにより、らせん状の曲線が作成されます。
- Curve.PointAtParameter ノードの curve 入力に PolyCurve.ByPoints ノードの出力を接続します。 この手順の目的は、曲線に沿ってスライドするパラメータのアトラクタ点を作成することです。この曲線によってパラメータの点が評価されるため、0 から 1 の範囲で param の値を入力する必要があります。
- Number Slider ノードをキャンバスに追加したら、Min の値を 0.0、Max の値を 1.0、Step の値を .01 に変更します。 次に、Number Slider ノードの出力を Curve.PointAtParameter ノードの param 入力に接続します。 らせん構造全体に沿って表示されている点を、スライダのパーセンテージとして表すことができるようになりました(開始点は 0、終点は 1)。
これで、参照点が作成されました。次に、この参照点から、らせん構造を定義する元の点までの距離を比較します。この距離により、色とジオメトリをコントロールします。
- Geometry.DistanceTo ノードの other 入力に Curve.PointAtParameter ノードの出力を接続します。 次に、Point.ByCoordinates ノードを Geometry.DistanceTo ノードの geometry 入力に接続します。
- Watch ノードに、らせん構造の曲線を構成するそれぞれの点から参照点までの距離のリストが表示されます。
次の手順では、らせん構造の各点から参照点までの距離のリストを使用して、パラメータを設定します。また、これらの距離の値を使用して、曲線に沿った一連の球形の半径を定義します。これらの球形を適切なサイズに保つには、距離の値を再マッピングする必要があります。
- Math.RemapRange ノードの numbers 入力に Geometry.DistanceTo ノードの出力を接続します。
- 値が 0.01 の Code Block ノードを Math.RemapRange ノードの newMin 入力に接続し、値が 1 の Code Block ノードを Math.RemapRange ノードの newMax 入力に接続します。
- いずれかの Watch ノードに Math.RemapRange ノードの出力を接続し、もう一方の Watch ノードに Geometry.DistanceTo ノードの出力を接続します。 次に、結果を比較します。
この手順により、距離のリストがより狭い範囲に再マッピングされます。再マッピングの結果が適切な場合であっても、newMin と newMax の値を編集することができます。 これらの値は、範囲全体で分布比率を保持したまま再マッピングされます。
- Sphere.ByCenterPointRadius ノードの radius 入力に Math.RemapRange ノードの出力を接続し、元の Point.ByCoordinates ノードの出力を Sphere.ByCenterPointRadius ノードの centerPoint 入力に接続します。
- Number Slider ノードの値を変更し、球形のサイズが更新されることを確認します。 ここで、パラメータ ツールを使用します。
球形のサイズは、曲線に沿った参照点によって定義されるパラメータ配列を示しています。ここでは、球形の半径と同じ考え方で、球形の色を操作してみます。
- Color Range ノードをキャンバス上に追加します。 value 入力にマウス ポインタを置くと、0 から 1 までの範囲で数値を指定する必要があることがわかります。 ここでは、Geometry.DistanceTo ノードの出力から数値を再マッピングして、それらの数値をこの範囲に対応させる必要があります。
- Sphere.ByCenterPointRadius ノードでのプレビューを一時的に無効にします(右クリックして[プレビュー]を選択)。
- Math.RemapRange ノードの numbers 入力にも同様に Geometry.DistanceTo ノードの出力を接続します。
- Code Block ノードを使用して、Math.RemapRange ノードの newMin 入力の値として 0 を設定し、newMax 入力の値として 1 を設定します。 この場合、1 つのコード ブロックで 2 つの出力を定義できることに注意してください。
- Color Range ノードの value 入力に Math.RemapRange 出力を接続します。
- Color.ByARGB ノードを使用して、2 つの色を作成します。 この手順は複雑そうに感じるかもしれませんが、他のソフトウェアで使用する RGB カラーの場合と同じです。ここでは、ビジュアル プログラミングを使用して色を処理するというだけのことです。
- Code Block ノードを使用して、0 と 255 という 2 つの値を作成します。 次に、上の図のように、この 2 つの値を Color.ByARGB の各入力に接続します(または、任意の色を 2 つ作成します)。
- Color Range ノードの colors 入力では、色のリストが必要になります。 上の手順で作成した 2 つの色を使用して、色のリストを作成する必要があります。
- List.Create ノードを使用して、2 つの色を 1 つのリストにマージします。 次に、このノードの出力を Color Range ノードの colors 入力に接続します。
- Display.ByGeometryColor ノードの geometry 入力に Sphere.ByCenterPointRadius ノードを接続し、Color Range ノードを Display.ByGeometryColor ノードの color 入力に接続します。 これで、曲線領域全体にスムーズな色のグラデーションが適用されます。
前の手順の Number Slider ノードの値を定義内で変更すると、色とサイズが変更されます。 この場合、色と半径のサイズは相互に直接関係しています。これで、2 つのパラメータ間の関係を視覚的に確認することができます。
サーフェス上の色
Display.BySurfaceColors ノードを使用すると、サーフェス全体にデータを色でマッピングすることができます。 この機能により、日照解析、エネルギー解析、近接度解析など、各種の解析で取得したデータを視覚化することができます。Dynamo では、他の CAD 環境でマテリアルにテクスチャを適用する場合と同様に、サーフェスに色を適用することができます。次の簡単な演習で、このツールの使用方法を確認します。
サーフェスで色を処理するための演習
この演習に付属しているサンプル ファイルをダウンロードしてください(右クリックして[名前を付けてリンク先を保存...]を選択): Building Blocks of Programs - ColorOnSurface.zip。 すべてのサンプル ファイルの一覧については、付録を参照してください。
最初に、Display.BySurfaceColors ノードの入力として使用するサーフェスを作成(または参照)する必要があります。 この例では、正弦曲線と余弦曲線間をロフトします。
- このノード グループ は、Z 軸に沿って点を作成してから、正弦関数と余弦関数に基づいてそれらの点の位置を変更します。その後、2 つの点リストを使用して NURBS 曲線が生成されます。
- Surface.ByLoft ノードを使用して、NURBS 曲線のリスト間に、補間されたサーフェスを生成します。
- File Path ノードを使用して、下流のピクセル データのサンプリングを行うためのイメージ ファイルを選択します。
- File.FromPath ノードを使用してファイル パスをファイルに変換し、そのファイルを Image.ReadFromFile ノードに渡してサンプリング用のイメージを出力します。
- Image.Pixels ノードを使用してイメージを入力し、そのイメージの X、Y 座標に対応して使用されるサンプル値を指定します。
- Slider ノードを使用して、Image.Pixels ノードのサンプル値を指定します。
- Display.BySurfaceColors ノードを使用して、色の値の配列を、X、Y 座標に対応してサーフェス全体にマッピングします。
400x300 のサンプル解像度で、出力サーフェスのプレビューを拡大します。