2005/9/23

2005年9月のまとめ  月刊まとめ
午前中の飛行機でチューリッヒへ飛んでしまって来月まで帰って来ないので、1週間ほど切り上げてお届けする2005年9月のまとめ。そんなんアリか。

● 今月のVRM侍は妙に刺々しい

と自分で読み返して思った也。後段の「空振り」の腹いせか、切腹。
<関連記事>
ハイペース過ぎますか?
旧に青ガマが増えますが
レイアウトコンテストですよー
誉め殺された・・・のか?
だからー、電波増幅って何よ?
自分で楽しむx人に見せる。
VRM4部門参戦予定の方は読むべし

● 空振りに終わった目指せ完全自動運転シリーズ

投げっ放し気味に書いて、それに対する賛否両論の反応を見ながらVRMスクリプト解説を書く際の匙加減を計るつもりだったんですが、滑りました、切腹。蛇足ながら、以下の記事は応用が利く部類と思われるのでセルフピックアップしておく也。
<関連記事>
目指せ完全自動運転(2)−区間閉塞を理解する
目指せ完全自動運転(3)−閉塞信号スクリプト
動的オブジェクト参照
目指せ完全自動運転(8)−距離指定減速メソッド
目指せ完全自動運転(11)−ある条件が整うまで待つメソッド

● VRMユーザー紳士録大好評(?)続伸中

#15 ranmei杯2005年夏の陣風景部門の覇者−酒井殿
#16 裏技の探求者−RYOMA殿(前/後編)

以上、2005年9月のまとめにて御座候。
0

2005/9/22

目指せ完全自動運転(12)−前回の解答と連載終了宣言  VRMスクリプト禅問答
難易度:☆☆☆☆☆☆☆

前回示した例題の回答例です。
要点は(i)本線を列車が通過したことを知る方法、(ii)必ずしも同時におこらない2つの本線列車通過をSIGNAL5のG現示への切り替えに連動する方法、の2つです。まず、下に示す概念図をご覧ください。

クリックすると元のサイズで表示します
<概念図・・・余計に混乱しますか、そうですか>

図中の四角の枠はメソッドを、丸囲みは信号機を示しています。これらを結ぶ矢印は、実線が他のメソッドの実行を開始するcall命令で、色が付いているものは特に信号機をその灯火色に設定することを意味しています。破線はメソッドが矢印が向かっている信号機の灯火色を確認し、矢印の色でなければ前回紹介した「自分自身をSetEventAfterする」方法でその色になるまで待つことを意味します。たとえば、一番上の四角=MtdStopTrainから下に伸びる3つの白い矢印実線は、MtdStopTrainから3つのメソッドMtdWaitSignalG、MtdChkSignal1a、MtdChkSignal2aが実行開始されることを意味しています。

次に、先に示した2つの要点の解決策を説明します。

(i)本線を列車が通過したことを知る方法は、(a)ある信号がR現示になるのはその信号の担当する閉塞区間に列車が進入したことを意味している、(b)同じくY現示になるのはその列車が次の閉塞区間に移ったことを意味している、を利用します。SIGNAL1だけに着目すると、メソッドMtdChkSignal1aは信号機SIGNAL1がR現示になるまで自分自身を実行し続けます。そしてR現示になったら、自分を実行するのを止め、その代わりにSIGNAL1がY現示になるまで待つメソッドMtdSignal1bの実行を開始します。
まったく同じことを信号機SIGNAL3に対しても、メソッドMtdChkSignal2a、MtdChkSignal2bがおこないます。こうすることでメソッドMtdChkSignal1bの繰り返しが終わることはすなわち信号機SIGNAL1が担当する閉塞区間を列車が通過したことと等しくなり、メソッドMtdChkSignal2bは信号機SIGNAL3に対して同じことになります。これが、本線を列車が通過したことを知る方法、の答えです。

