師走と作業報告の候
一年の振り返りとかやろうとしたけど、意外と予定が詰まってしまいました。 あとでちゃんとやろう。・・・とか言いつつ積んでる記事が4つくらいあった気がします。
ひとまず、いつもの報告です。
イチからシーンを構築してレンダリングし、png に保存できるようにしました
ゲームじゃなくてツール開発向けの機能です。
ゲーム用のレンダリングは Engine クラスにいろいろ隠蔽されていますが、それを使わないでレンダリングできるようにしています。
コードはこんなイメージ。
auto world = newObject<World3D>(); // スキンメッシュのコンポーネントを作る。 auto skinnedMeshComponent = SkinnedMeshComponent::create("3Dモデルファイル"); // スキンメッシュを表示するためのオブジェクトを作り、コンポーネントを追加した後ワールドに追加する。これでレンダリングされるようになる。 auto skinnedMeshObj = newObject<WorldObject>(); skinnedMeshObj->addComponent(skinnedMeshComponent); world->add(skinnedMeshObj); // メッシュの境界ボックスを取得しておく。 Box aabb = skinnedMeshComponent->getSkinnedMeshModel()->getBoundingBox(); // 平行投影カメラを作る。境界ボックス全体を視界とする。 auto camera = OrthographicCamera::create(); camera->setOrthographicSize(aabb.height); camera->setNearClip(0); camera->setFarClip(aabb.depth); camera->setPosition(Vector3(aabb.center.x, aabb.center.y, aabb.center.z - (aabb.depth / 2))); camera->lookAt(aabb.center); world->add(camera); // 描画先レンダーターゲットを作る。 auto renderTarget = RenderTargetTexture::create(512, 512, TextureFormat::R8G8B8A8); // OffscreenWorldRenderView を作り、レンダーターゲットと、そこへ描画するワールド、視点(カメラ) をひとつにまとめる。 auto ofs = newObject<OffscreenWorldRenderView>(world, camera->getCameraComponent()); ofs->setRenderTarget(renderTarget); ofs->setBackgroundColor(Color::White); // レンダリングして画像に保存 ofs->render(); ofs->getRenderTarget()->readSurface()->save("img.png");
シェーダがスフィアマップ対応してないとか、ちょっとまだレンダリングおかしい。
2Dイラストからドット絵アニメを自動生成したい
企画中のゲームで、パターン多めのドット絵アニメを作ろうとしています。
そんなところで、前々からディープラーニング勉強してみたかったのでこんなプランを考えました。
- 2Dイラストをディープラーニングで3Dボクセルマップに変換
- 3Dボクセルマップからメッシュモデル作成
- メッシュモデルにボーン入れ
- 必要に応じてSD化
- 普通にスキンメッシュアニメーション
- フレームをキャプチャ
- 手動で仕上げ(あるいは画風変換)
フォトスキャンのイラスト版みたいなイメージ。 あらゆる形状のモデルを、ってのは多分ものすごく難しいから、まずは人型で行ってみます。
んで第1版。
前途多難。