🛣️

OpenSiv3D 開発ロードマップ

4 min read 7

OpenSiv3D v0.6.0

リリース予定時期: 2021 年前半。開発・調査中で未記載の新機能もあります。

主要な新機能

全体

  • Web 版の追加 (experimental)
  • ユーザアドオンの追加機能

グラフィックス

オーディオ

  • テンポとピッチの変更
  • macOS / Linux 版でのフェードイン・フェードアウトサポート
  • Opus サポート
  • Ogg Vorbis のループタグ取得

その他

  • C++20 対応
  • 図形の計算・操作の拡充
  • 統計計算ライブラリ: Statistics::
  • 正規表現
  • ScopeGuard
  • UniqueResource
  • 環境変数読み取り: EnvironmentVariable::Get(StringView)
  • コマンドライン引数の取得: System::GetCommandLineArgs()
  • デマングル
  • シリアル通信での DTR, RTS 対応
  • JSON の読み書きクラス統合
  • Lua 対応
  • レーベンシュタイン距離
  • HTTP クライアント
  • 凹包 (Concave hull)
  • 長方形詰め込みで回転を許可するオプション
  • 暗号化
  • Math::Map()
  • 128-bit 整数型: int128, uint128
  • 絵文字データセットの更新
  • Image の最大サイズを 1 辺 8192px → 16384px に拡張
  • 画像ファイルの情報を表現する ImageInfo クラス
  • 柔軟な画像デコーダ、エンコーダ
  • プラットフォームごとの乱数の再現性の改善
  • 閉 / 開区間を指定した乱数生成
  • RandomVec2(Line), RandomVec2(Quad)
  • Stopwatch, Timer にカスタム基準時刻を提供可能に
  • ConstantBuffer サイズ 16 × N バイト制約の撤廃
  • Linux 版と Windows / macOS 版の機能ギャップの縮小
  • Linux 版のビルドの簡易化 / 依存ライブラリの整理
  • NavMesh の改善
  • YesNo クラス
  • 入力されているキーやマウスのボタンの一覧取得
  • CursorStyle に ResizeNWSE, ResizeNESW, ResizeAll を追加
  • SIV3D_SET() によるエンジン設定

パフォーマンス向上

  • 画像、音楽ファイルの読み込み高速化
  • Windows 版、v0.4.3 比で 1 フレーム分遅延が少なく描画されるように
  • Parse / ParseOpt / ParseOr の速度改善
  • ハッシュテーブルの Heterogeneous lookup サポート
  • 精度を落とした高速な数学関数の利用

ドキュメント

  • ライブラリのファイル構成を hpp / cpp から hpp / ipp / cpp に変更し、ヘッダファイルを簡素に
  • ヘッダのドキュメントを整備

バグの修正

  • v0.3 ~ v0.4 時代に報告されたバグの解決
  • Optional をより標準に準拠
  • QR コード生成の不具合の修正

機能の削除

  • Unicode 形式以外のテキストファイルのサポートの削除

バージョン移行時の注意

  • Math::SmoothDamp() の引数が、通常の用途で短く書けるよう変更されました(必ず修正が必要です)
  • ConcurrentTaskAsyncTask に名前が変更されました
  • マルチスレッド関連 API の使用に SIV3D_CONCURRENT マクロの定義は不要になりました
  • Vec2::setLength(double) は自身を変更せず、変更後の値を返すようになりました。従来の使い方は Vec2::setlengthSelf(double) を使います
  • 乱数の分布クラスの仕様変更により、乱数の結果が旧バージョンと異なります
  • High DPI ウィンドウがデフォルトになり、SIV3D_WINDOWS_HIGH_DPI マクロは廃止されました
  • Stopwatch のコンストラクタなど、一部の API の bool 型の引数は、より説明的な YesNo 型に変更されました
  • 2D 図形のインデックス配列は Array<uint16> ではなく Array<TriangleIndex> で表現するようになりました。1 つの TriangleIndex は 3 つのインデックス情報を持つので、配列の要素数は 3 分の 1 になります
  • Key クラスは Input クラスに名前が変更されました

OpenSiv3D v0.6.1 ~ v0.6.2

リリース予定時期: 2021 年後半

主要な新機能

  • 数式のレンダリング
  • UDP 通信対応
  • OSC 対応
  • マルチタッチ対応
  • ペンタブのサポート
  • 高度な 3D 表現の追加
  • テキストの縦書き描画の改善
  • glTF サポート
  • 3D 物理演算
  • Apple Silicon 対応
  • ゲーム開発を補助するライブラリ

ドキュメント

  • API リファレンスの完成

OpenSiv3D v0.7.0

リリース予定時期: 2021 年末