(ii)必ずしも同時におこらない2つの本線列車通過をSIGNAL5のG現示への切り替えに連動する方法、は、新たに二灯式信号機を2つ、「作業用信号機」として設置することで解決します。なお、この信号機は高度を地面よりも低く(たとえば対地-100mmに)設定し、レイアウト的には見えなくしてしまいます。
この信号機SIGNAL5_1、SIGNAL5_2は、それぞれメソッドMtdChkSignal1b、MtdChkSignal2bが繰り返しを終了するタイミングでG現示に切り替えます。つまり、SIGNAL5_1がG現示になったということはSIGNAL1が担当する閉塞区間を列車が通過したことと等しくなります。SIGNAL5_2がSIGNAL3のそれに当たることはもうおわかりですね。必ずしも信号機を使う必要はないのですが、こうしておくことでどちらの条件が成立/不成立なのかが地面に潜って信号を見ればわかるので、動作テスト時に有利です。
あとは、この2つの信号機が両方共にG現示になるまで繰り返し実行するメソッドMtdWaitSignalGを作り、これが繰り返しを終えるタイミングでSIGNAL5をG現示に切り替えてやれば、結果的に2つの本線の列車の通過を待って待避線からの進入を許可したことになります。これが、必ずしも同時におこらない2つの本線列車通過をSIGNAL5のG現示への切り替えに連動する方法、の答えです。

以下はこれをスクリプトとして記述したものです。
[停車用センサースクリプト]

//制御対象信号
VarSignal ObjCtrlSignal
VarSignal ObjCtrlSignal1
VarSignal ObjCtrlSignal2
get ObjCtrlSignal "SIGNAL5"
get ObjCtrlSignal1 "SIGNAL1"
get ObjCtrlSignal2 "SIGNAL3"
//作業用信号
VarSignal ObjWorkSignal1
VarSignal ObjWorkSignal2
get ObjWorkSignal1 "SIGNAL5_1"
get ObjWorkSignal2 "SIGNAL5_2"
//理変数&センサーイベント設定
VarTrain ObjTrain
Var EventID
Var TimerID
Var TimerID1
Var TimerID2
SetEventSensor MtdSenseTrain EventID
//
//編成検知イベント
//
BeginFunc MtdSenseTrain
GetSenseTrain ObjTrain
call this MtdStopTrain
EndFunc
//
//編成駅停車メソッド
//
BeginFunc MtdStopTrain
get ObjTrain.StdObjSignal ObjPartnerSignal
call ObjTrain StdMtdStationStop
SetEventAfter this MtdWaitSignalG TimerID 3000
call ObjWorkSignal1 StdMtdSignalR
call ObjWorkSignal2 StdMtdSignalR
call this MtdChkSignal1a
call this MtdChkSignal2a
EndFunc
//
//出発信号制御メソッド
//
BeginFunc MtdWaitSignalG
ifeq ObjWorkSignal1.StdVarSignalPosition 6
ifeq ObjWorkSignal2.StdVarSignalPosition 6
call ObjCtrlSignal StdMtdSignalG
else
SetEventAfter this MtdWaitSignalG 1000 TimerID
endif
else
SetEventAfter this MtdWaitSignalG 1000 TimerID
endif
EndFunc
//
//SIGNAL1がRになるのを待つメソッド
//
BeginFunc MtdChkSignal1a
ifeq MtdCtrlSignal1.StdVarSignalPosition 1
call this MtdChkSignal1b
else
SetEventAfter this MtdChkSignal1a TimerID1 1000
endif
EndFunc
//
//SIGNAL1がYになるのを待つメソッド
//
BeginFunc MtdChkSignal1b
ifeq ObjCtrlSignal1.StdVarSignalPosition 3
call ObjWorkSignal1 StdMtdSignalG
call ObjCtrlSignal1 StdMtdSignalR
else
SetEventAfter this MtdChkSignal1b TimerID1 1000
endif
EndFunc
//
//SIGNAL3がRになるのを待つメソッド
//
BeginFunc MtdChkSignal2a
ifeq ObjCtrlSignal2.StdVarSignalPosition 1
call this MtdChkSignal2b
else
SetEventAfter this MtdChkSignal2a TimerID2 1000
endif
EndFunc
//
//SIGNAL3がYになるのを待つメソッド
//
BeginFunc MtdChkSignal2b
ifeq ObjCtrlSignal2.StdVarSignalPosition 3
call ObjWorkSignal2 StdMtdSignalG
call ObjCtrlSignal2 StdMtdSignalR
else
SetEventAfter this MtdChkSignal2b TimerID1 1000
endif
EndFunc
細かい部分としては、SIGNAL1/3がY現示になった時点でこれをR現示に切り替えSIGNAL5から進入してくる列車との衝突を回避するだとか(ここで以前仕掛けたR→Y、Y→G以外の遷移を禁止する措置が活きてくる)、SIGNAL5_1/2をMtdStopTrainが実行された時点でR現示にして初期化するだとか、ここには出てきませんが、SIGNAL5から進入した列車が本線を横切り終わった時点でSIGNAL1/3を強制的にG現示に切り替えて後続列車のために区間を開放するという後始末があったりしますが、ここまでの議論を理解できた方には最早説明は不要でしょう。

