Kanzi 4.1.0 リリースノート

変更点

  • CMake の最小必要バージョンを 3.25 に引き上げました。

    Android プロジェクトでは、Gradle が CMake バージョン 3.30.5 を使用するように設定されています。これは、Android SDK が提供する互換バージョンのうち最も低いバージョンであるためです。

  • CMake 3.27 で導入された CMake ポリシー CMP0144 に準拠するため、CMake のヒント変数 KANZI_ROOT の名前を Kanzi_ROOT に変更しました。

    プロジェクトまたはビルド環境で Kanzi のインストール場所を指定するために KANZI_ROOT を設定している場合は、名前を Kanzi_ROOT に変更してください。ビルドシステムの変更点 を参照してください。

  • Value Accumulators にフレームごとのインクリメントモードを追加しました。Value Accumulator を、時間間隔に基づいてではなく、フレームごとに 1 回値をインクリメントするように設定できるようになりました。

    フレームごとのインクリメントモードを使用するには、Value Accumulator の Increment Mode プロパティを Per Frame に設定します。このモードでは、Value Accumulator は Increment Time Interval プロパティを無視し、毎フレーム、累積値をインプット値だけインクリメントします。

    プロパティタイプの値をインクリメントする を参照してください。

  • カスタム実装を簡単にするため、リストボックスのクラスをリファクタリングしました。

    リストボックス (List Box) の変更 を参照してください。

  • Kanzi Studio は、デフォルトのマテリアルを .kzmat ファイルからではなく、<KanziInstallation>/Studio/Asset Library/MaterialTypes プロジェクトからインポートするようになりました。

  • Kanzi Studio の Preview ウィンドウで Alt キーを押し続けると、Camera tool と Node tool が切り替わるようになりました。

  • Kanzi Studio で Preview のスクリーンショットを撮影する際に、選択範囲のアウトラインが写り込まなくなりました。

  • Binary Export のプロジェクト設定に Target Shader Family プロパティを追加しました。このプロパティを使用して、Kanzi Studio が kzb ファイルに含めるシェーダーファミリーを設定します。デフォルトでは、Kanzi Studio は OpenGL、OpenGL ES、Vulkan の 3 つのファミリーすべてを含めます。kzb ファイルのサイズを削減するには、ターゲットプラットフォームで使用しないファミリーを削除してください。

    エクスポートするシェーダーファミリーの設定 を参照してください。

  • ソートの回避策としてオブジェクトソースを使用しなくても、Draw Objects レンダーパス内で直接レンダーエントリーをソートできるようになりました。ソートを使用するには、DrawObjectsRenderPass.SortingOrder プロパティを設定します。以下の順序がサポートされています。

    • None - プロパティが設定されていない場合と同じです。

    • BackToFront - カメラから遠いクラスターから先に描画されます。半透明のコンテンツに使用します。

    • FrontToBack - カメラに近いクラスターから先に描画されます。不透明のコンテンツに使用します。

    • Material - クラスターがマテリアルごとにグループ化されます。シェーダーの切り替えを減らすために使用します。

    「クラスター」という用語を使用しているのは、SortingOrder を使用する場合、Kanzi がオブジェクト全体ではなくレンダーエントリーをソートするためです。つまり、異なるマテリアルを持つ複数のクラスターを含むメッシュを持つ Model3D でも、使用するシェーダーによって確実にソートできます。ソートは安定ソートではありません。つまり、ソート値が同一の 2 つのクラスターの正確なレンダリング順序は、フレーム間で一貫することが保証されません。

    これらの変更により、DrawObjectsRenderPass のレンダーエントリーリストへのノードの追加と削除にかかるコストも削減されます。

  • 同じ名前で設定が競合する動的プロパティタイプを作成しても、すぐにエラーがスローされなくなりました。

  • 以下のサードパーティライブラリを更新しました:

    • Zlib を 1.2.13 から 1.3.2 に更新

    • LibPNG を 1.6.37 から 1.6.55 に更新

    • FreeType を 2.12.1 から 2.14.3 に更新。FreeType の内部 TrueType インタープリターが更新されました。これにより、テキストのレンダリングにわずかな違いが生じることがあります。

    • HarfBuzz を 8.3.0 から 13.2.1 に更新。この更新ではテキストシェーピングの動作が変更されており、テキストレイアウトに小さな違いが生じることがあります。

  • 以下のサードパーティライブラリの使用を開始しました:

    • FlatBuffers 25.12.19-2026-02-06-03fffb2。誰でも記述できるパブリックなスキーマを使用して Kanzi のリソースを定義できるようにするための基盤です。

    • yaml-cpp 0.9.0。ファイル形式の変換に使用される Kanzi の YAML パーサーおよびライターです。Tiny-XML を置き換える予定です。

    • Protobuf 3.8.0。より柔軟な KZA 表現を実現するための、Emscripten プラットフォームパッケージにおける概念実証作業に使用します。

    • Qualcomm Shadow Denoiser 1.0。レイトレーシングによるシャドウのノイズを低減するために使用します。

  • .kzb ファイル内のイメージデータで FlatBuffers メッセージを使用するようになりました。これは、将来ユーザーが公開されているスキーマを使用して、作成済みのバイナリ BLOB を Kanzi に送信できるようにすることを目的としています。現時点では、この変更はユーザーには見えません。

  • Android 用の Kanzi テンプレートに KANZI_LINK_KZMONITOR CMake オプションを追加しました。Monitor プラグインをリンクするには、build.gradle でこのオプションを有効にします。統合の詳しい手順については、Kanzi Monitor ドキュメントの Gradle、CMake、Android Studio を使用した Android プロジェクトへの統合 を参照してください。

