3-1E:出力作業と定義文作成

 今回は最後の作業となる、出力作業と定義文作成となります。

まだの方はこちらから。


1.台車

 と言うわけでまずは台車の出力からやっていくわけですが。

 まずはこれまで作っていた「Body(総合体)」をコピー、コピー後は「Body(台車)」に名前を変更します。

 まぁただコピーして名前を変えただけなので、中身は何一つも変わってませんね。

ではここから台車とそれに関連したモデルを取り出します。

オブジェクトのメニュー「他」

→「すべてのオブジェクトを表示する」

→台車と台車に関連したオブジェクトを消す

→「他」から「可視オブジェクトを一つに統合する」

→統合されたオブジェクトを消去する

この順番で台車とそれに関連したパーツのみを取り出します。

 ついでに材質も、

材質のメニュー「他」

→「未使用の材質を削除」

で余分な材質を削除することができます。

これは出力作業時の基本動作となります。

 そして台車オブジェクトを中央に移動させます。

この時、マッピングが平面になってない事を確認しましょう。

 平面マッピングのまま移動させてしまうと、折角設定したマッピングもし直しになってしまいます。

マッピングする際はモデル全体を極力移動させない方向で、どうしても移動させる場合はマッピングしなおしにならないよう、仕様材質を「UV」にしてから移動させるようにしましょう。

 さて、では出力作業に入るのですが、「名前を付けて保存」を選択後、ファイルの種類を「Direct3D Retained Mode(*.x)」に選択します。

 名前はとりあえず「Bogie」にしましょう。

 その後は「X Export」なるウィンドウが表示されます。

この時の拡大率は、拙作基準の特殊な縮尺で作っているのであれば、画像のように「1.2」を指定します。

 台車とそれに関連したパーツは以上になります。

「Bogie_f」ファイルは台車の先頭部に付いている排障器になります。


2.定義文記述作業-序章

 まずはテキストファイルを用意します。

この際、名前は「Train2」にします。

この他にもK buildの使用に特化した専用のテキストファイルを作成することもできますが、そちらの解説は後回しにします。

 初回では説明を端折りましたが、今回は真面目に解説していきます。

基本は上の画像のように記述していけば問題ありません。

(本当はこの項目も、RSに付属しているヘルプをご覧いただければ書いてあるのですが、ここでは更にかみ砕いて解説していきます。また、ここに書かれている解説は自分なりの解釈となります。)

 

PluginHeader{

→これはここからPIのプロフィール的な構文の始まりを示す文となります。このままで行きましょう。

RailSimVersion = 2.13;

→要するに使用可能なRSのバージョン、と思って差し支えないと思います。特に理由がなければこれもこのままで。

PluginType = Train;

→今回記述するプラグインのタイプです。今回は車両PIとなるので「Train」と記述します。

PluginName = "";

→ここで記入した名前が、RS上で表示されるPI名となります。” ”の間に名前を記入します。

PluginAuthor = "";

→ここには作者名を入れます。自分の名前を” ”の間に記入します。

IconTexture = "";

→アイコンに使用する画像をここで参照します。同様に” ”の間に参照するテクスチャ名を記入します。

Description = "";

→このPIの説明文のようなもの。別に面倒であればここは無記入でも問題ありません。

ちなみに、改行させるときは、画像のようにこの構文を何度も挿入して記入します。

少なくとも、Enterキーで改行させてもRS上では改行されないどころか、構文エラーを起こしてしまいます

特に、行を跨いでの” ”の配置は避けるべきです。

}

