第7回テックヒルズにいってきました。

Unityを触ったり、簡単なシェーダー書いたりしてるうちに描画処理への関心が高まってきた。ゲームとかグラフィックスの分野は、一定以上のものを作るために比較的コアな知識がいる一方で、結果がキャッチーで分かりやすい。ゲームにはあまり興味がない私だが、ゲームエンジンブームである。先日、「Playgroundハッカソン」に参加してからというもの、ますます興味が湧いてきている。

そんなわけで、「Game Engines」がテーマの第7回テックヒルズに行ってきた。

以下が公開されているスライドへのリンクだ(一部、公開が確認できていないものもある)。

  1. 「Unity2DとnewGUIについて」安藤 圭吾さん(ユニティ・テクノロジーズ・ジャパン)
  2. 「Aiming開発ゲームの裏側」牧野 克俊さん(Aiming)
  3. 「cocos2d-xおよび開発ツールについて」清水 友晶さん(TKS2)
  4. 「 enchant.jsの野望 9分コーディングライブ」 清水 亮さん(ユビキタスエンターテインメント)
  5. 「イントロダクション」 &「Playgroundの描画仕組み」「マルチPF対応ゲームエンジン内のAndroid対応」ロマン・ピコアさん(KLab) ・中澤 慧さん(KLab)
  6. 「次世代ゲームエンジンの比較」浦田 祐輝さん(CROOZ)

内容をまとめようかと思ったが、とりあえずはEmacsのorg-modeで殴り書き(殴り打ち?)したメモを貼っておく。

* 2013年11月12日 第7回テックヒルズ

** オープニングトーク
*** What is Techhills

** 「Unity2DとnewGUIについて」安藤 圭吾さん(ユニティ・テクノロジーズ・ジャパン)
*** Unity4.3
**** 今週から来週に公開。
**** 日本語リリースノートはもう少し先。
*** Unity2D
**** New 2D Workflows
**** 2D Platformer
**** 2D Tool Kit
**** 物理エンジン「Box2D」
**** Rigidbody2D
**** コライダー
**** 3Dと同時に使用できるが、互いに影響しない。
**** SpriteEditor、TexturePacker完備。
**** Spriteのアニメーション。
**** アニメーションイベント、状態遷移も利用可能。
**** 自動でバッチングされる。
**** メカニムも利用できる。
*** まとめ
**** Box2D
**** Sprite
**** 現在のフレームワークが2Dシステムに対応するのを待つか、2Dシステムを使うか。
*** Unity New GUI
**** 現在α版。2-4ヶ月後にリリースか?
**** Unity2DでGUIを作成していいのか。
***** おすすめしない!
***** NGUI等従来の方法がおすすめ。
***** Spriteは「ゲームに特化した」コンポーネント。
****** GUIのための設定項目はない。
***** uGUIのヒエラルキーはNGUIをほぼ同じ。

** 「Aiming開発ゲームの裏側」牧野 克俊さん(Aiming)
*** 幻塔戦記グリフォン
**** プロジェクト概要
***** オンラインアクション
***** iOS、Android。iPhone4Sでの動作が目安。
***** 開発期間は約1年2ヶ月。
***** MMORPGやブラウザゲーの開発経験者が中心。
***** 企画6人、クライアント5人、サーバ4人、グラフィク10+α
**** グラフィック
***** 方針
****** Drawcallは50が目安。
****** リアルタイムライティングなし。
****** テクスチャは可能な限り小さく。
***** キャラクタ
****** パーツをプログラムで結合。着せ替え可能にするため。
****** テクスチャは1024が1枚。
****** ポリゴン数は約2000。
***** ボス
****** テクスチャ512が1枚。
****** ポリゴン約3000。
***** ザコ
****** テクスチャ128が1枚。
****** ポリゴン
***** 背景
****** 1024が2枚。
****** ライトマップ1024が1枚。
****** マップ上のオブジェクト用に512が1枚。
****** ポリゴン数1000程度。
****** アルファで抜かず、適切な形のポリゴンにする。
***** エフェクト
****** パーティクル
****** テクスチャは複数エフェクトで使いまわす。
****** 半透明、加算がきつい。
***** ふりかえり
****** 描画速度は良好。
****** キャクター構築負荷高い。
****** スキニング負荷高い。
****** エフェクト負荷高い。カリングした。
****** エフェクトのロードタイミングはあまりよくない。
******* はじめてエフェクトが発生するときに読み込んでいるがいまいち。
******* プリロードすべきかもしれない。
**** メモリ使用量
***** 全体の使用量200M程度。200M以下に抑えておかないと危険。
***** かなり大まかな内訳は、メッシュ3M、テクスチャ40M、アニメーション10M、サウンド10M。
***** GC
****** ほぼ問題になっていない。
****** シーン切替時・大量のリソースアンロードは時間がかかる。
****** Animation.AddClipがかなりメモリを使用する。
**** UI
***** NGUI
****** 位置はアンカーで指定。
***** ワークフロー
****** プログラマがモックを作成。
****** グラフィッカーが見た目、位置を調整。
****** 日本語はビットマップフォントを使用(開始時はUnity3.5だったので)。
***** ふりかえり
****** NGUIはまあまあよい。
****** パネル間の優先順位づけ。
****** ビットマップフォントでは字数が足りない。
******* チャット、掲示板等自由入力以外は問題ない。
****** ダイナミックフォントにかえたい。
**** リソースのダウンロード
***** アセットバンドルを使用。ファイル数約2000!
***** LoadFromCacheOrDownloadを使用。
***** 設定ファイルはアセットバンドル化していない。
***** Editor上ではResources.LoadAssetAtPathを使うようにしている。
***** 分け方
***** 振り返り
****** ダウンロード時間長い。
******* エリア解放等のタイミングに合わせる形で分割するようにはしている。
****** 更新判断。
******* 限りなく自己申告に近い。
******* テクスチャからどのプレハブが使用されているかを確認するよい方法がない。
**** Unityへの要望
***** Monoのバージョン上げて。
***** アセットバンドル再設計してほしい。
****** バージョンごとの互換性。
****** キャッシュの仕組み。
****** もともとあくまでWebPlayer用。