Kanzi Engine Lua API

  • DataObject::create のオプションのアーギュメントを使用して、データオブジェクトの子ツリーを定義できるようになりました。

  • イテレーター Node2D:iterateChildren と Node3D:iterateChildren を使用して、ノードの子を反復処理できるようになりました。

  • メインループスケジューラーにタスクとタイマータスクを登録できるようになりました。メインループスケジューラーのタスクの登録 を参照してください。

  • Node が所有するノードコンポーネントを操作できるようになりました。

  • MessageArgument の子で、継承されたプロパティのゲッターとセッターを使用できるようになりました。

  • Node クラスで InputManipulator のメソッドを使用できるようになりました。

  • Lua ランタイムが Debug バージョンと Release バージョンに分割されました。Release バージョンではアーギュメントの検証チェックがすべて削除されています。詳細なエラーメッセージは得られなくなりますが、パフォーマンスが向上します。

  • Lua ランタイムは、Metaclass::createInstance メソッドを経由せずに、対応する C++ 関数に直接ディスパッチしてオブジェクトを作成するようになりました。

レンダリング

  • MappedBuffer クラスを削除しました。バッファーのマッピングは、kzgfx::mapBuffer と kzgfx::unmapBuffer を使用して直接行えるようになりました。マッピングせずにバッファーを更新するには、CommandRecorder コマンドまたは kzgfx コマンドを直接使用します。

  • PipelineStateRenderPass に AlphaToCoverageEnabled プロパティを追加しました。このプロパティは Alpha to Coverage の GPU サポートを有効にします。葉、草、煙など半透明のテクスチャを持つオブジェクトやパーティクルをレンダリングする場合は、このプロパティを有効にすることを検討してください。少ない処理オーバーヘッドで、シャープでアンチエイリアスの効いたエッジが得られます。このプロパティは Draw および MultiDraw の prism ノードでも使用できます。

  • GraphicsColorWriteMode エヌメレーションを、ビットマスクフラグ型である gfx::ColorWriteMask に置き換えました。ビット単位の OR オペレーターを使用して個々のチャンネルフラグを組み合わせ、チャンネルごとのカラー書き込みを制御できるようになりました。

    PipelineStateRenderPass のカラーライトモードの変更点 を参照してください。

  • 以前のコンテンツが不要な場合、Kanzi はフレームバッファーの内容をクリアする代わりに無効化するようになりました。これにより、フレームバッファーのメモリをタイルメモリとの間でコピーする必要がなくなるため、パフォーマンスが向上します。

  • GPUBuffer クラスは GPUResource から派生するようになりました。このクラスは、ライフタイム全体を通じて単一のバッファーハンドルのみを管理し、内部でバッファーのサイズを変更しなくなりました。

    その結果、Mesh クラスと Geometry クラスの API も変更されました。

  • RenderState::HandleType 型は強い型付けの列挙型になり、名前が RenderStateHandle に変更されました。-1 ではなく RenderStateHandle::Invalid で初期化する必要があります。

    RenderStateHandle は、ハンドルの上位ビットに RenderStateDomain をエンコードするようになりました。getRenderStateDomain(RenderStateHandle handle) を使用すると、ドメインに簡単にアクセスできます。ドメインを使用すると、この RenderStateHandle に関連付けられた値がテクスチャ、バッファー、ユニフォーム、アクセラレーション構造のいずれであるかを判別できます。

  • Kanzi では、シェーダーに GLSL ES 310 以上またはデスクトップ GLSL 140 以上の ソース構文 が必要になりました。OpenGL ES 3.0 までのデプロイターゲットは引き続きサポートされます。ソースがターゲットバージョンより後に導入された機能を使用していない限り、シェーダーはプロジェクトの Target Graphics API 設定で必要な方言にクロスコンパイルされます。プロジェクトのシェーダーを移行するには、シェーダーコンパイルの変更 を参照してください。

  • 新しいプロジェクトのデフォルトの Target Graphics API は OpenGL ES 3.1 になりました。既存のプロジェクトでは現在の設定が維持されます。

  • Volume Texture のサポートを追加しました。

    ボリュームテクスチャを使用する を参照してください。

  • Buffer オブジェクトのサポートを追加しました。

  • Compute レンダーパスのサポートを追加しました。

  • Basis Universal テクスチャ圧縮のサポートを追加しました。サポートされるテクスチャモードは UASTC LDR、UASTC HDR 4x4、UASTC HDR 6x6、ETC1S です。

  • Kanzi Studio のプレビューの 3D Grid の表示を改善しました。グリッドが単位ベースになったため、読み取りやすくなり、3D 空間にオブジェクトを配置する際のガイドとして使いやすくなりました。

    ../../_images/3d-grid-visualization.gif
  • ディレクショナルシャドウの投影フィッティングの自動化をサポートするため、RenderPass::CameraSettings::initializeFromLight を変更しました。

  • ベロシティバッファーの生成 のサポートを追加しました。マテリアルでピクセルごとのスクリーン空間ベロシティを出力できるようになりました。これは、モーションブラーやテンポラルアンチエイリアス (TAA) などのエフェクトの基盤となります。

    この機能では、以下が導入されます: - 物理ベースレンダリングのマテリアル用の新しいプリプロセッサーデファイン KANZI_SHADER_OUTPUT_VELOCITY と KANZI_SHADER_OUTPUT_VELOCITY_INDEX。 - ベロシティ計算用に前のフレームの projection-camera-world 行列を提供する、新しい kzPreviousProjectionCameraWorldMatrix フィックスドユニフォーム。

  • Mesh::CreateInfo とその関連 API の構成を変更しました:

    • 頂点ソースデータがアトリビュートごとにデインターリーブされるようになりました。Mesh::CreateInfo::vertexData と vertexBufferHandle は削除されました。各 MeshVertexAttribute は、独自の initialData バイトとオプションの bufferHandle を持ちます。

    • 作成された Mesh の頂点バッファーは、Mesh::getVertexBuffer を通じてアトリビュートごとに公開されるようになりました。コンテナー型は Mesh::VertexBufferContainer です。

    • MeshVertexAttribute::dataType と dimension は、単一の gfx::Format フィールドに統合されました。gfx::ChannelType の新しいバリアント UNorm、SNorm、UFloat により、フォーマットを正確に分類できます。MeshVertexAttribute::stride は削除されました。gfx::getPixelStride から導出してください。

    • 構造化された Mesh::CreateInfo の検証機能を追加しました: validateCreateInfo、getVerboseDescription、および Mesh::CreateInfo::Status 列挙型。

    • adjustForDeviceCapabilities は、調整内容を記述する vector<Mesh::CreateInfo::Adjustment> を返すようになりました (以前は void)。

    • パイプラインの検証で、UNorm/SNorm/UFloat チャンネル型を、シェーダーの float インプット、ColorRGBA のクリア値、ColorRGBA のサンプラーボーダーカラーと互換性があるものとして扱うようになりました。以前は、これらの組み合わせは拒否されていました。

    Mesh::CreateInfo と頂点ヘルパー API の変更 を参照してください。

  • gfx::DepthAttachmentDescription に isDepthReadOnly フィールドと isStencilReadOnly フィールドが追加されました。いずれかを true に設定すると、レンダーパスがデプス/ステンシルアタッチメントの対応するアスペクトを変更しないことを宣言します。これにより、同じデプス (またはステンシル) テクスチャを、フレームバッファーのデプス/ステンシルアタッチメントとしてバインドしたまま、インプットとしてサンプリングできます。パックされたデプス/ステンシルフォーマットで非対称な組み合わせを使用するには、新しい gfx::FeatureId::SeparateDepthStencilLayouts が必要です (Vulkan 1.2 / VK_KHR_separate_depth_stencil_layouts。OpenGL では常に使用可能)。この機能が使用できない場合、レンダーパスの検証で create-renderpass-separate-depth-stencil-layouts が報告されます。コマンドストリームの時点では、バインドされたデプス/ステンシルステートが読み取り専用のアスペクトを変更する場合、読み取り専用パス内の BeginRenderPipelineCommand が commands-begin-render-pipeline-depth-write-in-read-only-pass または commands-begin-render-pipeline-stencil-write-in-read-only-pass を報告します。両方のフィールドのデフォルトは false であり、既存のパイプラインには影響しません。また、CompositionTargetRenderPass は、外部から提供されたデプスターゲットを再利用する場合に、フレームバッファーを無効化しなくなりました。

  • Mesh の頂点バッファーをデインターリーブするようにリファクタリングし、各アトリビュートに単一のバッファーで個別にアクセスできるようにしました。その結果、Mesh クラスの以下のメソッドでは、特定のアトリビュートにアクセスするためのパラメーターが必要になりました: Mesh::getVertexBufferHandle、Mesh::getVertexBuffer、Mesh::setVertexData、Mesh::setVertexSubData。

    Renderer API の変更 を参照してください。

  • シェーダーリフレクションで、すべてのインプットアトリビュートとアウトプットアトリビュートの location 修飾子と component 修飾子が公開されるようになりました。gfx::reflection::ReflectionInfo::inputAttributes と outputAttributes は、アトリビュート名を、location、component、既存の typeInfo を保持する新しい gfx::reflection::Attribute 構造体にマップするようになりました。これにより、フラグメントアウトプットがどのカラーアタッチメントのどのチャンネルに書き込むかについて、コンパイルされたシェーダーが唯一の信頼できる情報源となります。これには layout(location = 1, component = 2) out float のようなコンポーネント修飾付きのレイアウトも含まれ、複数のスカラーアウトプットを単一のレンダーターゲットにパックするパスで役立ちます。

    レンダーパイプラインの検証では、新しいリフレクションフィールドを使用して、バインドされた各カラーアタッチメントのブレンドステートの書き込みマスクを、リフレクションされたアウトプット、バインドされたアタッチメントのチャンネルセット、アクティブなレンダーパスと照合します。このチェックは BeginRenderPipelineCommand の処理時に実行され (バリデーターが実際のアタッチメントフォーマットを確認できるのはこの時点のみです)、フラグメントシェーダーが生成せず、かつ バインドされたアタッチメントが持つチャンネルへの書き込みをブレンドステートが有効にしている場合に commands-color-write-mask-mismatch を報告します。バインドされたアタッチメントにないチャンネルを対象とする書き込みマスクビットは、ハードウェア上では何も実行されないため、警告は出ません。location がバインドされたアタッチメント数を超えるフラグメントアウトプットもチェックの対象外です。超過した書き込みは破棄されるため、単一のシェーダーで可変数のバインドされたアタッチメントを駆動できます。

  • デインターリーブされたメッシュバッファー用のバインディングエクスプレッションのアクセサーを追加しました。バインディングエクスプレッションから Mesh のアトリビュートごとの GPU バッファーと数を直接読み取れるようになりました: meshGetPositionBuffer、meshGetNormalBuffer、meshGetTangentBuffer、meshGetUVBuffer、meshGetIndexBuffer、meshGetVertexCount、meshGetIndexCount。これにより、例えば、C++ コードを書かずに、メッシュの頂点バッファーをストレージバッファーとして Compute Render Pass にバインドしたり、頂点数またはインデックス数からディスパッチサイズを決定したりできます。

    メッシュ関数 を参照してください。

  • 出力ビューポートプロパティを kanzi::DrawObjectsRenderPass から RenderPass 基底クラスに移動し、このプロパティがレンダーパスによって生成されるビューポート領域を報告することを明確にするため、名前を RenderPass::OutputViewportProperty に変更しました。現在は、ドローオブジェクト (Draw Objects) レンダーパスだけでなく、すべてのレンダーパスがこのプロパティを公開します。

    Renderer API の変更 を参照してください。

  • Render Target Texture と Cubemap Render Target Texture の Depth / Stencil Attachment プロパティを改善しました。

    • Depth 32-bit, Stencil 8-bit (D32_SFLOAT_S8_UINT) フォーマットを有効にしました。32 ビット浮動小数点のデプスと 8 ビットのステンシルを組み合わせたアタッチメントが必要な場合は、このフォーマットを使用します。

    • デプスの精度を高めるため、デフォルトのフォーマットを Depth 32-bit (D32_SFLOAT) に変更しました。

    • 選択したフォーマットが GPU でサポートされていない場合に、サポートされている最も近いフォーマットをフォールバックとして使用するサポートを追加しました。

  • GraphicsLoggingEnabled アプリケーション設定オプション、対応する --log-graphics コマンドラインオプション、およびパブリック API kanzi::Renderer::setLogging を削除しました。このオプションは OpenGL/Vulkan レンダラーのリファクタリング以降、何の効果もありませんでした。グラフィック API 呼び出しのロギングの再実装は、RENDERING-2703 で別途管理されています。

  • kanzi::Renderer::getLogging と kanzi::Renderer::getDumpStateOnDrawCalls を削除しました。kanzi::Renderer::setLogging の削除後、これらのゲッターには対応するセッターがなく、戻り値をパブリック API で変更する手段がありませんでした。

    Kanzi 4.1.0 には、グラフィックスバックエンド、デバイス、バージョン、拡張機能、およびフォーマットのサポートについて起動時に 1 回だけ出力するレポートとして、グラフィックス情報のロギングが含まれています。これは、アプリケーション設定オプション LogOpenGLInformation、LogOpenGLExtensions、および LogSurfaceInformation で制御します。Kanzi 3.9 で利用可能だったグラフィックス API 呼び出しのロギング (ステートのダンプを伴うドローコールごとのトレース) は含まれていませんが、今後のリリースで復活する予定です。

  • Bindless Raytracing Advanced の例を追加しました。この例では、3D シーンでバインドレスレンダリングを使用してレイトレーシングによるシャドウとリフレクションを実現する方法を示します。この例には、Build Acceleration Structure、Raytraced Shadows、Raytraced Reflections の各パスを含むカスタムレンダーパスプレハブが含まれています。

    Bindless Raytracing Advanced の例 を参照してください。

  • エクスペリメンタル機能としてレイトレーシングのサポートを追加しました。ターゲットグラフィック API として Vulkan 1.2 以降が必要です。

    注釈

    レイトレーシングは エクスペリメンタル 機能です。API は今後のリリースで変更される可能性があります。

    以下のレンダーパスが利用可能です。

    • BuildAccelerationStructureRenderPass — フレームごとにシーンのジオメトリからトップレベルのアクセラレーション構造を構築します。

    • RaytracedShadowRenderPass — レイをトレースして、選択したライトのスクリーン空間シャドウマスクを生成します。

    • RaytracedReflectionRenderPass — レイをトレースして、粗さが設定可能なしきい値未満のサーフェスについてピクセルごとのリフレクションを計算します。

    • DenoiserRenderPass — 合成の前にシャドウマスクにテンポラルノイズ除去を適用します。

    完全に動作する例については、Bindless Raytracing Advanced の例 のサンプルプロジェクトを参照してください。

  • エクスペリメンタル機能としてバインドレスのサポートを追加しました。ターゲットグラフィック API として Vulkan 1.2 以降が必要です。

    注釈

    バインドレステクスチャのサポートは エクスペリメンタル 機能です。API は今後のリリースで変更される可能性があります。

    以下のクラスが導入されました。

    • BindlessTextureRegistry は、2D テクスチャのバインドレスディスクリプタ配列を管理します。テクスチャは参照カウントされるため、同じテクスチャを複数回登録しても安全です。シェーダーは、個別のディスクリプタバインディングではなく整数インデックスでテクスチャにアクセスします。

    バインドレスを有効にしたシェーダーは、kzGPUScene ユニフォームブロックを通じて公開される、以下の GPU 常駐シーンデータにもアクセスできます。

    • kzGPUSceneMeshInfo — 位置、法線、接線、UV、インデックスのメッシュごとのバッファデバイスアドレス。

    • kzGPUSceneInstanceInfo — クラスターインスタンスごとの変換行列と、メッシュテーブルおよびマテリアルテーブルへのインデックス。

    • kzGPUSceneMaterialInfo — マテリアルごとのプロパティ値。この構造体は ユーザー定義 です。共有 GLSL ヘッダーで宣言し、バインドレスシーンに参加するすべてのシェーダーでインクルードします。エンジンはリフレクションを使用してレイアウトを検出し、それに従ってマテリアルデータをパックします。シーン内のすべてのシェーダーは、同じ kzGPUSceneMaterialInfo 構造体を宣言する必要があります。

    • kzGPUSceneMaterialIndex — エンジンが描画ごとに設定するユニフォーム。マテリアルバッファのインデックス指定に使用され、現在レンダリング中のクラスターの kzGPUSceneMaterialInfo を取得します。

    これらの構造体を組み合わせることで、シーン全体のジオメトリとマテリアルデータをあらゆるシェーダーステージで利用できるようになります。これにより、アルファテストを行うマテリアルを使用した GBuffer レンダリングや、レイのヒット時に任意のメッシュとマテリアルについてヒットしたサーフェスのプロパティを解決する必要があるレイトレーシングによるリフレクションなどのエフェクトが可能になります。

    完全に動作する例については、Bindless Raytracing Advanced の例 のサンプルプロジェクトを参照してください。