唐突ですが、どうにもこのシリーズは不評のようなので、ここいらで一旦連載を終了します。ここまでに説明したこと、また、VRMスクリプト禅問答で取り上げたネタを精読いただければ、自律的自動運転に必要なテーマはほとんど網羅されているはずです。あとは、読者諸兄でいろいろ試行錯誤してみてください。何か解決出来ない問題が発生した場合は、適当にコメントを残してください。ちょっと出かけるのでお返事はしばらく後になりますが、大抵のことは解決できると思いますのでアテにしていただいて結構です。
0

2005/9/21

#16 裏技の探求者−RYOMA殿(後編)  VRMユーザー紳士録
前編はこちら】

VRM侍(以下侍): レイアウトコンテストのルールと言うかレギュレーションですが、あれはどうやって決めているんですか、毎年変わってますが。
RYOMA氏(以下龍):  スーパーバイザー専用の会議室で、I.MAGiCさんと我々で「今年はこんな風なのにしましょうか」みたいな感じでアイデアを出し合い、そこから出て来たアイデアを絞り、話し合ったのち、レギュレーションを決定して行くと言った感じです。
侍: 昨年もそうでしたが、今年も細かな部門設定がなされました。昨年のレギュレーションについては、個人的には悪印象を持っていまして・・・意図がわかりにくかった・・・敢えて裏をかくレイアウトで入賞してその問題を提示したつもりでしたが、今年も同様に、あるいは輪をかけてややこしい、少なくともビギナーや一般レベルユーザーが果たして意味を理解できるのか、という不安があります。これについてのRYOMAさんの個人的な見解をお聞かせください。
龍: 私自身、諸事情で去年のレイコンには一切関わっていないのですが、個人的にはレギュレーションを2つ程に抑えておく方がいいかと感じています。今年はVRM3・VRM4とそれぞれ2手に分かれ、さらにそれぞれ2つずつのレギュレーションがあると言ったところなので、例年に増してややこしい印象を受けるかも知れません。
侍: このへんについては、翌年以降のレイアウトコンテストの運営に際し、いろいろご配慮いただきたいところです。少し話を転じまして。審査に当たるお立場から、これからレイアウトコンテスト応募作に着手される方々に、ヒント、とまではいかなくとも、スーパーバイザー間で「期待されている作品像」を少し示していただいて、読者諸兄への援護射撃としたいのですが、何かありませんか。
龍: ズバリ、大レイアウトに長大なエンドレス路線を敷き、多々の山々、川(峡谷)もしくは海を絡め、それをトンネルや橋梁で縫うようなレイアウトどぇす!!・・・って、ソレは思いっきりオイラ好みで真っ赤なウソ。
侍: ・・・@(つっこむ気力も失せた)
龍: 基本的に実在しないものであっても、実物の鉄道全般の設備・・・トンネル・鉄橋・駅・信号・踏切などですが・・・その他、道路や道路設備、街での建物類の並びなどを良く見て如何にそれらに近づけるようにすることが高評価に繋がると感じています。それにプラスして部品を組み合わせモデル化されていないものの再現と言った工夫があるとこれも高評価になりますし、それの組み合わせが美しく表現出来ていたならばかなりの高評価に繋がるかと思います。
侍: なるほど、そこらへんはVRMレイアウト職人のステップアップの基本ですな。
龍: 加えて今回のVRM4部門については、「VRM3では出来ない、VRM4の独自性をアピールする」のがポイントだと思っています。リアルな動作をスクリプトで再現するとか、VRM3では制約のあった線路の高度差を出すと高評価になるかも・・・って、あくまでも推測ですが。但し、極端なのは止めておいたほうがよろしいかと。

● Webとblogについても語ってみよう

