VR空間でKanovaを使って、3分で自作3Dモデルを作る

VR空間で使える3Dスカルプト(彫刻)ツール、Kanovaを使って、3分でオタゴン風モデルを作りました。操作方法などは動画中で解説しているので見てみてください。

www.youtube.com

Kanovaは、2018/6/26現在、Steamの早期アクセスで無償で提供されています。いずれ有料化されると思いますが、使いやすくて良いツールです。1時間も経たずに操作はだいたい習得できます。

store.steampowered.com

VR機材は必要となりますが、2次元画面でBlenderを操作して面を少しずつ伸ばしていくよりも直感的に空中に物体を作っていくことができて、面白い体験でした。Blenderの下書き等の用途にも使える気がします。ただ、ファイルに保存した物体を再度開くと色が変になることがあったので、アプリを終了する前に、OBJファイルにエクスポートしておくとよいでしょう。File→Export→「Wavefront OBJ with baked colours (*.obj *.mtl)」から保存しましょう。

この後、Blenderにモデルを持ち込んで、ボーンをリギングして、ウェイトを入れてVRChatに持っていきます。

suna.hateblo.jp

アバターではないですが、VR空間内でGoogle Blocksを使ってVRCのワールドを作ったときの記事も、参考までに載せておきます。

suna.hateblo.jp

Oculus GoでSteamVRを起動してVRChatに入る

概要

Oculus Goと、NVIDIAのグラフィックボードを積んだWindows10のPCで、VRChatにログインする方法を説明する。ALVRというツールを使うことで、Oculus GoをSteamVRのヘッドセットとして認識させることができる。グラフィックボードは、NVENCが動作するGTX600以降が必要。なお現在開発中のツールなので、不具合があったり動作しなかったりするケースもあることはご注意を。

ALVR ClientをOculus Goにインストールする

6/13のアップデートで、Oculusストア経由でのALVRのインストールが可能となった。これにより、Oculus Goを開発者モードにしたり、adbコマンドやコマンドプロンプトからパッケージをインストールしたりする必要がなくなって、かなり導入が簡単になった。基本的な手順は下記の公式ページに書いてある通りだけど、この記事ではandroidの操作画面で説明する。

github.com

(1) スマートフォンでOculus Key配布ページを開く

ALVR Key Distribution

(2) "Get Key"を押してキーを取得し"Copy"を押す

f:id:sunasaji:20180613232335p:plain:w200

f:id:sunasaji:20180613232821p:plain:w200

(3) Oculusアプリを開き、右下の「設定」→「コードを利用」を開く

f:id:sunasaji:20180613233050p:plain:w200

(4) 「貼り付け」を押して「送信する」を押す

f:id:sunasaji:20180613233357p:plain:w200

(5) アクティブになったALVRコンテンツを押す

f:id:sunasaji:20180613233608p:plain:w200

(6) 「インストール」を押すと、端末側でインストールが始まる。

f:id:sunasaji:20180613233822p:plain:w200

(7)インストールが終わったら、Oculus Goライブラリの中に「ALVR」アプリが出ているので起動する。

f:id:sunasaji:20180614013357j:plain:w400

ALVR ServerをPCにインストールする

PCにSteamVRとVRChatをインストール

SteamゲームプラットフォームのPC向けVRシステムSteamVRと、VRChatをインストールする。

SteamVR

VRChat on Steam

再頒布可能パッケージのインストール

PCで、下記からMicrosoft Visual C++のライブラリをインストールする。vc_redist.x64.exeを入れる。

Download Microsoft Visual C++ 2015 Redistributable Update 3 from Official Microsoft Download Center

ALVRのZIPをダウンロードして展開する

今回使わせていただいたのは、下記にあったALVR-v2.0.2.zip。

github.com

(1)ダウンロードしたファイルを開いて「圧縮フォルダーツール」→「すべて展開」を押す

f:id:sunasaji:20180613235312p:plain:w500

(2)「展開」を押す

f:id:sunasaji:20180613235451p:plain

ALVRを起動する

(1)ALVR.exeを起動する。

