2011年8月5日金曜日

Eagle3D + POV-Rayをもっと活用してリアルな完成イメージ図を得る

Eagle3Dって何だっけ?

Eagle3Dは、EAGLEで設計した基板データから写真で撮影したようなリアルな3次元CG画像を作る事のできるツールです。
実際に基板製造をする前に完成イメージ図が得られますので、好んで使用しています。

リアルな3次元CG画像を得るためには3次元モデルが欠かせませんが、EAGLEに標準で添付されているライブラリの多くに対応しているのもEagle3Dが人気の理由の一つになっています。

裏を返すと、標準で添付されていないような自作ライブラリなどの部品は、生成された3次元CG画像に含まれないことになります。
何を隠そう私も先日まで「面倒だなぁ。」とか「良いんですよ、基板の感じが掴めれば。」とか思う事にして、自作ライブラリに対するケアは全くしていない状態でした。
そして、自作ライブラリだけ歯抜けになっているとかっこ悪いので、「部品を載せない」設定にして出力です。

ですから、以下のように何か足りない寂しい出力になっていたわけです。


しかし、所詮は四角や丸の多い電子部品の3次元モデル。
POV-Rayのスクリプトを実装するのもそんなに難しいはずがありません。

基板だけの出力に甘んじている現状にも我慢できなくなってきたので「もっと活用してリアルな完成イメージ図を得る」という目標を立てて実践する事にしました。

Eagle3Dの処理構成

Eagle3Dの処理構成についておさらいしてみましょう。


大まかにみると2段階の構成になっていて、EAGLE上でPOV-Rayで実行するレンダリング用スクリプトファイルを生成し、POV-Rayで実際にレンダリングを実行するという形になっています。

整理すると
  • EAGLE側:部品のパッケージ名とレンダリング処理の関連付け。
  • POV-Ray側:レンダリング処理の実行。
ということになります。

コンポーネントの追加

EAGLE

Eagle3Dを展開するとulpディレクトリがあります。
この中にある3dusrpac.datというファイルがユーザパッケージ情報を定義することのできるファイルとして用意されています。
ここにパッケージ名とレンダリング処理を関連付けるための記述を1行追加します。

A-551UB:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:DIODE_LED_7SEG_A551UB(::

上記の場合、「A-551UB」というパッケージと「DIODE_LED_7SEG_A551UB」というレンダリング処理が関連付けられた事になります。


これでEAGLE側の準備は完了です。
早速Eagle3DのULPを実行してPOVファイルを生成します。

POV-Ray

POV-Ray側は指定されたレンダリング処理に対する実装が必要です。
Eagle3Dを展開したディレクトリにあるe3d_user.incがユーザ拡張用に設けられたファイルです。

先ほどDIODE_LED_7SEG_A551UBというレンダリング処理と結びつけたので、ここにマクロとして実装します。

#declare e3d_environment = off;

#macro DIODE_LED_7SEG_A551UB(value)

    // ピンオブジェクトを定義する。
    #local leg = object{
 cylinder {<0,-3,0>,<0,1,0>,0.25 texture{col_silver}}
    }

    // コーナーを作る。
    #local corner = object{
 box {<0,0,0><2.5,1,2.5> pigment{White}}
    }

    union{
 // ピンを配置する。
 object{ leg translate< -5.08,0,7.935>}
 object{ leg translate< -2.54,0,7.935>}
 object{ leg translate<     0,0,7.935>}
 object{ leg translate<  2.54,0,7.935>}
 object{ leg translate<  5.08,0,7.935>}
 object{ leg translate< -5.08,0,-7.935>}
 object{ leg translate< -2.54,0,-7.935>}
 object{ leg translate<     0,0,-7.935>}
 object{ leg translate<  2.54,0,-7.935>}
 object{ leg translate<  5.08,0,-7.935>}

 // 本体を作る。
 box {
     <-6.35,1,-9.5>,<6.35,8,9.5> pigment{White}
 }

 // 4つのコーナーを配置する。
 object{ corner translate<-6.35,0,-9.5>}
 object{ corner rotate<0,90,0> translate<-6.35,0,9.5>}
 object{ corner rotate<0,180,0> translate<6.35,0,9.5>}
 object{ corner rotate<0,270,0> translate<6.35,0,-9.5>}

 // 本体の上面に7セグメントLEDの画像ファイルを貼る。
 box {
     <-6.35,8,-9.5>,<6.35,8.1,9.5>
     pigment{
  image_map{png "a551ub.png" once}  rotate<90,0,0> scale<12.7,0,19> 
  // 左下に画像を貼ってから全てのオブジェクトを移動させて中心にもっていく。
  translate<-6.35,0,-9.5>
     }
 }
    }
#end

こんな風に2つのファイルを編集するだけで、手軽に自作コンポーネントに対する3次元モデルを生成できるようになります。
部品面の描画を記述するのが面倒なら、部品をデジタルカメラなどで撮影し、その映像を貼りつけるだけで構いません。

先ほどの例では以下のような画像を部品本体に貼りつけています。


上記の手順を経て得られた出力画像を見てみましょう。


これで先日までの基板だけの完成イメージよりもリアリティを感じられるようになりました。

動画

POV-Rayではレンダリング用のiniファイルを作ってアニメーションを生成するための複数画像ファイル生成ができるようになっています。

例えば、以下のようなiniファイルを作ってPOV-Rayで使用してみます。

Initial_Frame = 1
Final_Frame = 360
Initial_Clock = 0
Final_Clock = 360
Cyclic_Animation=off

ここでポイントとなるのは、POVファイルの変更です。
clockという変数は描画毎にカウントアップされる値で、これを基板の回転変数に入れる事で基板を回転させて見る事ができるようになります。
先ほどのiniファイルでは「初期クロック=0」、「最終クロック=360」としました。


今回はPCBをX軸を中心に回転させてみました。


画像は複数枚のBMPファイルになって出てきます。
これを動画に変換してみたものが以下です。


動画にすることで更に実在する物体として認識しやすくなりました。
基板を製造に出す前に「どんな感じになるのかなぁ。」と体感したい時に便利ですね。

更なる応用も可能

今回は手始めに自作部品に対するレンダリングについてのみ触れました。
実はPOV-Rayのレンダリングスクリプトをもっと有効に活用すれば、任意の表示パターンを作るようにできたりします。
これを使えば取り扱い説明書の画像を作ったり、オペレーションガイドのような動画を生成したりすることもできるでしょう。
使いこなせば従来ではできなかった品質をドキュメントの領域でも発揮できるかもしれません。

0 件のコメント:

コメントを投稿