3D&バーチャルリアリティー展2018に行ってみた

6/20(水)に3D&バーチャルリアリティー展、別名「IVR」に行ってきました。
今年は東京ビックサイトの一番奥の東8で、他の機械系の展示会と別になりました。

当日は大雨でしたが朝から大盛況です。ちょうど会場の真ん中、ボーンデジタルさんのブースです。
Unityを中心に展示されていました。先月公開されたリアルな車のデモをやってました。これは動画じゃなくちゃんとリアルタイムで動いているのを実際にみることができました。
毎年の展示でお馴染みのマテリアルスキャナーxTexもありました。

今年のお目当てはこれです。NvidiaのHOLODECKです。リアルタイムCGで1つの車を複数の人と見てレビューするシステムです。さらにまだなかなか見ることができないViveProもあります。

残念ながら10:30の段階で4時間待ち!?ということで、午後から別のセミナーがり、諦めました。

今年はとにかく産業用シミュレータのオンパレードでした。
まず、東急テクノシステムさんの線路作業の安全シミュレータです。
線路で作業していて、電車が来ると安全に退避する練習のVRです。失敗するとバッドエンドが待ってます・・・

これも東急テクノシステムさんの車掌さんのシミュレータで、ちゃんと3DCGキャラが出て乗り降りを確認してからドアをしめないと、これも大変な結果が出る、というVRです。

これはBrRiseさんのフォークリフトのシミュレータ。


積木製作さんの工事現場の安全シミュレータ

今回、個人的に一押しが、同じく積木製作さんのVR+MRの教育システムです。これがまだWebサイトに情報がないので、イベントに来た甲斐があるものです。
左側の方がVRで機械の組み立てを実践します。その映像が本来は遠隔地の右の方のHoloLensのMRとして、目の前にある現実の機械部品の上に重なって見えて、指示通りに組み立てできる、というものです。

それ以外でも、お馴染みの3Dスキャナ、3Dプリンター、立体視、ドローンによる建築・地形計測など盛りだくさんです。

クレッセントさんはモーションキャプチャー、VR、大画面ディスプレイなど様々で大きなブースです。

KCCさんのDeepFrameのMRディスプレイです。背景は現実で、その手前にCGを投影して、ゴーグルなど無しで大勢でMRを楽しめます。

VRでデザインレビューする「PrronoDR」Zspace版が出ていました。これもまだネットでは無い情報ですね。

6/22(金)までやっていますので、みなさんぜひお越しください。

基礎から始める3dsmax/Python(MaxPlus)プログラミング③

さて3dsmaxのPythonも3回目です。
今回もサンプルプログラムを改造して練習してみましょう。
なぜ改造するのかというと、ここにあるサンプルはちょっと高度で長いので、「基礎から始める」には厳しいからです。

ではまず下のプログラムをご覧ください。今回はマテリアルと移動、スケールの設定です。

import MaxPlus as mp
def solidMaterial(color):
m = mp.Factory.CreateDefaultStdMat()
m.Ambient = color
m.Diffuse = color
m.Specular = mp.Color(1, 1, 1)
m.Shininess = 0.5
m.ShinyStrength = 0.7
return m
obj = mp.Factory.CreateGeomObject(mp.ClassIds.Teapot)
obj.ParameterBlock.Radius.Value = 5.0
for i in range(10):
node = mp.Factory.CreateNode(obj)
m = solidMaterial(mp.Color(0, i*0.1,0))
node.Material = m
node.Position = mp.Point3(i*5, 0,0 )
node.Scaling = mp.Point3(i*0.1+0.1, i*0.1+0.1, i*0.1+0.1)

 

これを3dsmaxのmaxscriptエディタにペーストして、CTRL+Eで実行します。

すると、ティーポットが10個がだんだん大きくなりながら色が変化して並んでいます。

マテリアルエディタを見ると・・・

ちゃんと黒からだんだん緑になる10個のマテリアルが生成され、色や鏡面反射の設定も自動でできています。