→冒頭に始まったPIのプロフィール的な構文はここで終わりであることを示す文です。構文を記述していく際には、これの数が{とちゃんと合っているかどうかも確認しましょう

TrainInfo{

→この車両の基本情報となる構文の始まりを示す文です。これもこのままで。

FrontLimit = 9.0;

→上の画像にも書いてありますが、前方の連結位置をここで指定します。今回は18m級車体の車両なので、半分で割った数の9.0を記入しています。もちろんこの値を変えることも可能です。

TailLimit = -9.0;

→上の”FrontLimit”が前方なら、こちらは後方となります。

前方を長くし、逆に後方を短くすることもできます。

MaxVelocity = 65.0;

→この車両PIの最高速度を指定します。拙作PIでは基本、営業最高速度で決めている場合が殆どです(たまに例外があったりしますが)。

MaxAcceleration = 2.0;

→この車両PIの加速度を指定します。一般的には2.0~3.3であることが殆どですね。

MaxDeceleration = 3.0;

→この車両PIの減速度を指定します。拙作では基本的に加速度よりも減速度の方を大きくしていることが多いのですが、これでは急停車となってしまうため、人によってはもうちょっと緩めてもいいかもしれません(この辺はお好みで)。

TiltSpeed = 0.0;

→振り子で傾き出す速度を指定します。今作では振り子機能は使用しませんので0.0に指定しています。

DoorClosingTime = 6.0;

→ドアが閉まるのにかかる時間を秒で指定します。

}

→上に同じです。何かが終わる時は必ずこれが来ます(これ以降は省略。画像に入ってれば書かれてなくても必要と思っていただいて結構です)。

 

 続いてはスイッチ類です。

 

DefineSwitch ""{

→スイッチの定義と、スイッチの名前になります。” ”内に記入します。

GroupCommon = "";

→この「GroupCommon」が設定されているPIは、” ”内に記入した名前と同じ名前になっているもの同士が同じ編成内で同期します。主に幕や編成などで用います。

(なお、今回のPIは2本しかない上に、この2本が連結するという特殊な条件であるため、編成にはこの「GroupCommon」は適用していません)

Entry = "";

→スイッチの選択肢となります。要するにスイッチ名に対して、どういう状況なのかをここに記します。

選択肢を増やす場合は、この構文を下に追加します。

 

また、この辺のスイッチの機能は、電源と言う基本的な部分から、編成、行き先幕などを定義しています。

 

 ちなみに、拙作PIではこのように予備スイッチを設けることもあります。

これは、後々機能を追加する際に、全体的に後ろにずらされるのを防ぐのを目的としています。

これをすることにより、後々スイッチを追加したとしても、編成テンプレートの更新の手間が省けたりします(もちろん追加機能を反映したい場合は編成テンプレートの更新も必要になります)。

 こちらはその他の設定。

主にドアの開閉状態だったり、内装の状態だったり、ライトの状態だったりをここで定義しています。

その他詳しいことは実際に配布されているPIをご確認いただければ。

 さて、まずは車両の足ともいえる車輪から定義していきます。

 

PrimaryAssembly{

→ここからモデルに関する構文を定義していきます。

Axle ""{

→要するに車輪のように動くことで回るものを定義します。

ちなみに、” ”内に入れる文字は原則同じものを定義することは不可能です

もし同じものを何個も用意したい場合は、画像のように数字で区別しましょう。

ModelFileName = "";

→ここでモデル名を参照します。定義文での参照は基本的に相対パスで行います。

ModelScale = n;

→モデルのサイズをここで指定します。ここでも拙作の特殊な縮尺に基づき指定しています。

また、逆に0.0とすることで、非表示にすることもできます(そうする際はちょっと取扱いに注意が必要になってしまいますが)。

ChangeTexture = n, "";

→ちょっと飛んでこの構文。これはそのままテクスチャを変更するための構文です。

前回でもお見せした通り、この車両は浪打車輪ではないため、ここでテクスチャの変更を行っています。

nに入る数字は材質番号ですが、この材質番号は後述します。

Coord = (7.2, 0.4);

→車輪を配置する位置です。

 続いて台車。

同じものの解説は省きます。

Body ""{

→車輪の「Axle」が「Body」に変わっただけです。ここの名前も同じものを複数個用意したい場合は「Axle」と同じく数字で区別しましょう。

ApplySwitch ""{

→モデル側にスイッチを定義させるときに使う構文です。

ここに入る文字は冒頭の「DefineSwitch」で設定したスイッチ名を入力します。

ここで「DefineSwitch」に存在しない名前を入力してしまうと、存在しないスイッチを参照しようとしているとみなされ、構文エラーと同じ扱いになってしまいます。スイッチ名の確認も忘れずに!

また、これとは別にRS上で用意されている専用のスイッチも存在します。

Case 1:

→上のスイッチを定義した時にセットで使う構文です。

ここの数字は、「DefineSwitch」で設定した「Entry」の数を、0から降順で数えたものになります

なのでここの「Case 1:」は上から2番目に設定した選択肢を適用させるものになります。

ChangeModel = "", n;

→これはその名の通り、モデルデータを変える時に使う構文です。

「ModelFileName」と同様、参照先を” ”内に記した後、nにモデルサイズを指定します。

JointZY "Wheel1"{

AttachCoord = (0.0, 0.0);

LocalCoord = (1.1, -0.05);

→これはこの構文をどこに紐づけするかを定義する文です。

台車は車輪と車輪の上に覆いかぶさる形であるわけなので、PI上でもそのように定義してあげる必要があります。

” ”内で先ほど指定した車輪の名前を指定します。

「AttachiCoord」はまぁ置いとくとして、「LocalCoord」は最初に来る数字がZ軸方向、次に来る数字がY軸方向の座標を指定します。

これと同じ構文を直下に置いて別の車輪(すぐ隣にある車輪)を指定します。

なお、この構文は必須で、一番下にないと構文エラーを起こします

車輪と台車を定義できたら、一旦保存してRSビュワーで確認してみましょう。

確認方法は、Train2ファイルをRailSimのアプリケーションファイルにドロップです。

 車輪と台車がRailSimのビュワー上に現れたことが確認できたかと思います。

もしここで車輪もしくは台車が表示されていなかったら、それは参照ミスの可能性が高いです。モデルデータの配置場所と参照ファイル名を正しく記入できているかをもう一度確認しましょう。

なお、ここで台車と車輪の嚙み合わせに違和感を覚えたら、一旦メタセコに戻って、再調整のうえで再出力を行いましょう(あるいは構文で指定した座標を変更でもいいですね)。


3.出力と定義文-車体

 続いては車体を出力します。

まずは画像のように必要なモデルだけを残して整理します。

 そのあとはテクスチャを画像のように整理。

「他」から「未使用の材質を削除」した後は、まとめられるものをまとめた後、数字を振って整理とします。

この数字は、構文から指定する際に用いる数字になります。

見ての通り、1からではなく、0から数字を振っていることに気付くかと思います。

これは定義文、つまりRSから見ても、テクスチャを1からではなく、0から数えていることによるものです。

ここが少々面倒なポイントとなりますが、これが基本法則となりますので覚えておきましょう。

ここではこの数字を「材質番号」とします。

 帯が重なっていたり、アンテナが消えてたりと色々おかしなことになってますが、更に不必要なものを削除したり(アンテナはクハにしかないという事情があり、車体にあると不都合なので消しました)、表示させるものを表示させたり…。

細かいところは構文でどうとでもさせるとして、これでひとまず出力しちゃいます。

 の前に一つ。

今のままでは同一座標にあるくっついてない頂点があるなど、無駄に頂点が多い状態になっている可能性があります。

なので、画像のように「可視オブジェクトを一つに合成する」を選択して一つにします。

(ここで合成してはいけないものは非表示にするなどしておきましょう)

 続いてこのようなウインドウが表示されるので、「はい」をクリックします。

 そして、「近接する頂点をくっつける」の動作で頂点を減らしたら、いよいよ出力です。

今回はシンプルに「Body」としました。

 そしてこちらが車体の構文。

お気付きの方もいらっしゃると思いますが、実は台車と車輪は全く同じ構文なのです。

では一つずつ見ていきましょう。

 

NoCastShadow = n;

→影の制御に用いる構文で、この構文は「影を受けるが、影は出さない」構文となります。 

主に透過ファイルを指定している場合などに用います。

NoShadow = n;

→一方のこちらは、「影も受けない、影も出さない」構文となります。 

主に非表示にするものや夜間発光系材質で用います。

NoReceiveShadow = n;

→一方のこれは、「影は受けないが、影は出す」構文となります。

主にライトや行先LED表示などに用います。

いずれも複数以上の指定が可能でその場合は,で区別して指定します。

また、ここの値は先ほどメタセコにて指定しました材質番号を見て指定しましょう。

 

ShiftTexture = n, x, y;

→この構文は、モデリングする際に指定したマッピングをそのままずらす構文となります。

nが材質番号、xが横方向に移動させる際の値(マックスは1.0)、yが縦方向に移動させる際の値(こちらもマックスは1.0)を指定します。

ChangeAlpha = n, a;

→その材質の表示状態です。nが材質番号で、aが0.0ならば非表示、1.0なら表示です。

他にも「NightAlpha」(夜のみ表示させる)や「DayAlpha」(昼のみ表示させる)があります。

ChangeMaterial{

→材質の状態をこれで変える…のですが、基本的にはライト等を点灯状態にしたりするときに用いる構文なので、このまま用いちゃいましょう(説明が面倒なだけ)

EnvMap = n;

→要するに環境マッピングです。反射させたい材質をこれで指定します。

なお、拙作では環境マッピングに対して専用のスイッチを設け、これでONOFFができるようにしています。

 またしてもRSビュワーで確認。

動作確認は重要ですからね。


4.出力と定義文-基礎

 基礎とは何ぞや?となるところですが、要するに基本的な内装から、幕、連結器、簡易シャドウなどを入れたものと、個人的に定義しています。

これもこれまで同様、材質を減らしたりして整理するわけですが、ここで一つ注意ポイントが。

 同じテクスチャを当てて、平面マッピングで作業するためにいくつか材質を複製したのを覚えていますか?

これ、そのままだと材質が無駄に増えてしまいとても面倒です。

そこで、「13:乗務員室」とある材質を「UV」に指定し、乗務員室-1とある材質を全て「13:乗務員室」に統合してしまいましょう。

再度変更したり追加したりなどの作業をする時が少し面倒になってしまいますが、それは総合体の方でやる方が良いでしょう。

 実は、このように材質を1つに統合するようになったのは拙作でも比較的最近からだったりします。それまでは1つ1つテクスチャを用意してモデリングを行っていたのですが、これでは後述する夜間発光に対応させるための作業が非常に面倒かつ大変時間がかかることになっていたので、これら作業を効率化させるべく、今のやり方に変更しました。

 次に夜間発光の対応の仕方です。

無論、内装(車内)ですから夜間は光ったりするわけです。

上のように全く同じ材質をコピーし、「諸設定」の「自己照明」を1.00に変更します。

これで、この材質は光るようになりました。名前は同一のものと同じ名前にし、カッコで区別します。

カッコ内に書かれているNはNight、つまり夜を表し、乗は乗務員室であること、客は客室であることを示すために記しています。

 これもまたつい最近やるようになったのですが、これまでの拙作では夜間発光材質は全て「不透明度」を0、つまり非表示にしていました。

これは、構文にてChangeAlpha = n; NightAlphaと記述し、夜間発光とする構造としていたのですが、最近のK buildにてこの構造では夜間時に発光してくれないよう仕様変更されたらしいのです。

このため、最近のPIでは合わせてこれの仕様変更も随時行っているのです(夜間発光新仕様化と言っているのは、実はこれです)。

構文の手間が少々増えることと、既にPI化済みの場合は、関連するモデルの再出力を行分ければいけない手間がありますが…新規作成の場合は、後者はあまり関係ないですね。

 さて、ではこれをモデルにも適用させていくわけですが、まずは「乗務員室」のオブジェクトを複製します。

オブジェクトの上に「複製」のボタンがあるので、それを押すと右のようなウィンドウが出ます。このままで問題ないのでこのままOKを押して複製しましょう。

 すると新たに「乗務員室1」と書かれたオブジェクトが増えましたね。

これで複製完了です。続いては、この「乗務員室1」以外のオブジェクトを全て編集不可にします。

こうすることで、複製元の材質が変更されてしまうのを防ぎます。

この「乗務員室1」で使われている材質を夜間発光仕様のものへ変更しましょう。

終わりましたらこれを「乗務員室」に統合して近接する頂点をくっつけるを実行して頂点を減らしましょう(別に後でもやる作業なのでこれが面倒と思う場合は今やらなくても良いです)。

この後、客室に対しても同様にやっていきます。

 適用を終えると、こうなりますね(不自然に白いのはテクスチャ側のミスです、後々修正しています)。

このまま出力してしまっても良いのですが、もう一仕事、今度は車体下に「方向別ラベル」を貼り付けます。

 このようなテクスチャを用意します。上半分が前方向、下半分が後ろ方向の向きとして文字を入れます。

フォントは何でもいいですが、拙作では幕作成時に用いたフォントを使用していることが多いです。

 そしてモデリングしてマッピングへ。

この際の注意点として、床下機器などに干渉しない位置にしましょう。

使用者が確認するための物なので、干渉して見えないようなことがないようにしましょう。

 まだまだやる事は終わっていません。

続いては内装無のモデルを作成します。まずは図のようにテクスチャを指定します。

そして先ほど同様、客室をまた複製して、カッコ内でそれぞれ名前を区別させます。

 内装無モデルのポイントとしては、見えるところは面を張り、見えないところの面は徹底的に消すことです。グラデーションの場合は、3枚目の画像のように平面マッピングすると良いですね。ちなみに、乗務員室はこの内装無のモデリングを行いません。内装無モデルでもこのまま存置します。

 夜間発光対応も忘れずに。

ここまで来たらようやく出力です。内装有のモデルを「Base_1」、内装無のモデルを「Base_2」で出力します。オブジェクトは内装有と内装無のどちらかを非表示にし、「可視オブジェクトを一つに合成する」→「近接する頂点をくっつける」を実行し、頂点数を減らすことも忘れずに。

 ここからはこれまでのBody構文ではなく、Object3D構文を用います。

では一つずつ見ていきましょう。

 

AlphaZeroTest = n;

→車体に出てきた影を制御する系の構文と同じです。

これは、透過されているところとそうでないところがあるテクスチャに対して指定します。

テクスチャのドットがはっきりわかってしまうのが欠点ですかね。気になる方はこれを使用しないやり方にしてみるのも手です。

Transparent = n;

→これも上に同じく、影を制御する系の構文同様です。

効果は「描写順を一番最後に持ってくる」です。これをすることにより、例えば半透明の材質では一番最後に描写されるようになるため、車内の一部や向こう側が表示されるようになります(この構文同士の材質が向こう側に来ると消える場合もあります)。

半透明、ということで主に窓などに用います。

 

If文はちょっと難解なので、今回は省きます(中級編にて解説します)が、拙作と同じスイッチ構造にするなら、このまま持って行ってしまうのもアリです。

 更に下へ。

基本If文だらけなので、初心者にはいささか難解だと思います。

幕の構造も、拙作では前に進む時と後ろに進む時とで別の表示ができるようにしているので、このような書き方となっています。

 

今更ではありますが、//が付いているのがこれまでも目にしていたと思います。

これはコメントアウトの構文で、これを付けることで、それ以降の行に描かれているものは無効化されるものになります。

メモ書きしておきたい場合や、とりあえず書いたけどRS上では無効にしたい場合などに用います。

 これでラストです。

車番は単純明快な構造なので、ApplySwitchで済ませていますが、複雑なものだと、If文を用いての定義となります。

そして最後。

Joint3D "Body"{

AttachCoord = ( 0.0, 0.0, 0.0);

}

→これがBodyとは決定的に異なる部分です。

Bodyでは2つのオブジェクトに紐づけていましたが、Object3Dでは1つのみに紐づけを行います。

 内装が付いたことで、RS上でも少しそれっぽくなってきましたね。


5.出力と定義文-座席と精密内装

 座席も基礎同様に部品を取り出し、夜間発光対応を行います。

こちらは一部座席のみを別オブジェクトにして出力し、それ以外は共通の座席として出力します。

 ここの構文は基礎の簡略版みたいな感じですね。

ただ、内装がCase 1とCase 2(つまり簡易内装状態では表示させない)であること、「If "_CAMDIST"<=50{」という構文が入っていることくらいでしょうか。

この構文は、近いところのみにこれを有効にするという条件文になります。

要するに遠いところでは非表示にさせることができる構文と言うことになりますね。

 車両によって差異が出てきたので、ここでもちゃんと記述した通りに動作するかの確認は必要不可欠です。

 続いて精密内装。

こちらも基本ルールは座席に同じです。

 定義文に描く内容も、座席とほぼ同じですね。

ただ、内装スイッチでCase 2:、つまり「精密内装」のみに表示させる点が異なりますね。

 オマケでこちらも載せておきます。

これは要するに車両と車両の間にある床面の渡り板のことです。

 普段使う構文は記憶していることが多かったりするのですが、あまり使わない構文、ここの場合だと「DirLink」がそれだったりしますが、そういうのは覚えてない場合が殆どです^^;

この場合は、他の使用している定義ファイルからその構文を流用します。

日常使いでも覚えてない構文も間々あったりするので、同様に他から持ってきたりしています。

 座席同様、車両ごとに差異があるのでここでも動作確認しておきます。


6.出力と定義文-ステッカーとドア

  ステッカーも同様に取り出します。

また、一部ステッカーに対して夜間発光対応も行いますが、これは全てに対して行うのではなく、車内に向かっているもの(車内にあるもの)のみに対して対応を行います。

 構文はこうなります。

ステッカーは透過しているテクスチャが多かったりするので、AlphaZeroTestやNoCastShadowを多用していくことになります(AlphaZeroTestは窓に貼り付けられているもののみで、そうでないものはNoCastShadowのみを指定しています)。

 なぜ窓に貼り付けられていないステッカーに対しても「NoCastShadow」を指定しているのかと言いますと、これを指定してない状態でRSビュワーにて確認してもらえるとわかると思いますが、そこだけ影を出したときに一段と暗い四角の枠が出てしまうからなんですよね。

ステッカーは貼りつけられているもの。これを考えると影が出てしまうのは不自然であることはわかるかと思います。それを防ぐために「NoCastShadow」を指定しています。

 面倒ですが、確認は大事です。

 続いてはドア。こちらも先ほどのステッカー同様、車内側のみ夜間発光の対応を行います。

また、両開きドアは両側のドアとで別の動きをするため、それ毎にモデルデータを分けて出力を行います(左側と右側とで出力。同一方向に動くドアは一緒で問題ないです)。

 ドアの構文です。基本はこれまでと同じですが、このパーツでは停車時に動く特徴があります。

そのため、RS上でモデルを動かすための次の構文が必要になります。

 

StaticMove{

→これからこのモデルを動かす構文の始まりを示す分となります。

Displacement = (x, y, z);

→どのくらい移動させるかをそれぞれX、Y、Zの軸で記入します。ドアは車体に対して進行方向に動くので、Z軸で記入しています。

PreAnimationDelay = n;

→動作する条件になってから動き出すまでの遅延時間を秒で指定します。

AnimationTime = n; 

→動作時間を同じく秒で指定します。

PreReverseDelay = n; 

→動作した後、元に戻る動作をするまでの遅延時間を秒で指定します(指定がない場合はPreAnimationDelayに同じ)。

ReverseTime = n; 

→元に戻る動作を秒で指定します(指定がない場合はAnimationTimeに同じ)。

 

この構文を重ねて使うことで、複雑なドアの動きをするのも自在にできたりします(調整が必要になりますが・・・)。

停車したらホーム側のドアを開くスイッチとして、"DOOR1_""DOOR2_"という専用のスイッチがあります。

左側に1を、右側に2を当てています(実際に動作するかはRS上でちゃんと確認して調整しましょう、面倒ですが…)。

 あと、この車種は車体制作の回でも解説した通り、ドア配置が少し前にずれています。

車体左側のドアと共通にする場合、このままでは同様に配置したところで後ろにずれこんでしまいます。

これに対応するべく、青いところに数値を記入し、ドアを前にずらしています。

また、反転させる構文として、AttachDir = (0.0, 0.0, -1.0);を挿入しています(挿入箇所は青いところの直下)。

 拙作の特殊な縮尺でやっている方向けに、メタセコ上の0.01は0.00084となっています。

これを基準に掛け算することで座標の値を求めることができます。

もっとも、メタセコ上の0.01=RS上の0.01であれば簡単に設定することはできるかと。

 ドアの動作確認をしても良いですが、その前にもう一つ。

これは拙作では「ドアランプ」と呼んでいるものです。要するに側灯です。

ドアが開いたときに180度回転して、ドアが閉まると同時に180度回転して元に戻る手法を拙作でも標準としています。

このため、モデルの作りも非灯火側と灯火側とで作り分けしています(下のはそれに必要ではないものではありますが、面倒なので一緒にしました)。

 さて、ここで回転系の構文が出てきましたね。

基本的な理屈は先ほどのStaticMoveと同様です。

 

StaticRotation{

→ここから回転系構文の記述を始めることを示す文です。

RotationAxis = (x, y, z);

→どの軸に対して回転させるかを指定します。回転させる軸のところに1.0と記入します。

RotationAngle = n;

→そのまま、回転させる角度になります。

 

あとはStaticMoveと同様の構文を入れて時間を指定します。

 何度も言うようですが、動作確認は大事です。


7.出力と定義文-床下

  床下もこれまで同様、しかも今回は車外なので夜間発光対応をする必要もありません。

ただし、ここもここで調整が必要になります。

材質を見てもらえば分かるかと思いますが、LとRとで今は区別しています(ともに平面マッピングの物)。

これは調整完了後、一つの材質に統合する予定のものになります。

とりあえずこのまま出力します。

 特に目新しい文はありませんね。

最初に出力した台車の付属パーツをここで付けています。

 ではビュワーで確認。

右の小さい箱右側が白くなってしまっているのがお分かりいただけるでしょうか。

 該当箇所を位置調整します。

他にも白くなっているところがないかを確認し、調整が終わったら再度出力します。

 白くなった部分がなくなったことを確認したら、マッピングをUVにしてLとRを合成、再度出力をかけます。これで床下は終わりです。


8.定義文記述作業-ライトフレア

 これで終わりにしても良いのですが、まだまだ。今度はライトフレアの記述を行います。

 今回も文をかみ砕いて解説します。

 

Headlight{

→ここからライトフレアの構文記述を始めることを示す文です。

AttachObject = "";

→どこのオブジェクトに紐づけるかを指定します。

SourceCoord = ( x, y, z);

→上で指定したオブジェクト基準で、どこの座標からフレアを出すかを指定します。

車体ギリギリで指定すると、フレアが車体に食い込む形になってしまうため、少し浮かせたりすると良いかと思います。

Direction = (0.0, 0.0, 1.0);

→これはとりあえずこのままで。

MaxDistance = n;

→フレアが表示される最大距離…らしいのですが、よくわからないので(え

とりあえずこのままで(その割にテールライトでは別の数値を指定しているのでよくわからない…)。

LensFlare{

→ライトフレアのレンズフレアの定義を始めることを示す文です。

StartAngle = n;

→ある方向を0にして、どの角度までフレアが見えるようにするかを指定します。

Twinkle = n;

→ライトの点滅度合いを0.0~1.0の間から指定します。主にHIDライトやLEDライト装備車で使います。

この車種はそのどちらでもないのでここにはありませんが、解説しておきます。

Texture{

Distance = n;

Radius = n;

→テクスチャによるライトフレアを指定する場合に使います。Radiusはライトフレアの表示する半径です。

TexFileName = "";

→これはもうそのまんまですね。使用するテクスチャ名を相対パスにて参照、指定します。

 

ライトフレアはちょっと難しいので、最初の内はアイゼントランザ、もしくは拙作のを丸コピでも構いません。流用しちゃいましょう(拙作のライトフレアを使って公開したい場合はご相談いただければ…)。

 以上でクハの構文記述は終わり、クハ660型は完成しました。お疲れさまでした。


9.出力と定義文-最終章(モハ610型)

 ですが!RS上に置いて編成を組んだり、走らせたりするのであれば、クハ660型だけでは当然足りませんね。

ここからはこれまで省略していたモハ610型を実装していきます。

 まずは台車。M車用に調整します。

とは言っても、中央部に四角い箱が出現しただけで、それ以外の違いはほぼありません。

 続いて床下。クハ同様にモデリングしていきます。

今回の車種ではクハにコンプレッサーやSIVと言った補助電源機器が搭載されている一方で、こちらは主制御器や抵抗器など、所謂走行機器関連のものが多数を占めます。

各種機器の形状の度合いにもよりますが、個人的にはこちらの方が簡単に感じるかなぁ?と。

ただし、こちらの場合は床下に加えて、パンタが搭載されているため、その周りをモデリングしていく必要もあります。

 まず始めにパンタ関連のテクスチャを用意します。

余談ですが、拙作のこの辺は、実は最初期とそんなに変わってなかったりします(配管立体化にあたり、ちょっとテクスチャの仕様を変更した程度)。

 こんな最後の方になってまでモデリングかよ~と思わされる場面で恐縮ですが、これなくしては電車たりえませんので仕方なしですね(?

と言うわけで早速パンタ周りをモデリングしていきます。

モデリング前に車体出力に用いたmqoデータをドロップ、「[オブジェクトを挿入]として、編集中のファイルに追加する」を選択して車体をこっちに持ってこさせます。

これで車体を基準にパンタ周りのモデリングができるようになるかと。

 ある程度終わったら次は配管工事です。

基本は四角形を45度回転した菱形としてモデリングしています。

また、この配管のみオブジェクトを分けていますが、これは配管のみのスムージング角度を変えているためです。

 妻面を走る配管には、別途オレンジのマッピングを施します。

これは実車に基づく処置で、旧塗装にも対応できるよう、多重テクスチャで作業を行っています。

 パンタ周りが終わりましたら車体を削除、不必要な材質を削除してクハの床下同様に仮出力、調整を行って再出力を繰り返します。

 床下の構文は最終的にこうなりました。

床下は基本同型でもない限りは別物と考えて然るべきなので、車両ごとで床下を変える体で行きましょう。

 ここまで来て、電動車モハ610型も実装されましたが、まだ足りませんね。

そう、パンタグラフ本体です。

折角パンタ周りを作っても、肝心のパンタ本体がなければ元も子もありません。

 今回の伊予鉄道610系ではシングルアームパンタグラフを搭載しているので、用意すべきパーツは上の画像の通りになります。

注意すべきは摺り板で、これのみ拡大率が異なります。

これは、K buildの架線追従に対応させるためのもので、この拡大率が構文側の指定で0.07だった場合、ろくに動作しないことが判明したためです。

 パンタグラフの構文はこうなります。

これも実は最初期とは異なる構造ですが、中ほどに入ってるK build用の架線追従に対応させるために、最近の拙作ではこれを標準の構造としています(ここでは純正用の定義ファイルのため、この部分はコメントアウトして無効化しています)。

また、先述した通り、摺り板の拡大率のみ1.0となっています。

TriangleZYは実際のパンタの動きを見てもらえば分かるとおり、ある2つの点を固定軸として設定するものです。

ここは数値一つでパンタの姿形から動作まで変わってしまうので、納得のいくまで調整をする必要があると思います。

 最後に、アイコンと「Train2k」の解説をします。まずは「Train2k」から。

 中ほどのコメントアウトを外し、有効にします。

これでK buildの架線追従にも対応した仕様となります。

 アイコンは上のSSをリサイズしたりトリミングしたりして作成しています。

アイコンの解像度は32×32にしています。

 これでいよいよ完成です。お疲れさまでした。

あとは実際にRS上に置いてバグがないかの一連の動作をデバッグしたり、折角作った自分だけのPIの晴れ舞台としてレイアウトで撮影してあげたりしましょう。

初級向けと言えど、意外と手間も時間もかかってしまうことがお分かりいただけたかと思います。

ボクの説明力不足で理解できない部分があったかもしれません。が、時間も手間もかけて一つの車両PIを作っているってことを分かってもらえれば、ボクとしては十分です。

この制作講座を基に、皆さんが作りたいあの車両この車両を作って、一緒にRS界を盛り上げていきましょう。

「宮崎車輛の片隅で。」では皆さんのPI制作活動を応援しています!


 何かわからないことがありましたら、お気軽に質問してください。

また、要望次第では追記することもあります。

 

3-1D:幕と細かなパーツとステッカーに戻る

制作講座初級編(目次)に戻る

制作講座トップに戻る