アプリケーションフレームワーク

  • Android でトレースファイルの出力ディレクトリを設定するための setTracingOutputDirectory 関数を Kanzi アプリケーションフレームワーク (appfw) に追加しました。

  • DomainController ベースクラスと Domain::getController アクセサーを追加しました。Application は DomainController から派生しているため、Domain ポインターを保持するプラグインは、domain->getController<MyApplication>() を使用して、真にホスト固有のステート (ホストのサブクラスでカスタマーが定義したメソッドとフィールド) にアクセスできます。その際、Domain が Application に依存することはありません。これはホスト上に存在するステートに使用します。シーングラフやその他の Domain が所有する機能へのプラグインからのアクセスには、対応する Domain アクセサーを使用します。Application から派生しないホストは、DomainController から直接派生することで、同じメカニズムを通じてホストインスタンスをプラグインに公開できます。

    DomainController を Application のベースとして追加したことで、後者の vtable とオブジェクトのレイアウトがずれるため、Kanzi 4.1.0 のヘッダーを使用してビルドしたツリー外のプラグインとアプリケーションは、再ビルドする必要があります。

  • Engine プラグインが、登録時に受け取る Domain ポインターを通じて、Application に依存することなく Application が所有する機能に直接アクセスできる Domain アクセサーのセットを追加しました。

    ホストがその機能を提供していない場合、各アクセサーは空の値またはデフォルト値を返します。使用する前に結果を確認してください。

