Game Boy 研修 (1)

こんにちわ。Pocolです。
今年は研修どうしようか悩んでいたんですが,今の若い人はあんまりハードのことを知らないのではないか?(当然、めっちゃ詳しい人もいますが…)
という考えが湧いてきたので,今年はGame Boyでプログラミングするというのを研修ネタとしてやってみようかなと思います。

目的

ハードウェアについて理解し,実際にゲームを作成し,プログラミング能力および開発能力を高める。
また、ポーティング作業を行うことでマルチプレットフォーム展開を行う際に、やってはいけないことを体感させ,開発効率改善および向上のための意識づけを行うことを目的とする。
エミュレーター開発を通じて各種APIへの理解を深める。

目標

  • 開発環境を自分で整えられるようになる。
  • Game Boy上で動くゲームを自力で開発する。
  • Game Boyエミュレーターを自作し,ハードウェアを理解する。
  • 指定されたプラットフォーム上で動作するように自作したGame Boyエミュレーターの移植作業を行う。

資料

● The Ultimage Game Boy Talk

● The Game Boy, a hardware astopsy – Part 1: the CPU

● The Game Boy, a hardware autopsy – Part 1.5: a few mistakes and register F

● The Game Boy, a hardware autopsy – Part2: Memory mapping

● GBDKの導入~ゲーム作成まで
https://qiita.com/BubbleBubble/items/9c28c57ed942c9b48843

● きるこ日記帳
https://www.dkrk-blog.net/category/GameBoy

● ゲームボーイのゲームを作ってみる
https://www.youtube.com/watch?v=xhUOhT7KKE4&list=PLbP78mBX9wpCH1SwnLix14rd1g47XJ5fO

● Game Boy Development community
https://gbdev.io/

● Open Game Boy Documentation Project
https://mgba-emu.github.io/gbdoc/

スケジュール

● 第1週目
お題:指定されたライブラリを利用した開発環境を整えてください。そして,第3者が開発環境を整えられるように手順書を作成してください。
アドバンスなお題:Visual Studio Codeで開発できるようにしてください。

● 第2~3週目
お題:サンプルアプリを作ってください。
  ・Hello, Worldの表示
  ・スプライト描画
  ・十字キー入力でキャラを動かす
  ・音を鳴らす (Option)
  ・説明書を作る (Option)

● 第4週~第5週目
お題:Game Boyエミュレータを自作して,サンプルアプリを動かしてください。ただし、描画APIを利用する場合はDirectX12を使用してください。
※6週目~7週目を見越してラッパーAPIを作っておくのは可とします。
アドバンスなお題:
  ・ゲームパッド対応を行ってください。
  ・どこでもセーブできる機能を作ってください。
  ・アップスケール対応を行ってください(Option) [ex]Hq3xなど…
  ・可能であれば次のSIGGRAPH論文を実装してしてください(Advanced)
    Johannes Kopf, Dani Lischinski, “Depixeling Pixel Art”, SIGGRAPH 2011 Technical Papers, https://johanneskopf.de/publications/pixelart/
    実装参考として,次のPythonコードを参照するのは可とします。https://github.com/vvanirudh/Pixel-Art
補足:動作確認には自作のアプリとhttps://gbdev.gg8.se/files/roms/blargg-gb-tests/のROMが動作することを確認してください。

● 第6週~第7週目
お題:指定プラットフォーム上で,自作Game Boyエミュレータを動作するように移植作業を行い,サンプルアプリを動かしてください。

Recreating Naniteの記事

JGLRXAVPOKさんという方のブログで,Recreating Naniteという記事があります。
先日紹介した,MeshoptimizerとMEITZを使ってLODを生成するような話も載っています。

Recreating Nanite: The Plan
Recreating Nanite: Visibility buffer
Recreating Nanite: Cluster rendering
Recreating Nanite: LOD generation
Recreating Nanite: A basic material pass
Recreating Nanite: LOD generation -faster, better, simpler
Recreating Nanite: Runtime LOD selection
Recreating Nanite: Mesh shader time

FrameGraph関連の資料

実装用のネタ帳です。

● FrameGraph: Extensible Rendering Architecture in Frostbite
https://www.gdcvault.com/play/1024612/FrameGraph-Extensible-Rendering-Architecture-in

● Advanced Graphics Tech: Moving to DirectX12: Lessons Learned
https://www.gdcvault.com/play/1024656/Advanced-Graphics-Tech-Moving-to

● fg
https://github.com/acdemiralp/fg

● Why Talking About Render Graphs
https://logins.github.io/graphics/2021/05/31/RenderGraphs.html

● Task Graph Renderer At Activision
https://research.activision.com/publications/2023/06/Task-Graph-Renderer-at-Activision

● Organizing GPU Work with Directed Acyclic Graphs
https://levelup.gitconnected.com/organizing-gpu-work-with-directed-acyclic-graphs-f3fd5f2c2af3

● Render graphs and Vulkan – a deep dive
https://themaister.net/blog/2017/08/15/render-graphs-and-vulkan-a-deep-dive/

● Unreal Engine 5 – Render Dependency Graph
https://docs.unrealengine.com/5.3/en-US/render-dependency-graph-in-unreal-engine/

● GPU synchronization in Godot 4.3 is getting a major upgrade
https://godotengine.org/article/rendering-acyclic-graph/

● Render Graph 101
https://blog.traverseresearch.nl/render-graph-101-f42646255636

● An update to our Render Graph
https://blog.traverseresearch.nl/an-update-to-our-render-graph-17ca4154fd23

● EmbarkStudios kajiya-rg
https://github.com/EmbarkStudios/kajiya/tree/main/crates/lib/kajiya-rg

● Mastering Graphics Programming with Vulkan
https://github.com/PacktPublishing/Mastering-Graphics-Programming-with-Vulkan

● Render graphs
https://apoorvaj.io/render-graphs-1/