夜間発光のススメ

ページ番号:156
ページ名:夜間発光のススメ
タグ:
編集モード番号:0

RailSimではかなり初期の頃から「夜間発光」と呼ばれる機能が使えます。
つまり、夜になると昼間とは異なる面が描画されるという便利な機能です。
ここでは、この夜間発光について紹介します。

夜間発光の仕組み

「Xファイルに限らず」Direct3Dなどポリゴンモデルにはマテリアル(素材項目)があり、
その中の設定値にEmissive(自己発光値)を記述する項目が用意されています。
これに高い数値を設定すると夜になってもその面は明るいままになりますが、
これだけでは不十分です。夜間発光をさせるには、
面を2枚同じ座標に置いて(これを「多重テクスチャ」という)
定義ファイルでα値を変化させるのが基本です。

夜間発光工事1 テクスチャ作り

今回はあくまで「夜間発光」についてなので、電灯以外の部分は割愛します。
電灯を作るには、元のテクスチャを下絵にします。今回はこのテクスチャを使います。

※無断転載禁止
今回紹介する方法は、「Channel Composer」と各ペイントソフトを組み合わせた方法です。
予めソフトを揃えてから作業しましょう。
まずは窓の部分とその周りをグラデーション等で塗ります。この時は窓にぴったりではなく、
周辺まで塗っておきます。これが発光テクスチャになります。任意の場所に保存してください。

そのままペイントソフトは起動させたままで、次のステップへ進みます。
先ほどの発光部分は白(255,255,255)、それ以外の背景は黒(0,0,0)で塗りつぶします。

出来たら上書きしないように。クリップボードにコピーしておきます。
ここまで出来たら「Channel Composer」の出番です。このソフトは、
RGBAそれぞれのチャンネルごとの操作に特化したソフトです。まずは最初に保存した
発光テクスチャを開いてください。開けたらチャンネルを[A]に切り替えて、
[編集(E)→選択したチャンネルに貼り付け]を選択します。出てくるダイアログで
「Red」を選択して決定します。これで完成です。上書き保存してください。
これでテクスチャは完成しました。必要なら適宜処理を加えてください。

~技術的な話~
なぜこんな回りくどい方法を用いるのか?確かに普通に考えればそのまま透過させれば
問題ないように思われます。ペイントソフトによっては大丈夫ですが、場合によって
悪影響がでます。ソフトによっては透過した部分は単色のほかの色に変更されます。
そうなった場合、RailSimを初めとする3DCGで利用した場合、テクスチャの淵に変更後の色が
にじんでしまいます。それを防止するためにこういう手段をとりました。


夜間発光工事2 多重テクスチャ化

 テクスチャの規格を窓など元のテクスチャにあわせて製作した場合、この工程はかなり簡単です。
まず、光らせたい部分の面をすべて選択し、座標はそのままでコピー&ペーストします。
次に、新しくコピーしてきた面に夜間発光用の材質を割り当てます。
夜間発光用の材質は、元のテクスチャを指定している材質を複製し、自己発光値を0.5~0.8程度に設定して作成します。
それが終わったら、すべてのオブジェクトをひとつにまとめ、「近接する頂点をくっつける」で
頂点同士で結合します。一般的に同一座標に面を重ねるのは不具合を生むので良くありませんが、全く同じ座標に置いた面に関してはちゃんと表示されるようです。

完全な同一座標であれば必ずしも「近接する頂点をくっつける」を行う必要はありません

夜間発光工事3 定義ファイル記述

 前提条件として、夜間発光以外の部分はすでに記述済みとします。
定義ファイルで「この面を夜だけ表示する」という構文を書くことになりますが、
その前に、夜間発光用の材質の番号を確認します。メタセコの材質パネルを数えます。
一番上の材質は0、次は1…という具合に、材質番号がつけられています。夜間発光用の材質が何番なのかを確認してください。
確認できたら、定義ファイルのカスタマイザの部分に次の構文を挿入します。
ChangeAlpha = [材質番号],NightAlpha;
夜間発光用の材質が複数ある場合、その数だけ同じ構文を指定します。
これで夜間発光されるようになるはずです。慣れた職人なら、IF文などを組み合わせて、
スイッチでON/OFF切り替えなどもできますが、今回はここまでとします。

夜間発光工事 追加施工1 スイッチによるON/OFF切り替え

 前章まで、ただ単に「夜間発光させる」ことだけを設定してきました。
しかしここで他の作者のPIを見てみるとスイッチでOFFに設定すると発光の機能を切ることが
出来るようになっている物もあります。今回はこの機能を付けてみたいと思います。
まずはスイッチを定義します。定義ファイルの[TrainInfo]と[PrimaryAssembly]の間に次のように入力します。
DefineSwitch "夜間発光"{
    GroupCommon = "NightAlpha";
    Entry = "ON";
    Entry = "OFF";
}

これにより「夜間発光」という名前のスイッチが定義されました。ちなみに、一番上にくる
項目が初期値として設定されるので、よく使う項目を一番上に設定するのがいいでしょう。

では次にスイッチによる条件分岐の式を追加してみます。
ChangeAlpha文を次のように変えます。
If "夜間発光" == 0{
    ChangeAlpha = [材質番号],NightAlpha;
}
条件分岐には、プログラミング言語やExcelなどでもおなじみIF文が登場します。
今回の場合、「もし夜間発光が0なら」という意味になります。
0というのはスイッチの最初の項目という意味です。もし1ならその次の項目が指定されます。
これができたらスイッチは完成です。実際にスイッチが動作するか早速確認してみましょう。
最終更新:2011年03月15日 21:54
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。