テンプレート

  • C++ コードを使用するアプリケーションテンプレートに、iOS プラットフォームの構成が含まれるようになりました。Application、Application with data source plugin、または Application with Kanzi Engine plugin テンプレートを使用してプロジェクトを作成すると、Kanzi Studio は、すぐに使える iOS 用の CMake 構成と、Xcode プロジェクトを生成するためのヘルパースクリプトを生成します。

    Kanzi アプリケーションを iOS 向けに開発する を参照してください。

  • Conan 版の Studio アプリケーションテンプレートを削除しました。

プラットフォーム

iOS

  • Kanzi for iOS はビューレベルで統合されるようになったため、任意の iOS アプリケーションで Kanzi コンテンツをネイティブビューと並べて埋め込むことができます。UIKit アプリケーションでは KanziView を、SwiftUI アプリケーションでは KanziViewRepresentable を使用します。

    Kanzi アプリケーションを iOS 向けに開発する を参照してください。

  • Kanzi アプリケーションテンプレートに、KanziView をホストする iOS アプリケーションシェルが付属するようになりました。Application、Application with data source plugin、および Application with Kanzi Engine plugin テンプレートから作成したプロジェクトは、変更なしで iOS 向けにビルドできます。生成される configs/platforms/ios/src/ ディレクトリには、UIApplicationMain エントリポイント、アプリデリゲートとシーンデリゲート、および KanziView をホストする UIViewController が含まれています。

    Kanzi アプリケーションを iOS 向けに開発する を参照してください。

