読者です 読者をやめる 読者になる 読者になる

ぷらこあ

雑記/ゲームアイデア帳/成果物ぺろり

第3回UnlimitedHandハッカソンに参加しました

unlimitedhand.connpass.com

参加しました! 久しぶりのイベント参加で楽しかったー(ˊ꒳ˋ*)

ハッカソンでやったこと

  • (1) UnlimitedHandの紹介
  • (2) 開封/セットアップ
  • (3) Unityサンプルプロジェクトの体験
  • (4) 各自開発

(1) UnlimitedHandの紹介

www.youtube.com

  • H2L株式会社の開発した腕に巻きつけて利用するデバイス
    • VR/AR Gameのコントローラーからスタート、"体験の共有" を目指す
    • 例えば、プロの演奏する楽器の指の動きの再現
  • 最近ではNHKサイエンスZEROで紹介
  • UnlimitedHandで大まかに出来ること
    • (1) インプット: 内側のフォトセンサーによるジェスチャー認識
    • (2) アウトプット: 電気刺激による深部感覚の表現
      • 筋や腱、関節から伝達される感覚
      • 手の位置、重みや抵抗
      • e.g) 手に鳥が乗っている感覚の再現

(2) 開封/セットアップ

(3) サンプルプロジェクトの体験

  • サンプルプロジェクトをUnity上で実行
    • 以下のような内容 (動画撮ればよかった…ぐぬぬ)
      • まず、腕を下げてキャリブレーション
        • 指を動かした時の変化を感知しやすくするため
      • 指を引鉄を引く様に動かして銃を発砲
        • はじめは少し関係ない手の状態でも発砲してしまう
        • ただ何回もやる毎にゲーム側でいい感じに閾値を調整してくれるっぽい
          • (人によって個体差があるから広めに初期値を設定している…?)
      • 電気刺激により発砲の反動をフィードバック

(4) 各自開発

  • (参加者の傾向もあり) 説明を重視して、ここの時間は1.5時間程度
  • 手を握った/開いた時のフォトセンサーの値を見つつ調整
    • TODO: コード周りやハマりどころは後でQiitaに書く…はず

感想

  • 電気刺激やばい!!
    • 刺激によって手首や指がピクッと動くのを体験!
    • これは結構個人差あるっぽい
  • ゆっくりじっくり触ってみたいデバイス
    • 8つのフォトセンサーの組み合わせでどの指や手首動きと連動しているか判定する
    • ちょっと時間内に見切れなかったので、もうちょい色々試したい
  • いろんな分野の人が関心を持つ
    • 医学/アートの観点から興味を持って参加している人がいた
    • VR/ARコントローラーの視点に留まらない可能性のあるデバイス
  • 色々聞ける
    • 回路も担当したH2L代表の岩崎さんが直々に講師を務めてくださった
    • 懇親会もあったので、今後の展望など気になる人も色々聞ける感じ
    • というわけで、多分第4回もあると思うので、興味ある人、とりあえず触って見たい人、おすすめです!

まべ☆てっくvol.3 Unityのお道具箱 に参加しました

概要

marv-tech.connpass.com

togetter.com

  • 参加しました(ˊ꒳ˋ*)
  • 株式会社マーベラスさん主催の勉強会です!
  • 会社独自でやってる取り組みや仕組みオープンにしてくださるのとても嬉しい…!!

うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移

資料

www.slideshare.net

目的

  • 人数増加を見越して悩まずに画面/機能を量産可能な仕組みである
  • 導入時にルールが少なく説明しやすい
  • 実装時に他の実装から真似でき、担当者が入れ替わってもパッと分かる

Playmaker + uGUI を使用した画面遷移

  • Playmaker
  • ページ構成
    • Scene入れ替え方式
    • ただし1つのSceneに対し1つのGameObjectのみを配置
      • HomeSequenceというGameObjectにてステート管理を行う
      • PlaymakerFSM + シーケンスマネージャ
  • Playmakerを使ったステート管理
    • グラフィカルなステートマシンとして利用
      • ステートの配色でグルーピングを行う等工夫
    • Playmaker上で使用するアクションは基本CallMethodのみ
  • 各ステートで行うこと
    • シーケンスマネージャに用意したメソッドをCallMethodで呼ぶ
    • UIPrefabのInstantiateや状態管理など
  • UIPrefab
    • UI要素はPrefabに格納した状態で用意する
    • UIHome / UIMenu / UIHeader … etc
  • 画面内で発火したイベントの処理について
    • 子から親にイベントを伝搬し、その結果から子に指示/

