hackathonに参加した

はじめに

peatix.com

参加してきました。

以下感想や振り返りです。

 

 

どのようなハッカソンだったかはリンク先を見ていただくとして。

4人チームでした。

開発にはUnity + Oculus Rift(Touch)、バージョン管理にTortoiseSVNを使用。

提供された3Dモデルのアニメーション作成、音声認識の実装を担当しました。

 

 

正直VSCがまだ上手に扱えていないという部分もありましたが、なんというかどのような心持ち、姿勢で複数人開発に臨めばよいかが分からなかった(あまり口から日本語が出てこなかった)。

業務でもほぼひとりでやっていて、4人チームは初めてでした。

複数人開発をするようなハッカソンにもっと出ていった方がいいかもねという助言をいただきました。

 

買ったけどまだじっくり使っていなかったのでいい機会だと思い、VeryAnimationというUnityアセットを使ってアニメーションを作成しようとしましたが使い方に慣れるのに時間がかかってしまった。

音声認識にはGoogleSpeechAPIを使いましたがハッカソンのような場面ではオフラインでも使えるRealsenseSDKの音声認識エンジンの方が適していたかなあと今になって思います。

こういった技術選定も上手になりたいですね

 

複数人開発するにあたって思ったことを最後につらつらと。

まめにコミュニケーション取るのは大事そう。

いまから何をしようとしているのか、何をし終わったのか、何に対してどう思っているのか、きちんと表明すると滑らかにチームとしての進捗が出るような気がした。

加えて、それらを実行するにあたって各作業者にどんな細かいことでもポジティブな反応を返すのは効果がありそうだとも。

これは実際にそのようなことを実行している人がチーム内にいた。

そういったことを体験したのは初めてだったので、こんなことで褒められてにんともかんともという気持ちにはなったが、なるほどこれは自分も見習っていきたいと思った。

 

感想を書いた、という事実が欲しいだけなのでこんな感じでいいか。

プログラマーとは誰か

ちょっと書き殴りが流石に酷すぎたので後日いろいろ整えます

 

はじめに

 

「プログラムはこうして作られる プログラマの頭の中をのぞいてみよう」を読みました

 

 

普段はUnityでC#かいてる。業務でも。ほかの言語まともにさわったことない

ちゃんと言語の勉強したことないし、プログラムの考え方がしりたいなといってたらizmさんから教えてもらったので読み始めた。

紹介していただいてありがとうございます。

 

本の名前で検索をかけるといろいろ書評は出てくるが、自分の頭の整理のためにもどのような本か、かいておきたい。

 

全くプログラムを書いたことがないひとのために書かれたほんで、作者が作った言語を用いてテトリス(言っちゃった)のようなゲームを作ることを目標に、話が進んでいく。

まず専用の言語が特徴的だ。日本語である。

さらに、一般的なプログラミングの用語がほとんど出てこない。変数説明して、if文説明して、for文説明して、といった流れで進まない。

最終的に完成させたいあのゲームをつくためには、まず何をしなければいけないだろうか、というところからスタートし、「では次に何をすべきだろうか」といった風に流れが進んでいく。

さらに特徴的なことが、その話の進み方だ。良く言えば丁寧かもしれないが、おそらくほとんどの人が非常に長い・まどろっこしいと思うほど長いだろう。

特に少しでもプログラミングをかじっているひとなら、なんでそんなに冗長に書くのか。すぐ終わる説明では、と思うだろう。

例えば、ざっくりいうとfor文の説明にまるまる一章数十ページ使う。

しかも、話の流れであえて最初に不適切なプログラム例を提示することさえある。

 

ゆっくりゆっくり階段を上っている感覚を覚えた。

もともとプログラムのことが全然わかっているわけではなかったのでその階段を上るのも決して楽だったわけではない。evernoteにメモをとりながら、参考になりそうな考え方をメモしながら日々少しずつ読み進めた。

 

プログラムをつくるための考え方が知りたいと思っていた自分には合っていた。

以下改めて頭を整理する意味でも参考になるなと思った記述を軽く抜粋したい

・思い通りの動きにならなかったら、いま出ている結果から考える

・新しくプログラムを作ったさいはまず小さなプログラムで正しく書く。もし間違っていた場合、原因を探す手間が楽