Android

  • Android NDK のバージョンを 28.2.13676358 に更新しました。Android 15 以降のデバイスでの Google Play との互換性 に必要なとおり、Kanzi はデフォルトで 16 KB のページサイズをサポートするようになりました。Android NDK バージョンの変更 を参照してください。

  • Android の例とチュートリアルを最新のテンプレートに合わせて更新し、JDK 21 を使用できるようにしました。

  • 選択したワークスペースのパスにスペースが含まれている場合、Kanzi インストーラーが警告を表示するようになりました。Android Gradle Plugin は、スペースを含むワークスペースパスからネイティブ共有ライブラリをパッケージ化できません。

  • getkanzi.gradle は、Kanzi ワークスペースの解決に使用したソース (local.properties、Gradle プロパティ、KANZI_HOME 環境変数、または親ディレクトリの検索) と、解決されたパスをログに出力するようになりました。これにより、Android ビルド中のワークスペース解決の問題を診断しやすくなります。Kanzi をライブラリサブプロジェクトとして統合する を参照してください。

パッケージマネージャー

  • 再利用可能なソフトウェアコンポーネントとアセットを共有および管理し、クロスプラットフォームのアプリケーションとプラグインの開発をサポートするための Kanzi パッケージマネージャーを導入しました。パッケージマネージャーを使用すると、プロジェクトの依存関係をインストール、更新、および削除できます。

    パッケージマネージャー を参照してください。

Kanzi インストーラー

Kanzi Android Service

  • Kanzi Android Service フレームワークを導入しました。これにより、複数の Android アプリケーション間で同じ Kanzi インスタンスとリソースを使用できます。さらに、Kanzi コンテンツを共有するアプリケーション間でシームレスなトランジションが可能になります。

    アプリ間トランジションアニメーションの例

    Kanzi Android Service での開発 を参照してください。

Kanzi Studio プラグイン

  • Kanzi Studio は、依存 DLL を持つプラグインに対して、マニフェストベースのプラグイン検出をサポートするようになりました。すべてのプラグインファイルを plugins ディレクトリ下のサブディレクトリに配置し、エントリポイント DLL を宣言する <PluginName>.manifest.json ファイルを追加します。Kanzi Studio は宣言されたエントリポイント DLL のみをロードし、その他の依存関係は同じディレクトリから解決します。

  • Kanzi Studio は、プラグインのホットリロードをサポートするようになりました。Kanzi Studio の実行中に plugins ディレクトリでプラグインファイルを追加、更新、または削除すると、Kanzi Studio は変更を自動的に検出し、再起動を必要とせずにプラグインをリロードします。プラグインを削除すると、Kanzi Studio は開いているプラグインウィンドウをすべて閉じ、関連するメニュー項目をクリーンアップします。

Kanzi Studio プラグインのインストール を参照してください。

Kanzi Studio プラグイン API

  • Kanzi Studio プラグイン API で KanziStudio.GetPreviewScreenshot が公開されるようになりました。このメソッドは、現在の Preview フレームをキャプチャし、PNG エンコードされたバイト配列として返します。

  • 指定したタイプ (Directional Light、Point Light、または Spot Light) の Light ノードを作成する Project.CreateLightNode を追加しました。

  • 明示的な HDR インポート設定 (2D テクスチャ、環境キューブマップ、IBL キューブマップ、解像度、およびサンプル数) を受け取る、Commands.ImportImages の非対話型オーバーロードを追加しました。

