ゲームプログラマー暇人日記

プロのゲームプログラマーが技術的な事から、そうじゃないことまで書いていきたいと思います。

THETA Sをブラウザから操作し、無音で写真を撮る

はじめに

この記事はRICOH THETA Advent Calendar 2015の13日目の記事です。

 

自分は歴代のTHETAをすべて持っているTHETAファンです。

左からTHETA S, THETA m15, THETAです。

f:id:hima_zinn:20151212194756j:plain

今回はTHETA SをPCと接続し、ブラウザから写真を撮る方法を解説します。

それだけではツマラナイので、THETA Sのシャッター音を無音化します。

シャッター音を無音化しますが、決して盗撮等には利用しないでください。

また、一度無音に設定すると、再度音量を上げた設定にするまで無音状態が続きます。

キュイっていうシャッター音がカワイイ感じで好きなので、自分は音量あり設定で使用しています。

PCとTHETAを接続し、HTTP通信してみる

THETAのアドベントカレンダー用の記事どうしようかなーって考えながらネットサーフィンしてたときに、こんなChromeの拡張を見つけました。

コレ使ったら、THETAに簡単にアクセスできる!って思ったので、使ってみます。

 

  • Google Chromeをインストールする

    自分は普段からChrome派です。
    他のブラウザはほとんど使いません。

  • Chrome拡張『Advanced REST client』をChromeに追加
    Advanced REST clientをクリックし、CHROMEに追加ボタンをクリック

    f:id:hima_zinn:20151212195724p:plain

  • THETA SとPCをWi-fiで接続する
    接続方法がわからない場合はTHETA Sの接続方法のサイトをご確認ください。
    スマホとTHETAの接続方法について書かれていますが、PCとTHETAの接続方法もやり方は同じです。

    f:id:hima_zinn:20151212200616p:plain

  • Advanced REST clientアプリを起動する

    f:id:hima_zinn:20151212200851p:plain


  • 下記の設定を行う。

    f:id:hima_zinn:20151212203131p:plain

  • Sendボタンをクリック
    画面下にレスポンスが表示され、下記のようにデータが取得できることがわかる
    {
        "name": "camera.startSession"
        "state": "done"
        "results": {
            "sessionId": "SID_0001"
            "timeout": 180
        }
    }

    f:id:hima_zinn:20151212203202p:plain

PCのブラウザから写真を撮る

PCのブラウザとTHETA Sの接続ができたので写真を撮ってみます。 

  • 下記の設定を行う。
    • URL
      http://192.168.1.1/osc/commands/execute
    • POSTを選択
    • Payload
      ここのsessionIdは『PCとTHETAを接続し、HTTP通信してみる』の最後でレスポンスとして取得したsessionIdを設定する必要があります。
      {
          "name": "camera.takePicture",
          "parameters": {
              "sessionId": "SID_0001"
          }
      }
    • Set "Content-Type" header to overwrite this value.でapplication/jsonを選択

    f:id:hima_zinn:20151212205534p:plain

  • Sendボタンをクリック
    『キュイ』と音が鳴り撮影が行われます。
    画面下にレスポンスが表示され、下記のように処理が進んでいることがわかります。
    {
        "name": "camera.takePicture"
        "state": "inProgress"
        "id": "1"
        "progress": {
            "completion": 0
        }
    }

    f:id:hima_zinn:20151212205632p:plain

    これでPCのブラウザからの写真撮影が可能です。
    このあとは、PCやスマホとTHETA Sを接続し、写真を確認することができます。


THETA Sのデフォルトの音量設定調べる

THETA SのAPI一覧を確認すると_shutterVolumeというAPIがあり、これでシャッター音の調整が出来そうです。

まずはじめにシャッター音のデフォルト値を調べておきます。

後でシャッター音量を戻せるようにするためです。

無音化したいだけの人は読み飛ばしてもらって構いません。

  • 下記の設定を行う。
    • URL
      http://192.168.1.1/osc/commands/execute
    • POSTを選択
    • Payload
      ここのsessionIdは『PCとTHETAを接続し、HTTP通信してみる』の最後でレスポンスとして取得したsessionIdを設定する必要があります。
      {
          "name": "camera.getOptions",
          "parameters": {
              "sessionId": "SID_0001",
              "optionNames": [
                  "_shutterVolume"
              ]
          }
      }
    • Set "Content-Type" header to overwrite this value.でapplication/jsonを選択

    f:id:hima_zinn:20151212211248p:plain

  • Sendボタンをクリック
    画面下にレスポンスが表示され、下記のようにデータが取得できる。
    シャッター音のデフォルト値は100であることがわかる。
    {
        "name": "camera.getOptions"
        "state": "done"
        "results": {
            "options": {
                "_shutterVolume": 100
            }
        }
    }
    f:id:hima_zinn:20151212211503p:plain

 

