| Support Topics | 
     
    
       | 
     
    
      
      
        
          
             | 
            サポートトピックス / UC-win/Road | 
              | 
           
          
            | City Designツール Vol.4 (全7回) ImageToCity | 
           
        
       
       | 
     
    
       | 
     
    
       
       アリゾナ州立大の小林です。FORUM8から公開されているCity Designというツールの紹介をします。 
       
       FORUM8社のVRパッケージであるUC-win/Roadと、他の3DCGパッケージ間でシームレスに都市データを生成・変換するためのツール群の開発を目指しております。ここで紹介するツールはソースコードも公開しております。今のところ特定のサポートはとっておりませんので、バグなどの問題があっても責任は負いかねませんので、よろしくお願いします。今回記事で、建築・土木関係の方で貴社のシステムに適した簡易ツールが欲しいというご希望があればお寄せください。 
       
       | 
     
  
 
  
    
      前回まで、PovrayToMax、ImageToTerrain、AnimatedCharacterというツールを紹介してきました。4回目である今回はImageToCityという3次元都市データを自動生成するツールを紹介します。以前紹介したツール同様、Autodesk社の3dsMaxのプラグインとして開発されたものです。CityDesignの基礎となる本ツールは、アリゾナ州立大学で2009年度に研究・開発されたものです。以下の4つのファイルを用意することで、500メートル四方の建物、道路、樹木などがすべてテクスチャー付の3Dデータとして生成され、VR都市可視化ツールForum8社のUC-win/Roadにインポートされます。 
       
      
        - 道路線を示したAIファイル形式のファイル。
        
 - ゾーニング境界線の閉じたスプライン群のAIファイル。
        
 - 地形の隆起をグレー画素として記した画像ファイル
        
 - 森林地区、住居地域、商業地域に色分けされた画像ファイル
      
  
       
      まずはじめに、Procedural都市生成に関する簡単な背景を紹介します。 
      都市の自動生成自体の研究は、それほど新しいものではありません。最初に紹介しておかなくてはいけないのは、Shape
      Grammarです。 
      これは、空間要素どうしの関係を記述する方法で、1970年代にGeorge Stiny教授(現MIT教授)によって開発されたものです。 
      Stiny教授は80−90年代にUCLA(カルフォルニア大学ロサンゼルス校)の建築学科教授として、Shape
      Grammarに関する多くの論文と研究者を輩出しました。興味のある方は、以下の書籍をお読みください。 
      1つ目は故William Michael教授が書かれたもので、建築分野にShapeGrammarを利用する理論と方法がしるされています。 
      2つ目はShape Grammarをより数学的に説明した英書です。 
      
        - 「建築の形態言語―デザイン・計算・認知について」 ウィリアム ミッチェル、長倉
        威彦著
        
 - 「Shape:Talking about Seeing and Doing」 George Stiny著
      
  
      私も90年代UCLAで、Stiny教授や彼の奥様であったTerry Knight教授(彼女も現在MIT教授)のColor
      Grammarという授業をとり勉強した一人です。 
      ただし、Shape Grammarは建築分野での解析ツールとして利用されてきたので、一般的に利用されることはありませんでした。 
      そんな状況を変えたのは、2001年にComputer Graphics分野最大のSiggraph学会で発表された、Procedural
      Modeling of Citiesという論文です。 
      ETH(スイス工科大学)のYoav Parish氏とPascal Muller氏によって発表されたこの論文(*)によって、Shape
      Grammarを記述するスクリプト(CGA)によって、ハリウッドでも利用できるようなハイクオリティの3次元都市データが自動生成できることを示しました。 
       
      技術的な側面もさることながら、少ない記述で複雑なデータを生成できるという応用面が、驚きとインパクトを与えました。 
      その後、Pascal Muller氏は多くの自動生成ツールを開発し、現在Procedural Incという会社を設立、CityEngineというソフトを販売してます。 
      このツールは最近公開された「Cars2」というハリウッド映画で都市生成に利用されています。彼との共同研究者であり、CGAをつかって建築物を自動生成する研究をしているPeter
      Wonka氏(現アリゾナ州立大教授)が今の私の共同研究者でもあります。 
      (*)Yoav I. H. Parish, Pascal Muller , "Procedural modeling of cities",
      Proceedings of SIGGRAPH '01 
      Siggraphの学会論文集でProcedural Modelingでサーチすると、これら一連の研究成果を見ることができます。 
       
      さて、ここからは多少内輪のお話です。これらのツールがあるからといって誰でも簡単にハリウッド映画で使えるような都市データを作成できるかというと、答えはノーです。「生成ルールを使って自動で都市を作成すること」と、「建物の生成ルールを自動抽出すること」はまったく別物です。Pascal氏達が開発したツールはまさしく前者のためのデザインツールであり、後者はまだまだ研究課題の域をでていません。 
       
      また、都市や建築物データ作成に関しては、幾何データ同様に、マテリアルデータ作成も大変重要な役割をはたしております。 
      マテリアル設定は、豊富なCGアート経験が必要であり、幾何データ作成よりも多くの時間と労力が必要なことが多いです。 
      Pascal氏自身はこれらの技術があるため、開発されたツールで作成されたデータをよりよく見せることが可能だったのです。 
      生成ルール記述も一筋縄ではいきません。アリゾナ州立大学でも何人か博士課程の学生を雇ってデータ作成を課題にしますが、同僚のPeter氏いわく、「使いものにならない。」だそうです。これらを背景に、既存のツールとはちょっと違った目的で、本ツール(ImageToCity)を開発しようとしました。まずは、本ツール自体をスクリプトの勉強教材につかってもらえるように開発しました。 
      全自動で都市データを自動作成できますが、ちょっとカスタマイズしたい場合は、ソースコードを書き換えてもらう必要があります。 
      このツール自体を教材として、「建物の生成ルールを抽出すること」を勉強してもらいたいという思いがありました。 
      またマテリアルなどの設定を簡単にできるように、3dsMaxのプラグインとしました。 
      3dsMaxされ使えれば、その知識をマテリアル設定時に利用できるからです。最終目標は、建物の自動生成作業を分業化することです。 
      幾何データ作成者、マテリアル作成者、建物ルール開発者の3つのグループで分業できることができれば、データ作成の効率化がはかれると考えました。紙面の関係上、今回は単なる自動生成方法を紹介しますが、詳しい情報・教材が必要な方はご連絡ください。 
      10回のレッスンとして200ページあまりの教材として作成したものを用意してあります。 
       
      
      
        
          
              | 
           
          
            | ■図1 AnimatedCharacterツールのGUI | 
           
        
       
      
       
       | 
     
  
 
  
    
       以下のダイアグラムはImageToCityのパイプラインを図式化したものです。 
       
      4つの入力ファイルから、まず道路網で囲まれた敷地を細分化し、各区画から建物の平面図を特定し、あらかじめ容易された建物生成ルール(高さ・窓割りなどは決められた範囲内でランダムに決定するルール)で建物の幾何データを生成します(5)。 
      このとき、生成されたメッシュオブジェクトの各ファイス(メッシュを構成する最小ポリゴン)にマテリアルID(1番:芝生、2番:アスファルト、3番:壁1、4番:枠など)も自動で割り当てられます。 
      次に前もって用意された24個の建物用マテリアルの中から、ランダムに選ばれた1つを各建物に割り当てます(6)。 
      1つの建物マテリアルは10個のマテリアルID群からなっています。この仕組みによって、建物データができる前に他の人がマテリアル作成をすることが可能となります。次に1つの建物区画内のデータを1つのメッシュデータとするために、樹木・歩道・塀などをアタッチして統合します(7)。 
      最後は3dsMaxのテクスチャ焼付け機能(TextureBaked)を利用し、各建物敷地に対して1つの3DSファイルとそのためのテクスチャ画像を特定のフォルダに保存します。生成された建物が10個の場合は10個の3DSと10個の画像ファイルが生成されることになります。 
      これと同時に10個のデータの位置情報が記されたメタデータが1つ生成されます(8,9)。 
      UCwin/Roadでインポートする場合は、このメタデータを指定するだけで、すべての建物データが自動的にインポートされます。 
       
      
      
        
          
               | 
             | 
               | 
           
          
            | ■図3 ファイルエクスポートのGUI | 
           
          
              | 
           
          
            | ■図2 ファイルインポートのGUI | 
             | 
            ■図4 3dsMaxで生成された建物データ | 
           
        
       
      
       
       | 
     
  
 
  
    
       さて、それではツールの使い方をステップ順に示します。 
       
      
        - まず4つのファイルを準備します。
 
         
         - 3dsMaxを開き、メニューから"MAXScript・RunScript・・・"を選択し、"GUI.ms"fileを指定します。
 
        ―通常のMaxScript実行と同様に、UtilityタブのUtilitiesプルダウンリストから"DesignCity"を選択すると、ツールが追加されます。 
         
         - Figure2のGUIを通して1で準備したファイルを1つづつ指定していきます。
 
        ("GetRoadFile","GetSiteFile","GetZoningFile","GetDEMFile"ボタン) 
         
         - 次にFigure3のGUIを通して、1から4まで順にボタンを選択していきます。
 
        ("1:RegisterComponent","2:GenerateBuildings","3:BakeTexture","4:OutputFile"ボタン) 
         
         - データによりますが、あとはデータができるまで待ちましょう。
 
        Figure4のようなデータが作成されます。(道路と地形データは生成されません。)
        
       
      (*)各建物区画データのためのテクスチャ焼付けにはおよそ5分程度かかります。 
      10個の建物であれば、50分くらいかかると思っていたほうがよいでしょう。ここを改善するように、いま研究中であります。 
      また生成したデータをUC-win/Roadで利用する場合は、道路と敷地を再度生成する必要があります。 
       
       | 
     
  
 
  
    
      今回はAI(ラインデータ)ファイルと画像ファイル(BMP)だけから3次元都市データを自動生成するツール、ImageToCityを紹介しました。 
      生成されたデータはUC-win/Roadでフォルダ指定することで直接読み込めます。 
      次回は画像ファイル群から建物のファザードを生成するための"ツールを作成するツール"、ImageToFacadeを紹介します。 
       
       
       
       | 
     
  
 
  
    
       | 
     
    
      | 
      
       | 
     
    
       | 
     
    
       
      UC-win/Road V5.2のリリースに伴ってドライブシミュレーションプラグインの改訂を行いました。 
      UC-win/Roadドライビングシミュレータでアクティブステアリングオプションを用いて、アクティブステアリングホイルを外部から制御できるようになりました。ここで言う制御はハンドルの制御部のオープンループのトルクの入力を意味します。 
      現在UC-win/Roadから外部プログラムに提供している主なインタフェースとしてはハンドルの角度(位置)を制御する機能ですが、これに伴って、車両の自動制御の研究で必要な情報の入出力インタフェースを用意しています。 
      車両の自動制御、事故防止システムと運転手とのインタラクションの研究や、さまざまな道路と交通状況での実験が可能になります。 
       
      
      
        
          
              | 
           
          
            | ■ UC-win/Roadドライブ・シミュレータのステアリング | 
           
        
       
      
       
      この機能は主に3つの要素に構成されています。 
      
        - UC-win/Road SDKによる連携機能、SDKの連携機能のサンプルプラグイン
        
 - UPDのネットワークインタフェースによる連携機能
        
 - ドライブシミュレーションプラグインでの設定
      
  
       
       | 
     
  
 
  
    
       モータを用いてステアリングハンドルにトルクを与えながら移動量を制御します。 
      UC-win/Road側で50Hzの周波数で直接トルクの命令をハードウェアに送信し、ハンドルの現在の角度を取得する。 
      50Hzで繰り返す処理で、取得したハンドルの角度とその変化によって次に与えるべきトルクの値を計算する仕組みです。 
      ハンドルの回転軸とハンドルの重心が離れているのでハンドルが傾いている時に重力によってトルクが発生します。 
      このトルクを考慮し制御するようになっています。 
       
      さらに、ハンドルの摩擦力の設定で摩擦力を考慮し、より正確な制御を得られるようになっています。 
       
      
      
      
       
       | 
     
  
 
  
    
      SDKのAPIにある「IF8DSPlugin」を用いて、次にある関数で制御できるようになっています。 
       
      SetDirectTorqueControl 
      ステアリングハンドルの制御を有効また無効にするための関数です。 
      無効の場合は制御が不可能で通常通りの動作をしています。 
      有効の場合はSetHardwareSteeringWheelAngleの関数を用いてハンドルの角度を制御します。 
       
      SetHardwareSteeringWheelAngle 
      ハンドルの角度を制御するための機能です。 
      ここで、目標の角度および回転に使用する最大のトルクを指定します。 
      ハンドルを制御する時、設定できる最大のトルクが8Nmでかなり力強い動きで1.5から2Nmのトルクがよくしようされると思われます。 
      角度に関しては度単位で-360から+360の範囲内になります。ステアリングハンドルの制御以下の通り幾つかの機能を用意しています。 
      また、ステアリングハンドルの制御だけではなく、ドライビングシミュレーションで使用されている入力値の置き換えが可能です。 
       
      GetBrakeHardwareValue  GetThrottleHardwareValue  GetWheelAngleHardwareValue 
      この3つの関数で現在のハードウェアのブレーキペダル、アクセルペダルおよびステアリングハンドルの操作量を取得します。この関数はいつでも呼べますが値が50Hzの周波数で実際に更新されます。 
       
      OverrideAppliedBrake  OverrideAppliedSteering  OverrideAppliedThrottle 
      UC-win/Road内部でVR空間での車両の挙動を計算するために使用されている操作量を上書きする関数です。この関数を一回呼んだ後、それ以降のハードウェアの操作が無視されますので下記にある「StopApplied***Override」関数を呼んで上書き処理を解除します。 
       
      StopAppliedBrakeOverride  StopAppliedSteeringOverride  StopAppliedThrottleOverride 
      この関数でOverride-Applied***で開始した入力値の上書き処理を中止します。 
       
      GetAppliedBrakeValue  GetAppliedSteeringValue  GetAppliedThrottleValue 
      この関数を用いてUC-win/Road内部処理で実際に使用されている操作量の値を取得します。 
      入力値を上書きする場合は上書きした値を取得します。上書きが解除されている場合はハードウェアから取得した値が利用されます。 
       
       | 
     
  
 
  
    
       SDKにドライブシミュレータのハンドル制御のサンプルプラグインを提供しています。このサンプルは助手席に乗っている時に使用します。 
      UC-win/Roadが自動運転を行い、ハンドル角を計算し、1.5Nmのトルクとともにハンドルに適用しています。 
      UC-win/Roadで自動運転に切り替えるには、以下の操作を行います。 
       
      
        - 乗車
        
 - シミュレータのイグニッションキーを切る
        
 - UC-win/RoadのキーボードでEnterキーを押し助手席へ移動する
      
  
       
      ハンドル制御を有効にするには、「Tools」メニューから「Start Steering Wheel
      Control Dem…」を選択します。 
      制御を止めるには、「Tools」メニューから「Stop Steering Wheel Control Demo」を選択します。 
       
      
      
      
       
       | 
     
  
 
  
    
      DSプラグインのオプション画面で、トルク制御の正確性を良くするためにハンドルの物理的なパラメータを設定できます。 
      パラメータはUC-win/Roadのドライブシミュレータオプション画面で「UCwin/Road→Drive
      Simulator」タブでアクセス可能です。 
      以下のパラメータが変更可能です。デフォルト値はForum8東京本社にあるUC-win/Roadドライビングシミュレータに準じています。 
       
      Delay 
      新しいトルクコマンドを送信してからハンドルが反応するまでの秒単位の遅延時間。0.1〜0.3sが期待される値です。 
       
      Inertia movement 
      車輪の慣性モーメント。適用されたトルクからの角加速度計算に使用されます。 
      大き過ぎる値の場合、車輪がかなり離れて回転、角度コマンドを超えようとするので、正しい角度に収束する前に強制的に値を前後させます。 
       
      Shift moment 
      車輪が平衡(0.0度)していないとき車輪が重力に起因するモーメントの考慮に使用されます。 
      車輪の重心が車輪の回転軸上にないので、重心が回転軸に垂直的に揃っていないときモーメントが発生します。 
      この値をチェックするために、オプション画面の「Angle control test」で異なる角度に対して小さなトルクを適用することで移動中の場合の車輪の角度が加速度に影響を与えることを確認可能です。 
      どんな車輪の角度であっても一定の加速度を得るとき、「Shiftmovement」は正しい値になります。 
       
      Resistive movement 
      車輪の一定角速度を持続するのに必要な最小トルク値を設定します。この値は車輪の摩擦計測に使用されます。 
       
      
      
      
       
       | 
     
  
 
  
    
      この通信機能により別のアプリケーションによる運転シミュレーション操作の監視、制御が可能です。 
      アプリケーションはUC-win/RoadがインストールされているPC上、あるいは同じネットワークの別のPC上に必要で、UC-win/Roadと情報を送受信するためにUDPサーバ、クライアントのシステムを実装しなければなりません。 
      最終的なダイアグラムは以下の図のようになります。 
       
      
      
      
       
      ドライブシミュレーションプラグインでは以下の機能に対しUDPプロトコル経由でSDKのAPIと同様にハードウェアとのリモートアクセスが可能になります。 
       
      
        - 動作のための角度、トルクを指定することによるハンドル制御
        
 - 実際のハンドル角、ペダル入力値をハードウェアから取得
        
 - 車両力学に適用するハンドル、スロットル、ブレーキ値を取得
        
 - 他の値を車両力学に適用するためのハードウェアからの値の上書き
      
  
       
      リモートアクセスのパラメータはオプション画面の[UC-win/Road→Drive Simulator]タブで指定可能です。 
      
        - UC-win/Roadの中ではUDPサーバが動作しており、任意のIPアドレスからドライブシミュレーションプラグインのオプション画面で設定したUDPポートにくる上記1,4の機能に対するコマンドを待っています。
        
 - UDPクライアントはドライブシミュレーション中オプション画面で設定したIPアドレス、UDPポートに上記2,3の機能に対する値を連続的に送信しながら動作しています。
        
 - オプション画面によりクライアント、サーバ双方を有効、無効可能です。
        
 - UC-win/Road起動時に自動的に有効にするオプション「Activatecommunication
        by default」があります。
      
  
       
      プロトコルについて 
      全てのコマンドはANSI文字列で送信します。 
      UC-win/RoadのUDPサーバは以下のコマンドを受信します。 
       
      
        
          
            SetDirectTorque 
            Control=-1 | 
            トルク制御を有効にする | 
           
          
            SetDirectTorque 
            Control=0 | 
            トルク制御を無効にする | 
           
          
            SetHardwareSteeringWheelAngle 
            =ANGLE,TORQUE | 
            ホイールの角度コマンド送信ANGLEとTORQUEは文字列で表現された浮動小数点数値です。 
            ANGLEは度単位で定義する 
            TORQUEはNm単位で定義する 
            例:SetHardwareSteeringWheelAngle=180,1.5 | 
           
          
            OverrideAppliedSteering 
            =STEERING | 
            UC-win/Roadの車両力学に適用するハンドル値を上書きする 
            STEERINGは無次元で-1〜1の値になる 
            例:OverrideAppliedSteering=0.5 | 
           
          
            | StopAppliedSteeringOverride | 
            ハンドル値の上書きを停止し、通常の振る舞いに戻る | 
           
          
            OverrideAppliedThrottle 
            =THROTTLE | 
            UC-win/Roadの車両力学に適用するスロットル値を上書きする。 
            THROTTLEは無次元で0〜1の値になる 
            例.:OverrideAppliedThrottle=0.5 | 
           
          
            | StopAppliedThrottleOverride | 
             スロットル値の上書きを停止し、通常の振る舞いに戻る | 
           
          
            OverrideAppliedBrake 
            =BRAKE | 
            UC-win/Roadの車両力学に適用するブレーキ値を上書きする 
            BRAKEは無次元で0〜1値になる 
            例:OverrideAppliedBrake=0.5 | 
           
          
            StopAppliedBrake 
            Override | 
            ブレーキ値の上書きを停止し、通常の振る舞いに戻る。 | 
           
        
       
       
      また、UC-win/RoadのUDPクライアントは指定されたIPアドレス、ポートに以下のデータを送信します。 
       
      
        
          
            WheelAngleHardwareValue 
            =ANGLE | 
            ハンドルの実際の角度値 
            ANGLEは度単位で-360〜360の値になる 
            例:WheelAngleHardwareValue=-100 | 
           
          
            AppliedSteeringValue 
            =STEERING | 
            車両力学に適用されるハンドル値 
            STEERINGは無次元で-1〜1の値になる 
            例:AppliedSteeringValue=-1 | 
           
          
            ThrottleHardwareValue 
            =THROTTLE | 
            実際のスロットルペダルの入力値 
            THROTTLEは無次元で0〜1の値になる 
            例:ThrottleHardwareValue=1 | 
           
          
            AppliedThrottleValue 
            =THROTTLE | 
            車両力学に適用されるスロットル値 
            THROTTLEは無次元で0〜1の値になる 
            例:AppliedThrottleValue=0 | 
           
          
            BrakeHardwareValue 
            =BRAKE | 
            実際のブレーキペダル入力値 
            BRAKEは無次元で0〜1の値になる 
            例:BrakeHardwareValue=1 | 
           
          
            AppliedBrakeValue 
            =BRAKE | 
            車両力学に適用されるブレーキ値 
            BRAKEは無次元で0〜1の値になる 
            例:AppliedBrakeValue=0 | 
           
        
       
      
       | 
     
  
 
  
    
      
       
      
       | 
     
    
      | (Up&Coming '11 秋の号掲載) | 
     
    
      
      
       
        | 
     
  
 
       |  
       
        
       
      
              
        
      
       
        
        
        
        
        
      >> 製品総合カタログ 
       
        
      >> プレミアム会員サービス 
      >> ファイナンシャルサポート 
       
      
       
      
       
      
       |