いさぽん部屋(isapon.com)

ゲーム系プログラマによる特に方針のないブログ。技術系とカレー、ラーメンネタ多めだったはずが、最近はダイエットネタ多め。

FOVE 0 でSAOのアスナさんと会うまで

SOAのアスナさんと会うまでの道のりでございます。


VR HMD(仮想現実ヘッドマウントディスプレイ)元年

昨年は一応VR(仮想現実)元年だったらしいです。


そこまで流行った感はありませんが


やっと製品が出始めたという意味では元年と言ってもいいのかな?と。


もっとも、VRが本当に流行るのかどうかは怪しいところもありますが……


さて、俺は立体視ができるディスプレイも持っていたり


1995年くらいにはアセンブラでソフトウェアレンダラを自分で書いたりした程度には


3D好きです。


が、VR HMDはなかなか手を出さずでした。


まぁ会社が傾いていたので


お金がなかっただけなんだけどね(笑)


さて、そんなわけで収入もとりあえず安定したので


昨年末に FOVE 0 を予約しました。


フリーランスの仕事を広げるためにも


流行りかけのテクノロジーは押さえておきたいのです。


www.getfove.com

VR HMD(ヘッドマウントディスプレイ) FOVE 0 が届きました

今月の頭にFOVE0が届きました。


開封するとこんな感じです。


f:id:no-operand:20170211155856j:plain

パッケージはかなりコンパクトです。


ヘッドマウントディスプレイ(日本語で書くと「頭に乗せる映像出力装置」)本体とトラッキング(頭の位置を検出する赤外線カメラ)のふたつだけ


ViVeなんかに比べるとすごくコンパクトです(ViViのパッケージは物理的にデカイ)。


USBポートは

  1. アイトラッキング(視線検出)
  2. ヘッドトラッキング(頭の位置検出)
  3. HMD制御用

の3ポートが必要です。ノートPCだとスペック以前にポート不足な感じです。


というか、デスクトップを使っていても背面のポートを使い切ってしまう勢いなので


今回USBポートを増設しました。


4ポート増設できるカードを指すといろいろ使いやすいです。


HUBでも良いのですけど、場所を食うので……


 認識すれど映らない

公式サイトからSDKやランタイムをダウンロード&セットアップ


が、認識はされているようですがディスプレイに何も映らず。


いろいろ調べてみましたがお手上げ……


と言うのは流石に言えないお値段のもの。


設定ツールから「ログの表示」を選択。


f:id:no-operand:20170219091010p:plain

何やらエラーが出ています。


エラーとしては「InitiateConnection: Unable to send heartbeat」です。


ハートビートというのは接続先の機器が動いているかを示す応答を示す用語なので


この場合「FOVE から応答がない」ってことになります。


原因として怪しいのは黄色で出ている「Faild to find direct-mode backendm, give up」ですね。


ここで正しい動作ができていないので


そこから先の処理がうまくいっていない。


んで、怪しいところといえば……


[RNDR] Acquiring rendering backend…
[RNDR] Nvidia API found
[RNDR] AMD API found

の3行。


俺のPCはプログラムのテストのために Geforce と RADEON、さらにIntelの3つのGPUを積んでいます。


FOVE 0 の場合は内臓GPUには非対応ということで


Intel の APIは無視しているはず。


なので、この場合 Geforce(Nvidia) と RADEON(AMD) が認識されているわけですね。


で、たぶんこれが問題なんじゃないかな?と。


おそらくFOVEの中の人もこんな環境は予測しておらず


おそらく複数のAPIが見つかったら最初に見つかったか最後に見つかったものをとりあえず使う仕組みになっていると予測。


俺の場合、Geforceにディスプレイがつながっているのですが


FOVEのSDKはAMDのドライバにアクセスしているっぽい。


という仮説(笑)を立てデバイスとマネージャを開きます。


FOVEを使う間はセカンダリGPUになっているAMDを停止しておきます。


f:id:no-operand:20170219091209p:plain