作業フロー

  • 仕様書: 企画
  • 仕様確認: 全員
  • UIPrefabの作成: デザイナ
    • UIPrefab作成用のシーンを用意し、解像度などの設定をCanvasに適応しておく
  • UIPrefab修正 : エンジニア
  • スクリプト開発: エンジニア
  • FSM開発: エンジニア

Unityパッケージ管理について本気出して考えてみた

株式会社キッズスター / もんりぃさん

導入

  • 新規プロジェクトを作る際に自作のライブラリ入れる
  • でもUniRxとTexturePackImporterに依存してるぞ
  • AssetStoreからダウンロードマネージャ開いて … めんどい!!!!!
  • 依存関係を解消してくるライブラリ作ってるよ

upm

github.com

  • npmを使用したパッケージ管理ツール
  • 依存管理の仕組みはnpmに乗っかる
  • イベントシステムはUnity向けにカスタマイズ
  • 事前準備
  • アセット群を npm publish する
  • プライベートなリポジトリ(レジストリ)で管理する
    • npm Enterprise
    • Vardaccio
  • 実行
  • npm i -S ${name-of-package} でインストールしつつpackage.jsonの生成

モバイル向けAnimation/AnimatorのTIPS

UnityTechnologyJapan 山村さん ( テラシュールブログ椿さん )

Mecanimについて

Animatorに関するTips

  • ステートマシンを整理する
    • MecanimはGUIで1キャラクターを作り込めるが複雑になりがち
    • サブステートマシンでまとめる
      • 注意: Exitに出た時に次のステートが存在しない場合、最初のステートに戻ってしまう
      • 明示的に任意のステートに割り振らなきゃいけない
    • ブレンドツリー使う
  • 日本のゲームの場合、色々なキャラがいる
    • 1体のキャラを作り込むのではなく、モーションを微調整する
    • AnimationControllerが大量にできてしまう
    • 理想はAnimationControllerを汎用的に使い回すこと
      • リグを合わせる
        • Humanoid: HUmanoid同士ならアニメーションは共有可能
        • Generic: ボーン構造が一致すれば使える
  • 基本となるAnimationContollerを作り込む
    • AnimationOverrideContollerでアニメーションを上書き
    • 注意: 構造が異なるステートマシンがあると問題になる
      • 余裕を持ったアニメーションコントローラーを作る
      • PlayableAPI を使う
        • ダイナミックにAnimationClipを実行する
        • AnimationControllerのブレンドもできる
        • Unity5.6で変更入ったので注意

パフォーマンスの話 / モバイル向けのあれこれ

  • モバイルには色々制約がある
    • 100MBの制限
      • ダイナミックに配信する仕組みが必要
    • IO/CPU/GPUが遅い
      • ロード時間の短縮とGPU負荷の軽減が必要
      • 削れるところは削りましょう
  • ApplyRootMotionを使用しない
    • 無駄なCPUを結構使う
    • AnimationContoller内で合成するLayerを減らす
    • Transion を増やしすぎない
      • PlayやFadeで代替する
  • AnimatorのついたGameObjectを非アクティブにしない
    • Animatorが持つメモリやStateMachine等を破棄する
      • 再度有効にした時に再構築される
    • Animatorコンポーネントをdisabledにする
  • 見えないアニメーションは再生しない
  • そもそもSkinnedMeshRendererを減らす
    • qualityもできれば減らす
  • Animationのキーフレームを減らす
  • OptimizeGameObjectを使用する
  • AssetBundleでAnimationをUnloadしないで使い回す

LTメモ

Hot Reloading on Unity Editor

資料: Hot Readloading on Unity Editor

技術書展へのお誘い

pub.fieldnotes.jp

techbookfest.org

techbookfest.org

Unityで『ニーア オートマタ』の義体システムっぽい機能を作る

  • UnityとNCMBで作る話

qiita.com

使ってみようTimeline

tsubakit1.hateblo.jp

www.shibuya24.info

nn-hokuson.hatenablog.com

サムザップテックナイト vol.2に参加しました

