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 に更新。この更新ではテキストシェーピングの動作が変更されており、テキストレイアウトに小さな違いが生じることがあります。
以下のサードパーティライブラリの使用を開始しました:
FlatBuffers25.12.19-2026-02-06-03fffb2。誰でも記述できるパブリックなスキーマを使用して Kanzi のリソースを定義できるようにするための基盤です。
yaml-cpp0.9.0。ファイル形式の変換に使用される Kanzi の YAML パーサーおよびライターです。Tiny-XMLを置き換える予定です。
Protobuf3.8.0。より柔軟な KZA 表現を実現するための、Emscripten プラットフォームパッケージにおける概念実証作業に使用します。
Qualcomm Shadow Denoiser1.0。レイトレーシングによるシャドウのノイズを低減するために使用します。
.kzbファイル内のイメージデータでFlatBuffersメッセージを使用するようになりました。これは、将来ユーザーが公開されているスキーマを使用して、作成済みのバイナリ BLOB を Kanzi に送信できるようにすることを目的としています。現時点では、この変更はユーザーには見えません。Android 用の Kanzi テンプレートに
KANZI_LINK_KZMONITORCMake オプションを追加しました。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から派生するようになりました。このクラスは、ライフタイム全体を通じて単一のバッファーハンドルのみを管理し、内部でバッファーのサイズを変更しなくなりました。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 空間にオブジェクトを配置する際のガイドとして使いやすくなりました。
ディレクショナルシャドウの投影フィッティングの自動化をサポートするため、
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コマンドラインオプション、およびパブリック APIkanzi::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アクセサーのセットを追加しました。Domain::getScreens— ホストのScreenノード。シングルスクリーンのアプリケーションは、その Screen を唯一の要素として返します。Android では、アプリケーションフレームワークがすべてのビューの Screen を返すため、このアクセサーを使用して作成したプラグインは、ホスト固有のコードなしでマルチウィンドウアプリケーションで動作します。Domain::getApplicationProperties— アプリケーションのプロパティ。Domain::getPerformanceInfoLevelとDomain::setPerformanceInfoLevel— パフォーマンス HUD のレベル。Domain::getRenderingAreaOffset— レンダリング領域のオフセット。Domain::getRootCompositionTarget— ルートのコンポジションターゲット。Domain::getStartupProfilerRegistry— 起動時プロファイラのレジストリ。Domain::getStateとDomain::getFramesPerSecond— メインループのステートとフレームレート。
ホストがその機能を提供していない場合、各アクセサーは空の値またはデフォルト値を返します。使用する前に結果を確認してください。
テンプレート¶
C++ コードを使用するアプリケーションテンプレートに、iOS プラットフォームの構成が含まれるようになりました。Application、Application with data source plugin、または Application with Kanzi Engine plugin テンプレートを使用してプロジェクトを作成すると、Kanzi Studio は、すぐに使える iOS 用の CMake 構成と、Xcode プロジェクトを生成するためのヘルパースクリプトを生成します。
Kanzi アプリケーションを iOS 向けに開発する を参照してください。
Conan 版の Studio アプリケーションテンプレートを削除しました。
プラットフォーム¶
Kanzi は Wayland のグラフィックス出力を作成する際に
setAppId()を呼び出すようになりました。KZ_LOG_CATEGORY_EGLに、プラットフォームレベルの機能サポートに関する診断警告が含まれるようになり、デフォルトで有効になりました。listEGLAttributesは削除され、より柔軟なformatEGLAttributesに置き換えられました。この関数は、人間が読める形式に整形された文字列を作成します。プラットフォームの変更 を参照してください。
Platformクラスはplatform::PlatformContextに名前が変更されました。すべての派生クラスもそれに応じて名前が変更されました。プラットフォームの変更 を参照してください。
GlContextApiクラスはplatform::GlGraphicsContextに名前が変更されました。すべての派生クラスもそれに応じて名前が変更されました。プラットフォームの変更 を参照してください。
platform::GlGraphicsContextのメンバー関数getOGLProcAddressはgetGLProcAddressに名前が変更されました。また、このクラスにはgetGLProcAddressIntoヘルパーが追加されました。このヘルパーは、型付きの OpenGL エントリーポイントを渡された関数ポインターに読み込み、それが見つかったかどうかを報告します。ランタイム API の変更点 を参照してください。
kzplatformライブラリの内部フォルダ構造が変更されたため、多くのファイルが移動されました。ランタイム API の変更点 を参照してください。
platform::createDefaultPlatformContext、platform::destroyDefaultPlatformContext、およびplatform::getDefaultPlatformContextをplatform_context.hppから専用のdefault_platform_context.hppヘッダーに移動しました。プラットフォームの変更 を参照してください。
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 インストーラーは、オプションのインストール後のステップとしてパッケージマネージャーをインストールするようになりました。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 グラフエディタが、編集中に接続を検証するようになりました。エディタは無効な接続をハイライトし、問題をツールチップに表示します。
Prism Editor で Blit ノードの Blit Material プロパティで選択されているマテリアルを変更すると、以前に選択されていたマテリアルに関連付けられたすべてのプロパティが削除されるようになりました。
Prism グラフエディタで有効な接続にホバーすると、詳細なフレームバッファ情報が表示されるようになりました。ツールチップには、接続を流れるデータのアスペクト、フォーマット、解像度が表示されます。
新しい Prism ノードタイプを追加しました:
Chromatic AberrationColor GradingVignette
Generate Shadowmap ノードに、ディレクショナル投影を設定するための新しいプロパティが追加されました。
Prism ノードのマテリアルプロパティに Override value from Viewport ボタンが追加されました。これにより、Prism グラフを使用する各ビューポートがプロパティ値を個別にオーバーライドできます。
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 エディタで編集できるように公開します。
Prism グラフエディタが、レンダーパスノード間の リソースプロパティのバインディング をサポートするようになりました。あるレンダーパスノードのリソース出力プロパティから、別のレンダーパスノードの同じタイプのリソースプロパティへバインディングラインをドラッグすると、値がコピーされます。
実践的な例については、Render Pass ノードのプロパティをバインドする を参照してください。
Prism グラフエディタが、レンダーパスノードのリソース以外のプロパティで テキストプロパティのバインディング をサポートするようになりました。レンダーパスノードの数値、論理値、カラー、その他のリソース以外のプロパティを右クリックして Edit binding... を選択すると、その値をバインディングエクスプレッションで制御できます。プロパティの行には、ラベルにバインディングインジケーターが、またエクスプレッションの読み取り専用プレビューが表示されます。バインディングを削除するには、右クリックして Clear binding を選択します。
実践的な例については、Render Pass ノードのプロパティをバインドする を参照してください。
シェーダーグラフエディタ (エクスペリメンタル)¶
GLSL フラグメントシェーダーを構築するための、エクスペリメンタルなビジュアルノードベースのエディタである Shader Graph Editor を導入しました。GLSL を手書きすることなく、シェーダーグラフを作成し、ノードを接続し、シェーダーコードを生成できます。エディタを有効にするには、Edit > User Preferences > Experimental タブ > Web-based editors に移動し、Shader Graph Editor を有効にします。
シェーダーグラフ (エクスペリメンタル) を参照してください。
フラグプロパティ¶
名前付きビットフィールドを持つビットマスクプロパティを定義するための、新しい Flags プロパティタイプを導入しました。New Property Type ウィンドウで、データタイプとして Flags を選択します。このプロパティは、各ビットに個別に名前が付けられた整数のビットマスクを格納します。
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)