一回この状態で再起動します(たぶんFOVEのドライバがAMDを捕まえっぱなしになっている)。


再起動後に設定ツールでログを表示


f:id:no-operand:20170219091006p:plain

エラーっぽい表示もなく無事に認識された模様。


 アスナ=サン ドーモ コンニチハ

そして無事、FOVEのデモアプリでソードアートオンラインのアスナさんと会うことができました。


f:id:no-operand:20170219100030p:plain

ずーっと見つめてると照れてくれます。


ソードアートオンラインのファンってわけでもないのですが


ちょっとドキっとしますね。


とりあえずこれでプログラムのテストも出来そうです。


 HMDについて思うこと

これはFOVEに限ったことじゃありませんが


とりあえずUSBポート使い過ぎです。


マシンのスペックも必要だし、USBポートも大量に使うし


キーボードなど見えないし


正直普及させるにはハードルが高いという印象です。


(値段の問題は普及すればコストが下がるのでおいておいて)


FOVEについて

視線検出はかなり便利だと思いました。


見ているところがそのまま選択状態になるので


視線=マウスカーソルのように使えます。


HMDには標準装備にすべきと思えるレベル。


難点といえば


眼鏡な人は装備できないこと。


レンズの位置が調整できないので


もしかしたら人によっては装着しにくいかも?


実際、俺の場合少し浅く装着しないとピントが合わず……


でも浅く装着すると鼻の部分から光が漏れてみたいな感じです。


まぁFOVE 0 はあくまでも開発者向けのバージョンなので


いずれ製品が出たらこの辺りは改善されると思いたいです。


ただ純粋にVRで遊びたいというなら今のところViVeがよいのかと思います。

ViVEをフルに使うなら結構部屋の広さが必要なので椅子に座って遊ぶならオキュラスのほうがいいかも?

マウスのチャタリングとArc mouseを凄く簡単に修理する方法

自宅と出向先の職場でそれぞれ別のマウスを使っています。


出向先ではMicrosoft Arc Mouseを


自宅ではLogicool M500です。


個人的にはArc Mouseが一番のお気に入りなのですが


Arc Mouse はホイールがよくダメになるという最大の欠点があります。


とはいえ、あれこれマウスを使った中でも一番しっくりきているので


毎年買い替えてました。


2008年の発売以来、ずっと使っているので


ほんと、もう10台くらい買ったと思います……


そんなArc Mouse ですが、無線マウスなので無線が干渉しやすい場所だと


思った通り動かない時があります。


我が家では特に電波の干渉が酷く(別にこのマウスに限らずほかの機器も含めて)


有線を優先的に使います(駄洒落じゃないです)。


そんなわけで、家ではLogicool M500の出番なわけです。


が、こちらはこちらで左クリックがやたら耐久性が低いとのお話があったりなんだり。


Arc Mouse のホイールの不調

Arc Mouse ですが、よくある症状として


「ホイールを回すと逆方向にスクロールする現象」があります。


これが原因で買い替えていたので、個体差の問題ではないと思います。


案の定今回もこの症状が発生。


が、もう買い替えたりはしない!なぜなら俺には修理という選択肢が増えたのだ!


そう、2年弱前のあの日にね!


www.isapon.com

とはいえ


これ、ぶっちゃけなぜ治ったのかよくわからない。


それにグリグリするのはなんだか壊しそうで怖いのです……


なんてことを思っていたら。


M500のチャタリング

今度は自宅のM500の左クリックが酷いことに。


1回のクリックのつもりがダブルクリックになったり


途中でクリックが解除されたり。


まぁとにかくマウスでの作業ができない……


とはいえ、2~3か月前にもチャタリングが発生したので


今回も前回と同じ手順で治そうと思います。


直し方は簡単。


マウスを引っこ抜いてクリック連打。


なんでもスイッチに溜まっている静電気が原因らしく


通電していない状態でクリックすることで


放電するらしい。


が、今回はアカン。改善されんぞ……


原因を探ろう!

