Ebitengine Weekly #2 - ぷちConf #2 が開催されました
去る 3/29 金曜日、Ebitengine をテーマとしたゆるいLT/勉強会である「ぷちConf」の第二回が開催されました。今週の Ebitengine Weekly は特別編成で、その模様をお届けしたいと思います。
本編の前に、Ebitengine Weekly について
Ebitengine Weekly では、Ebitengine に関するありとあらゆる話題を収集し、zenn 上で毎週お届けしています。発信場所としては
のような場所を使っていますので、フォローなどしていただけると幸いです。
開催内容
6名の方のLTと、2名のゲストによるセッションを行い、オンラインとオフラインのハイブリッドで開催いたしました。配信のアーカイブはこちらよりご覧いただけます。
タイトルと発表者は以下の通りです。
内容 | 発表者(敬称略) |
---|---|
基調講演 「How Ebitengine renders an image」 | hajimehoshi |
「ebitenをできるだけ隠蔽してオセロ作ってみた」 | シャガ |
「ebitenのマルチプレイ対応: WebSocketの活用」 | ponyo877 |
「本格ローグライク制作にEbitengineを選んでみた」 | NagaiNaganawa |
「一回、Ebitengineでバカゲーつくってみた!」 | オーガ |
「いい感じのパッケージ構成を考える」 | kyp |
「puregoの活用例」 | Chan Aethiopicus |
クロージングセッション 「Ebitengineはワシが育てた」 | Daigo |
発表資料は、connpass の資料一覧ページおよび YouTube の概要欄からご覧いただけます。
以下に各発表についてご紹介していくので、ぜひ拡散お願いいたします!
「How Ebitengine renders an image」by hajimehoshi
Ebitengine 作者であり、Odencat CTO である星さんによるセッションです。前回は Ebitengine の歴史と展望について語っていただきましたが、今回はより技術的な側面からの解説となります。
Ebitengine が高速に描画できるのは周知の事実ですが(要出典)、その裏には数多くの工夫が隠されています。中でも私が個人的に強調したいのは「自動テクスチャアトラス機能」です。Unity などでも 2D ゲームを作る際には、画像を事前にアトラスという大きな一枚画像にまとめた上で、描画順などを緻密に練る必要がある、というのが常識でした。Ebitengine はなんとこの手間をすっかりなくしてしまいます。パフォーマンスの改善のために開発者が変な手間をかける必要がないというわけです。
Ebitengine はこのように、いかに手軽さとパフォーマンスを両立するかに非常に重きを置いているので、その仕掛けや、その仕組の上でうまくやるコツを知りたい方は、ぜひゆっくり咀嚼してもらえるといいかなと思います。
「ebitenをできるだけ隠蔽してオセロ作ってみた」by シャガ
みんな大好き(?)パッケージ設計に関する発表です!Ebitengine の Game
インターフェースがそうであるように、ゲームのプログラムをパーツ分けすると、ほとんどは Update
関数と Draw
関数を持つオブジェクトにできると思います。
設計とはまた別の話題になりますが、簡単かつ爆速でビルドできるGoの特徴もゲーム開発では嬉しいですよね。試行錯誤の多いゲームプログラムにこそGoを使ってみるのはいかが?
「ebitenのマルチプレイ対応: WebSocketの活用」by ponyo877
Goといえばサーバーサイドの言語で有名であり、ゲームで双方向通信したいときに使いたくなる WebSocket への対応ももちろん簡単です。今回はその実装の解説だけでなく、簡易的なオブジェクト位置共有と、チャット機能を持ち、ブラウザ上で動作するデモを披露していただきました。デモが動作する様子は配信のアーカイブにてご覧いただけます。
「本格ローグライク制作にEbitengineを選んでみた」by NagaiNaganawa
普段はフロントエンドエンジニアで、他のゲームエンジンの経験はありつつも、Go は Ebitengine で初めて触ったという長井長縄さんの発表です。他言語の経験があるとパッケージ分けがうまくいかず、実は分けないで単純にやった方がうまくいくことに気づく、というのは Go あるあるですね。
オブジェクトを置いて作るタイプのゲームエンジンが馴染まなかったのが、コードで完結する Ebitengine を選んだ理由とのことでした。そしてこの三ヶ月で、基本の画面、ローグライクのマップ生成システムと、Android ビルドまで無事作ることができたそうです。完成お待ちしております!
「一回、Ebitengineでバカゲーつくってみた!」by オーガ
「まとめ:形から入るのも大事」という、まとめから入る斬新なスライドを作ってくださったオーガさんは、今までいくつかのサンプルを触ってはみたものの、いまいち作りたいものが思い浮かばなかったとのことです。ところが面白さ度外視で、とりあえずシーン遷移を備えた「形だけ」ゲームを作ったところ、今まで思い浮かばなかったことが思い浮かび、ゲーム制作のモチベーションが湧いてきたとのことでした。
ゲームジャムはそういった「とにかく何か作る」場としてとてもメジャーなので、Ebitengine でももっと開催してもいいかもな、と思ったりしました。ちなみに、既存の Ebitengine ゲームジャムとしては Ebitengine Game Jam 2022 などがあります。
「いい感じのパッケージ構成を考える」by kyp
前回も(TGSの日に!)ぷちConf にご参加いただいた、"SAEKO: Giantess Dating Sim" を開発中の kyp さんによる発表です。
シャガさんの発表ともかぶる部分がありますが、やはり描画ロジックは状態の管理とは別に分けることで見通しがよくなり、描画の問題が致命的な状態のバグを引き起こすことも減らせます。それだけでなく、特にバグりやすい箇所(SAEKOの場合 scripter)を分離してテスト可能にすることで、さらにバグを減らすことができたそうです。
なかなか一定規模のあるゲームを作って得られた経験を共有していただける機会は貴重なので、大変興味深く聞かせていただきました。
よければ Steam のウィッシュリスト登録お願いします!! https://store.steampowered.com/app/2492120/SAEKO_Giantess_Dating_Sim/?l=japanese
「puregoの活用例」by Chan Aethiopicus
ebitengine/purego とは、CGo なしでコンパイル済みのCライブラリを呼び出すことができるライブラリです。分かる人には分かる、超絶技巧による革新的ライブラリです。
ずんだもんなどで有名な VOICEVOX を簡単に Go から呼び出せる https://github.com/aethiopicuschan/nanoda などを作っておられる Chan Aethiopicus さんの今回の目玉は、Live2D を Go から呼び出せる https://github.com/aethiopicuschan/cubism-go です。
描画だけでなく、Live2D が持つ音声再生や当たり判定などの機能にもばっちり対応しており、Live2D データは cubism-go さえあればもうゲームに組み込めるというわけです。
まさに直後の Daigo さんのセッションでも触れられていますが、Ebitengine をもっと広く使ってもらうには、外部ツールとの連携も非常に重要な要素です。それによってデザイナー的なフローを変えずに効率よく Ebitengine を始めることが可能になり、Ebitengine への抵抗感も減らせるからです。cubism-go はその重要な一手になるのではないのでしょうか!?期待しております。
「Ebitengineはワシが育てた」by Daigo
ラストを飾るのは、Odencat CEO であり、「くまのレストラン」や「メグとばけもの」を手掛けた Daigo さんによるセッションです。
星さんのわりと無茶な提案から、Ebitengine でゲーム開発をスタートしたものの、最初は非常に不安定でパフォーマンスも低く、ユーザーにQAしてもらっているも同然の状態。そんな状態から、ゲームの表現とエンジンの機能の両方を少しずつ拡張することで戦略的に進めてきたとのことです。それが今や、奇跡的に Nintendo Switch 対応も成し遂げるに至っています。
振り返れば、Ebitengine からすれば「ユーザーがいない」という致命的な問題を解決し、とても幸せになりました。Odencat からすれば、他のゲームエンジンでありがちなバージョンアップ問題や重すぎるビルドから解放され、そこそこ幸せになりました。とのことです。Odencat と Ebitengine は、共に成長してきたのです。
Ebitengine はIDEがないという点については、Odencat は実は自分たちの内製ゲームに特化したGUIツールを作って解決しています。汎用のIDEより、特化している分生産性が高いとのことです。
Ebitengine でGUIツールを作ると、たとえばゲームの描画ロジックを埋め込むなども簡単です(すべては *ebiten.Image
に描画されるため)。今後はコミュニティの力でより多くの人に興味を持ってもらい、周辺ツールが充実することなどに期待とのことです。この点は筆者も完全に同意で、とにかく人を巻き込んで、前述の cubism-go など面白いものがたくさん出てくる下地を作れればいいのかなと思っています。
総じて、ゲームデザイナーでもあり、プロデューサーであり経営者でもある Daigo さんにしかできない非常に広い視野を持った内容でした。ゲームを作って食っていくのは氏の言葉を借りれば「無理ゲーです」。必ずしも潤沢な予算があるとはいえない環境で、いかに現実をサバイブしつつ、少しずつ不可能を可能にしていくか。非常に示唆に富んだ魅力的なセッションだったと思います。
あとやはり、場馴れしておられるだけあってトークが非常に聞いていて面白かったです。そういえば去年のCEDECでも、同僚の間で一番評判がよかったのは Daigo さんのセッションでした。
ポスト/ツイートピックアップ
写真ギャラリー
さいごに
前回から引き続き、視聴・参加いただいたみなさん、爆速で埋まった登壇者のみなさん、スタッフのみなさん、すべてに心より感謝申し上げます🙇
本当に自分一人では実現し得ないクオリティのイベントになったと思います!そして私としても、イベント駆動でいろんな成果を発表いただいたり、イベント後もむちゃくちゃ有意義なお話ができたり、やっぱり熱量をじかに感じて Ebitengine を盛り上げられたと感じられたのは、心から嬉しかったです。
前回は大変あたふたした部分もあったので、今回は気合をいれて臨んだおかげで成功できたというのも大事ですが、こうして継続して二回目を開催できたという事実が一番大事なのかなと思っています。継続することでコミュニティとの関わりが増えていって、方向性が見えてきて、ゆくゆくはさらに大きなイベントか何かにつながるはずなので。
実際、今回わざわざアメリカから来てくださった方や、そもそも本職がエンジニアではない方にも来ていただけたりして、なにかより広がるためのきっかけを掴めたような気がします。
その成果がお披露目できるのは次回かさらに後になるかはわかりませんが、これからもイベントを通じてもっとより多くの方に Ebitengine を使ってもらえたらと思うので、今後とも暖かく見守っていただければ幸いです!
来週の Ebitengine Weekly もお楽しみに!
最新情報や過去の記事はこちらからチェックいただけますので、ぜひフォローなどしてください🙏
Discussion