Kanzi Studio のユーザビリティ

  • Kanzi Studio は、kzm フォーマットのバージョンをルートの kzm ファイルにのみ書き込むようになりました。kzm ファイルは、同じバージョンの Kanzi Studio のプロジェクト間でのみコピーしてください。kzm ファイルをコピーする を参照してください。

  • Kanzi Studio で、プロジェクトアイテムを共有可能なアーカイブとしてエクスポートし、それをプロジェクトにインポートできるようになりました。プロジェクトアイテムのエクスポートとインポート を参照してください。

  • Kanzi Studio はマテリアルタイプ (.kzmat) の保存をサポートしなくなり、ディスクからのマテリアルタイプのロードは非推奨になりました。代わりに、プロジェクトアイテムのエクスポートとインポートを使用してください。プロジェクトアイテムのエクスポートとインポート を参照してください。

  • Kanzi Studio は、デフォルトのマテリアルを .kzmat ファイルからではなく、<KanziInstallation>/Studio/Asset Library/MaterialTypes プロジェクトからインポートするようになりました。

  • Kanzi Studio は、プロジェクトディレクトリに手動で追加された kzm ファイルとフォルダを、プロジェクト階層に接続されていない場合でも保持するようになりました。これにより、ファイルをコピーしてプロジェクト間でプロジェクトアイテムを再利用したり、ファイルが予期せず削除されることなく独自のフォルダ構成を使用したりできます。

  • プロジェクトディレクトリ内の .kzm ファイルが Kanzi Studio の外部で変更されたことを検出すると、Kanzi Studio は既存のリロードオプションに加えて、ディスク上の変更を未保存のローカル変更にマージするオプションを提示するようになりました。kzm ファイルの変更への対応 を参照してください。

  • 複数のプロジェクトが Kanzi Studio の外部で変更された場合、Kanzi Studio は単一のダイアログウィンドウを表示し、これらすべてのプロジェクトの変更を Reload、Merge、または Ignore するよう求めるようになりました。

  • Kanzi Studio は、プロジェクトアイテムの作成タイムスタンプを .kzm ファイルにシリアライズしなくなりました。Item Details ダイアログと Find ダイアログには、以前の Created フィールドの代わりに、アイテムを含む .kzm ファイルの最終更新時刻から取得した Last modified の値が表示されるようになりました。プロジェクトを開いて保存しても、.kzm ファイル内のこれらのタイムスタンプは書き換えられなくなりました。

  • Kanzi Studio スクリプトから ImportAsset3DSourceFile コマンドを使用して、3D アセットをインポートできるようになりました。

  • Kanzi Studio は、ユーザーが観察できる特定の操作のパフォーマンス測定値を記録し、Kanzi Studio のログファイルに書き込むようになりました。計測対象の操作は、プロジェクトのオープン、プロジェクトの作成、プロジェクトの保存、kzb のエクスポート、およびプレビューの開始です。各操作では、[PROFILE] タグが付いた 1 行が出力され、操作名、ミリ秒単位の所要時間、およびプロジェクトパスや出力サイズなどのメタデータが含まれます。

    プロファイリングはデフォルトでオフになっています。有効にするには、Edit > User Preferences > Advanced > Profiling で Enable profiling を選択します。この設定は Kanzi Studio のセッション間で保持されます。プロファイリングの出力は、%TEMP%\KanziStudioLogs\KanziStudio.log にある Kanzi Studio のログに表示されます。

  • サムネイルのレンダリングが有効になっている場合でも、Kanzi Studio の Preview のフレームレートが低下しなくなりました。

Prism グラフエディタ

  • Prism グラフエディタが、編集中に接続を検証するようになりました。エディタは無効な接続をハイライトし、問題をツールチップに表示します。

    ../../_images/prism-invalid-connection-highlight.gif
  • Prism Editor で Blit ノードの Blit Material プロパティで選択されているマテリアルを変更すると、以前に選択されていたマテリアルに関連付けられたすべてのプロパティが削除されるようになりました。

  • Prism グラフエディタで有効な接続にホバーすると、詳細なフレームバッファ情報が表示されるようになりました。ツールチップには、接続を流れるデータのアスペクト、フォーマット、解像度が表示されます。

    ../../_images/prism-valid-connection-tooltip.gif
  • 新しい Prism ノードタイプを追加しました:

    • Chromatic Aberration

    • Color Grading

    • Vignette

  • Generate Shadowmap ノードに、ディレクショナル投影を設定するための新しいプロパティが追加されました。

  • Prism ノードのマテリアルプロパティに Override value from Viewport ボタンが追加されました。これにより、Prism グラフを使用する各ビューポートがプロパティ値を個別にオーバーライドできます。

    ../../_images/prism-override-property.gif
  • Shadow Effect 2D ノードのプロパティとの衝突を避けるため、Color Grading Prism ノードのプロパティの表示名を変更しました:

    以前の名前

    新しい名前

    Highlight Color

    Grading Color Highlight

    Highlight Range

    Grading Highlight Range

    Midtone Color

    Grading Color Midtone

    Shadow Color

    Grading Color Shadow

    Shadow Range

    Grading Shadow Range

    Hue Saturation Value

    Grading Hue Saturation Value

  • Prism グラフエディタが レンダーパス (Render Pass) ノードをサポートするようになりました。Build Acceleration Structure レンダーパスや Compute レンダーパスなどのエンジンのレンダーパスタイプを、Prism グラフに直接追加できます。各レンダーパスノードは、そのエンジンプロパティを Prism エディタで編集できるように公開します。

    ../../_images/prism_graph_render_pass_nodes.png
  • Prism グラフエディタが、レンダーパスノード間の リソースプロパティのバインディング をサポートするようになりました。あるレンダーパスノードのリソース出力プロパティから、別のレンダーパスノードの同じタイプのリソースプロパティへバインディングラインをドラッグすると、値がコピーされます。

    ../../_images/bind-toplevelas.gif

    実践的な例については、Render Pass ノードのプロパティをバインドする を参照してください。

  • Prism グラフエディタが、レンダーパスノードのリソース以外のプロパティで テキストプロパティのバインディング をサポートするようになりました。レンダーパスノードの数値、論理値、カラー、その他のリソース以外のプロパティを右クリックして Edit binding... を選択すると、その値をバインディングエクスプレッションで制御できます。プロパティの行には、ラベルにバインディングインジケーターが、またエクスプレッションの読み取り専用プレビューが表示されます。バインディングを削除するには、右クリックして Clear binding を選択します。

    実践的な例については、Render Pass ノードのプロパティをバインドする を参照してください。

シェーダーグラフエディタ (エクスペリメンタル)

  • GLSL フラグメントシェーダーを構築するための、エクスペリメンタルなビジュアルノードベースのエディタである Shader Graph Editor を導入しました。GLSL を手書きすることなく、シェーダーグラフを作成し、ノードを接続し、シェーダーコードを生成できます。エディタを有効にするには、Edit > User Preferences > Experimental タブ > Web-based editors に移動し、Shader Graph Editor を有効にします。

    ../../_images/completed-graph.png

    シェーダーグラフ (エクスペリメンタル) を参照してください。

フラグプロパティ

  • 名前付きビットフィールドを持つビットマスクプロパティを定義するための、新しい Flags プロパティタイプを導入しました。New Property Type ウィンドウで、データタイプとして Flags を選択します。このプロパティは、各ビットに個別に名前が付けられた整数のビットマスクを格納します。

    ../../_images/flags-property.png

    valueProvider を参照してください。