・問いかけが大事。上手に変形する

 

また、本書の序盤ではいやというほどメモリをいじることになる(実用言語のメモリという概念とは少し違うかもしれない)

身の回りの人がメモリへの理解の重要さを呟いていた理由が少しわかったきがするとともに、プログラムというものの輪郭がぼんやりと見えてきた気がする。

たとえばfor文を書かずに同様の効用を持つ実装を、基本的にはメモリをいじるだけで実現する節がある。

なるほど、普段ぼんやりと書いていてるUnityC#はつまりそういうことだったのかと思った。

すこし脱線するが、本書において番地指定のメモリと名前付きメモリ(番地が自動的に指定される)を使うことになる。

UnityC#で書いているint hogeって、つまり名前付きメモリをいじっているということなのだろうか。

型を宣言したとき自動的にメモリが確保されているのだろうか。

そういえばC言語にはポインタというものがあるらしい(どうやらポインタは理解するのが難しいと風の噂で聞いたことがある)。

書いたこともないのでただの推測だが、これはつまり名前付きメモリのことではないだろうか。使うメモリの番地(アドレスと言った方が適切か)を指定しているだけなのではないだろうか。

 

多分本書に書いてある”考え方”を全て理解するにはまだ時間はかかるだろう。継続してコーディングしていく中で身に着けていくのだろうなとぼんやり感じている。

たぶん、これはスタートラインもスタートラインなのだろう。

先にも書いたがUnityC#以外まともに書いたことがないので実際のCPUやメモリの挙動といったレイヤーの話は全然分かっていない。

まだまだ知らないことがあまりにも多い。これからの道程を思うと眩暈がする。

 

ようやく最後の章も読み終わりそうだった。

「終わりに、そして感謝」と書いてあった。

かなりヘビーな本だったがようやく読み終わる、よかったよかったと軽い気持ちで読み始めた。

しかし、なんだかハッとする内容だった。

というか、これを読んだからいま記事を書こうという気になっている。

以下、軽く引用したい。

 

 プログラム作りが特殊な技術とみなされている状況を、私はずっと理不尽だと思っていた。

 読み書きは当たり前だが、そうでない時代もあったし、今でもそうでない国がある。三次方程式を解ける人は万単位でいるが、何百年か前には門外不出の秘伝だったという。

 プログラム作りも、そういうもになってしまえばいい。まともなプログラムを書ける人間が掃いて捨てるほどいて、何の自慢にもならないような世界になればいい。なぜそうならなかったのかと、ずっと思ってきた。

 

(中略)

 

 プログラムに向ていない人と向いている人の間には大きな違いがある。

記憶力がいいとか、頭が回るとか、算数ができるとか、そういう単純な話ではない。考え方の違いであり、世界の見方の違いだ。優劣というよりは性格、あるいは個性の問題である。「向いた人は勝手にできるようになるし、向いていない人にはいくら教えても無駄」という意見は良く聞くが、性格の問題と考えればそれも納得できる。

 しかし、それで済ませていいのだろうか?何か手はないのだろうか?

 ずっとそう思っていた。しかし、私の仕事は教育ではない。ゲーム作りである。何もしないまま時が過ぎた。

 

 そうしてしばらく経った2010年、九州大学の牛尼剛聡先生から、講義をやってくれないかというお話があった。

 これだ、と思った。

 私はSunaba(注:本書で使われる独自言語)を作り、授業に臨んだ。そして知った。教えても無駄だなんて、真っ赤な嘘だ。プロになるには程遠いレベルとはいえ、プログラムとは何か、どのように頭を使えばいいか、という根本を教えることは不可能ではない。

 2011年、2012年と講義を続け、私はこのやり方に効果があると確信した。もっと多くの人に試してもらおう。しかし、やはり私の仕事は教育ではない。ゲーム作りである。本を書くくらいならできるかとも思ったが、時間が取れずにまた時が過ぎた。

 

申し訳ない、軽い引用にはならなかった。

「向いた人は勝手にできるようになるし、向いていない人にはいくら教えても無駄」という意見は良く聞く

