これは、とある金融機関(PCセキュリティがちがち、ソフトウェアインストール一切不可、装備はOffice365とメモ帳、インターネット接続に著しい制限)で戦うサラリーマンの物語である。
Power Pointで3Dをぐりぐり動かしたいんじゃ
課長からそう言われた俺は、Power Pointを立ち上げ、「挿入>3Dモデル>3Dモデルのストック」を押す。そして、ここから素敵な3Dを選択する。簡単すぎるぜ。
ぼけぇ!俺の顔写真入りの3DをPower Pointでぐりぐりうごかせるようにせぇ!
ふと気が付くと、俺は課長に怒鳴られていた。既存の3Dモデルの挿入ではお気に召さないらしい。仕方ない。次なる手段を提案するか。
「課長、Blenderか六角王(←古い)をつかって3Dモデルを作ってPowerPointで読み込めばいいですよ 」
やっぱり俺って頭いい!
じゃあ、やって。ちなみに、会社のPCにソフトウェアインストールするの禁止だからね。ルールやぶったらセキュリティ研修受けて反省文書いてもらうよ。
かくして、俺の「無理ゲー:謎の会社セキュリティをかいくぐり課長の顔社員入りの3DをPowerPointに読み込め」チャレンジが始まった。
何はともあれ、やってみよう。
Power Pointの機能で、3Dオブジェクトのファイルを読み込む機能はある。
例えば、obj形式、3mf形式、ply形式だそうだ。
このうち一つの形式を、会社のPCに入っている「メモ帳」と「PowerPoint」を使って作ることができればいいんだな。(後からわかるが、zip圧縮も使うことになる)
とりあえず、ググって情報が多そうな3mf形式を選ぶ。ここからは、「メモ帳」で3mf形式を作ることに全力を注ぐ。
情報源
3mf形式の公式情報は以下のページにあるっぽい。
でも、正直見てもよくわからん。きっと、しっかりとした情報が書いてあると思うのだが。。英語だしよくわからん。
ただ、
このページに
The 3MF Document format MUST use a ZIP archive for its physical model.
と書いてある。どうやら、3mfファイルの正体はzipファイルらしく、関係するファイルをすべて圧縮しているとのこと。これがわかれば、3mfファイルのサンプルを探して、実際に中身を見てみよう。
サンプルをあさっていたら、このページにあるようだ。
まずは、基本的な構造をさぐるために、「core」フォルダにある「box.3mf」をダウンロードしてみる。
早速中身をみていく
先ほど知った、3mfファイルの実態はzipファイルということを利用して、ダウンロードした「box.3mf」を「box.zip」ファイルにリネーム。圧縮ファイルを解凍してみる。
(あ、元のbox.3mfはコピーして置いといてね。後で使うので。)
すると中身はこんな感じ。
.
└── box/
├── [Content_Types].xml
├── _rels/
│ └── .rels
└── 3D/
└── 3dmodel.model
入っているファイルは、「[Content_Types].xml」と「.rels」と「3dmodel.model」の3つだけ。
これらのファイルはすべてメモ帳で開くことができた。
そして、「.xml」というファイルがあることからも想像できるがすべてxml形式で書かれている。これは重要なことなので覚えておこう。
「[Content_Types].xml」と「.rels」は中身を見るに、ファイル形式やら「3dmodel.model」ファイルがどこにあるかを指定しているだけなので、フォルダ構造を変えなければそのままコピーして使えそうだ。
つまりは、「3dmodel.model」さえ書き換えることができたら、自由に3Dモデルを作れそう。
3dmodel.model
早速、box.3mfの「3dmodel.model」をメモ帳で開けてみよう。
お、、、長い。。。。長いよ。
<?xml version="1.0" encoding="UTF-8"?>
<model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">
<metadata name="Copyright">Copyright (c) 2015 3MF Consortium. All rights reserved.</metadata>
<resources>
<object id="1" type="model">
<mesh>
<vertices>
<vertex x="0" y="0" z="0" />
<vertex x="10" y="0" z="0" />
<vertex x="10" y="20" z="0" />
<vertex x="0" y="20" z="0" />
<vertex x="0" y="0" z="30" />
<vertex x="10" y="0" z="30" />
<vertex x="10" y="20" z="30" />
<vertex x="0" y="20" z="30" />
</vertices>
<triangles>
<triangle v1="3" v2="2" v3="1" />
<triangle v1="1" v2="0" v3="3" />
<triangle v1="4" v2="5" v3="6" />
<triangle v1="6" v2="7" v3="4" />
<triangle v1="0" v2="1" v3="5" />
<triangle v1="5" v2="4" v3="0" />
<triangle v1="1" v2="2" v3="6" />
<triangle v1="6" v2="5" v3="1" />
<triangle v1="2" v2="3" v3="7" />
<triangle v1="7" v2="6" v3="2" />
<triangle v1="3" v2="0" v3="4" />
<triangle v1="4" v2="7" v3="3" />
</triangles>
</mesh>
</object>
</resources>
<build>
<item objectid="1" />
</build>
</model>
/
でも、落ち着いてみると、初めの何行かは「おまじない」っぽいものがあって、そのあとに
<mesh>
タグで囲まれているやつがある。そしてその中に<vertex>
タグがいくつかと、<triangle>
タグがいくつか続いている。
お、これはわかるぞ。おじさんでもこれはわかるぞーー!
Vertex = 頂点!
つまり、<vertex>
タグでは、頂点を作ってるんだな。タグの中にある、x,y,zというのもx座標、y座標、z座標を現している。
box.3mfのサンプルでは、「box=立方体」なので全部で8個の頂点(vertex)が書かれている。
ほうほう。そして、次は<triangle>
。つまり三角形ね。
タグの中には、必ずv1, v2, v3がある。これは三角形の頂点をを現しているのだろう。しかし、v1="3"のように書かれた謎の番号。3ってなんじゃ?でも、よくよくみると、この番号0番~7番まであ~るじゃないですか。
0~7ということは全部で8個!これは頂点の番号を現しているに違いない!
きっと、<vertex>
タグで書かれた頂点は、書かれた順番に0、1、2、3・・・と番号が自動的に降られていて、`'タグではどの頂点を使って三角形を作るのかを指定しているのね。
はて、でも僕の知ってる立方体は三角形ではなく、正方形が6面でできているんご。
なんで、ここには三角形が12個も定義されているんだ?
神の声
それは、正方形が2つの三角形の組み合わせで作れるからですよ
Thank You Angel!! よくわかったぜ。
修正してみる
でも、この3dmodel.modelの<vertex>
をよく見ると、立方体(サイコロ)じゃなくて直方体になっているね。
<vertex x="0" y="0" z="0" />
<vertex x="10" y="0" z="0" />
<vertex x="10" y="20" z="0" />
<vertex x="0" y="20" z="0" />
<vertex x="0" y="0" z="30" />
<vertex x="10" y="0" z="30" />
<vertex x="10" y="20" z="30" />
<vertex x="0" y="20" z="30" />
xは0か10になっているけど、yは0か20、zは0か30になっちゃっている。
これだと、x方向の長さが10、y方向の長さが20、z方向の長さが30の直方体になってしまうね。
だから、次のようにコードを直す。
<vertex x="0" y="0" z="0" />
<vertex x="10" y="0" z="0" />
<vertex x="10" y="10" z="0" />
<vertex x="0" y="10" z="0" />
<vertex x="0" y="0" z="10" />
<vertex x="10" y="0" z="10" />
<vertex x="10" y="10" z="10" />
<vertex x="0" y="10" z="10" />
修正したファイルをもう一度3mfファイルに
ここまでで、3dmodel.modelを修正し、保存することができた。
それでは、修正したファイルを使って3mfファイルを作ろう。
といっても、簡単で、解凍した(そしてその中の3dmodel.modelを修正した)boxフォルダを、zipで再圧縮すればよいだけ。
ちなみに、再圧縮しただけだとファイル名が「box.zip」になるので「box.3mf」にリネームしてあげましょう。
ここで注意!!🐻
私は7zipを使っているのですが、普通にzipに圧縮して3mfにリネームするだけだとうまくいきませんでした。(あとでPowerPointで読み込もうとしたらエラーになって読み込めませんでした。)
どうやら、圧縮するときに「圧縮レベル」を「9 - 超圧縮」にしないと、3mfとしてPowerPointは認識してくれないようですので、お気を付けを。(他の圧縮ソフトでは事情がわからないのですが、もしうまくいかないときは、7zipをお試しください)
ここで注意その2!!🐻
圧縮するときは、「[Content_Types].xml」ファイル、「_rels」フォルダ、「3D」フォルダを直接選択して、一気に圧縮!
間違っても、この3つのファイル・フォルダが入っているフォルダ(boxフォルダ)を選択して圧縮したら、読み込みの際にエラーになるので気を付けて。
そしてふと我に返る
box.3mfの構造を見てすげぇ満足したけど、俺何やってる?ここはどこ?
とりあえず、box.3mfをパワーポイントで読ませてみよう。(元のbox.3mfはとっくにzipに名前を変えて解凍してしまったといういたずら小僧は、もう一度ダウンロードしてくるか、box.zipをそっとbox.3mfに名前を変えてみよう。)
つぎに、box.3mfを読み込むぞっと。
box.3mfを選択すると・・・・
よし、ちゃんと立方体に変化した3Dモデルを入れることができたぜい!
こんなご時世にメモ帳だけで3Dモデルを作ってPower Pointにインポートするなんてワイルドだろ~
ぼけぇ!俺の顔写真入りの3DをPower Pointでぐりぐりうごかせるようにせぇ!
あ、目的忘れてた。
でも、3mfの構造がわかったから、あとはこの立方体に写真を張り付ければいいのね。
今日の業務はこれにて終了。次回へ続く・・・