構造シンセの紹介

構造シンセ、ウイルス
こんにちは、Habr。 昨日、私は新しいUbuntu 11.10を試しましたが、Structure Synthのようなすばらしいアプリケーションに偶然出会いました。 Structure Synthはすでにハブで議論されており、公式サイトからの短いチュートリアルの無料の文学翻訳を概説したいと思います。


彼は何について話しているのですか?

Structure Synthは、複雑な3次元構造を構築するためのクロスプラットフォームアプリケーションです。 Eisenscriptで一連のルールを実行することにより、構造が構築されます。 文法は元々Chris Coyneという名前の男性によって開発され、2次元画像Context Free Artを構築するためのアプリケーションで使用されています。 構造シンセは、OpenGLとQtを使用してC ++で記述されています。 ビルドは、Windows、Mac OS、およびLinuxで利用できます。

状態、変換、およびアクション。

SSの礎石は国家です。 状態は、現在の座標系とカラーモ​​ードを表します。 座標系は、現在の状態で作成されたすべてのオブジェクトの位置、方向、およびサイズを決定します。

状態は変換によって変更されます 。 たとえば、変換{ x 1 }を使用して、現在の座標系をX軸に沿って1つずつシフトできます。 同様に、 { rx 90 }変換を使用して、座標系をX軸を中心に90度回転できます。 変換は解析と結合されるため、 { x 1 x 1 } { x 2 } { x 1 x 1 }同等です。

状態を呼び出し規則と組み合わせて、 アクションを作成できます。 たとえば、 { x 2 } boxは変換の後にルールが続きます。 組み込みの「ボックス」ルールは、現在の座標系の座標(0、0、0)->(1、1、1)に立方体を作成します。

例を見てみましょう:

box
{ x 2 } box
{ x 4 } box
{ x 6 } box


結果は次のようになります。

4箱

上記の例のコードは、ギャップが等しい4つのキューブを作成します。 いくつかのアクションを次々に定義していることに注意してください。 各アクションは同じ状態に適用されます-私たちの場合、元の状態。 アクション 、前のアクションで作成された状態に適用されません

繰り返し

乗算のシンボルを使用して、複数のアクション( 反復 )を記述することができます。 たとえば、 3 * { x 2 } box最初の例のコード3 * { x 2 } box完全に同一です。

色変換

空間変換を適用するのと同じ方法で、現在のレンダリング色を変更できます。 構造シンセは、HSV(色相、彩度、値)スキームを使用して色を表現します。 huesat/saturation b/brightness演算子は、色を変換するために使用されます。

反復と色変換を示す例:

10 * { x 1 hue 36 } 10 * { y 1 sat 0.9 } 10 * { z 1 b 0.9 } box

結果:

カラーキューブ

さまざまな変換の別の例:

10 * { x 2 } box
1 * { y 2 } 10 * { x 2 rx 6 } box
1 * { y 4 } 10 * { x 2 hue 9 } box
1 * { y 6 } 10 * { x 2 s 0.9 } box


結果:

ミス

インラインルール

boxは、Structure Synthのプリミティブの1つである組み込みルールです。 自由に使えるのはsphere, dot, grid, line, cylinder, mesh, cylindermeshです。

いくつかのプリミティブは次のようになります(左から右:メッシュ、グリッド、ライン、ドット、ボックス、球体):

プリミティブ

カスタムルール

カスタムルールは、複雑で複雑な構造を作成するための鍵です。 ルールはキーワードruleを使用して定義されます。 カスタムルールは、組み込みルールと同じ方法で使用されます。 ルールの重要な特徴は、ルールがそれ自体呼び出すことができることです 。 次の例を見てください。

R1

rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}


結果は次のとおりです。

球体

ルールR1はそれ自体を再帰的に呼び出すことに注意してください。 論理的には、このコードは決して終わりませんが、Structure Synthには最大許容再帰深度(デフォルトでは1000回の再帰呼び出し)があります。 再帰の最大の深さに達することは、再帰ベースの達成と見なすことができます。 最大再帰深度値は、 set maxdepth xxxを使用して変更できます。 再帰を強制的に完了する別の方法は、 set maxobjects xxxを使用してオブジェクトの最大数をset maxobjects xxx

ランダム

構造をより面白くするために、静的でないものを追加します-ランダム性を追加します。 SSでは、同じ名前の複数のルールを定義することでランダム性が実現されます。 例:

R1

rule R1 {
{ x 0.9 rz 6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}

rule R1 {
{ x 0.9 rz -6 ry 6 s 0.99 sat 0.99 } R1
{ s 2 } sphere
}


この例では、ルールR1が2回定義されています。 現在、このようなルールを呼び出す必要があるたびに、その実装の1つがランダムに選択されます。 上記の例を実行すると、たとえば次の結果が得られます。

ランダム球

あとがき

おそらくそれだけです。 私はhabrastコミュニティの注目をStructure Synthに引き寄せることができ、近い将来創造物の新しい複雑な腸の出現を期待できることを願っています。
いくつかの関連リンク:

Source: https://habr.com/ru/post/J131704/


All Articles