第3回UnlimitedHandハッカソンに参加しました
参加しました! 久しぶりのイベント参加で楽しかったー(ˊ꒳ˋ*)
ハッカソンでやったこと
- (1) UnlimitedHandの紹介
- (2) 開封/セットアップ
- (3) Unityサンプルプロジェクトの体験
- (4) 各自開発
(1) UnlimitedHandの紹介
- H2L株式会社の開発した腕に巻きつけて利用するデバイス
- VR/AR Gameのコントローラーからスタート、"体験の共有" を目指す
- 例えば、プロの演奏する楽器の指の動きの再現
- 最近ではNHKのサイエンスZEROで紹介
- UnlimitedHandで大まかに出来ること
- (1) インプット: 内側のフォトセンサーによるジェスチャー認識
- (2) アウトプット: 電気刺激による深部感覚の表現
- 筋や腱、関節から伝達される感覚
- 手の位置、重みや抵抗
- e.g) 手に鳥が乗っている感覚の再現
(2) 開封/セットアップ
開封の儀 #UnlimitedHand pic.twitter.com/LxahFRKbpd
— 青木とと(ˊ꒳ˋ*) (@lycoris102) 2017年4月22日
- 3万5000円するUnlimitedHandを1人1つレンタル!
- UnlimitedHand開発に関するドキュメント/ライブラリは以下にまとまっている
- セットアップでやったことは以下の通り
- UnlimitedHand References:How to use at first with Arduino
- ゲルパッドの貼り付け (気泡取り) が最大の関門
(3) サンプルプロジェクトの体験
- サンプルプロジェクトをUnity上で実行
(4) 各自開発
第3回UnlimitedHandハッカソン楽しかった!手を開くと何かを飛ばしつつ、振動が来る感じのやつを作りました! #UnlimitedHand pic.twitter.com/JPXul75fTB
— 青木とと(ˊ꒳ˋ*) (@lycoris102) 2017年4月22日
- (参加者の傾向もあり) 説明を重視して、ここの時間は1.5時間程度
- 手を握った/開いた時のフォトセンサーの値を見つつ調整
- TODO: コード周りやハマりどころは後でQiitaに書く…はず
感想
- 電気刺激やばい!!
- 刺激によって手首や指がピクッと動くのを体験!
- これは結構個人差あるっぽい
- ゆっくりじっくり触ってみたいデバイス
- 8つのフォトセンサーの組み合わせでどの指や手首動きと連動しているか判定する
- ちょっと時間内に見切れなかったので、もうちょい色々試したい
- いろんな分野の人が関心を持つ
- 医学/アートの観点から興味を持って参加している人がいた
- VR/ARコントローラーの視点に留まらない可能性のあるデバイス
- 色々聞ける
- 回路も担当したH2L代表の岩崎さんが直々に講師を務めてくださった
- 懇親会もあったので、今後の展望など気になる人も色々聞ける感じ
- というわけで、多分第4回もあると思うので、興味ある人、とりあえず触って見たい人、おすすめです!
まべ☆てっくvol.3 Unityのお道具箱 に参加しました
- 概要
- うちではこうやってます!UI構築ルールとPlaymakerを使った画面遷移
- Unityパッケージ管理について本気出して考えてみた
- モバイル向けAnimation/AnimatorのTIPS
- LTメモ
概要
- 参加しました(ˊ꒳ˋ*)
- 株式会社マーベラスさん主催の勉強会です!
- 会社独自でやってる取り組みや仕組みオープンにしてくださるのとても嬉しい…!!
うちではこうやってます!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
- npmを使用したパッケージ管理ツール
- 依存管理の仕組みはnpmに乗っかる
- イベントシステムはUnity向けにカスタマイズ
- 事前準備
- アセット群を npm publish する
- プライベートなリポジトリ(レジストリ)で管理する
- npm Enterprise
- Vardaccio
- 実行
- npm i -S ${name-of-package} でインストールしつつpackage.jsonの生成
モバイル向けAnimation/AnimatorのTIPS
UnityTechnologyJapan 山村さん ( テラシュールブログ の 椿さん )
Mecanimについて
- Mecanim (以下の機能の総称)
- Animator
- AnimationController
- AnimationClip
- 細かくできること
Animatorに関するTips
- ステートマシンを整理する
- MecanimはGUIで1キャラクターを作り込めるが複雑になりがち
- サブステートマシンでまとめる
- 注意: Exitに出た時に次のステートが存在しない場合、最初のステートに戻ってしまう
- 明示的に任意のステートに割り振らなきゃいけない
- ブレンドツリー使う
- 日本のゲームの場合、色々なキャラがいる
- 1体のキャラを作り込むのではなく、モーションを微調整する
- AnimationControllerが大量にできてしまう
- 理想はAnimationControllerを汎用的に使い回すこと
- リグを合わせる
- Humanoid: HUmanoid同士ならアニメーションは共有可能
- Generic: ボーン構造が一致すれば使える
- リグを合わせる
- 基本となるAnimationContollerを作り込む
- AnimationOverrideContollerでアニメーションを上書き
- 注意: 構造が異なるステートマシンがあると問題になる
- 余裕を持ったアニメーションコントローラーを作る
- PlayableAPI を使う
- ダイナミックにAnimationClipを実行する
- AnimationControllerのブレンドもできる
- Unity5.6で変更入ったので注意
パフォーマンスの話 / モバイル向けのあれこれ
- モバイルには色々制約がある
- ApplyRootMotionを使用しない
- 無駄なCPUを結構使う
- AnimationContoller内で合成するLayerを減らす
- Transion を増やしすぎない
- PlayやFadeで代替する
- AnimatorのついたGameObjectを非アクティブにしない
- Animatorが持つメモリやStateMachine等を破棄する
- 再度有効にした時に再構築される
- Animatorコンポーネントをdisabledにする
- Animatorが持つメモリやStateMachine等を破棄する
- 見えないアニメーションは再生しない
- AnimatorのCullingModeを変更する
- CameraのOcculusionCullingでもOK
- そもそもSkinnedMeshRendererを減らす
- qualityもできれば減らす
- Animationのキーフレームを減らす
- Keyframe Reductionを有効にする
- OptimizeGameObjectを使用する
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- GameObjectの数が減って起動が早くなる
- SkinnedMeshのコストが減る
- Unityに配置したモデルをアニメーション向けに最適化する - テラシュールブログ
- AssetBundleでAnimationをUnloadしないで使い回す
LTメモ
Hot Reloading on Unity Editor
資料: Hot Readloading on Unity Editor
技術書展へのお誘い
Unityで『ニーア オートマタ』の義体システムっぽい機能を作る
- UnityとNCMBで作る話
使ってみようTimeline
サムザップテックナイト vol.2に参加しました
- 参加しました!(ˊ꒳ˋ*)
- ちなみに前回のサムザップテックナイトvol.1は @ryuzee さんの「強いチームの作り方」の話でした
Unityでの絵作りにおける挑戦的表現 / パフォーマンスチューニングとのベストバランス
はじめに
ゲーム絵作りの基本
- ゲーム機で絵を出すには?
- アーティストだけではなくプログラマも必要
それぞれの役割
- アーティスト
- ゲームイメージを固める
- モデル/イラスト/アニメーションを実際に制作する
- プログラマ
- アーティストが作ったデータを適切に表示する
- 表示する為のデータ仕様を作成/提示
- アーティストの手の届きにくい部分のグラフィック処理
- ライティング処理
- ポストフィルタ
- ハードウェアの制御が必要
- グラフィック処理は関連するハードウェアが多い
CPU/GPUの基本動作
- CPU: ゲーム処理
- GPU: 絵を描く処理
- フレーム
- 垂直同期のタイミングが一定 (1/60秒が主)
- 1秒間のフレーム数がfps
- 1/60秒動作の時は60fps
- 処理落ち
- ゲーム処理が1フレームに収まらない場合、無駄に待ち時間が発生する
- GPUの処理落ちもありうる
- 今回はGPUに着目
GPU負荷軽減
- シェーダ
- DrawCall
- 1フレームにおいて必要なオブジェクトを部分部分1つずつ書く
- この回数をDrawCall数と呼ぶ
- UnityではFrameDebuggerで確認出来る
- 負荷計測
- Unity: GPU負荷を測りにくい
- XCode: GPUFrameCapture (OpenGL ES Frame Debugger)
- 何回も見るのもしんどいので何が重いか何となく知っておくと良い
- ゲーム仕様との最適化
- 「削る」って単語がドライなイメージ
- 極論何も描かれないのが一番軽い
- それは本当にゲームの演出として適切か?
- 仕様を見極めてバランスを取るための提案
- 「削る」って単語がドライなイメージ
- 背景
- 動的なライティングを行うか?
- オープンワールドはリアルタイムに天候変化
- そうでないときは頂点カラーなどに焼き付けておけば軽い
- それともUniyならライティング焼き付けを使う?
- 影を受けるかどうか?
- 受けると重い
- 平面限定なら丸影にする
- 動的なライティングを行うか?
- ポストフィルタ
- けっこう負荷になりがち
- 標準のポストフィルタを使うと高負荷になりがち
- 複数使用していないか?
- 自作する勇気
- 元の負荷が高いので大きな軽減が見込める
思い込みを無くす
- グラフィックプログラマは司令塔みたいなもの
- 思い込みで指示を出さない
- 「半透明は重い」「DrawCall数はとにかく減らせ」
- 本当に…?
- 半透明
- 「いけにえと雪のセツナ」グラフィック解説(第1回・フロー編)
- Cutoutシェーダについての項目を参照
- カットアウト/パンチ抜き vs 半透明
- GPUによっては半透明に対しての負荷が軽いケースも
- 「いけにえと雪のセツナ」グラフィック解説(第1回・フロー編)
- DrawCall
- e.g) Shaderの中で部分UVスクロール
- 部分適応外の部分もUVスクロールしない、という判定
- マテリアル(DrawCall数)増やして処理を狭めた方がGPU的には優しい
- e.g) Shaderの中で部分UVスクロール
チャレンジ処理
- 雪を凹む表現
- Unityでのリニアワークフロー処理
- チャレンジして発信した方がアピールになる
- 最近は技術が売りになる
- 技術ブログやセミナー等
- 1タイトルで1つくらいチャレンジ
- 最近は技術が売りになる
- 敷居が高い?
まとめ
- 絵作りに関わる人間
- アーティスト/プログラマ
- 思い込みで指示を出さない
- なんでそうなるのかを知っておく
- 技術チャレンジについて
- 積極的にやる
- 商品としての完成度アップや宣伝になる
FAQ
- Q, グラフィックプログラマの育成は?
- 人材少なめ、若手がいない
- ポストフィルタ辺りから触ってもらうのが楽かもしれない
- Q. 最近のグラフィックのレンダリングの流れはデザイナーも知らないとポテンシャル出せない、一方で教えるのはしんどい
- 好きにさせてる事は多い
- あまりにも多かったら減らす処理を入れる
- 逐次確認して説明している
感想
- この分野、最近関わりを持つようになったのに対し、全然知識ない状態だった
- そのタイミングでの今回の話は、かなり敷居の低い所から話してくださり、良い導入になった
- 思い込みの件、実測しないとデザイナーさんにも効果伝わらないし、完全に耳が痛かった
- シェーダはやるやる言ってて中々踏み出せてないのそろそろどうにかせなアカン