Kanzi Engine C++ API

  • Node::lookupNodeRaw の const バージョンを追加しました。

  • タスクディスパッチャ API を変更しました。TaskDispatcherBase は TaskDispatcher に統合され、ヘッダーの場所が変更されました。

    ランタイム API の変更点 を参照してください。

  • TextBoxConcept のメッセージアーギュメントのメタクラスの名前を変更しました。TextBoxConcept API の変更 を参照してください。

  • TextInputManipulator のメッセージアーギュメントのメタクラスの名前を変更しました。TextInputManipulator API の変更 を参照してください。

  • NodeComponent::supportsStateTransition および NodeComponent::transitionFrom 仮想関数を追加しました。カスタムノードコンポーネントでこれらをオーバーライドすると、ステートマネージャーのクロスフェードプロトコルに参加し、ステートマネージャーがステートを切り替えるときに自己駆動のトランジションを実行できます。

  • C++ コーディングガイドラインにより準拠するように MainLoopScheduler をリファクタリングしました。このリファクタリングに伴う移行作業は必要ありません。

  • プラグインを Domain に登録せずに、プラグインが提供するメタクラスを抽出するためのヘルパーを追加しました。<kanzi/core/module/plugin_metadata_extractor.hpp> の新しいパブリック API では、以下が追加されています。

    • collectPluginMetaclasses — Module の参照と、エンジンが所有するメタクラスのベースラインセットを受け取り、そのモジュールが Module::getMetaclassesOverride を通じて提供するメタクラスと、そのプラグイン内での推移的閉包を返します。推移的閉包には、ネストされたメタクラス、メッセージアーギュメントのメタクラス、プラグインで定義されたベースクラス (名前付きおよび名前なし)、プラグインで定義されたミックスインメタクラスが含まれます。リーフのメタクラスのみをリストするプラグインでも、それらの派生元であるプラグイン定義のベースクラスとミックスインのメタデータが得られます。エンジンが所有するメタクラス (指定したベースラインに含まれるもの) は、フォーマットされた出力では名前で参照され、戻り値のベクターには追加されません。

    • LoadedPlugin — プラグインの createModule エントリポイントが生成した Module と、それを生成した共有ライブラリのハンドルの両方を所有する、ムーブ専用の RAII ハンドルです。デストラクターはライブラリを閉じる前にモジュールを破棄するため、ライブラリ内にあるモジュールの vtable はモジュールの存続期間全体を通じて有効なままです。

    • loadPluginForMetadata — プラグインの共有ライブラリを開き、その createModule エントリポイントを呼び出して、値が設定された LoadedPlugin を返します。この関数はモジュールを Domain に登録せず、Module::registerMetadataOverride も呼び出しません。そのため、このフックでセットアップを行うプラグインでも、メタデータの抽出時にそのコストが発生しません。

    ツールからプラグインのメタデータを抽出する場合は、プラグインを Domain に登録して ObjectFactory の差分を取る代わりに、このヘルパーを使用してください。付属の plugin_metadata_reader コンシューマーは、ネイティブプラグイン (.dll / .so) のパスでこのヘルパーを使用しています。

アニメーション (Animations)

  • State Manager が、それぞれ同じ名前の Animation Player を設定しているステート間で切り替わる際に、Animation Player がスムーズにクロスフェードするようになりました。終了するアニメーションと開始するアニメーションは、急に切り替わるのではなく、設定されたトランジションのデュレーションにわたってブレンドされます。

    ステート間でのアニメーションのクロスフェード を参照してください。

シェーダー

  • シェーダーインクルードライブラリを追加しました。これは、Kanzi Studio とともにインストールされる再利用可能な .glsl ファイルのセットです。システムシェーダーファイルをプロジェクトディレクトリにコピーすることなく、#include ディレクティブを使用して任意のプロジェクトシェーダーにインクルードできます。プロジェクト用にシステムシェーダーをカスタマイズするには、Library > Resource Files > System Shaders からクローンします。

    シェーダーインクルードライブラリを使用する を参照してください。

ドキュメント

  • Kanzi 3.9 から Kanzi 4 へのプロジェクトの移行 ページを追加しました。このページでは、Kanzi 3.9 のプロジェクトを Kanzi 4 のテンプレート構造に移行する方法について、CMake の変更、Kanzi リゾルバー、プロジェクトファイルの変換、シェーダーの移行、Android Gradle の変更を含めて説明しています。

  • Kanzi API MCP サーバーと Kanzi Documentation MCP サーバーのドキュメントを含む Kanzi AI ツールの使用 セクションを追加しました。これらのサーバーを使用すると、AI アシスタントを Kanzi の API リファレンスとユーザードキュメントに接続できます。

  • Kanzi Documentation MCP サーバーを、読み込まれているすべての Kanzi バージョンをサポートする統合エンドポイント https://docs.mcp.kanzi.com に更新しました。Claude Desktop 用の mcpb ファイルは https://docs.kanzi.com/mcp/kanzi-docs-mcp.zip から入手できるようになりました。Kanzi ドキュメント MCP サーバー を参照してください。

  • docs.kanzi.com の Documentation サイトのサーチと AI アシスタントを全面的に刷新し、根拠に基づいたより正確な情報を使って、必要な情報をより速く見つけられるようにしました。サーチでは、Kanzi フレームワーク、フィーチャーパック、ツールを含む Kanzi ドキュメント全体から結果が返されるようになりました。また、特定のドキュメントセットや Kanzi のバージョンにサーチを絞り込めるようになりました。新しい AI アシスタント Ask Kanzi は、同じドキュメントと API リファレンスに基づいて質問に回答し、閲覧中のページ(および選択したテキスト)をフォローアップの質問のコンテキストとして使用します。サーチの使用方法の詳細については、Documentation の検索 を参照してください。

  • Kanzi Package Manager (KPM) について説明する パッケージマネージャー セクションを追加しました。このセクションでは、KPM のインストール、Kanzi Studio プラグインの使用、アセットパッケージと Kanzi Engine プラグインを Conan パッケージとして作成およびデプロイする方法を説明しています。

注目すべき修正点