なんかマウスを毎度都市伝説のような方法で騙し騙し使うのもな~





そこで、なぜチャタリングが起こるのか調べました。


チャタリングは簡単に言うと


スイッチの接点部分の通電が不安定になることで起こる症状。


ゴミが入ってしまったり、スイッチの金属部分が酸化(サビですね)してきたりするのが原因らしい。


つまり、この辺りをクリーニングするのがいいというわけです。


掃除!

というわけでまずはマウス2台を分解。


続いてエアスプレーでホコリを飛ばします。


ネジを飛ばさないように注意です。


そして、今回新兵器の投入。


そのなも接点洗浄剤!!!


名前もそのまんま!


接点復活剤というのもあるのですが


洗浄剤のほうが周辺パーツへのダメージが少ないらしいのでこちらを購入しました。


それではメンテナンス開始!


f:id:no-operand:20170128172145j:plain

まずは Arc mouse から。


ホイールの金属部分(写真の矢印の2か所)をエアダスキン&接点洗浄剤。


そしたら1~2分放置です(乾くのを待つ)。


f:id:no-operand:20170128172115j:plain

待っている間にM500のボタン部分(矢印の部分)に接点洗浄剤を噴射。


内部にしみこませるために、吹きかけた後にドライバーでクリックです。


こちらも同じく1~2分放置。


最後にどちらもエアダスキンでもう一度ホコリを飛ばします。


で、組み立て。


快適!

これで治ったかな~


と思って接続してみると


ほんと、今までの症状が嘘のようによく動きます。


洗浄剤はまだまだたくさん残っているので


半年後なり1年後なりまた利用できそうです。


安上がりですし、なにより「治った」という実感が得られるのが大きいです。


今回の登場物

接点洗浄剤。なぜこんなにも素晴らしいものが知れ渡っていないのか……

Arc mouse。マイフェイバリットマウス。でももう買うことはないだろう。なぜなら修理して使うからね!

マイクロソフト レーザー マウス Arc Mouse ブラック ZJA-00017

マイクロソフト レーザー マウス Arc Mouse ブラック ZJA-00017

Logicool M500。こちらも良いマウス。そこそこの値段で癖のない作り。これぞ「標準」みたに思えるヤツです。

Logicool ロジクール 有線レーザーマウス M500t

Logicool ロジクール 有線レーザーマウス M500t

林家木久蔵ラーメンを食べてみた

日本一有名なラーメンのひとつ。


でも意外と食べた人は少ない。


それって何さ?


木久蔵ラーメンだ!!


f:id:no-operand:20170101135833j:plain

というわけで、木久蔵ラーメンを食べてみました。


先日、浅草にて林家木久扇師匠がラーメンを売っておりました。


というか、木久扇師匠が出演されるときはいつも売ってるのですが。


やはり木久扇師匠は有名人なので、周りに人だかりができるんですね。


なので、なかなか買う気になれてなかったのですが


やっと手に入れました。


一応、笑点メンバーからはマズイだのいぢられていますが


なかなか美味しいという声もあったりします。


まぁ、食ってみりゃわかる!


さて、どこまでマズイのだろう?(笑)


コンセプトは「昔の東京ラーメン」

開封すると木久扇師匠のラーメンに対する思いが書かれています。


どんな内容かは買った人のお楽しみということで


ここには書きませんが


この木久蔵ラーメンのコンセプトは


昔の「中華そば(東京ラーメン)」です。


あっさりしょうゆ味。


面は細すぎず太すぎずの縮れ麺。


トッピングにノリが入っています。


ほんと、コンセプト通りのラーメンといった感じです。


東京人には懐かしい味!

一口目の感想。


「最近食べてなかったこの味!」


ほんま、これ。


昨今のラーメンブームのおかげで


東京から消えつつある


東京ラーメンの味。


「うまーーい!」というか食った後に「ふぅ」ってなる感じのアレです。


飲んだ後に食べたくなるタイプですね。


最近東京ラーメンに飢えていたので