初回起動時は、ALVR\driver\driver_install.batを実行してALVRドライバをSteamVRにインストールする必要がある。SteamVRをC:\Program Files (x86)\Steam\steamapps\common\SteamVR以外に置いている人はbatを編集して対応する。あとWindowsのユーザ名が日本語になっていると動かないことがあるようなので、その場合は英語のユーザ名で試してみよう。

(2)オレンジ色の警告が出たら「詳細情報」をクリックする。

f:id:sunasaji:20180614000115p:plain:w400

(3)「実行」をクリックする。

f:id:sunasaji:20180614000212p:plain:w400

(4) 「Start Server」をクリックする。

f:id:sunasaji:20180614000406p:plain

ここで下記のメッセージが出たが、私は何回か繰り返し「Start Server」を押したら先に進められた。

f:id:sunasaji:20180614000523p:plain

ここでうまくいかないケースもある模様。NVIDIAグラボのドライバを最新にする、再頒布可能パッケージを入れた後でPCを再起動する、等を試してみるとよいかも。

(5) 緑色の「Server is alive」マークが出るので、ヘッドセットでALVRクライアントを立ち上げる。

f:id:sunasaji:20180614000924p:plain

(6) Oculus Goが見つかったら「Connect」を押す

f:id:sunasaji:20180614001044p:plain

見つからなかったら、ファイアウォールでUDP9944番ポートが塞がれていないか、確認する。

接続できたら、広大なVR空間がOculus Go内に広がるはず。

ルームスケールセットアップ

デフォルトでは、視線の位置が床上0cmになっていて、地面に埋まって周囲を見回す形になる。 ルームスケールセットアップをすると、視線の高さを調整できるので、やっていく。

(1)SteamVRの小ウィンドウの「SteamVR▼」を押す。

f:id:sunasaji:20180614001600p:plain

(2)「ルームセットアップを実行」を押す。

f:id:sunasaji:20180614001648p:plain

(3) 「立位のみ」を押す。

Oculus Goは角度は検知できるけれど、前後左右の移動は検知できないので、「立位のみ」を選ぶ。

f:id:sunasaji:20180614001847p:plain:w500

(4)「次へ」を押す。

Oculus Goは外部センサが不要なので、トラッキングの確立は気にしなくてよい。

f:id:sunasaji:20180614002251p:plain:w500

(5)ヘッドセットを正面に持って「中央を測定」を押して「次へ」を押す

f:id:sunasaji:20180614002426p:plain:w500

(6)ここが大事。床から目までの長さをcm単位で設定する。

座ってプレイするなら110cm程度、立ってプレイするなら身長マイナス15cm程度を指定すれば大きな違和感はないと思う。指定したら、「床をキャリブレーション」を押して「次へ」を押す。

f:id:sunasaji:20180614002619p:plain:w500

(7)セットアップ完了。

f:id:sunasaji:20180614003057p:plain:w500

(8)SteamVRのHomeが表示されるので、壁のアプリ一覧にある「VRChat」を起動する。

f:id:sunasaji:20180614004012j:plain:w500

起動できない場合は、PCの右下のタスクトレイにあるSteamアイコンをクリックして、直接「VRChat」を起動する。

(9)VRChatをたのしむ

右手は動くけれど、現状では物を掴んだり移動することには使えないようなので、キーボードのWASDキーで移動したり、マウスクリックで物を持ったりすることが必要になる。ただ、ヘッドセットによる「入った」感は、デスクトップモードとは別種の体験になると思う。あと、2000円位の無線ゲームパッドを使ったら、キーボード+マウス+OculusGoコントローラよりは操作感が良かった。ELECOMのJC-U3912Tを使った。

www.amazon.co.jp

その他

・バグなどを見つけた場合は、公式のGithubのIssuesに、発生環境や条件などを投稿するとよいかもしれません。英語が望ましいですが、開発者のpolygrapheneさんは日本の方のようなのでたぶん伝わると思います。技術ある方は改良に協力するのも良い貢献になると思います。

Issues · polygraphene/ALVR · GitHub

・映像の遅延やブロックノイズがひどい場合、以下が効く可能性があります。外部との通信速度より、PC-Oculus間の通信遅延の方が影響が大きいと思われます。

  • PCとルータの間を有線にする
  • 無線ルータを高速なものにする。
  • ルータの11ac対応機能を有効にする
  • ルータを再起動する