Kanzi Engine

  • スクリプトで追加した Lua のメッセージハンドラーが、ハンドラーを更新または削除した後も、Kanzi Preview を再起動するまで残り続ける問題を修正しました。(ANDROID-1469)

  • リソースのロード中に例外がスローされると、リソースマネージャーの非同期ロードタスクが完了しないことがあり、その結果 Kanzi がシャットダウン時に無期限にハングする問題を修正しました。(FMW-890)

  • 固定幅レンダリングを使用するテキストノードで、発音区別符号やその他の結合文字にフィクストキャラクターウィズス (Fixed Character Width) が誤って適用され、テキストの配置がずれてレンダリングされる問題を修正しました。(FMW-239)

  • フィクストキャラクターウィズス (Fixed Character Width) を使用する TextBox ノードで、カーソル位置とセレクションのハイライトが固定幅のスロット境界に揃わない問題を修正しました。(FMW-243)

  • Trajectory List Box 3D が末尾付近のアイテムまでスクロールされている状態で、データソースがアイテムを一括で置き換えると、Trajectory List Box 3D がクラッシュする問題を修正しました。(FMW-988)

Kanzi Studio

  • プレビューで、外側のノードハンドル ノードツール回転 を使用して選択した 3D ノードを回転させるのが難しい問題を修正しました。(EDITORS-355)

  • Kanzi Studio の Library パネルにおけるコンテキストメニューの誤った動作を修正しました。(EDITORS-552)

  • Prism グラフエディタで Blit ノードを複製する際に、プロパティ値が複製されない問題を修正しました。(EDITORS-551)

  • Kanzi Studio で、kzm ファイル内のシリアライズされた double 型の精度が失われる問題を修正しました。(FMW-883)

  • Prism グラフエディタで、ノードを複製した後に接続を削除しても、ノードのコネクターがクリアされない問題を修正しました。(EDITORS-557)

  • 一部のコンピューターで Kanzi Studio が起動時にクラッシュする問題を修正しました。(EDITORS-238)

  • Kanzi Studio で、表示名が一致するバインディングを編集できない問題を修正しました。(FMW-963)

  • メッシュのクラスターマテリアルに無効な参照が含まれている場合に、Kanzi Studio が終了する問題を修正しました。(FMW-959)

  • Kanzi Studio で、スクリーンの端にツールチップが表示されている場合に、メニュー項目の選択がブロックされる問題を修正しました。(EDITORS-82)

  • 種類の異なるアセットパッケージをノードツリー内で隣り合わせにドラッグアンドドロップすると、Kanzi Studio がノードを追加せずに置き換えてしまう問題を修正しました。(EDITORS-120)

  • Kanzi Studio スクリプトの子コマンドが非同期で実行されてしまう問題を修正しました。(FMW-1012)

  • Kanzi Studio が古いバインディングを含むマテリアルをインポートする問題を修正しました。(FMW-1028)

  • バインディングオーバーライドのコンテキストメニューでエイリアスバインディングを選択すると、Kanzi Studio が例外により終了する問題を修正しました。(EDITORS-737)

  • ビューポートがカスタムのレンダーパスプレハブを使用している場合に、Kanzi Studio の Preview でセレクションのアウトラインが表示されない問題を修正しました。(EDITORS-788)

  • Kanzi Studio で、同じノード上の 2 つの複製されたバインディングのうち一方を編集、無効化、または削除すると、もう一方にも影響する問題を修正しました。(FMW-1103)

  • プラグインやスクリプトからなど、インタラクティブな HDR インポートダイアログを表示せずに Kanzi Studio が HDR 画像をインポートした場合に、HDR キューブマップの生成が失敗することがある問題を修正しました。(EDITORS-912)

  • バージョンコントロールからプロジェクトをクローンした後やアセットパッケージをインポートした後に、イメージベースドライティングのキューブマップの生成された面とラフネスのミップマップが失われることがあり、その結果、物理ベースレンダリングが正しく行われない問題を修正しました。生成されたコンテンツはバージョンコントロールの対象外であり、アセットパッケージにも含まれないため、これまでは復元できませんでした。ランタイムはボックスフィルターによるミップマップにフォールバックしていましたが、これはイメージベースドライティングには不適切であり、ASTC や Basis などの圧縮テクスチャではミップマップをまったく生成できませんでした。

    Kanzi Studio は、イメージベースドライティングの各キューブマップがどのように生成されたか (種類、解像度、サンプル数を含む) を記録し、ソース画像への参照を保持するようになりました。生成された面またはラフネスのミップマップが欠落している場合、Kanzi Studio はプロジェクトのロード時およびアセットパッケージのインポート時に、ソース画像からそれらを再作成します。再生成は生成されたコンテンツが欠落している場合にのみ実行されるため、完全なプロジェクトを開いてもプロジェクトは変更されません。

    再生成はソース画像に依存するため、イメージベースドライティングの各キューブマップの生成元となったソース HDR 画像をプロジェクト内に保持しておく必要があります。ソース画像を削除すると、キューブマップは再生成できなくなります。この変更より前に作成されたキューブマップには生成の記録がないため、ソース画像とその生成設定がプロジェクトとともに引き継がれるように、キューブマップを再作成し、再パッケージ化する必要があります。(FMW-1117)

Kanzi Java API

  • コードで Kanzi オブジェクトを動的に作成すると、Kanzi Java API のメモリフットプリントが際限なく増加する問題を修正しました。(ANDROID-1674)

  • Node::addTunnelingMessageHandler メソッドによるメッセージハンドラーの登録が原因で発生するメモリリークを修正しました。

  • Kanzi ネイティブクラスのオブジェクトを作成したときに発生するメモリリークを修正しました。

レンダリング

  • ビューポートのレンダリングに Composition Target レンダーパスを使用すると、デバッグビジュアライゼーションが正しくレンダリングされない問題を修正しました。現在の実装には、Blit レンダーパスを使用してシーンをレンダリングする場合に、デプステクスチャがないことに関連する制限が引き続きあります。(RENDERING-2368)

  • フラグメントシェーダーで必要な拡張機能なしにアドバンストブレンドモードを使用すると、一部の GPU でレンダリングの問題やクラッシュが発生する問題を修正しました。(RENDERING-2271)

関連項目

Kanzi 4.1.0 マイグレーションガイド

既知の問題