2016年09月28日

エンジンの詳細

いま作っているゲームエンジンについて少し詳しく紹介しようと思います。




○作っているもの

3D専用ゲームエンジンを作っています。もう少し具体的には、3Dゲーム制作用のフレームワークと、それを使ったエディタを同時進行で作成しています。
どういった特徴を持ったエンジンになるかは、まだ何とも言えません。開発が順調に進めばそのうち分かると思います(勿体ぶってるわけじゃなく自信がないだけ






○開発環境

・Windows10
・C++11/14
・MSVC2015(v140 / LLVM2014)
・OpenGL4.3 / GLES3.0

(2016年11月16日に編集)
GLES3.0と、Clang/LLVMでのビルドに対応しました。
現在はMSVC上のビルドしかできませんが、いずれは実機で・・。
OpenGLのバージョンも4.3になっています。





○外部依存

・Assimp(3Dモデルインポータ)
・Bullet(物理エンジン)
・Cereal(シリアライズ)
・Freetype2(フォントラスタライズ)
・GLEW(GL拡張)
・gl3w(GL拡張)
・GLM(数学)
・SDL2(GLコンテキスト作成、メッセージ・入力処理など)
・stb_image/stb_image_resize/stb_image_write(画像読み込み/リサイズ/保存)


音関連のライブラリはまだ導入していません。以前はSFMLというゲームライブラリを使っていてそれに音再生機能がありましたが、途中からSDL2に乗り換えたため何もなくなりました。補欠としてSDL_Mixer、OpenALを検討しています。

(2016年11月16日に追記)
libが不要で移植に有利な「gl3w」に変更しました。




○作った機能(主なものだけ)

・シーン関連
2D/3D矩形描画、Gizmo描画、3DLine描画、カメラ操作



・アニメーション
スキ二ングメッシュアニメーション(GPUスキニング)、アニメーションブレンド、テクスチャアニメーション



・BulletPhysics - 剛体
RigidBody、StaticBody、KinematicCharacter



・BulletPhysics - 衝突形状
Box、Cone、Sphere、Capsule、Cylinder、MultiSphere、ConvexHull、ConvexTriangleMesh、BvhTriangleMesh



・BulletPhysics - Constraint
Point2Point



・BulletPhysics - その他
VBOを使用したデバッグ描画、Raycast



・フォント関連
日本語対応フォント描画、キャッシュ機能、ScreenPrintf、文字列幅計測



・Widget
Button、RadioButton、CheckButton、Slider、ListBox、SpinBox、EditBox、Window
EditBox(日本語入力・編集機能)は入力、変換、編集など一通りの機能を2か月かけて作った力作です。でもまだちょっとバグってる。



・ユーティリティ
タイマー、乱数生成、文字コード変換、簡易OBJローダー、スクショ撮影、サムネイル作成






○仕様(暫定)

・3Dモデル (数字は上限、0は未設定)
頂点(0)、マテリアル(128)、UV(4)、テクスチャ(8)、頂点カラー(1)、ボーン(64)、ボーンウエイト(4)

ボーン数の上限がだいぶ厳しいので、VTF、またはComputeShaderを使って少なくとも今の4倍にはしたいです



・モデルフォーマット - アニメーション付きモデル
FBX、BetterCollada
読み込みだけ可能:Collada、glTF



・モデルフォーマット - アニメーションなしモデル
OBJ
読み込みだけ可能:Blend


AssimpExporterをビルドするために、幾つかのフォーマットのインポータを強制ビルドさせられたので、そのフォーマットも読み込めるかと思いますが、それが何だったかは把握していません;調べるのめんどかったし。


2016年9月25日時点のものです。
機能の追加・削除や、変更等があれば随時更新します。

posted by gency at 07:54| Comment(1) | 3DProgramming

2016年09月22日

Raytestの結果発表

摩耶さんをお迎えする作業は現在も続けていますが、マテリアルやテクスチャなどアセットを管理する仕組みや、ファイルを開くGUIといった周辺機能もこの機会に作っているので時間が掛かっています。
というわけで、少し古い進捗ですが、以前話したマウスによる3Dオブジェクトのピッキング処理の完成品を晒しておきます。

bullet.gif

Bulletの剛体をマウスで掴んだり、放り投げたりできるという使い道がよく分からない機能を作ってみました。
剛体を掴む処理は、Point2PointというConstraintを使って実装しています。
本当はウラさんの剛体を掴みたかったんだけど、KinematicCharacterを掴む方法はよく分かりませんでした。
RigidBodyにKinematic的振る舞いをするオブジェクトがあるようなので、次の機会ではそれを使ってみようかと。

今回のデモはBullet本家のexampleCommonRigidBodyBase.hの177行目にあるgetRayTo()から、370行目のmovePickBody()という関数までを参考に作成しました。
ほとんどこれの写経です。
デモ用だからいいよね;

posted by gency at 15:26| Comment(4) | 3DProgramming

2016年09月10日

チアフルミクはいいぞ

摩耶さんに続く過去作弄り。
今回はチアフルミクさんを劇的ビフォーアフターしました。

cheer2016.jpg

cheer2016_2.jpg

cheer2016_3.jpg


顔の造形は以前のものよりもオリジナルのテイストを強めにしました。
原作に似せようとして失敗した感じもあったので。。。

あと、身体の造形のバランスが悪かったのでそれも修正しています。
この修正だけで8時間ほど溶けましたぜ。
どんだけバランス悪かったんだって話ですね。
いやホントにすごく悪かった。。
たぶん、原作フィギュアのポーズを作ることしか考えてなかったんだと思う(言い訳
まあ、8時間の甲斐あってかなり改善できたから良かった。

できれば後ろ髪の修正も修正したいところでしたが、とりあえずこれで一旦置いてエンジン制作に戻ります。
3日ほど作業してないので、さすがにヤバい。
いろいろ忘れそう。
posted by gency at 01:05| Comment(0) | モデリング