** 「cocos2d-xおよび開発ツールについて」清水 友晶さん(TKS2)
*** 日本cocos2d-xユーザ会代表。
*** cocos2d-x開発。
*** cocos2d-xとは
**** 2Dゲームフレームワーク。あくまでフレームワークでツールなどはない。
**** オープンソース。MITライセンス。
**** マルチプラットフォーム開発。10数種類。
**** 開発言語。C++、Lua、JavaScript。
**** Zynga、Wooga、Gameevil、Glu、GREE、Konami、TinyCo、HandyGames、IGG、Disney Mobileなどが採用。
**** 公式コミュニティでは、Chukong、Google、MS、ARM、Intelなど。
*** 開発手順
**** XcodeでiOSメインに開発。
**** たまにEclipseでAndroidの確認。
**** Androidでもこまめにチェックして、並行して開発することがおすすめ。
*** メリット
**** オープンソース
**** クロスプラットフォーム
**** 効率化。OpenGLを知らなくてもパフォーマンスの高い画像処理を行える。
**** cocos2d for iPhoneからの移行が容易。クラス名が同じ。
**** 基本的なことであれば、そこまでメモリを気にしなくても良い。
*** デメリット
**** ネイティブ間の連携が面倒。課金など。
***** Android
****** C++からAndroid SDKへアクセス。JNIを使用する必要がある。
***** iOS
****** Objective-C++があるのでまだ容易。
**** フレームワークでしか無いので、画面構成やアニメーションの作成に時間が掛かる。
*** 別途エディタを利用する。
**** CocosBuilder
***** レイアウトやアニメーションをGUIで調整可能。
***** Mac上で動作可能。
***** 多くの企業で利用されている。
***** 最新版CocosBuilder 3.0 Alpha 5
****** JSBの機能が大幅追加。
****** CocosPlayer
***** UIエディタ。
***** アニメーションエディタ。
***** ブラウザ上で実行。
***** Javascriptエディタ。
***** テクスチャアトラス。
***** 開発が止まっている
**** SpriteBuilder
***** CocosBuilderの後継。
***** CocosBuilderとの違い。
****** ノードにPhysics Nodeが追加。
****** CC Menuクラスによるノードが削除。
****** Skewアニメーションが追加。
****** JavaScriptエディタ機能がない。
****** アプリの言語設定。現在英語のみ。
****** 現在はiPhone用。
**** CocosStudio
***** 開発はクローズド。
**** Cocosino
***** JavaScriptエディタ。
***** 起動が速いシュミレータ。
***** KickStarterでの寄付に失敗。
***** その後、ソース公開。
**** CocoMoon Studio
***** UIエディタ。
***** Luaエディタ。
***** 9ドル。(条件により半額)

** 「 enchant.jsの野望 9分コーディングライブ」 清水 亮さん(ユビキタスエンターテインメント)
*** enchant.js
**** 3000以上のゲームが開発された。
**** アバターが作れる。
**** HTML5はOS。
**** (ここで高橋諒さんによるライブコーディング)
***** エディタとかはない。コーディングする楽しさを重視。
***** javascriptで柔軟にかける。
**** 教育、公演
***** カリフォルニア工芸大学でenchant.js必修。
***** スウェーデンのウプサラで講演。
***** code gleap
**** 哲学
***** とにかく簡単。
***** 手早く作れる。
***** 楽しく作れる。
***** コード中心主義。
**** 任天堂
***** 公式サードパーティ向けに配布。
***** Wiiリモコン/WiiUゲームパッド対応。
***** Millverse対応。
**** enchantMoon
***** enchant.jsベース。
**** 目的
***** 人類総プログラマー計画。
***** 小学生でもプログラミング。
***** ラブレターにプログラミング。
***** 親子でプログラミング。
***** お葬式にもプログラミング。
***** 若い才能を伸ばす。