確かに自分もよく聞く。
このような意見を聞くたびちょっとつらさを感じていた。
正直昼夜淀みなくコードを書けず躓いてばかりで、自分はおそらく「向いている側」ではないだろうな、とぼんやり感じていたので。
「しかし本当にそうなのだろうか、いやもしかしたら本当かもしれない」と思っていた。
勇気づけられた。
(ここに書くのは本当にまあとんでもなく恥ずかしい話だが、)事実、本業の方で数週間かかっても結局完成させられなくて放っていた機能が、本書を9割ほど読み進めた段階で再び実装に挑戦してみたところ半日で9割がた完成させることができた。
 
 
プログラミングが楽しいと思えた。
同年代の人と比べると周回遅れもいいところ...どころのレベルの話ではないけど。
とりあえず、昨日よりはましなどうしようもなくガラクタなコードを書いていきたい。
 
最後に、改めて本書を紹介してくれたizmさんに多大な感謝を。

【Unity】音声認識についてさらっと調べてみた話

adventar.org

「雑談Slack Advent Calendar 2017」19日目の記事です。
18日目はteaeast_westさんの「絵を描く犬の話 - 腹痛につき、三千年遅れます。」でした。
えがかけるひとはすごいとおもいます。



・結論

この記事で紹介されている、Google Speech APIを使うアセットが扱いやすくて良かったです。
assetsale.hateblo.jp

以下、備忘録的にざーっと書いていきます。


・背景

HTC ViveとHoloLensで日本語音声認識したくなったので、Unityで使えるらしい音声認識エンジンについて調べることにした(現在進行形)。

 
・調査対象

 ・Microsoft Azure Bing Speech API
 ・Google Speech API
 ・Watson Speech to Text
 ・UnityEngine.Windows.Speech
 ・UnityTechnologies Speech to Text
 ・Julius
 ・Intel RealsenseSDK
 ・Dialogflow(旧API.ai)
 ・Wit.ai

 
Microsoft Azure Bing Speech API

正直わからん...
magicbullet.hatenablog.jp
tarukosu.hatenablog.com
調べると記事は出てくるのですが、自分の環境ではまだ実現に至ってないのでまだ調査中です。


Google Speech API
assetsale.hateblo.jp
この記事で紹介されているGoogle Cloud Speech Recognitionというアセットが手軽に使えて良かったです。

認識精度も今回調査したものの中で一番ではないかと思うほどでした。

 
・Watson Speech to Text
www.ibm.com
この記事を参考にさせていただいて試しましたが、こちらの環境の問題なのかうまく認識してくれず...。

 
・UnityEngine.Windows.Speech
mizutanikirin.net
qiita.com
こちらも試した環境のせいなのかなんなのか、非常に認識精度が悪い結果となりました。


・UnityTechnologies Speech to Text
bitbucket.org
どうやら実態はGoogle Speech APIやWatson Speech to Textがベースになったもののようでした。

 
・Julius
tips.hecomi.com
qiita.com
「Unity 音声認識」などで検索すると多くの記事が出てきますね。

もともとの認識精度や、精度を上げるためのチューニングの大変さから実際に使用する候補としては...ちょっときついかな...という感想です。


Intel RealsenseSDK
qiita.com
qiita.com
導入自体は手軽でした。

先述のGoogle Speech APIほどの認識精度ではありませんでした。

まずまずという感じです。

 
・Dialogflow(旧API.ai)
・Wit.ai
どうも音声認識ができるっぽいのですが情報が少なく、実際に試してみるまでには至りませんでした。

そもそもチャットボットをつくるためのサービスなので音声認識の用途で使うには不向きなのかなと。

 

・まとめ

Bing Speech API Google Speech API Watson Speech to Text UnityEngine.Windows.Speech Julius RealsenseSDK
料金 従量課金 従量課金 従量課金 無料 無料 無料
Platform WebGL以外 Windowsのみ Windowsのみ
日本語対応
オフライン使用 × × × ×
認識精度 ? × ×


...すみません急いでちょっと雑になり過ぎました。
また加筆修正するかもしれません...。



明日はkakunpcさんの「例のアレ」です。

【VR】Soundboxingのおすすめ曲を紹介します

想定する読者:Rift or Viveを所有しておりSteamを利用したことがある方