侍: 新たにblogを立ち上げられましたね。私は勝手にRYOMAさんのblogこそ、拙VRM侍の独走状態を破壊してくれるものと期待しておりますが。
龍: 独走状態を破壊するまでは行かないとは思いますが、独走状態が少々削れて行ければと感じています(笑)。
侍: 私が呼び水になったのか否かは定かではありませんが、VRMユーザーによるblogがずいぶん増えましたね。
龍: そうですね。流行の真っさだ中、レンタルブログサイトも増えて来たせいか、Webからblog移行する人やblogからスタートする人が増えて来ましたね。
侍: 少し疑問に思うのは、多くのVRMユーザーはblogを「簡単ホームページ」以上に使っていないことです。ちょっともったいないなぁ、と。
龍: 私も最初はblogは日記同然と考えていたのですが、コメント記述出来るのは勿論、トラックバック、RSS等機能が大分良くなって来たので。それならばVRMレイアウト製作の過程や、様々なWebを見て感じたことなどを出して行こうかと。便利そうなスクリプトを思いついた時は今後もblogに書いて行きますが、月日が経つに連れて記事を探すのが大変になったりしますので、同じネタでもWebにて残すことは重要かと思っています。
侍: blogについては、カテゴリ分けのちょっとした工夫や、コメント・トラックバックをうまく使い分けることで、情報の結節点として有効に使えるツールだと思っていて、このVRM侍もその実証例の1つとしていきたい、と思っているんですが。実際には真似て欲しい部分は真似てもらえず、変なとこばっかり真似られるんですが(笑)。ちょっとふざけ過ぎですかね?
龍: むしろ楽しませてもらっているぐらいなので現状維持でよろしいかと思いますよ。
侍: RYOMAさんの方は、今後はどのような展開を?
龍: 現在Webをリニューアル中でして、VRMレイアウトを製作しながら参考資料として見れるような実用性のあるWebを目指しています。これには、かつて誰も公開していない目玉?・・・も。
侍: それは楽しみです。再度の死亡説が囁かれない程度によろしくお願いします。
龍: ・・・#

● では最後にお約束の

侍: RYOMAさんの「誉め殺し」たいVRMユーザーをご紹介ください。
龍: ん…数人いるのですが、やはり啓明さんです。これまでのレイアウトを見ていても、小型レイアウトながら些細な発想やテクニックが大きく見えるのが不思議な、いや、凄いところです!!
侍: レイアウトコンテストの昨年の覇者ですからね。今年もやってくれるものと期待しましょう。では、最後に。RYOMAさんにとってVRMとは何でしょうか。
龍: 鉄チャンを虜にするとんでもないアプリ!!先だってご登場のJTさんともカブるのですが。私自身、公団団地に妻と暮らしていまして、小型レイアウトでさえ作るスペースがなく、VRMが登場するまではA列車等の鉄道ゲームで遊ぶか、車両のサイド画像や、アイコンを作ったりしていました。ですが、VRM1を買ってからはそのライフスタイルが少々変わったりしたものですが、現在と比べると、とんでもなく不便なものでして買ってから数ヶ月後は、またペイントツールでお絵描きと。今思えば恥ずかしいのですが、当時の会議室では「アレ出せ、コレ出せ」なんぞと言ったリクエストの出しまくりで。本格的にハマり出して来たのはバリアブルレール・高架・簡易的な地形作成が可能になったVRM2が発売されてからです。VRM3では地形編集・トンネル、VRM4では待望のターンテーブル・スクリプトでの諸制御等。と、言う訳で、我々鉄ちゃんの夢をかなえてくれそうなアプリですね。これはもうやめられませんわ(^^
侍: ・・・いろいろありましたが・・・「やめられません」といのは「もう死亡説は囁かせない」という決意の表明ということでよろしいか?
龍: ・・・#
侍: ありがとうございました。


注)本稿はQ&A式のメールのやり取りを元に、対談風の記事にまとめたものです。かならずしもご協力いただいたネットVRMユーザーの発言そのままを反映しているわけではありません。文責はすべてghostにあります。
0

2005/9/21

東京タワー  誉め殺し
そう来るか!!

先日、新進気鋭の地形テクスチャ使いとして期待を込めて取り上げさせていただいた新電氏が、またも大ネタを披露しておられる由、祝着至極。

レイアウトコンテストの作品募集中、ということもあるので、手前味噌ながら地形テクスチャを使って任意の構造物を作る方法についてまとめた拙稿を、改めてご案内申し上げ候。特にVRM3部門にて参戦予定の諸兄は熟読すべし。

ビル壁面の映画広告
テクスチャ透過色の活用例
ドリルはトンネルのみの為ならず

あ、今回は拙者、VRM3部門は遠慮しますから、切腹。
0


teacup.ブログ “AutoPage”
AutoPage最新お知らせ