・動かない、エラーが起きた、うまく動いた、などの情報は、画面等のスクショをtwitter等に投稿すると、誰かが反応してくれるかもしれません。ハッシュタグ「#ALVR」を使ってみましょう。

・Oculus Go内の画像や動画を撮りたい場合、Oculus内のメニューで「シェア」→「写真を撮る」or「録画」から取得できます。保存された動画などはFacebook投稿経由で回収するか、Goの開発者モードをOnにすればUSBケーブル経由で内部ストレージにアクセスし、「VR-Headset」→「oculus」→「Screenshots」or「VideoShots」から取ってくることができます。

開発者の方に感謝

モバイル型VR機器とPC用VRを連携させる技術は、世界でも何社も取り組んでいる激戦区です。その分野で、短期間で高品質な映像を楽しめるツールを開発してリリースされたpolygrapheneさんと協力者の皆様は偉大です。

もし面白さを感じたり、感動したりしましたら、ぜひ開発者に還元しましょう。Paypalで寄付を募っているようですがトップページのリンクは日本からは直接送金できないようなので、Paypalにログインして作者のメールアドレス宛に送金するのが良いかと思います。下記の最下部をご参照ください。

ALVR/README-ja.md at master · polygraphene/ALVR · GitHub

映像について

・冒頭の映像に出演しているモデルは、UTAU向けのフリーの音声ライブラリ「櫻歌ミコ」のキャラクターです。歌やMMDの作品が多数作られており素敵なプラットフォームです。またVRChat等でのアバター使用を許して下さっています。

miko35.info

・3Dモデルは、 キツネツキ@VR一般通行人 (@_kitsune_tsuki_) | Twitter 様が作成されたMMDモデルです。大変かわいらしく、VRChatの日本コミュニティで大人気となっており、私も使わせて頂いています。

bowlroll.net

・ワールドは、Pirai@VRChat (@p_i_r_a_i) | Twitter 様が作成されたアバターワールドです。VRChat初心者でも素敵なアバターを借りられるワールドで、雰囲気も格好良いのでVRChatで行ってみることをおすすめします。

Google Cloud Datalab で Jupyter Notebookを試す

Jupyter Notebookは、Pythonのプログラムを書いて、実行結果や可視化結果をノート的に記録するために便利なWebアプリ。実行環境を作るのは面倒だと思っていたところ、Google Cloud Platformで一定額までは無償で使えるそうなので試してみた。以下のクイックスタートの手順を参照した。

https://cloud.google.com/datalab/docs/quickstarts

いくつか設定をするだけで、ブラウザでシェルを起動できて、Notebookの立ち上げまでできた。自分で環境を作るよりお手軽で、さすがクラウド。 下記のページも参考にした。

www.topgate.co.jp

とりあえず試したかったのは、twitterのtimelineから数個以上のfavのあるものを抽出することだけど、類似のことを既にやってる人がいたのですぐに実行できた。

qiita.com

もちろん、機械学習の練習にも便利そうなので、今後活用する予定。

cpuminerを2.6.0に更新

1/29のBitzeny2.0リリースのため間宮さんのbitzenyのマイニングプログラムが更新されていて、更新が要るとのこと。ハッシュレートも向上する。

cryptomamiya.com

WindowsではリリースページからZIPを頂いて、minerd260.exeを使うように変更すればOK。 アンチウイルス偽陽性判定が出たら、検出対象から除外するよう設定する。

Linux(Ubuntu)では以下でコンパイルできた。

git clone https://github.com/macchky/cpuminer.git
cd cpuminer
./autogen.sh
./configure CFLAGS="-O3 -mavx -msse4.1 -msse4.2"
make

ちなみに最初はCFLAGSに「-mavx -msse4.1 -msse4.2」を入れずにやったところ、以下の警告が出ていた。

In file included from yescrypt-best.c:4:0,
                 from yescrypt.c:22:
yescrypt-sse.c:37:2: warning: #warning "Consider enabling SSE4.1, AVX, or XOP in the C compiler for significantly better performance" [-Wcpp]
 #warning "Consider enabling SSE4.1, AVX, or XOP in the C compiler for significantly better performance"
  ^