VRリズムゲーのSoundboxing、僕が一番プレイしている大好きなVRゲームです。

store.steampowered.com

 

HMDを買ったらソフトを買うお金がなくなってしまった」僕のような人間には大変うれしい798円というお値段。

 

「面白い曲どれ?」な人向けに僕のおすすめ曲を紹介します。

 

下記サイトから曲の検索、お気に入り登録などができます。

https://www.soundboxing.co

 

・お気に入り登録するとアプリ起動後マイページに曲が登録されています

(下記画像の、黄色の枠の部分を選択すると確認できます)

f:id:reokaminaga:20170730192036j:plain

 

 

ではさっそく紹介していきます(25曲あります)

 

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

www.soundboxing.co

 

 

最後に、おすすめの設定も紹介しておきます。

アプリ起動後のホーム画面、右上の歯車マークを選択すると各種設定画面に移ります。

一番下のSPEED設定を”FAST”にしましょう。

初めは脳が混乱するかもしれませんが、慣れてくるとたいへん気持ちがよいです。

(特に上で紹介した「Unity」、「気まぐれメルシィ」など)

f:id:reokaminaga:20170730194433p:plain

 

ぜひ全身を動かしてプレイしましょう!!

Soundboxingサイコー!

 

【Unity】ViveInputUtilityを使ってViveコントローラーの各種ボタンの入力を楽に受け取りたい

*とりあえず記事書く恐怖を和らげるためという名目で雑に書いています。

 

UnityでVive開発するといえばViveInputUtilityですね。
大変お世話になっています。

https://www.assetstore.unity3d.com/jp/#!/content/64219

 

このアセットを使えば、Viveコントローラーの各種ボタンの入力を楽に受け取れるようです。

業務中、Evernoteの開発メモに書き殴っている内容にほんの少し手を加えてここに貼っておこうと思います。

 

準備: 
 
using HTC.UnityPlugin.Vive;
 
を追加
 
使い方:
 