THETA Sのシャッター音を0に変更し、無音化する

無音THETA Sを作ります!

  • 下記の設定を行う。
    • URL
      http://192.168.1.1/osc/commands/execute
    • POSTを選択
    • Payload
      ここでシャッター音量を0に設定します。
      ここのsessionIdは『PCとTHETAを接続し、HTTP通信してみる』の最後でレスポンスとして取得したsessionIdを設定する必要があります。
      {
          "name":"camera.setOptions",
          "parameters": {
              "sessionId":"SID_0001",
              "options": {
                  "_shutterVolume":0
              }
          }
      }
    • Set "Content-Type" header to overwrite this value.でapplication/jsonを選択

    f:id:hima_zinn:20151212214412p:plain

  • Sendボタンをクリック
    画面下にレスポンスが表示され、正常に設定が完了したことがわかる
    {
        "name": "camera.setOptions"
        "state": "done"
    }

    f:id:hima_zinn:20151212214438p:plain

    この設定が完了後、『PCのブラウザから写真を撮る』で解説した手順で写真を取ると無音で写真を撮ることが出来ます。 

 

セッションを終了する

使ったセッションはキチンと終了しましょう。

  • 下記の設定を行う。
    • URL
      http://192.168.1.1/osc/commands/execute
    • POSTを選択
    • Payload
      ここのsessionIdは『PCとTHETAを接続し、HTTP通信してみる』の最後でレスポンスとして取得したsessionIdを設定する必要があります。
      {
          "name": "camera.closeSession",
          "parameters": {
              "sessionId": "SID_0001"
          }
      }
    • Set "Content-Type" header to overwrite this value.でapplication/jsonを選択

    f:id:hima_zinn:20151212215047p:plain

  • Sendボタンをクリック
    画面下にレスポンスが表示され、正常に設定が完了したことがわかる
    {
        "name": "camera.closeSession"
        "state": "done"
    }

    f:id:hima_zinn:20151212215220p:plain

     これでシャッター音が無音のTHETA Sの完成です。

追伸

冒頭にも書きましたが、シャッター音量の設定を行うまで無音になります。 
音量を元に戻す場合は『THETA Sのシャッター音を0に変更し、無音化する』の手順で、音量を100に設定してください。

{
    "name":"camera.setOptions",
    "parameters": {
        "sessionId":"SID_0001",
        "options": {
            "_shutterVolume":100
        }
    }
}

THETA Sでは他にも様々な設定ができます。

詳細はAPI v2 Reference (RICOH THETA S)をご確認ください。

 

明日の担当はpafuhana1213さんの『Thetaはフィギュア撮影の夢を見るか?』です。

Unreal Engine 4.10.1でLeap Motionを使う

はじめに

この記事はUnreal Engine 4 (UE4) Advent Calendar 2015の13日目の記事です。

 

今回はUE4でデフォルトサポートされているLeap Motionの使い方の記事です。

非公式プラグインを使ったLeap Motionの使い方の記事は多いのですが、公式を使ったLeap Motionの使い方の記事は少ないので書いてみます。

 

UE4でLeap Motionを扱う

かなり簡単に出来ます。

  • Leap Motion Controller Actorを探す

    f:id:hima_zinn:20151212163737p:plain

  • Leap Motion Controller Actorを追加し、いい感じの位置に配置する

    f:id:hima_zinn:20151212163800p:plain

  • プレイ!

    f:id:hima_zinn:20151212164042p:plainはい。もう手がでました!
    簡単!
    素晴らしい!