このタイミングでこのラーメンを食べたのは


とてもよかったです。


スープも最後まで気持ちよく飲めました。


ラーメン通な人には物足りないかも?

とは言え……


最近では家形ラーメンが流行るなど


今や


ラーメン=味が濃い


という式も成り立っていると思います。


つまり


ラーメンを食べる=濃いものを食べる


みたいなところはあるわけで。


そういう面からみると


食べた後に「物足りない」とか「味が薄い」という人がいてもしょうがないのかな?と


ちなみに、すすめの調理方法ですが


麺はすぐに茹で上がるので


調理方法よりも気持ち早めに湯切りがおすすめです。


普段濃ゆいラーメンを食べているなら


スープは気持ち少し濃い目(お湯の量を減らす)がおすすめ。


と、いうわけで木久蔵ラーメンはこんな感じ

f:id:no-operand:20170108114058j:plain

想像していたものと違う?


すみません、これは唐辛子を大量に入れ


最後に溶き卵を入れてみた魔改造バージョンです。


最初は普通に作っても食べたし


写真もそっちのほうが良いのかな~


と、思ったのですが。


なんとなく「謎のベールに包まれたラーメン」というイメージが


木久蔵ラーメンにはあるのではないかと感じ


あえて魔改造した写真にしてみました。


木久蔵ラーメンの正体が気になる人は


自分で食べてみてください!


林家木久蔵ラーメン 東京下町しょうゆ味 3食入

林家木久蔵ラーメン 東京下町しょうゆ味 3食入

Amazonでも買えるんですね……。


惜しむべきは、値段の高さ……

Vulkanでハマる

ここ数年、仕事で3Dを直接扱うことがあまり多くなかったので


ちょっと勘が鈍っています。


直接というのは


自分で座標計算やらなんやらしてGPUを叩く的な意味です。


最近はライブラリが充実しているので


あまり気にせず組めてしまうんですよね。


楽に作れると面を見れば良いことなのでしょうが


ライブラリに頼っていると


基礎が抜けてしまうので長い目で見れば自分のためにはならないなと思っています。


そんなわけで昨年の年末くらいから


Direct3D12とVulkanの勉強を始めました。


Vulkan ってなんぞや?

Vulkan公式: https://www.khronos.org/vulkan/

3D APIで有名なところといえば、OpenGL ですが


OpenGLはなんせ数十年前に出来たAPIです。


アップデートを重ねて互換性を保っていますが


内部はかなり複雑になり、APIとしてのオーバーヘッドが大きくなっています。


そこで、最近のAPIの流行である


「低レベルAPI」な規格が「Vulkan」です。


OpenGL同様に、khronos group が仕様をまとめています。


対応環境

マルチプラットフォームがウリのVulkanですが


今のところ使用できるのは


WindowsとAndroid(7.0以降)、LinuxなどのUnix likeなOSです。


ちなみにAppleはどうやらサポートしない気のようです。


独自にMetalというAPIを公開していますし、そちらを普及させたいのでしょう。


個人的にはApple系のOSでもVulkanをサポートしてもらいたいところです。


対応GPU

正式にサポートしているのは AMD と nVidia です。


AMDだとR7以降、nVidiaだとKelper世代以降で対応です。


基本的には2012年以降のGPUなら対応可能です。


Intelはというと、SkyLakeとKabyLakeで対応となっています。


ただ、こちらについてはドライバーがまだBeta版になっていますので


事実上、使用できるとはまだ言い難いですね。


Direct3D12との違い

細かい違いはあるものの大きな方針はそれほど違いはありません。


ただ、APIとしてはDirect3D12のほうが洗礼されているというか


多少は扱いやすいというかわかりやすくなっています。


Vulkanはそれこそ何から何までプログラムで設定しないとならないので


「それくらいは管理してよ!」と思うところもあります。


特にパラメータの取得系がほとんどないのは厳しいですね。


基本的に全部ラップしないとならないような作りなので


手間がかかります。


