2018年10月27日

steamvr.vrsettings

メモ

OpenVR advanced settingsを使ったら、Steam VRのデスクトップ機能が死んでしまった。どうやったら治るんだこれ

SteamVRのデスクトップが吹っ飛んで帰ってこなくなった件、steamvr.vrsettingsを削除して設定リセットしたらなぜか治った。

posted by gpsnmeajp at 17:12| Comment(0) | TrackBack(0) | トラブル解決

2018年10月22日

プログラミング言語について

世の中には、数え切れないほどのプログラミング言語が溢れている。
初心者におすすめの言語はあれど、最終的にはどれを覚えてもいいし、だいたい3,4言語をしっかり使い込むと、以後どんな言語でもそんなに掛からずに取り組めるようになる。
(個人的にはpythonあたりから入って、余裕があればCを覚えてほしい感がある)

それは置いておいて。
プログラミング言語を選ぶとき、何を基準に選ぶだろうか?

最終的にプログラミングの結果は、過程はどうあれ機械語に翻訳されて実行される。であるならばどんな言語を使っても過程はどうあれ最終的には同じ結果を実現できるはずである。なのに世の中にはプログラミング言語が溢れている。

数ある中で何が人を引きつけ、選ばせるのだろうか?理由はいくつかある。
一つは、言語そのものの機能だ。
これがないとその系統の言語でなければ実現できない・大変に面倒くさいというものがある。例えばC言語が未だに使われる理由である、生のメモリを扱えるポインタ。これがなければハードウェア的なことできない。またクリティカルなタイミングのためにアセンブリ言語。一部他のと被るが、CGや、仮想マシン上で動作させる必要があるなどもあるだろう。

一つは文法と支援だ。
最終的には機械語になるとしても、途中過程は人間が書く。人間はミスをする。C言語で書かれたプログラムに危険なバグが多く、アセンブリは言うまでもないのはそのへんの支援が薄いからだ。人間の振る舞いに制約を書けるのも支援、適当にしてもうまく書けるようにするのも支援。PythonやRust、Javaといった言語が広まったのはこの辺の効果がある。
※なんかjavascriptはこのへんワチャワチャしてるよね。

一つは豊富なライブラリ、そしてその支援システムだ。
コードの再利用性が高く、ライブラリが揃っていれば書く量が少なくて済む。バグも少なくなる。使っているユーザーが多ければ不具合が見つかりやすく直されやすい。
なにより、初心者が適当に書いてもわりといい感じの成果物が出来上がる。
かつてPerlとCPANが流行り、今はPythonとPipや、Javascript(node)とnpmなんかが流行る理由はこの辺もある。

最後に、環境・ランタイムの利点と制約だ。
おそらくだが、最終的な一番の理由はこれなのではないかと思う。
例えばiPhoneアプリを開発するにはSwiftかObject-Cしか使えない。Androidアプリならjavaか、Kotorinかを覚えないと細かいところがさわれない。ブラウザ上で動作させるならjavascriptしか使えない(頑張ればCも使えるけど)。マルチプラットフォームに対応させようと思うとjavaが楽。Unityで使うならC#(昔はjavascriptも使えた)。FlashAir上で動作させるならLuaしかない。

どこで、なにがしたいか。そのために何が使えるか...ではなく何を使わなければならないか。逆に言えば、環境での制約がないのなら何を使ってもいい。で、制約がない状態でどれを選ぶかと言われれば、現在活発的なユーザーと資料が多いものがいい
そして、実現したいものがなるべく楽で簡単にできるものがいい

最後のが重要で、逆に実現したいものがなるべく簡単で楽にできる環境を選ぶべきである。

自分にとってCが手に馴染んでいて、C以外使いたくないなら、Cで実現できる環境を選んで使えばいいし、なるべくコードを書きたくないなら、最先端のコード不要でほとんどのことができる、ユーザーの多い環境(Unityとか)を選んで、必要最低限のコードだけ書けばいい。