** 「Playgroundの描画ロジック」 ロマン・ピコアさん(KLab)  &「マルチPF対応ゲームエンジン内のAndroid対応」中澤 慧さん(KLab)
*** What is (not) Playground.
**** 2011年秋、開発のきっかけ。
***** モバイル向けの有力なクロスプラットフォームエンジンが無かった。
***** cocos2d-xが初期リリースされた頃。
***** 少人数で開発。2Dに特化。
***** Win32/iOS/Android対応のエンジン+テクスチャアトラス/UI他作成ツール。
***** プロジェクトの要望に合わせて機能追加。
**** 描画の仕組み
***** 古い端末でも60fpsを維持する方法。
****** まったく描画しない(カリング)
****** ピクセル毎の負担を減らす又ステート変更を減らす
******* 透明でないオブジェクトを「近くから遠く」にソート。
******* 透明なオブジェクトを「遠くから近く」にソート。
***** モバイル、2Dの場合の特徴。
****** Shaderが少ない。
****** 透明でないものはほとんどない。背景のみ。
******* Z-Bufferのトリックは無意味。
****** 3Dに比べてベクタデータ、頂点データ少ない。
****** ドローコールを減らす。
******* ステートが同じならバッチする。
****** 速度を保つためにCache and Flag。
******* 変わった箇所だけを計算。
****** cocos2Dはどうか。
******* バッチは可能だが、プログラマの責任。Playgroundは自動で最適化する。
****** Unityではどうか。
******* staticバッチ、dynamicバッチ、cullingをサポート。
******* 2DライブラリではC#で自前でバッチする。
**** PlaygroundとAndroid
***** Androidはバラエティに富んでいる。
****** CPU、グラフィクス、サウンドで様々なハードウェア。
****** 多くのOSバージョン、端末固有のドライバ。
****** 多くのデバイスでテストすることが必然。
****** 社内テスト端末限定の機能としてアプリ実行状況モニタリングサービスを作った。
***** サウンド重視のモバイルゲーム設計。
****** 「システムクロック=正義」な実装だと音ズレが激しく詰む。
***** OSとドライバの限界。
****** Android4.1以降はLow Latency Audioを利用できる。
****** プレイアビリティに強く関わるのはジッタ(ゆらぎ)。
****** サウンドの再生時間とシステムクロックの情報をブレンド。
****** 音飛び時もスムージング。
****** ゲームとして都合の良い、一貫性のあるタイムスタンプ。
***** 今後
****** Low Latency Audioを、より広い範囲の端末で利用できるようにサウンドライブラリを改修。
****** Android4.4の新機能を利用してサウンド出力時間差をある程度把握して改善に活かす。
***** 宣伝
****** オーディオとAndroidのDRMをEffective Androidに寄稿。

** 「次世代ゲームエンジンの比較」浦田 祐輝さん(CROOZ)
*** 価格の比較
*** cocos2d-xが表示できるSprite数が最も多そう
*** Unityの情報が圧倒的に多い。
*** cocos2d-x
**** それぞれのプロジェクトが同じ場所を参照している。
**** パフォーマンス良い。
**** 情報がまだ少ない。バージョンが上がった際の対応などが難しい。
*** Unity
**** カスタマイズ性。
**** 情報が多い。
**** 2Dのパフォーマンスが他のエンジンに比べて高くない。
***** 4.3のリリースでこの点は解消されたかも。
**** チーム開発。sceneがコンフリクトする。
**** Unity Asset Serverを使うとよいかも
*** enchant.js
**** 分かりやすい。
**** HTML5なので取り組みやすい。
**** リリースするならWebViewで側を作る必要がある。
*** Playground
**** ツールが少ない
**** コンパイルする必要がない。
*** Project Anarchy
**** 無料で、Havok社が持っているライブラリ群を利用できる
**** 今年6月リリースで情報が少ない
**** Windowsのみなので、iOSのプロジェクトはmacに転送する必要あり。
*** Unreal Engine
**** ハイパフォーマンス。
**** コストが高い。売上の5万ドルを超えると売上の25%を支払う必要あり。
**** ある程度のスキルを要する。
**** unreal scriptを用いる。学習コスト高め。
*** 総評
**** 3Dエンジンは一度にたくさんのSpriteを表示するのに向いていない。
***** 2Dは2Dのエンジンを使うほうが良い。
**** 3DはUnityがおすすめか。
**** とことん追求する場合はUnrealもよい。
**** チーム開発に対応していることや、日本語の情報があることも重要。

““Playground"とAndroid”