sumzaptechnight.connpass.com

  • 参加しました!(ˊ꒳ˋ*)
  • ちなみに前回のサムザップテックナイトvol.1は @ryuzee さんの「強いチームの作り方」の話でした

www.ryuzee.com

Unityでの絵作りにおける挑戦的表現 / パフォーマンスチューニングとのベストバランス

はじめに

www.youtube.com

ゲーム絵作りの基本

  • ゲーム機で絵を出すには?

それぞれの役割

  • アーティスト
    • ゲームイメージを固める
    • モデル/イラスト/アニメーションを実際に制作する
  • プログラマ
    • アーティストが作ったデータを適切に表示する
    • 表示する為のデータ仕様を作成/提示
    • アーティストの手の届きにくい部分のグラフィック処理
      • ライティング処理
      • ポストフィルタ
    • ハードウェアの制御が必要
      • グラフィック処理は関連するハードウェアが多い

CPU/GPUの基本動作

  • CPU: ゲーム処理
  • GPU: 絵を描く処理
  • フレーム
    • 垂直同期のタイミングが一定 (1/60秒が主)
    • 1秒間のフレーム数がfps
    • 1/60秒動作の時は60fps
  • 処理落ち
    • ゲーム処理が1フレームに収まらない場合、無駄に待ち時間が発生する
    • GPUの処理落ちもありうる
  • 今回はGPUに着目

GPU負荷軽減

  • シェーダ
    • 3Dオブジェクトの描画
      • 頂点シェーダ
        • 頂点に対して座標変換を行う
        • ポリゴン1つに対して3回
      • ピクセルシェーダ
        • 塗りつぶすピクセル数だけ処理を行う
        • 高負荷になりやすい
  • DrawCall
    • 1フレームにおいて必要なオブジェクトを部分部分1つずつ書く
    • この回数をDrawCall数と呼ぶ
    • UnityではFrameDebuggerで確認出来る
  • 負荷計測
  • ゲーム仕様との最適化
    • 「削る」って単語がドライなイメージ
      • 極論何も描かれないのが一番軽い
      • それは本当にゲームの演出として適切か?
    • 仕様を見極めてバランスを取るための提案
  • 背景
    • 動的なライティングを行うか?
      • オープンワールドはリアルタイムに天候変化
      • そうでないときは頂点カラーなどに焼き付けておけば軽い
      • それともUniyならライティング焼き付けを使う?
    • 影を受けるかどうか?
      • 受けると重い
      • 平面限定なら丸影にする
  • ポストフィルタ
    • けっこう負荷になりがち
    • 標準のポストフィルタを使うと高負荷になりがち
    • 複数使用していないか?
    • 自作する勇気
      • 元の負荷が高いので大きな軽減が見込める

思い込みを無くす

  • グラフィックプログラマは司令塔みたいなもの
    • 思い込みで指示を出さない
  • 「半透明は重い」「DrawCall数はとにかく減らせ」
    • 本当に…?
  • 半透明
  • DrawCall
    • e.g) Shaderの中で部分UVスクロール
      • 部分適応外の部分もUVスクロールしない、という判定
      • マテリアル(DrawCall数)増やして処理を狭めた方がGPU的には優しい

チャレンジ処理

まとめ

  • 絵作りに関わる人間
  • 思い込みで指示を出さない
    • なんでそうなるのかを知っておく
  • 技術チャレンジについて
    • 積極的にやる
    • 商品としての完成度アップや宣伝になる

FAQ

  • Q, グラフィックプログラマの育成は?
    • 人材少なめ、若手がいない
    • ポストフィルタ辺りから触ってもらうのが楽かもしれない
  • Q. 最近のグラフィックのレンダリングの流れはデザイナーも知らないとポテンシャル出せない、一方で教えるのはしんどい
    • 好きにさせてる事は多い
    • あまりにも多かったら減らす処理を入れる
    • 逐次確認して説明している

感想

  • この分野、最近関わりを持つようになったのに対し、全然知識ない状態だった
  • そのタイミングでの今回の話は、かなり敷居の低い所から話してくださり、良い導入になった
  • 思い込みの件、実測しないとデザイナーさんにも効果伝わらないし、完全に耳が痛かった
  • シェーダはやるやる言ってて中々踏み出せてないのそろそろどうにかせなアカン