Okamoto's Homepage
GALAXY.OBJを使うと,いくつかのタイプの星や星雲,銀河,彗星,流星,星団を作ることができます。
「#include "GALAXY.OBJ"」とだけ書いてレンダリングすると,次のような画像ができます。
上の画像は,いろいろなオプションを指定せず,デフォルトでレンダリングした状態です。オプションを指定することで,星や銀河などを作ることができるようになります。
GALAXY.OBJでは,galaxy_object_ではじまるオプションと,galaxy_cluster_ではじまるオプションがあります。galaxy_object_ではじまるものは,星,星雲,銀河,彗星,流星を操作するのに利用します。一方,galaxy_cluster_ではじまるものは,星団を作ったり変更したりするのに利用します。
星や星雲,銀河,彗星,流星を作るには,「galaxy_object_name」を定義してやります。たとえば次のように書きます。
#declare galaxy_object_name = "Star1";
#declare galaxy_object_scale = 2;
#declare galaxy_cluster_objects = 0;
#include "GALAXY.OBJ"
|
1行目が星を定義している部分です。この行の"Star1"を変更してやることで,いくつかのタイプの星,星雲,銀河,彗星,流星を作ることができます。2行目と3行目はあとで説明しますが,2行目は1行目で定義した星を見やすくするために大きくしています。3行目は星だけを表示したいので,星団が表示されないようにしています。
「Star1」の部分では,次のものが指定できます。
星〜Star1, Star2, Star3, Star4
星雲〜Nebula1, Nebula2, Nebula3, Nebula4, Nebula5, Nebula6
銀河〜Galaxy1, Galaxy2, Galaxy3, Galaxy4, Galaxy5
彗星〜Comet1, Comet2, Comet3
流星〜Meteor1, Meteor2
画像のサンプルは次の通りです。すべて上記のソースの「Star1」の部分を変更しています。スケールも適当に調節しています。なお,Star1はS1,のように全て「頭文字プラス数字」だけで指定することもできます。デフォルト(指定しない場合)はNebula1です。
![]() |
![]() |
![]() |
![]() |
Star1 | Star2 | Star3 | Star4 |
---|
![]() |
![]() |
![]() |
Nebula1 | Nebula2 | Nebula3 |
---|---|---|
![]() |
![]() |
![]() |
Nebula4 | Nebula5 | Nebula6 |
![]() |
![]() |
![]() |
Galaxy1 | Galaxy2 | Galaxy3 |
---|---|---|
![]() |
![]() |
|
Galaxy4 | Galaxy5 |
![]() |
![]() |
![]() |
Comet1 | Comet2 | Comet3 |
---|
![]() |
![]() |
Meteor1 | Meteor2 |
---|
上でみてきたオブジェクトは,拡大・縮小したり移動したり,回転させたり平らにしたりすることができます。拡大・縮小には「galaxy_object_scale」,移動には「galaxy_object_position」,回転には「galaxy_object_rotate」,平らにするには「galaxy_object_flatten」というオプションを使います。
デフォルトは1です。拡大したいときは1より大きい数,縮小したいときは1より小さい数を指定します。
#declare galaxy_object_scale = 2.5; |
デフォルトは0です。回転させたい角度を指定します。
#declare galaxy_object_rotate = 30;//個々のオブジェクトを反時計回りに回転 |
0から1の間で指定します。1に近いほど平らになります。デフォルトは0.2です。
#declare galaxy_object_flatten = 0.5; |
![]() |
![]() |
![]() |
0 | 0.2(デフォルト) | 0.5 |
---|
移動はちょっと頭が混乱するかもしれません。「<10, 0, 0>」と指定するとオブジェクトは上方向に動きます。「<-10, 0, 0>」だと下方向です。「<0, 10, 0>」と指定するとオブジェクトは右方向に動きます。「<-10, 0, 0>」だと左方向です。デフォルトは<0, 0, 0>で,レンダリングした時にオブジェクトが画像の真ん中にきます。
#declare galaxy_object_position = <10, 0, 0>; |
![]() |
||
<10, 0, 0> | ||
---|---|---|
![]() |
![]() |
![]() |
<0, -10, 0> | デフォルト | <0, 10, 0> |
![]() |
||
<-10, 0, 0> |
「galaxy_cluster_」ではじまるオプションは,複数個の同じオブジェクトに対する指定を行います。んー,何か分かりづらい書き方ですね。まあ,まずは下の画像とソースを見て下さい。
#declare galaxy_object_name = "";
#declare galaxy_cluster_name = "S1";
#declare galaxy_cluster_scale = 1;
#declare galaxy_cluster_spread = 30;
#include "GALAXY.OBJ"
|
ここで説明したいのは2行目の部分です。1行目と3行目,4行目はとりあえず無視して下さい。1行目では単独のオブジェクトが出てこないようにしています。3行目,4行目はあとで説明します。
2行目の「Star1」は,「galaxy_object_name」オプションと同じものを指定することができます。つまり下のものの指定が可能です。
星〜Star1, Star2, Star3, Star4
星雲〜Nebula1, Nebula2, Nebula3, Nebula4, Nebula5, Nebula6
銀河〜Galaxy1, Galaxy2, Galaxy3, Galaxy4, Galaxy5
彗星〜Comet1, Comet2, Comet3
流星〜Meteor1, Meteor2
ただし,星雲や(同じ形の)銀河が狭い範囲に集団で存在するというのは,あまりリアルな感じではないので,現実的には星,彗星,流星くらいしか使えないかなというのが個人的な感想です。
上の画像をみると,「Star1」のオブジェクトが色や大きさがランダムに並んでいるのが分かると思います。個々の星の大きさや広がり具合は,オプションを指定することで調整することができます。以下ではそれらのオプションを説明します。
galaxy_cluster_objects というオプションを使うと,オブジェクトの数を指定できます。デフォルトは6です。
#declare galaxy_cluster_objects = 2; |
![]() |
![]() |
![]() |
2 | デフォルト(6) | 10 |
---|
galaxy_cluster_scale というオプションを使うと,個々のオブジェクトの大きさを指定できます。集団全体の大きさを指定するものではありませんので注意して下さい。全体の大きさを指定するには,後で説明する「galaxy_cluster_spread」を利用します。デフォルトはgalaxy_object_scaleで指定した値の半分になります。
#declare galaxy_cluster_scale = 1; |
galaxy_cluster_rotateというオプションを使うと,個々のオブジェクトを回転させます。集団全体を回転させるものではありませんので注意して下さい。
#declare galaxy_cluster_rotate = 30;//個々のオブジェクトを反時計回りに回転 |
![]() |
![]() |
デフォルト | 30度 |
---|
galaxy_cluster_spreadというオプションを使うと,個々のオブジェクトの間隔(全体の広がり具合)を指定できます。角度で指定します。デフォルトは15度です。
#declare galaxy_cluster_spread = 30; |
![]() |
![]() |
![]() |
デフォルト | 30度 | 45度 |
---|
galaxy_scale_turbというオプションを使うと,個々のオブジェクトの大きさの比率を変更できます。数値を大きくすると,一番大きいやつと一番小さいやつとの差が激しくなります。デフォルトは0.5です。0にすると,全てのオブジェクトが同じ大きさになります。
#declare galaxy_scale_turb = 1; |
![]() |
![]() |
![]() |
0 | 0.5(デフォルト) | 1 |
---|
0だと全てのオブジェクトが同じ色になります。デフォルトは0.2です。あまり大きな数にするとリアルではなくなりますので注意してください。
#declare galaxy_color_turb = 0.8; |
![]() |
![]() |
![]() |
0.2(デフォルト) | 0 | 0.8 |
---|
galaxy_rotate_turbというオプションを使うと,個々のオブジェクトを適当に回転させることができます。このオプションは0から360の間の角度で指定します。0だと全てのオブジェクトが回転せずに同じ方向を向きます。360だと,各オブジェクトが完全にランダムに回転します。デフォルトは0です。
#declare galaxy_rotate_turb = 360; |
![]() |
![]() |
![]() |
0(デフォルト) | 180 | 360 |
---|
オブジェクトには3色まで色を付けることができます。まず1色だけ色をつけてみましょう。以下では,分かりやすいように,少し極端な色をつけてみます。この指定をしない場合のデフォルトは<1, 1, 1>,つまり白になっています。
![]() |
![]() |
#declare galaxy_object_name = "G1";
#declare galaxy_object_scale = 2.5;
#declare galaxy_color1 = <0.7, 0.7, 1>;
#declare galaxy_cluster_name = "";
#include "GALAXY.OBJ"
|
デフォルト | <0.7, 0.7, 1> | ソース |
---|
もう1色,galaxy_color2を追加します。上のソースに「#declare galaxy_color2 = <1, 0.7, 0.7>;」という1行を追加してください。すると次のような画像になります。
色は適当になじんでくれます。さらにもう1色追加してみます。「#declare galaxy_color3 = <1, 1, 0.7>;」という1行を追加してください。すると次のような画像になります。
どちらのオプションも,銀河などのオブジェクトに適用されるパターンを変化させて,オブジェクトをちがう雰囲気のものにできます。「galaxy_pattern_origin」はオブジェクトに適用するパターンの位置をずらします。一方「galaxy_turb_origin」はパターンの乱れ具合の元になる原点の位置をずらすものです。どちらもデフォルトは<0, 0, 0>になってます。
![]() |
デフォルト |
---|---|
![]() |
#declare galaxy_pattern_origin = <10, 10, 0>; |
![]() |
#declare galaxy_turb_origin = <10, 10, 0>; |
複数の異なるオブジェクトを同じ画面内に表示するには,たとえば次のように書きます。
#declare galaxy_object_name = "G1"; #declare galaxy_object_position = <0, 10, 0>; #declare galaxy_cluster_name = ""; #include "GALAXY.OBJ" #declare galaxy_object_name = "S1"; #declare galaxy_object_position = <0, -10, 0>; #declare galaxy_cluster_name = ""; #include "GALAXY.OBJ" |
このように,オプションを設定した後でGALAXY.OBJをインクルードすることを繰り返します。それぞれで位置を変えてやると,同じ画面内に複数のオブジェクトを配置できます。