SSE4.1, AVX, or XOPのCPU命令を有効にするコンパイラオプションを付けると良いとのことで、付けてやったらうまくいった。 私の環境(Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz x 2socket)では、ハッシュレートが1.14~1.17KH/s から、1.22~1.24KH/s に向上した。

Awesome Miner で採掘効率の良い仮想通貨を自動採掘する

仮想通貨の採掘難易度(difficulty)や交換レートはしばしば変動する。そこで、採掘難易度やレートを取得して、採掘効率の高いアルゴリズムと通貨を選んでマイニングすれば、同じマイニング機材でもより多くの仮想通貨を得ることができる。Awesome Minerはそれを自動でするためのツールだ。

マイニングプール側にも、採掘アルゴリズムごとに採掘効率の良い仮想通貨を算出してくれるプールがある。ZpoolやMining Pool Hubがこれらの機能を持っているようだ。ただしZpoolはAwesome Minerで使うと採掘効率の表示がおかしいと書いてあるブログがいくつかあったので、私はMining Pool Hubを使ってマイニングすることにした。

以下のページが参考になった。

クイックスタートガイド3 - PukiWiki

Awesome Minerの詳細情報がよくまとまっているWikiサイトで参考になる。 有効化するアルゴリズムなど、参考にした。

Switching interval (minutes)は30分にした。

Power cost (USD/k...)は、後述するけど東電の26円/kWhをドルに換算して0.23を指定した。「26円は何ドル」とかでGoogle検索すると簡単にわかる。

noziru-storage.net

こちらのブログ記事にもインストールやウォレット開設の話があり、わかりやすく参考になった。

これらを参考に、アルゴリズムごとのハッシュレートと、電気代(Power Cost)を登録して、Online Services 設定画面(右側)で Mining Pool Hub による Profit Switching を「Yes」に設定した。

f:id:sunasaji:20180121010327p:plain

これによって、左側の「Online Services」の「Revenue/Profit」が高い順にアルゴリズムがソートされるようになり、定期的に、一番上の効率の良いアルゴリズムで採掘が開始されるようになる。 上の図の場合、Equihashが効率が良いようだ。

そして、各アルゴリズムで採掘効率の良い仮想通貨は、Mining Pool Hub が自動で選択してくれる。実際にどの通貨が採掘されるか確認するには、MPHのトップ→ Mining Pool Hub I Home で、使っているGPU種別(NVIDIA等)をクリックして、アルゴリズム名の右側の欄を見ればよい。下の図の場合、Equihashのアルゴリズムで掘ると、Zclassicの仮想通貨が掘られることがわかる。

f:id:sunasaji:20180121010854p:plain

それがわかったら、Mining Pool Hub のサイトのトップで、左側のサイドバーの通貨名 (この場合、Zclassic) をクリックして通貨の Pool を開き、更に左側サイドバーの「Dashboard」をクリックすると、その通貨を採掘している自分の Hash rate が表示されるはず。下記の場合、541.00Hash/s で採掘できていることがわかり、安心して良いということになる。

f:id:sunasaji:20180121011635p:plain

ちなみに私は、採掘した通貨は自動でMonacoinに変換して、0.5Monaが貯まったらオンラインウォレットに振り込みされるように設定している。 私の持っているGTX1070だと、1日にだいたい0.5Monaは掘れるので、毎日振り込み通知が確認できて楽しいので。 Monacoinにしたのは、単純に私の好みだから。メジャーなBitcoinとかにしておいても良いかもしれない。

いちおう、ざっくりとしたGPU採掘の収益を書いておこう。 昨年12月末頃に採掘を始めて、ほぼ毎日0.5Monaが振り込みされてきている。年末年始の数日は採掘止めてて、1/21までの稼働は約14日間。残高は7.85Mona。いま1Monaは約950円なのでおよそ7500円位(1日約500円)の収入になる。

一方で使った電力量は、1月から付けているエコワットの値を信じると39kWhで、私の自宅の電力消費量だと東京電力の従量電灯Bの電力量料金、「第2段階料金:120kWhをこえ300kWhまで」に相当しそうだったので26円/kWhとして計算すると、1014円掛かっていることになる。一方で、パソコンの電源が約300Wなのでこの値で電力消費していたと考えると、0.3kWh x 24時間 x 14日 とすると 100.8 kWhで、もしここまで電力を使っていたとしても、約2600円で、黒字は確保できているはず。