if (ViveInput.HogeHoge(HandRole.Hoge, ControllerButton.Fuga)
{
    // 処理 
}
 
// float
ViveInput.GetTriggerValue(HandRole.Hoge) : 0~1の間でどれくらいそのボタンを押し込んでいるかが返ってくる
 
// Vector2
ViveInput.GetPadAxis(HandRole.Hoge) : 触っても押し込んでもタッチパッドの座標を返す
 
// Vector2
ViveInput.GetPadPressAxis(HandRole.Hoge) : 押し込んだときだけタッチパッドの座標を返す。触っただけだと0が返る
 
HogeHoge : 状態
     GetPressDown : 深く押した
     GetPress :  深く押し続けている
     GetPressUp : 離した
 
Hoge : どのコントローラーの入力を受け取るか
     RightHand
     LeftHand
 
Fuga : どのボタンの入力を受け取るか
     FullTrigger : 音が鳴るまで押したときのトリガー
     Grip
     HairTrigger : 浅く引いたときのトリガー
     Menu
     Pad : 押し込んだパッド
     PadTouch : 触ったパッド
     Trigger
 
 
 
気が向いたら修正・加筆します。
 

アダルトVRに関してポエムをかいた

Twitterに投稿したポエム文章を、ちょっと加筆修正してここに残しておきます。

 

うーん、街で好みの人見かけるとつらくなりませんか。「嗚呼僕はこの人と懇ろになることはないんだ」みたいな絶望感に苛まれませんか。目の前の高校生カップルみて「嗚呼僕はアイツの立場に立つ(立てる)ことは何があっても一生絶対にないんだな」と思いませんか。

卑屈でいわゆる”非モテ”的発想なのは自覚してますが、その想いが解消されるのではと思ったのがVRで。だから今(アダルト)VRやってるんだと思うなあ。そういう意味でまわりのVR勢の方とはスタンス(というかVRとの向き合い方)が少し違うのではないかと感じるときがある。

で、先日も呟いたけど今のアダルトVRに足りなくて次(将来的)に求められるのではないかと思うことがあって(もちろん自分が欲しいものでもある)。「目の前の子とそういった行為に及ぶことへの強烈な文脈的納得感」がないんですよ。「え、なんで俺いまからこの子とするの?」って思いたくない(設定だから、という言葉でも片付けられたくない)。

正直具体的な行為の部分に関してはみんな手を出すだろうし、したがってその質もどんどん上がっていくでしょう。

いわゆる"紙芝居作品"で僕(ら)が得ていたような物語への没入感というか、そういうものが欲しいんですよ。VRだからこそいままでは無かったような文脈的な納得感を与えられるのではないかと思うわけです。

この”納得感”というのは具体的にどういったものなのか、それはまだ自分の中でも輪郭は見えていません。

うまく表現できないけど「え、じゃあお前アダルトVRじゃなくてもよくね?」と言われるとそうでもない。そこは結果的にえっちに至りたい。

なんというか、「とうとう(僕が学生時代)獲得することはなかった、もしくはもう2度と獲得できないかもしれない感情の振動、時間経過によって変化していく心のときめきといったようなもの」を味わいたいんですよ。具体的な行為もいいけど、そちらもVRが大活躍する場ではないかと思うわけです。

味わった"それ"も結局ウソではないかという意見には、「ウソではないかと感じる部分は個々人の妄想力や受容力によって差が出る領域でしょうね」という感想しか(いまのところ)ないです。

少し話を逸らしますが、単純なズリネタとしてのアダルトVRは存在し得るのか、存在し得るとして何時まで生き残れるのだろうかと思う時がある。僕らはスマホの存在を忘れていないかと。具体的なサイト名は挙げませんがエロ動画は違法視聴し放題だし、成人向け同人誌はコミケ当日の夜に違法アップロードされるような世の中です。

抜くことだけ考えたら今や手軽にオカズ(ここでのオカズの明確な定義は僕の怠惰により拒否します)を入手できる。スマホはアダルトVRにとってのある意味脅威ともいえるのではと感じます。

アダルトVRついでにもうちょっと話を広げます。

先日のアダルトVR体験会に展示したとき、とある大学の団体にアダルトVRの今後について意見を求められました。簡単にいうと「アダルトVRによって少子化が加速する未来がくるかもしれないし、逆にVRでの体験のおかげでいまよりも少しだけ勇気を持って異性と交流が図れる人が増える未来がくるかもしれない。どちらの未来がきても不思議ではないし、どちらも可能性は高いでしょう」と答えました。

その時は言いませんでしたが、改めて考えると上に書いたどちらの未来が実現されようとも、”基本的に”アダルトVRは僕のような非モテ、恋愛的弱者への救済策(悲観的で卑屈なニュアンスでこの言葉を使っている)にはなるだろうなという思いです。

というわけで、叶うなら僕はこの考えに対して共感を得たいと強く願うし、(もしやるならば)共感するような人と一緒にそういったものを作りたいと思う。

蓋し蛇足ですが、僕はいままで誰とも付き合ったことがないし今後誰かとそのような状態になることは全く想像できない。

 

ポエムと謳っておきながら自らの臆病さ故に言い訳を書き残しておくと、もちろん既存のアダルトVRは否定しません。 

 

以上です。

【Unity5.5.1f1】HoloLensでuGUIのScrollViewを実装する際の注意点

*追記 : Unity5.5.0p3においても有効であることを確認しました。5.6.0f3の場合はデフォルトの設定のままで問題ありませんでした。

 


q7zさんの以下の記事を見ながら、HoloLens(実機)でスクロールできるUIを作ろうとしました。

 

q7z.hatenablog.com

 

しかし、ViewPort下のContentにButtonなどのアイテムを追加してもマスクがかかない問題が起きました。

 

いろいろ調べてみるとWindowsHolographicDeveloperForumにこんな質問が。

forums.hololens.com

 

結論としては、PlayerSettingsをDebugModeにして、「Ui Use 16 Bit Depth Buffer」のチェックを外すときちんとマスクがかかりました。

 

f:id:reokaminaga:20170315152005p:plain

 

UnityHoloLens5.4.0ではNormalModeで表示されていたようです。


正直これだけのことなんですが、原因を特定するのにかなり時間がかかってしまったので、ここで詰まる人が少しでも減るようにと思い書きました。


(すみません、まだなぜこのチェックを外さないといけないかまでは調べられていません...)