まぁオーバーヘッドが極力少なくなるというメリットもあるのでしょうが……


OpenGLの時もですが、khronos groupのAPIは全体的に


設計が雑という感じがします。


……まぁそこは文句を言ってもしゃーないのですが。


特に、今回ハマっているバリア回りはかなり面倒です……


パラメータが細かすぎるっちゅーねん!


しかし面白い!

とりあえず Vulkan で画面をクリアしただけのプログラムです。


f:id:no-operand:20170103084204p:plain

よく見ると、画面の下のほうは塗りつぶされていますが


上のほうはドット模様のようになっていますね。


これ、画面のクリアの終了待ちの処理がうまくいってないからなのですが


GPUがどうやって処理しているかがよくわかります。


Windowsの場合、ディスプレイの下側から上に向かって画面を更新します。


これは単純に垂直同期を待たずに画面を更新するときに


下から上に書いたほうがチラつきを少なくできるからです。


というわけで、GPUもそれに合わせてか下から上に描画していると推測してみます。


なので、下の方だけ塗りつぶされているわけですね。


で、今度はドット模様になっている理由ですが


これはおそらく、GPUの中では複数のコアが走っているわけですが


クリア命令も複数のコアが同時に行っています。


なので、つくりとしては各コアごとに小さな描画エリアを担当し


並列に塗りつぶしを行っているわけですね。


いわゆるタイルベースな構造です。


今までのAPIだとこういったことは起こらないように


ドライバーの中身で同期をとっていてくれたので


まず見ることはできませんでしたが


D3D12やVulkanではドライバーがやってくれないので


こうした意図しない結果が簡単に起きてしまいます。


逆に言うと、そうした意図しない結果になったときに


GPUの動きがどうなっているのかがチラっと見えるわけです。


こういうのが見えるのは技術者としては楽しくもあります。


面倒でもありますが(笑)


年末ジャンボ宝くじ

あけましておめでとうございます。


仕事はそこそこ順調(言うても2月末で契約終了なのですが)です。


昨年は会社勤めというか、会社経営から再び自営業に戻った年となりました。


やっぱ自営業が合ってるなー


と。


さて、年末ジャンボ宝くじの結果です。


結論だけ先に言うと、まぁ300円が何枚か当選した程度なので


惨敗と言われても仕方ない。


というか惨敗なのですが


別に元が取れればいいやとか


そういうのを元々気にしているわけでもないので良いのです。


だって、元を取ろうとか思ったら


買わないのが一番ですからね。


年末ジャンボ結果

まずは当選番号。7億円たースゲーな。と思いつつ。


f:id:no-operand:20170101083605p:plain

注目したいのは3等の100万円。


んで、俺の結果。


f:id:no-operand:20170101082338j:plain

なんということでしょう。


あと500程度の違いで当選が1枚。


さらに、あと200程度の違いで当選が1枚。


めっちゃ惜しい!


すごく惜しい!


まぁハズレなので、ゴミなんですけどね。


いや、ほんと、夢見れました。


年末ジャンボプチ1000万円

と、今回は同時に販売されていた「年末ジャンボプチ1000万円」も買ってみました。


当選番号はこちら。


1等で1000万円


そして2等で1万円というなんともシケ……


いや、夢の無……


う、うん、まぁとにかく「プチ」な感じ。


f:id:no-operand:20170101084105p:plain

で、結果


f:id:no-operand:20170101082419j:plain

今度も500程度の違いだあああ!!!


うわああああ


惜しい!


まぁ惜しくても結果はゴミなんですけどね……


というわけで

いい夢見れました。


たぶん確率的に言っても


別にそれほど運がいいわけじゃないんですよね。


でも、こういうのは楽しんだもん勝ちということで。


何より「宝くじで(高額が)当たったら贅沢してやるぞ!」とか


そんなことを妄想している時間が楽しいわけなので。


さて、また次の宝くじが始まったら買うかー。


iOSアプリ開発するならStoryboardは使うべからず