www.tepco.co.jp

今の時点では、GPU分だけで半月で4900円から6500円程度の収益となっていそう。 放置しているだけで小遣いが入るという意味では良いけれど、副収入としてはショボいというのが正直なところかな。 本格的なマイニングリグでグラボ何十枚も走らせていたらそれなりの利益も得られるかもしれないけれど、電気代が高い日本でグラボも高騰している時に手を出すのは大変そうなビジネスという気もする。

BitzenyのマイニングプールをHogepoolに変更

今までBitzenyのマイニングに LA Bitzeny Pool を使っていたけれど、ハッシュレートが集中しすぎていて分散してほしいとの呼びかけがあった。特定のプールにハッシュレートが集中すると、通貨自体への攻撃が理論上可能となって、通貨自体の信頼性にも問題が出るということのようだ。これからbitzeny掘る人はLA Bitzenyプールは避けようね。

こちらにもまとめがあって参考になる。

www.braveryk7.com

移住先は、Hogepoolにすることにした。AWSを8台使って冗長化しているとのことで運営の方が本気っぽく、トップページの障害報告もこまめに載っていて安心なので使わせて頂くことにした。プールへの寄付は1%で運用していくことにします。

Hoge Pool - Bitzeny Pool - Home

2018年の抱負

twitterに書いたことをこちらにも書く。

中国語上達

HSK4級は取りたい。できれば5級。

語彙力と発音については、まずはiKnowやHelloChineseのような学習アプリや単語帳で2000語程度までは聞いて理解できる程度にはなると思う。

文法は今年前半に書籍の快速マスター中国語を何周かやって覚えたい。

会話については方法を考え中。映画等の楽しめるコンテンツを音声と字幕を中国語で聞いて言い回しに慣れるか。対面やオンライン会話で実際に使うことも、実力を付けるには必須と思う。できれば中国語でしか交流できない友人を作れると良いかもしれない。

やっておきたい理由はいくつかある。

今後、世界標準語は英語と中国語になる。外交力も経済力も中国の存在感は大きくなっている。特に技術者は脅威を感じていると思う。確かに優秀な中国人は英語ができるし、良い情報は英語にもされるだろうけれど、最新の一次情報は中国語で、信頼のネットワークを通じて回される。情報流通の観点で、中国語ができることは第一の関門になる。

幸い日本語は中国語を基に育った言語で今でも漢字を多用するし、文字を見て意味が推測できる。これは実はかなりの強みで、非中華圏の人が中国語を理解する際の障壁になるのだけれど、日本人は最初からその素養がある。生かさない手はない。

一方で日本人にとっては発音、簡体字、文法が障壁になりやすいと思う。アプリや音声シャドウィングやボイスレコーダーである程度は対策できると思うけど、どこかで人のフィードバックも入れたい。将来的には簡単な仕事や日常会話や、歴史地理や政治を含んだ議論ができるのが理想。

技術力と実装力の向上

マイクロフレームワークを使ったフロントエンドのデザインや開発、テストを含んだ再利用可能なコーディングとGithub活用、トレースやパッチ解析等のカーネル技術向上、データシート見て回路実装したりデバドラ開発したり等は練習したい。

やるだけではなくて、見やすく応用しやすい形で記録して、他人から見える作品リストを育てることが大切。雇用の流動性や事業の流動性も上がるし、技術者も言われたことをやるだけでは意義のある仕事を残しづらくなっている。自分自身にわかりやすいラベルが付けられるのが望ましい。

履歴書に企業名とか部署名しか書けないのはまずくて、どの規模のプロジェクトでどんな貢献をしたか、いつどのように面白い作品を世に出したか、その証拠は公開Webでどこで見られるか、が問われる。私の場合はOSSへの貢献とかVR開発とか、作品と本が世に出せれば理想的。

構想力と拡散力の向上

未来の構想をわかりやすく表現して、人の行動をスムーズに促せるようにするためには表現力と媒体と伝達方法が必要で、磨くと更に面白いことができる予感がしている。一人の力には限界があるが故に、面白いことには皆で取り組めれば楽しいと思う。