主要な新機能

  • 流体シミュレーション
  • 3D 地形の構築、レンダリング
  • Effekseer との連携
  • Sprite Studio との連携
  • Azure Kinect との連携
  • Leap Motion との連携
  • Photon との連携
  • MIDI ファイルのレンダリング
  • PSD ファイル読み込み
  • 3D アニメーション

OS サポートの終了

  • Windows 7 SP1 のサポートを終了
  • macOS 10.14 Mojave のサポートを終了

OpenSiv3D v0.8.0

リリース予定時期 2022 年 夏

主要な新機能

  • 複雑な GUI のサポート
  • C++23 対応

OpenSiv3D v0.8.x

リリース予定時期 2022 年 秋

  • v1.0 リリースに向けた API の調整、ドキュメントの整備

OpenSiv3D v1.0

リリース予定時期 2022 年 秋

OpenSiv3D の v1.0 の大まかな条件としては

  • 旧 Siv3D の機能を完全にカバー (v0.7.x で達成予定)
  • 十分に整備された 3D 描画 API (v0.6.0 で初実装、1 年以上かけて安定化)
  • 全 API のドキュメント整備(v0.6.2 で達成予定)
  • 以降の破壊的変更の抑制(v0.8.x で達成予定)

を考えています。したがって、早ければ 2022 年秋頃の v0.8.x がほぼそのまま v1.0 になる見込みです。

Discussion

もしかしたら既に実装されているのかもしれませんが……

Processingでいうところのmap()関数、渡された数値をある範囲から別の範囲に変換する関数がほしいです。processingでは、map関数を使ってインタラクティブなデザインを作ることが多いです。(下記事参考)

https://note.com/deconbatch/n/nde9d61a91044

実装自体は非常に単純なため、普段は自分で実装してしまうのですが、標準で用意されていると助かります。

提案ありがとうございます! 提案コメント第一号で嬉しいです 🥰
現バージョン (v0.4.3) では Math::InvLerp()Math::Lerp() の組み合わせで(まとめれば)ワンライナーで書くことができますが、1 つの関数になっていると便利そうです。
その関数の良い名前を考えるのがネックなのですが、思いついたらかなり前向きに検討します。(Map でいいのかな・・・)

# include <Siv3D.hpp> // OpenSiv3D v0.4.3

namespace s3d::Math
{
	template <class Type>
	[[nodiscard]]
	inline constexpr auto Map(double value, double start1, double stop1, const Type& start2, const Type& stop2) noexcept
	{
		return Math::Lerp(start2, stop2, Math::InvLerp(start1, stop1, value));
	}
}

void Main()
{
	while (System::Update())
	{
		const double x = Math::Sin(Scene::Time());

		ClearPrint();
	
		Print << Math::Map(x, -1, 1, 200, 600);

		Circle(Math::Map(x, -1, 1, Vec2(200, 300), Vec2(600, 300)), 20).draw();
	}
}

自分が普段作るのとは違う形の実装で参考になります。

自分は、mapを自作する際、linearMap(線形写像)と名付けていた時期もあったのですが、長ったらしいので、今はmapと名付けています。ちなみにOpenFrameworkだと、map関数にofMapお茶を濁した名付けがされていました。

std::mapと名前が被ってしまう問題はありますが、広く使われている名前だと割り切って、Math名前空間に入れた上で、Mapと名付けるのが無難なのかなと思います。

コメントありがとうございます。Map でもいいかなーという気になってきました。先ほど開発中の v0.6 に加えたので、v0.6 リリースでは利用できるようになります。ご提案ありがとうございました。

v1.0 に上がる予定が暫く無いようですが、いつ頃なのだろう、何が基準になっているのだろうと疑問に感じました。

分野や利用者層によりますが、v1.0が長期間出ていないライブラリ/フレームワークは理由が気になりますし、例えばバグが多いのではないかと利用をためらう事も多いかと思います。
どういう事が達成できたらv1.0なのか、あるいはバージョン表記にそういった意味を持たせていないのか等、既に方針をお持ちでしたら記述して頂くのが安心材料になるかと思いました。

「バグが多いのではないかと利用をためらう」

→これは確かに考えないといけませんね。

OpenSiv3D の v1.0 の大まかな条件としては

  • 旧 Siv3D の機能を完全にカバー (v0.7.x で達成予定)
  • 十分に整備された 3D 描画 API (v0.6.0 で初実装、1 年以上かけて安定化)
  • 全 API のドキュメント整備(v0.6.2 で達成予定)
  • 以降の破壊的変更の抑制(v0.8.x で達成予定)

と考えています。

したがって、早ければ 2022 年秋頃の v0.8.x がほぼそのまま v1.0 になる見込みです。
v1.0 までの見通しを追記しようと思います。コメントありがとうございました。

さっそくの追記ありがとうございます、すぐに答えて頂けるくらい見通しがしっかりしていて凄いですね。

ログインするとコメントできます