iOSアプリ(iPhoneアプリ)の開発をする際に


xcodeでプロジェクトを作ると


標準でStoryboardを使ったビューの制御が入ります。


グラフィカルなインターフェースでUIの遷移を


設定することができるわけです。


が、使うな!と言いたいです。


今日はそんな心の叫びについてです。


移植できない

Storyboardなんてのは当然xcodeでしか使えません。


つまり、Storyboardに頼り切った開発をすると


当然、アプリの移植性は下がります。


仮にStoryboardで作った繊維をiOS以外(主にAndroid)へ移植すると


Storyboardで作ったものをプログラムで書き直す作業が必要です。


つまり、結局、プログラムを書くことに変わりなく。


そんなら最初からプログラムで書いたほうが早いわ!


という本末転倒っぷりです。


もし移植をしない(できない)のなら、Androidは非対応となります。


金。金。金。カネである。

スマホの市場といえばAndroidとiOSが2台巨頭で


時と地域によって違ったりするけど


ほぼ5:5くらいの市場だと思ってもいいくらいです。


つまりAndroidを切り捨てるということは


1億円売り上げを上がるものならば


5000万円捨てるようなものです。


まぁ、もったいない。


仮にStoryboardからプログラムコードへ


移植というか、作り直すにしても


結局二度手間三度手間で


本来よりも工数(人件費や開発期間)が伸びることになりますので


まぁやっぱりお金も時間ももったいないですね。


Storyboardを使っている奴がいたら

「あ、こいつ素人」か


「こいつ、コスト意識無いわー」


と思って、優しくしてあげましょう。


ビオトープその後。自然の力

あれから1年

アクアリウムを始めてから1年が過ぎました。


思えばあの頃は会社が大赤字で役員報酬はカット(というか0円)。


そして俺は家にあった水槽で野菜を育てよう……


というのがスタートだった気がします。


今は個人事業主として


プログラムの仕事を請け負っています。


おかげで収入も安定し


別に野菜も食べられるようになりました。


最近高いけど!


最近のお仕事

本筋とはそれますが


一応……というか、かなり有名なタイトルのゲームの開発を請け負っています。


これについては結構デスマーチ気味なのですが


自営業の俺としてはそれで体を壊すと


失業保険も何もないので


自己防衛をしている最中です。


俺もかれこれ100タイトル以上やっていますが


ここまでヒドイプロジェクトも初めてです。


この辺はそのうちブログに書こうかな?


さて、それはさておき。


ビオトープはどうなった?

1年ほど前、水槽とは別にベランダに発砲スチロールを置き


その中に水を張り


水草(アナカリス)を適当に浮かべ


これまた適当に砂利などを入れ


そして最後にミナミヌマエビを放り込みました。


ちなみにその頃の記事はこちら(笑)


www.isapon.com

www.isapon.com

写真だけ貼り付けると


1年前はこんな感じでした。


f:id:no-operand:20151031150055j:plain

そして現在。


f:id:no-operand:20161106120359j:plain

まず浮草がなくなりました。


これは単純に、冬を越えるにあたって枯れてしまいました。


そして、エビの隠れ家的なものは


なんとなく邪魔で取り除きました(笑)


で、結果ですがごらんのとおり。


アナカリスは山のように増え


写真じゃよくわかりませんが


ミナミヌマエビが大量に増えました。


軽くカップで水をすくうと


3匹くらいは入ってくるくらいに。


まぁとにかく増えました……


メンテナンス方法

さて、どうやってこの状態を維持しているか?


メンテナンス方法ですが


「水を入れるだけ」


です。


一応カルキ抜きをしていますが。


それだけ。


水替えというか


水が減ってきたら入れるだけ。


餌も入れない。


ろ過装置も入れない。


エアレーションもしない。


水温も調節しない。


ずっとベランダに放置。


水はグリーンウォーターから


すごく奇麗な透明に。


においも全然しません。


ほんと、自然の力ってすごいね……


と、思うのでした。