Enviar pesquisa
Carregar
Heliumエンジンの設計と実装
•
Transferir como PPT, PDF
•
5 gostaram
•
4,261 visualizações
D
DADA246
Seguir
Heliumエンジンの設計と実装
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 64
Baixar agora
Recomendados
Doom3 commentary
Doom3 commentary
DADA246
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
物理マシンをケチる技術
物理マシンをケチる技術
Satoshi KOBAYASHI
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
Recomendados
Doom3 commentary
Doom3 commentary
DADA246
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Takeshi HASEGAWA
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
物理マシンをケチる技術
物理マシンをケチる技術
Satoshi KOBAYASHI
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
Works Applications
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!
h2so5
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
エピック・ゲームズ・ジャパン Epic Games Japan
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
tokuhy
activerecord-turntable
activerecord-turntable
Drecom Co., Ltd.
Hyper vを理解する
Hyper vを理解する
Naoki Abe
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Norito Agetsuma
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
Etsuji Nakai
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
Satoshi Imai
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
エピック・ゲームズ・ジャパン Epic Games Japan
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
Unity Technologies Japan K.K.
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
Component basedgameenginedesign
Component basedgameenginedesign
DADA246
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
Mais conteúdo relacionado
Mais procurados
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
Works Applications
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
Kazuhisa Hara
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!
h2so5
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
エピック・ゲームズ・ジャパン Epic Games Japan
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
tokuhy
activerecord-turntable
activerecord-turntable
Drecom Co., Ltd.
Hyper vを理解する
Hyper vを理解する
Naoki Abe
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Norito Agetsuma
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
Etsuji Nakai
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
Satoshi Imai
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
エピック・ゲームズ・ジャパン Epic Games Japan
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
Unity Technologies Japan K.K.
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Takuya ASADA
Mais procurados
(19)
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
#ljstudy KVM勉強会
#ljstudy KVM勉強会
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
Osc2009 Do Xen Hara
Osc2009 Do Xen Hara
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
activerecord-turntable
activerecord-turntable
Hyper vを理解する
Hyper vを理解する
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
Lxc で始めるケチケチ仮想化生活?!
Lxc で始めるケチケチ仮想化生活?!
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
【Unity道場スペシャル 2018京都】最新機能オーバービュー ~2018から2019~
BHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
Destaque
Component basedgameenginedesign
Component basedgameenginedesign
DADA246
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
ゲーム開発とデザインパターン
ゲーム開発とデザインパターン
Takashi Komada
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
信之 岩永
Design your 3d game engine
Design your 3d game engine
Daosheng Mu
空間分割
空間分割
amusementcreators
衝突判定
衝突判定
Moto Yan
弾幕の科学――モデル化、生成、ランク、おもてなし
弾幕の科学――モデル化、生成、ランク、おもてなし
IGDA Japan
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Guerrilla
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
egtra
UE4背景アーティスト勉強会(前編) 背景ワークフロー解説
UE4背景アーティスト勉強会(前編) 背景ワークフロー解説
Aiko Shinohara
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
Electronic Arts / DICE
Astah Community スタートガイド
Astah Community スタートガイド
ChangeVision
Destaque
(20)
Component basedgameenginedesign
Component basedgameenginedesign
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
ゲーム開発とデザインパターン
ゲーム開発とデザインパターン
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
プログラミング .NET Framework 第4版
プログラミング .NET Framework 第4版
Design your 3d game engine
Design your 3d game engine
空間分割
空間分割
衝突判定
衝突判定
弾幕の科学――モデル化、生成、ランク、おもてなし
弾幕の科学――モデル化、生成、ランク、おもてなし
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
Killzone Shadow Fall: Creating Art Tools For A New Generation Of Games
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
UE4背景アーティスト勉強会(前編) 背景ワークフロー解説
UE4背景アーティスト勉強会(前編) 背景ワークフロー解説
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
Astah Community スタートガイド
Astah Community スタートガイド
Semelhante a Heliumエンジンの設計と実装
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
Kazuki Takai
Dot netcore multiplatform 2
Dot netcore multiplatform 2
shozon
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
Using xvim with macvim
Using xvim with macvim
pebble8888
Software Development with Symfony
Software Development with Symfony
Atsuhiro Kubo
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
GoAzure
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
HTML5&API総まくり
HTML5&API総まくり
Shumpei Shiraishi
Firefoxの開発プロセス
Firefoxの開発プロセス
Makoto Kato
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Ppl
Ppl
Seizan Shimazaki
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
ProjectAtomic-and-geard
ProjectAtomic-and-geard
Naoto TAKAHASHI
OSvの概要と実装
OSvの概要と実装
Takuya ASADA
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Emma Haruka Iwao
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
Semelhante a Heliumエンジンの設計と実装
(20)
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
Dot netcore multiplatform 2
Dot netcore multiplatform 2
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
Using xvim with macvim
Using xvim with macvim
Software Development with Symfony
Software Development with Symfony
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
HTML5&API総まくり
HTML5&API総まくり
Firefoxの開発プロセス
Firefoxの開発プロセス
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Ppl
Ppl
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
ProjectAtomic-and-geard
ProjectAtomic-and-geard
OSvの概要と実装
OSvの概要と実装
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
Heliumエンジンの設計と実装
1.
Helium エンジンの設計と実装
@dada246
2.
自己紹介 • ゲームプログラマやってます • 得意分野
C++,C#,GPU,javascript,PHP • 低レベルから描画、 web まで幅広く書いて ます • Steam,Origin,iPhone で海外ゲームを遊んでい ます
3.
はじめに • 今回の話では、ゲーム画面は出ません • Helium
エンジンはビルドしていません → コードを読んで理解した箇所を解説しま す • ゲームエンジンが読めるって楽しいよ ね!
4.
アジェンダ •
Helium エンジンとは • 外部ライブラリ • 基礎ライブラリ • システム設計 • 描画
5.
Helium エンジンとは • オープンソースのゲームエンジン •
github で公開されている https://github.com/HeliumProject/Helium • Insomniac Games のオープンソースプロジェク トをベースに Whitemoon Dreams が開発を引き 継いだ • Nocturnal Initiative によると、初版は 2008 年ら しい
6.
• 代表作 Resistance Ratchet &
Clank Spyro the Dragon
7.
Whitemoon Dreams • 代表作 Planet
Legend Warmachine
8.
その他、コード提供者 • Rob Wyatt →Dreamworks,Microsoft,
Naughty Dog, Insomniac Games などに在籍
9.
Helium Project • http://heliumproject.org/ •
Overview http://nocturnal.insomniacgames.com/index.ph p/Helium
10.
対象プラットフォーム •
言語: C++ • OS:Windows(32bit,64bit) • グラフィックス :DirectX9 • CPU:x86(32bit,64bit) • コンパイラ (CL,GCC,SNC) • Posix 関係のファイルは存在するが、未実 装になっている
11.
その他特徴 • 汎用的なゲームエンジン • 基礎機能のみ実装されている •
マルチスレッド前提 • Reflection を使う • レベルエディタ用のコードも若干含まれ ている • クラスが .cpp+.h+.inl で構成されている
12.
全体構成
13.
外部ライブラリ • オープンソースのゲームエンジンなの
で、 GPL 関係のライブラリも駆使している • boost • lua • libpng • zlib • Expat(XML Parser) • freetype(font engine)
14.
外部ライブラリ • TBB(Intel Threading
Building Blocks) • wxWidgets(A cross-platform GUI and tools library for GTK) • nvtt(nvidia-texture-tools) • P4API.NET(Perforce for the .NET)
15.
ファイルフォーマット • アニメーション: fbx •
フォント: ttf • 設定ファイル: xml
16.
アジェンダ •
Helium エンジンとは • 外部ライブラリ • 基礎ライブラリ • システム設計 • 描画
17.
Container •
ArrayIterator • BitArray, DynArray • Map,Set • HashMap,HashSet • SortedMap, SortedSet • Pair • RbTree • Table • ObjectPool
18.
Memory •
ArrayPtr • AutoPtr • エンディアン変換 • SmartPtr • 参照カウンタ
19.
Checksum • Crc32 • MD5 •
Hash64 http://burtleburtle.net/bob/c/lookup8.c • MurmurHash http://tanjent.livejournal.com/756623.html
20.
IPC(Inter Process Communication) •
プロセス間通信 • Message クラスをやりとりする • ファイル経由 or TCP 経由 • Worker で動作する
21.
RCS(Revision Control System) •
Perforce をゲームエンジンから利用するた めのクラス? • Provider クラスを実装する必要がある
22.
Inspect • Button や
CheckBox 、 ColorPicker など GUI 関係のクラス • SceneGraph:: CreateTool で使われている → ゲーム内のデバッグ用 GUI 表示かもしれ ない http://nocturnal.insomniacgames.com/index.ph p/Inspect
23.
SmartBuffer • BufferSerializer でファイルに読み書きでき
るバッファ • GDC2012 で解説されていたものと似てい る http://gdcvault.com/play/1015319/Developing- Imperfect-Software-How-to
24.
数学 • Float16 IEEE 754-2008
の 15bit 浮動小数点 (half) を実 装している
25.
EulerOrder • Graphics Gems
IV(1994 年 ) Ken Shoemake の 実装を元にしている • オイラー角の X 、 Y 、 Z の掛け順を Enum に閉じ込めたもの →Matrix3 の回転計算が汎用的に書ける
26.
図形 • AlignedBox • AngleAxis •
Linear • Bspline • CatmullRom
27.
衝突形状 • FPU 実装と
SIMD 実装が用意されている • AABB • OBB • Line • Frustum • BoundingSphere →point list の中にある最小球を求める関数など がある
28.
SIMD • _mm_load_ps といった
SSE による実装 • Vector 、 Matrix 、 Quaternion など基本的 なものは SOA でも提供されている • SSE 関数をラップした Load と Store が用意 されている • typedef __m128 Register 型でアクセスする
29.
テスト • GoogleTest を利用 •
job や string 、 map 、 socket 、数学関係な ど基礎部品をテストする • ソートなどのベンチマークも計測する
30.
メモリ管理 • dlmalloc(by Doug
Lea) か nedmalloc(by Niall Douglas) を使用する • http://www.nedprod.com/programs/portable/ nedmalloc/ • https://github.com/ned14/nedmalloc → マルチスレッドでロックフリーなメモリア ロケータ
31.
DynamicMemoryHeap • dlmalloc や
nedmalloc にクリティカルセク ションによるロックと、メモリトラッキン グ機能を付けたもの → メモリ確保時のアドレスを記録しておく hash_map< void*, void* Addresses[ BACKTRACE_DEPTH_MAX ] >
32.
アジェンダ •
Helium エンジンとは • 外部ライブラリ • 基礎ライブラリ • システム設計 • 描画
33.
Entity 関係 • World,Layer,Entity
が存在する
34.
World • Layer と
GraphicsScene を保持している • Entity の生成を行う • TickCount や Update 処理は WorldManager が行う
35.
Layer • Entity を保持している •
Package を管理している • 以下の 2 種類がある → Level layers Package からファイルを読み込んで構築される → Dynamic layers レベルエディタで動的に変更出来る
36.
Entity • Position 、
Rotation 、 Scale を保持してい る • Skin モデルや Rigid モデルで使われる
37.
Update • マルチスレッドを考慮して Update
が 3 段 階にわかれている
38.
NonCopyable クラス • コピーコンストラクタを
private にしたク ラス • WorldManager などで継承して使う
39.
GameObject • フラグや名前、 ID
を保持するクラス • 以下のクラスの基底になっている • Package • Resource • ResourceHandler • Entity • Layer • World • GraphicsConfig • GraphicsScene
40.
Reflect::Object • static フィールドとして
Class クラスを保持 する → 型情報を扱うクラス • Reflection には Structure クラスや Enumeration クラスもある
41.
PackageLoader • データの読み込み単位 • PackageLoader
は抽象クラス • GameObjectLoader • XmlPackageLoader • CacheObjectLoader • CachePackageLoader • EditorObjectLoader(tools only)
42.
マルチスレッド • .jobdef に
xml で入出力バッファなどの設 定を記述 • .cpp に job の処理を記述して JobManager で実行する • TBB を使う
43.
job の種類 •
SortJob • WorldManagerUpdate • EntityPreUpdate • EntityPostUpdate • その他グラフィックス用に幾つか
44.
Condition • スレッドの同期オブジェクト • Win32
は WaitForSingleObject で実装 • Posix は pthread_cond_wait などで実装 ↓ を参考にしているらしい http://www.cs.wustl.edu/~schmidt/win32-cv- 2.html
45.
アジェンダ •
Helium エンジンとは • 外部ライブラリ • 基礎ライブラリ • システム設計 • 描画
46.
描画周り • SceneGraph • Rendering
クラス群 • RenderingD3D9
47.
SceneGraph • Dependency Graph
で構成される • ノードや階層構造は Reflection の仕組みを 使って、 XML やバイナリファイルに読み 書き出来る → Reflect::ArchiveXML, Reflect::ArchiveBinary
48.
HierarchyNode • AlignedBox も持っている
49.
Traverser • HierarchyNode を辿って処理するクラス •
HierarchyChildTraverser →SceneGraph をダンプするためにノード情報を 収集する • HierarchyRenderTraverser → 描画する • HierarchyPickTraverser → 特定の Box 内にあるノードを取得する
50.
Statistics • Frame Number
や Triangle Count をデバッグ 表示するクラス
51.
プリミティブ •
Axes • Capsule • Circle • Cone • Cube • Cylinder • Frame • Grid • Locator • Pointer • Radius • Rings • Sphere
52.
Rendering クラス群 • 描画
API のラッパー • InputLayout や BlendState など、 DirectX10 の 設計を取り入れている
53.
Rendering クラス • Index
Buffer , Vertex Buffer • Input Layout • Vertex Shader , Pixel Shader • Constant Buffer • Surface • Texture • 各種 RenderState …
54.
RRenderResource • 参照カウントによるリソース管理
55.
RenderCommandProxy • BeginScene や
EndScene 、 SetIndexBuffer な ど、描画 API をまとめたもの
56.
RenderCommandList • リスト構造ではなく、
RenderCommandProxy を Allocate するため のもの
57.
RenderingD3D9 • DirectX9 API
を Rendering クラスに合わせて ラップしたもの • 各種 Buffer や Shader など基本的なものは 揃っている
58.
CommandProxy • ImmediateCommandProxy →IDirect3DDevice9 を直接呼ぶ •
DeferredCommandProxy → 描画コマンドを D3D9ClearCommand の 様にクラス化して List に蓄積した後、 まとめて IDirect3DDevice9 を呼ぶ
59.
Fence • IDirect3DQuery9 のラッパー •
シェーダー定数の設定時やコマンドバッ ファのキック時に使う
60.
D3D9DynamicTexture2d • D3D9Surface をテクスチャとして使うた
めのクラス
61.
まとめ • ゲームエンジンを学習するには良いコー
ド → 設計や外部ライブラリ含め、モダンな作 りになっている → 明らかにトップレベルのゲームプログラ マが書いたコード • たまにはゲームエンジンを読んでみては いかが?
62.
今回解説しきれなかった箇所 •
C++ Reflection • Instrumenting Profiler • Debugging Helpers • Perforce Integration • Build
63.
Question?
64.
ご清聴ありがとうございました
Baixar agora