あと最後に。
よく勘違いしやすいし、環境上の制約でそうならざるを得ない場合もあるのだが、忘れないでほしいのは一つの言語ですべてを賄う必要はないということ。不得意なところは別の言語に投げてもいい。(ただしその分覚えることは増えるが)

例えば、UIはHTML+javascript、機械学習はpython、演算処理はC、プラグインはLuaのように。というもの、それらもまた結局、不得意なところ(大抵は速度面)は別の言語(たいていC)の成果物に投げている事が多い。

一つの言語を使っているように錯覚しても、DLLを使えば、最終的にはCに戻ってこれる。
(javascriptとかだとあまり頼ること少ないかも知れないけれど)
Cを学習するのが無駄にならないのは、これが理由の一つだ。
posted by gpsnmeajp at 17:22| Comment(0) | TrackBack(0) | プログラム

2018年10月11日

[ポエム]VR空間にも「スマートフォン」が欲しい

VR空間にも「スマートフォン」が欲しい。
この「スマートフォン」というのは、いわゆる現実のスマホそのものではなく、概念的なものである。
どういうことか。

皆さんは、電車内で暇な時や、他人と話している最中にふと思った調べたいことが現れた時、
あるいは、他人が作業し終わるのを待っていて手持ち無沙汰な時、何を取り出すだろうか。
大体の人はスマートフォンを取り出すと思う。

では、VR空間ではどうだろうか。VRゲームの最中なんかには暇はないが、
例えばVRChatなどでのロード待ちや、ふと他の人を待つ時、オンラインゲームでのロビーなど。
あるいは会話していて知らない単語が出てきた時。

一応、スマホ的なものは使える。
例えば(私はHTC Viveを使っているので)Steamメニューのブラウザが使える。
が、これだと、言ってしまえば新聞を目一杯目の前に広げるようなもので、会話中や
周囲の様子を見ながら使うものではない。あと操作が大変。

OVRDropという手もある。これはVR空間内にデスクトップのウィンドウを浮かべることができる。
...が、常に視界に、あるいは空間内に存在する。あと操作しにくい。

あと一つは、HMDの隙間から実際のスマートフォンを見ることだ。アホらしいが一番便利。

逆に言えば、「必要な時に取り出せる」「視界のじゃまにならない」「操作しやすい」を兼ね備えるものが中々ない。

VR空間で、どんなゲームでも使えるスマートフォン的なものを実現しようとすると以下のものが必要になる。
・コンテンツ
・表示装置
・入力装置

コンテンツは一番単純で、こう言うと何だがブラウザを乗せれば良い。
近代的なブラウザエンジンを乗せれば、HTML5とJavaScriptで概ねのことはできる。

表示装置は、とりあえずSteamVRならばOpenVR Overlayを使えば、どんなゲームでも関係なく
視界の一番手前に追加表示してくれる。

問題は入力装置だ。
スマートフォンの快適な操作性をサポートしているのは直感的なタッチパネルである。

現在のVRには2つ問題がある。
1つは、入力装置としての快適性である。
現在のVR入力機器は、手の大まかな位置を取得するにとどまっており、指の位置を細かく検出するのには向いていない。
主に親指をベースに細かい操作をするスマートフォンの再現は難しい。
ただし、タッチパッドやスティックを使って多少ゲーム的 or ガラケー的に操作することは可能かもしれない。

もう一つの、そして一番の問題点は、VR入力装置はゲームと切り離せないことである。
VRコントローラ、トラッカー、(あとキーボード、マウス、ゲームコントローラー)は、VRゲームに干渉する。
これリダイレクトして、拡張ソフトウェアでのみ扱えるようにする手段は
(かなり無理やりなものを除いて)存在しない。

スマートフォンを触っていたと思ったら歩いていた、とか、椅子に座らされていたとか、
そういった体験は現実ではありえないが、VR空間だと容易に起こりうる。

正直、この入力装置を解決すれば、簡単に実現できそうだと思っている。
誰かやってくれないかなぁ...
posted by gpsnmeajp at 20:45| Comment(0) | TrackBack(0) | 雑感