では1行づつ説明しましょう。(行数はMaxScriptエディタの画面を参考に
import MaxPlus as mp
これは前回とちょっと違います。サンプルの中のあちこちに「MaxPlus」が並んでいるので、このように書くとMaxPlusをmpで省略できるのです。

ちょっと飛んで13、14行ですが、これは前回でもやったので簡単に。ティーポットを作る準備をして、大きさを5に指定しています。この段階ではティーポットはできていません。
16~19行目ですが、
for i in range(10):
 node = mp.Factory.CreateNode(obj)
 m = solidMaterial(mp.Color(0, i*0.1,0))
 node.Material = m
pythonのfor命令ですね。インデントで17~19行を10回繰り返しています。
17行は14行で決めたティーポット「obj」を「node」に代入することで新規に生成します。この命令をfor繰り返せば、オブジェクトは自動で大量に作れるのです。

さて18行目が今回のメインです。
solidMaterialという関数を呼び出して、結果をmに代入しています。引数としてmp.Color(0, i*0.1,0)を送っています。
for命令でrange(10)なので、iが0~9に増えていきますので、i*0.1は0~0.9になりますね。3つの数字はRGBの真ん中なので緑です。

3~10行がマテリアルの設定の関数でcolorを受け取ります。
def solidMaterial(color):
 m = mp.Factory.CreateDefaultStdMat()
 m.Ambient = color
 m.Diffuse = color
 m.Specular = mp.Color(1, 1, 1)
 m.Shininess = 0.5
 m.ShinyStrength = 0.7
 return m
4行で新規の標準マテリアルを作ります。 m.Ambientが「周辺光」、m.Diffuse が「拡散反射光」で、それぞれ引数の「color」を入れてます。
m.Specular = mp.Color(1, 1, 1)は「鏡面反射光」を白に設定しています。
mp.Colorに(R, G, B)を入れれば色の指定になることが判りますね。
しかし値は0~255ではなく、0~1です。

m.Shininess、m.ShinyStrengthで「鏡面反射レベル」と「光沢」を設定しています。これまた数値が0~1です。maxだと0~100ですね。
return mは設定したマテリアルの情報を「m」として返す、ということです。

for命令でこの関数を10回呼び出すので、その度に違う緑のマテリアルを作って19行に戻って、node.Material = mで作ったティーポット(node)に設定しているということです。

20,21行で位置と大きさを変えています。
node.Position = mp.Point3(i*5, 0,0 )
node.Scaling = mp.Point3(i*0.1+0.1, i*0.1+0.1, i*0.1+0.1)
2行ともmp.Point3(x,y,z)という変数があります。色で使ったmp.Colorと同様に3つの値を入れる時に使います。
位置はXに5づつ移動、スケールは最初が0.1でそれに0~0.9を足していますね。
これでだんだん大きくなって色も変わるプログラムになるのです。

さて、何か不足してますね。そうです「回転」です。
3dmaxユーザーの方なら判ると思いますが、「コントローラ」が関わってくるので、ややこしいので、これだけ次回に説明します。

glTF exporter for MayaでWebGLはじめました

さて、今週の木曜のリアルタイムCGの回はUE4はお休みして、WebGLです。
WebGLとはWebブラウザ上で3DCGを表示してインタラクティブに鑑賞できる仕組みです。
工業製品などのプレゼンには最高なのですが、UE4やUnityから書き出すこともできるのですが、いま一つ制限とかあり面倒でした。

そこで今日のお話の「glTF exporter for Maya」です。
glTFって・・・ってちゃんとそこから説明します。以下が解りやすいです。
https://qiita.com/cx20/items/95127986f4b9fa91fe9b

簡単に言えば、3DCG用の標準フォーマットを狙ったファイル形式なのです。
V-Rayでお馴染みのKhronosが決めているらしく、それにマイクロソフトなども賛同して広めようとしているようです。さらにVTuber向けにもドワンゴが開発した「VRM」もこのフォーマットです。

ところがBlenderからしか書き出せない・・・ちょっと不便でした。そこで今日のお話のMayaから書き出すプラグインが出た!というお話です(導入が長くてすいません・・・)

まず、プラグインを「株式会社カシカ」様からダウンロードしてきます。
https://kashika.co.jp/product/gltfexporter/


Maya2017と2018があります。日本語と英語の親切なマニュアルが付いてくるのでとても有り難いです。
上の3つを指定されたMayaのインストール先にコピーするだけです。

Mayaを起動してプラグインマネージャーで確認すると、ちゃんと認識されているので、「Loaded」をONにします。


このブログやCGwrold記事でお馴染みのロボットくんです。リアルタイム用なので比較的軽いモデルです。

FBXのように選択してエクスポートします。細かいことが抜きにして今回はglb形式で書き出してみます。

Mayaのmaだと6MBがたったの133KBで約1/45になりました。
これならスマホでも使える訳です。

表示のためのプログラムや環境を用意するのは面倒なので、確認用にWebサイトがいくつかあるので、それで実験します。
この画面に、書き出したファイルをドラッグ&ドロップするだけです。

このようにすぐに表示されグリグリ回せます。
ぜひ動画でご覧ください。

背景を変えたり、ライトをセットしたり自由です。以前ご紹介したSketchFabと違うのはどこにも置けるのと、UIやインタラクションを自由に決められるということです。
次回、マテリアルやテクスチャー設定やアニメーションなど順に連載していきます。