Leap Motionの情報をBlueprintからアクセスする

  •  LeapMotionControllerActor1をBlueprint化する
    場所やファイル名は適当です。

    f:id:hima_zinn:20151212165842p:plain

    f:id:hima_zinn:20151212170029p:plain

  • 作成したBlueprintを開き、LeapMotionControllerComponentを開く

    f:id:hima_zinn:20151212170148p:plain

  • 詳細の下の方にあるイベントのOn Hand Added、On Hand Removed、On Hand Updateedを追加する

    f:id:hima_zinn:20151212170229p:plain

  • 下記のBlueprintを作成し、動作確認

    f:id:hima_zinn:20151212170358p:plain


  • プレイし、手が増えるとき、手が減るとき、手が出ている間にログが出ていることを確認する

    f:id:hima_zinn:20151212170446p:plain

Blueprintから手の位置情報を取得する

  • 下記のようにBlueprintを作成してください

    f:id:hima_zinn:20151212172031p:plain

     

  • プレイすると、手のひらの位置情報を表示し続けます

    f:id:hima_zinn:20151212172053p:plain

  • 今回はGet Bone ActorでPalmを選択したため手のひらの位置情報を取得していましたが、他のものを選択するとそれぞれの関節の位置情報を取得できます

    f:id:hima_zinn:20151212172109p:plain

Blueprint Referenceには他にも色々と使い方が載っています。

詳しくはそちらをご確認ください。

追伸

今回は簡単な説明だけとなりましたが、実際にLeap Motionを使う場合は色々とクセが強いので対応が大変になります。

特に難しいのはLeap Motion内だけで独自の座標系があるのではないかという挙動が見られます。

Leap Motionを使う際はテストプロジェクトを作って、必要としている要素ができるかどうかを確かめてからの使用をオススメします。

 

明日はmenononさんの『UE4で科学可視化やってみよう ~ジオメトリキャッシュ』です

Eclipseの設定を変更してコーディング速度をあげる

ゲームプログラマーになる前はEclipseAndroidアプリを作っていました。

f:id:hima_zinn:20151122105310p:plain

 

コーディング速度をあげるための設定をイロイロとしてましたので、それについて書きたいと思います。

やり方を解説されているブログ記事の紹介だけですが、これをやっておくだけでコーディング速度がまったく違います。
むしろこの設定を行っていなかったら、以前の職場での業務量は行えなかったです。

 

 

以下、やったことなかったけど、調べてるうちに見つかった便利そうな設定

 

他にもイロイロと設定してた気もするなぁ。。。

ちょっと忘れちゃってます。

他にもオススメの設定があったら教えて下さいー。

 

あと、ショートカットも駆使してました。

ショートカットキーを駆使し、コーディングに差をつけよう[Java,Eclipse] | キャスレーコンサルティング 技術ブログ

ショートカットキーは使えるとコーディング速度が上がるので、

付箋などにメモしておくと良いと思います。
ここに載ってるショートカットはほとんど覚えてました。
あー、Jacadocの自動生成は覚えてなかったですね。
メソッドの1行上で「/**」と打ってエンターキーを押せば自動生成されるので、そっちの方が覚えやすいと思います。

 

追伸

個人的には今からAndroidアプリ開発を行うならEclipseよりAndroidStudioの方が良いと思います。

Visual Studioでタブ、全角空白、半角空白を可視化する

Visual Studio 2013での設定です。他でもできると思います。

 

  • カスタマイズ前とカスタマイズ後

これが今回見た目のカスタマイズを行う元になるソースコードです。

f:id:hima_zinn:20151112234332p:plain

これがカスタマイズ後です。

f:id:hima_zinn:20151112234350p:plain

僕は普段からタブ・空白は可視化した状態でプログラムを書いています。

タブは→

全角空白は・

半角空白は・

で表示されます。

特に全角空白と半角空白が違って見えるのが良いです。

human.cppの文字列を表示する部分の処理で

”・消去”、”・人です"、":・Hello"となっており、

全角空白と半角空白が混ざっているので、

バグがあるということがひと目でわかります。

 

プログラムは

の設定後のソースコードを使っています。

メンバ変数の色を既に変えてます。

 

  • 方法
  1. 編集→詳細→スペースの表示をクリック

    f:id:hima_zinn:20151112234642p:plain

ゲームプログラマー 暇人日記

ブログのタイトルを決めました。

ゲームプログラマー暇人日記です。

 

実はこのブログはじめてからずっとブログのタイトル何にしようか迷ってました。

一番の決め手は他のブログと被ってないことです。

『暇人』なんていうメッチャ被りやすい名前にしてしまったせいで、

ほとんどケースで被ってしまうんですよね。

 

ゲームプログラマー暇人日記』だとGoogleで調べた時に、

ブログのタイトル変更前にもかかわらず、1番目に自分のブログが出てきました。

f:id:hima_zinn:20151109232804p:plain

コレなら他の人と被ってない!

 

ってことで、ゲームプログラマー暇人日記』

これからもよろしくお願いします。

UE4でアニメーションを行う

敵に弾を当てた時に、敵が倒れるアニメーションを再生するという処理を作ったので、

その時の作業解説です。

出来上がるのはコレ。

 

  1. FirstPersonで新規プロジェクト作成。
    今回はUE 4.9.2を利用しています。

    f:id:hima_zinn:20151108210305p:plain

  2. Infinity Blade: Adversariesを作成したプロジェクトに追加

    f:id:hima_zinn:20151108210708p:plain

  3. Blueprintフォルダ作成

    f:id:hima_zinn:20151108210753p:plain

  4. アニメーションBPを追加

    f:id:hima_zinn:20151108210847p:plain

  5. 親クラスAnimInstance、ターゲットスケルトンBear_Export_Skeleton選択
    名前はAnimBlueprint_Bearにしました。

    f:id:hima_zinn:20151108211049p:plain

     

  6. AnimBlueprint_Bearを開いて、Resultを引っ張ってAdd New State Machine...を選択
    名前はState Machine Bearにしました。
    f:id:hima_zinn:20151108211412p:plain

  7. State Machine Bearを開き、Entryを引っ張って、ステートを追加を選択
    名前はIdleにしました。

    f:id:hima_zinn:20151108211725p:plain

  8. Idleを開き、アセットブラウザのExoGame_Bears_IdleをIdle(ステート)内にドラッグアンドドロップf:id:hima_zinn:20151108211925p:plain

     

  9. Resultと繋いで、コンパイル
    ここでクマが待機モーションで動いていたら想定通り。

    f:id:hima_zinn:20151108212036p:plain

  10. 倒れるアニメーションを入れる前に、レベル上に待機モーションのクマを出します。

    ブループリントクラスを追加
    親クラスはCharacter
    名前はBlueprint_Bearにしました

    f:id:hima_zinn:20151108212211p:plain

  11. Blueprint_Bearを開き、MeshのスケルタルメッシュにEnemy_Bearを設定

    f:id:hima_zinn:20151108212602p:plain


  12. AnimationにAnimBlueprint_Bearを設定
    設定後、コンパイルするとIdleモーションが再生されていればOK

    f:id:hima_zinn:20151108212718p:plain

  13. ヨー値に270度を入れておく

    f:id:hima_zinn:20151108212857p:plain

  14. トランスフォームのロケーションZを-80.0に設定

    f:id:hima_zinn:20151108213021p:plain

  15. CapsuleComponentのシェイプの高さとカプセル半径を80.0に設定
    本当は球にした方が良いけど、今回はカプセルのまま使ってます。

    f:id:hima_zinn:20151108213258p:plain

  16. レベル上にBlueprint_Bearをドラッグアンドドロップし、向きを修正する

    f:id:hima_zinn:20151108213404p:plain

  17. プレイするとIdleモーションを繰り返すクマが表示される

    f:id:hima_zinn:20151108213458p:plain

  18. AnimBlueprint_BearのState Machine Bearを開き、Death_2ステートを追加する

    f:id:hima_zinn:20151108213650p:plain

     

  19. Death_2ステートを開き、ExoGame_Bears_Attack_Death_2とResultをつなげる
    設定のLoop Animationのチェックを外す
    このチェックが付いていると、クマが死亡するアニメーションが繰り返し表示されます。

    f:id:hima_zinn:20151108213847p:plain

     

  20. IdleからDeath_2のルールをダブルクリック。
    文言はUE4が間違ってる。

    f:id:hima_zinn:20151108214041p:plain

  21. マイブループリントで変数を追加

    f:id:hima_zinn:20151108214133p:plain

  22. Integer型のLifeにして、コンパイルする

    f:id:hima_zinn:20151108214236p:plain

  23. Lifeをドラッグアンドドロップし、ゲットを選択

    f:id:hima_zinn:20151108214340p:plain

  24. 0以下と比べるようにしてつなげる
    ここでコンパイルするとクマが死ぬアニメーションが再生される

    f:id:hima_zinn:20151108214431p:plain

  25. Lifeのデフォルト値を1に変更する

    f:id:hima_zinn:20151108214545p:plain

  26. Blueprint_Bearを開き、Integer型の変数Lifeを追加してコンパイルし、デフォルト値を1にする

    f:id:hima_zinn:20151108214730p:plain

  27. CapsuleComponentを右クリックし、イベントを追加、OnComponentBeginOverlapを選択

    f:id:hima_zinn:20151108214907p:plain

  28.  ボールがあたった時にライフが0になるように設定する

    f:id:hima_zinn:20151108215501p:plain

  29. FirstPersonBPのBlueprintにあるFirstPersonProjetctileを開く

    f:id:hima_zinn:20151108215111p:plain

  30. Sphere Collisionを追加

    f:id:hima_zinn:20151108215207p:plain

  31. シェイプのサイズを適当な値に設定
    今回は22にしました。

    f:id:hima_zinn:20151108215314p:plain

  32. AnimBlueprintのイベントグラフを開く

    f:id:hima_zinn:20151108215624p:plain

  33. Try Get Pawn OwnerのRetuen Valueを引っ張り、Cast To Blueprint_Bearを選択

    f:id:hima_zinn:20151108215744p:plain

  34. As Blueprint_Bearから引っ張り、GetLifeを選択

    f:id:hima_zinn:20151108215856p:plain

  35. マイブループリントの変数Lifeをドラッグアンドドロップし、セットを選択

    f:id:hima_zinn:20151108215956p:plain

  36. 図のように各ノードをつなぐ

    f:id:hima_zinn:20151108220041p:plain

  37. プレイ
    うまくいっていれば、弾があたった時にクマが倒れてくれるハズ!

    f:id:hima_zinn:20151108220200p:plain

    f:id:hima_zinn:20151108220217p:plain

 

UE4の解説ってキャプチャが多くなって大変。。。
今回はOnComponentBeginOverlapを使って当たり判定を取りましたが、本当はApplyDamageとEvent Any Damageを使ったほうが良いです。

 

 

Oculus Rift 勉強会 関西 #02 【OcuBen関西】

Oculus Rift 勉強会 関西 #2 で発表してきました。

発表資料はSlideShareで公開しています。

 

Oculus Rift 勉強会 関西 1回目に引き続き、2回目でも発表させてもらいました。

ちなみに1回目の資料もSlideShareで公開しています。

 

togetterはこちら。

 

発表についてですが、

1つ目の発表が固めの発表だったので、

その空気を壊して笑える空気感にするのが大変でした。

自己紹介でQRコードを使うネタは使わないつもりでしたが、あまりに空気が固かったので直前に資料修正して入れました。

理由は固い空気感で発表をやりたくないからです。

全ての人間が『楽しい事が好き』だと思っています。

なので、『勉強も楽しい方がいいに決まっている』というのが自分の考え方です。

 

社外発表は何度も経験がありますし、100人規模で喋るのも3回目だったのですが

やっぱり緊張しますね。

笑いは取れたし、評判も良かったみたいで良かったです。

実は当日の朝4時半まで資料が完成してなかったので、ほぼ発表練習なしでプレゼンしてました。

金曜日には8割以上できていて前日に仕上げだけのつもりでした。

実際には土曜日にイロイロこだわってしまい、ギリギリまで資料を作っていました。

(こだわったのは主にネタ部分ですw)

もう少し発表練習の時間取れるようにした方が、もっと良い発表ができたんじゃないかと反省中。

次回以降に活かします。

 

今回の勉強会はバランスよく網羅された発表になっていたなと思ってます。

初心者向けも上級者向けもあったので、聞きに来たほとんどの人がどれかの発表は興味を持って聞けたと思います。

特に同じ内容でUnityとUnreal Engine 4のどちらも解説がされるというのが凄いなと思いました。

Unityだとこの設定、Unreal Engine 4だとこの設定という様な形です。

自分も含めて3人が両ゲームエンジンでの設定・実装方法を説明していました。

今後の勉強会でのデフォルトスタンダードになったら資料作るの大変だなぁとか考えたりしてました。

 

追伸 

発表資料の作り方ですが、毎回『見やすいプレゼン資料の作り方』を参考にさせていただいています。

自分の発表のしやすさもあるので一部は守れていない部分もありますが、

なるべくこれに準拠して資料を作ってます。

発表資料を作成する時にとても参考になるので、一度目を通しておくことをオススメします。