Kanzi 4.1.2 リリースノート¶
トレーシング¶
Profiling ビルドまたは Debug ビルドのトレースに、Kanzi Engine が 3D ノードとテキストのレイアウトに費やす時間が表示されるようになりました。
Tracingを参照してください。Kanzi Engine が 3D ノードを測定または配置するたびに、トレースには
<node name> Node3D::measureスコープまたは<node name> Node3D::arrangeスコープが表示されます。これは 2D ノードの<node name> Node2D::measureスコープおよび<node name> Node2D::arrangeスコープと同様です。Kanzi Engine がテキストをレイアウトするたびに、トレースには
TextLayouter::createLayoutスコープが表示されます。注釈
Performance HUD は毎フレームそのテキストをレイアウトするため、トレースにはパフォーマンス HUD の
TextLayouter::createLayoutスコープも表示されます。アプリケーションのテキストのみをトレースするには、Performance HUD をオフにしてください。
これらのスコープにより、毎フレーム多数の 3D ノードやテキストノードをレイアウトするアプリケーションのトレースでは、トレース用メモリがより早くいっぱいになります。トレースに含まれるフレーム数を維持するには、
TracingSampleMaxMemoryの値を増やしてください。TracingSampleMaxMemory を参照してください。Profiling ビルドまたは Debug ビルドのトレースに、
Resource CPU Memory (kb)サンプルおよびResource GPU Memory (kb)サンプルと並んで、リソースマネージャーが保持するリソースの数を示すResource countサンプルが表示されるようになりました。
3D ノードレイアウトの最適化¶
兄弟ノードがコンテンツを再レイアウトしたときに、Kanzi Engine は変更されていない 3D ノードとその子孫のトランスフォーメーションを再計算しなくなりました。これは、Empty Node 3D や Scene など、親ノードが子ノードをレイアウトしない 3D ノードに適用されます。たとえば、同じ Empty Node 3D の下にある多数の Text Block 3D ノードのうち、いくつかのテキストをデータソースが変更した場合の更新が速くなります。
3D ノードトランスフォーメーションの最適化¶
3D ノードが移動したときに、Kanzi Engine が 3D ノードのトランスフォーメーションの更新に費やす CPU 時間が短くなりました。たとえば、タイル、道路、ラベルが 3D ノードで構成された地図のパンが速くなります。
フォーカスの最適化¶
多数のノードを持つアプリケーションで、ノードの表示/非表示の切り替えが速くなりました。以前は、ノードの Visible プロパティが変更されるたびに、Kanzi Engine はノードツリー内でフォーカスされているノードを検索していました。この検索は、Viewport 2D 内の大規模な 3D シーンのノードなど、フォーカスされているノードより前にあるノードが多いほど時間がかかっていました。現在、Kanzi Engine が検索を行うのは、フォーカサブルノードまたはフォーカススコープノードを非表示にしたとき、あるいはノードの表示/非表示によってフォーカスを持つオーバーレイスコープが変わるときのみです。
FocusManagerを参照してください。
プロパティシステムの最適化¶
ノードおよびその他の Kanzi オブジェクトのプロパティの読み取りと設定が速くなりました。Kanzi Engine はプロパティの格納場所をより速く見つけるようになり、プロパティを読み取るたびに一度だけ検索するようになりました。この変更により
PropertyObjectとその派生クラスすべてのサイズが変わるため、Kanzi Engine プラグインとアプリケーションを Kanzi 4.1.2 に対して再ビルドしてください。Kanzi 4.1.2 マイグレーションガイド を参照してください。
テキストレイアウトの最適化¶
デフォルトのフォントエンジンである FreeType フォントエンジンを使用する場合、Kanzi Engine がテキストのレイアウトに費やす CPU 時間が短くなりました。たとえば、データソースがテキストノードのテキストを変更するたびや、フォントファイルで以前に使用された Font Size をテキストが使用する場合が該当します。フォントエンジン を参照してください。
親ノードが再レイアウトする Text Block 2D ノードまたは Text Block 3D ノードのレイアウトに Kanzi Engine が費やす時間が短くなりました。そのノードのレイアウトに影響するプロパティが変更されていない場合、Kanzi Engine はノードに新しいテキストレイアウトが必要かどうかをチェックしなくなりました。これは、ノードが Word Wrap、Overflow、または Truncation を使用していない場合に適用されます。
このため、Kanzi Engine が
TextBlockConceptImpl::onPostPrepareTextFormatを呼び出す回数が減りました。該当するプロパティが変更されていない場合、Kanzi Engine はこの関数を呼び出しません。変更された場合、Kanzi Engine は各レイアウトパスで 2 回または 3 回ではなく 1 回だけ呼び出します。独自の Text Block クラスがこの関数内でノードのテキストプロパティやフォントプロパティを変更している場合、ノードは以前のテキストレイアウトを保持します。このような変更は、メインループタスクなど、レイアウトの外で行ってください。注釈
アプリケーションが Text Block ノードのテキストプロパティやフォントプロパティを設定するステートマネージャーを削除または置き換えた場合、そのノードは以前のテキストレイアウトとサイズを保持します。アプリケーションがステートオブジェクトのターゲットノードの名前を変更した場合も同様です。ノードを更新するには、そのノードで
Node::invalidateMeasureを呼び出してください。Preview では、ステートからテキストプロパティやフォントプロパティを削除した場合にもこの現象が発生することがあります。Preview を更新するには、プレビューをリスタートしてください。
テキストレンダリングの最適化¶
テキストに絵文字などのカラーグリフが含まれていない場合、Kanzi Engine は Text Block 3D ノードをより速くレンダリングするようになりました。このようなテキストでは、Kanzi Engine は Color Font Material によるレンダリングをスキップします。カラーフォント を参照してください。
Vulkan を使用する場合、フォントファイルのテキストをそれまで使用したことのない Font Size で初めてレンダリングするときに Kanzi Engine が費やす時間が短くなりました。そのフォントサイズ用の新しいグリフキャッシュテクスチャをクリアする際、Kanzi Engine はゼロで埋めたテクスチャをアップロードする代わりに GPU を使用するようになりました。
テキスト自体は変わらずに、ノード内でテキストが移動またはスケーリングされる場合、Kanzi Engine がレンダリング用にテキストを準備する CPU 時間が短くなりました。Kanzi Engine はテキストのレンダリングデータを再作成せずに再利用します。たとえば、これは次の場合に適用されます。
Text Block ノードまたは Text Box ノードの配置やパディングを変更した場合。
Horizontal Fit がテキストを新しい幅にスケーリングした場合。
ユーザーがカーソルを移動して Text Box ノードのテキストをスクロールした場合。
Kanzi Engine がテキストのレンダリングデータを作成するたびに、Profiling ビルドまたは Debug ビルドのトレースには
TextFormat::createGlyphRunsスコープが表示されます。Tracingを参照してください。注釈
Performance HUD は毎フレームそのテキストのレンダリングデータを作成するため、トレースにはパフォーマンス HUD の
TextFormat::createGlyphRunsスコープも表示されます。アプリケーションのテキストのみをトレースするには、Performance HUD をオフにしてください。
レンダリング¶
Format が Alpha 8-bit (A8_UNORM) の Render Target Texture を 2D ノードの Render Target プロパティとして設定することで、そのテクスチャに 2D ノードをレンダリングできるようになりました。Kanzi Engine はフラグメントシェーダー出力の赤成分をテクスチャに書き込み、シェーダーはその値をアルファとして読み取ります。Composition Target レンダーパスは、引き続き警告を出してこのようなテクスチャを破棄します。マルチサンプルのレンダーターゲットテクスチャの場合および WebGL では、Kanzi Engine は引き続き警告をログに出力し、フレームバッファのアタッチメントをスキップします。
Kanzi Engine C++ API¶
オーナーを受け取る
PropertyObject::addDestroyCallbackのオーバーロードと、PropertyObject::removeDestroyCallbackを追加しました。破棄コールバックのオーナーがプロパティオブジェクトより先に破棄される可能性がある場合にこれらを使用すると、オーナーが先に自身のコールバックを削除できます。
ドキュメント¶
Kanzi Android framework (droidfw) でアクティブな Kanzi ビューがない間に
TaskDispatcherに送信したタスクがどうなるかについての説明を追加しました。これらのタスクは待機状態となり、ビューが再びアクティブになった後の最初のフレームで Kanzi がすべて実行します。ビューがアクティブでない間にデータソースが更新されるたびにタスクを送信するアプリケーションでは、その最初のフレームが数秒遅れることがあります。ドキュメントでは、タスクが溜まらないようにする方法を説明しています。アクティブなビューがない間のタスクの送信 を参照してください。Kanzi Portal MCP サーバーの説明を追加しました。このサーバーは AI アシスタントを Kanzi Account に接続し、ライセンス、組織、ダウンロード、サポートチケットを照会および管理できるようにします。Kanzi Portal MCP サーバー を参照してください。また、Kanzi AI ツールの使用 に Kanzi MCP サーバーのクイックセットアップを追加しました。
Kanzi のドキュメントが簡体字中国語と日本語でも利用できるようになりました。翻訳は AI によって作成されており、英語のドキュメントが正式版です。翻訳された各ページにはその旨が記載されており、英語の同じページへのリンクがあります。API リファレンス、ノードリファレンスやリソースリファレンスなどの生成されたリファレンス、およびライセンス文は英語のままで、翻訳されたページからは英語の API リファレンスにリンクしています。
注目すべき修正点¶
Kanzi Engine¶
アタッチの間も存続しているノードまたはリソースに Kanzi がバインディングをアタッチするたびに、メモリ使用量が増加する問題を修正しました。この問題は Kanzi 4.0.0 で発生しました。(FMW-1643)
これは、例えば次のような場合に発生していました。
アプリケーションがノードをデタッチし、再度アタッチした場合。
データソースバインディングを持つノードのデータコンテキストが変更された場合。
インスタンス外のノード、データオブジェクト、またはマテリアルにバインドするプレハブインスタンスを、アプリケーションが再作成した場合。
トレースにイベントが含まれていない場合 (たとえば、アプリケーションがトレースをクリアした直後に書き出した場合) に、Kanzi Engine が有効な JSON ではないトレースファイルを書き出す問題を修正しました。Chrome tracing や Perfetto などのトレースビューアーでは、このようなファイルを読み込めませんでした。(FMW-1690)
FreeType フォントエンジンを使用する場合に、FreeType が拒否するフォントサイズに対して
FreeTypeFontFile::setSizeが初回のみ例外をスローする問題を修正しました。その後、Kanzi Engine は例外を発生させずに、そのサイズのテキストを誤ってレイアウトしていました (たとえばTextLayouterを使用した場合)。(FMW-1753)Kanzi Engine がウィンドウサーフェスごとに個別の EGL コンテキストを作成する問題を修正しました。これにより、たとえば Qualcomm Adreno GPU でドライバーのメモリ使用量が増加していました。現在、Kanzi Engine はすべてのウィンドウサーフェスに対して 1 つの EGL コンテキストを使用します。この問題は Kanzi 4.1.0 で発生しました。(RENDERING-3483)
アプリケーションが Kanzi Engine を破棄して再作成するたびに、ネイティブメモリと GPU メモリの使用量が増加する問題を修正しました。これは、たとえば Android アプリケーションが Kanzi ビューを再作成したときに発生していました。現在、Kanzi Engine はシャットダウン時に EGL コンテキストを破棄します。この問題は Kanzi 4.1.0 で発生しました。(INTE-1336)
OpenGL を使用するアプリケーションが、テクセルバッファテクスチャを使用するリソースセットを破棄した後 (たとえば、パーティクルエフェクトを切り替えたとき) に、Qualcomm Adreno GPU で終了してしまう問題を修正しました。(RENDERING-3556)
Release ビルドなど、トレースを含まないビルドで
kzTraceInstantマクロを使用するアプリケーションコードがコンパイルできない問題を修正しました。(FMW-1683)
Kanzi Android framework (droidfw)¶
Kanzi Android framework (droidfw) ベースのビューが、サーフェスもそのサイズも変わらないサーフェス変更を受け取るたびに、ネイティブウィンドウがリークする問題を修正しました。このような変更は、デバイスの回転時など、
KanziSurfaceViewまたは Kanzi Android Service クライアントビューのサーフェスが作成されるたびに発生します。この問題は Kanzi 4.0.0 で発生していました。(ANDROID-2243)Kanzi Android framework (droidfw) ベースのビューが、サーフェスを持たない状態で向きの変更またはサーフェスの破棄を受け取ると、アプリケーションが終了する問題を修正しました。Kanzi Android Service ホストでは、これによりホストのすべてのクライアントアプリケーションが終了していました。(ANDROID-2262)
これは、例えば次のような場合に発生していました。
アプリケーションが、まだサーフェスを受け取っていないビュー、またはバックグラウンドでサーフェスを失ったビューに
onConfigurationChangedを転送していました。アプリケーション間トランジションの実行中に、Kanzi Android Service クライアントのサーフェスがオーバーレイサーフェスより先に到着していました。
Kanzi Android Service¶
Fixed the issue where the Kanzi Android Service host terminated repeatedly after it restarted while a client application was in the background. Client applications no longer terminate when the Kanzi Android Service host restarts. They reconnect to the restarted Kanzi Android Service host, which loads their content again. Data that a client application pushed before the restart is lost, so push it again in
onServiceConnected. (ANDROID-2256)Fixed the issue where the Kanzi Android Service host terminated repeatedly after it restarted while a
KanziServiceSurfaceVieworKanziServiceComposableclient was on the screen. Android then stopped restarting the Kanzi Android Service host for 30 minutes. (ANDROID-2268)ホストがクライアントプレハブをプリロードした後に別のクライアントアプリケーションがウィンドウを失うと、Kanzi Android Service ホストのデバッグビルドが終了する問題を修正しました。プリロードされたクライアントアプリケーションでは、
KanziServiceViewAdapterListener.onAttachedToWindowはクライアントビューがウィンドウにアタッチされたときに発生するようになり、プリロード中には発生しなくなりました。(ANDROID-2206)プレハブの読み込み後、プリロードされたクライアントビューはアクティブではなくなるため、Kanzi Android Service ホストアプリケーションがタスクディスパッチャに送信したタスクは、クライアントビューがアクティブになるまで待機します。アクティブなクライアントビューがない間のタスクの送信 を参照してください。
アプリケーション間トランジションが終了しないことがある問題を修正しました。トランジションオーバーレイが画面に残り、Kanzi Android Service はそのクライアントアプリケーションの以降のウィンドウイベントとサーフェスイベントを無視していました。トランジションの終了前にユーザーがクライアントアプリケーションを離れた場合や、ターゲットのクライアントアプリケーションがビューを表示しない場合にも、トランジションが終了するようになりました。アプリケーション間トランジションアニメーションの設定 を参照してください。(ANDROID-2245)
TextureViewにはSurfaceControlがないため、KanziServiceTextureViewはアプリケーション間トランジションをサポートしていません。KanziServiceTextureViewのstartSeamlessTransitionは、終了しないトランジションを開始する代わりにUnsupportedOperationExceptionをスローするようになりました。KanziServiceSurfaceView、KanziServiceTextureView、またはKanziServiceComposableをウィンドウから削除し、再度追加して、もう一度削除すると、クライアントアプリケーションが終了する問題を修正しました。また、再度追加したビューは空のままでした。たとえば、これはフラグメント、ViewPager、RecyclerView、LazyColumnで発生していました。クライアントビューは、インフレート時やconnectの呼び出し時ではなく、ウィンドウにアタッチされたときに Kanzi Android Service に接続し、デタッチされたときに切断するようになりました。KanziServiceClientListener.onServiceConnectedはビューが再アタッチされるたびに再度発生するようになり、ビューがデタッチされている間に行った呼び出しはクライアントによって破棄されます。Kanzi Android Service ホストは、KanziServiceTextureViewがウィンドウからデタッチされたときにKanziServiceViewAdapterListener.onDetachedFromWindowを呼び出すようになりました。(ANDROID-2265)クライアントビューのライフサイクル および Kanzi 4.1.2 マイグレーションガイド を参照してください。
クライアントアプリケーションに戻るアプリケーション間トランジションの後、Kanzi Android Service がそのクライアントアプリケーションのレンダリングと入力処理を停止する問題を修正しました。これは、トランジションのもう一方のクライアントアプリケーションがバックグラウンドで終了した場合、たとえば Android がメモリを解放するために停止した場合や、強制停止した場合に発生していました。画面上のクライアントアプリケーションが終了しても、Kanzi Android Service はトランジションのもう一方のクライアントアプリケーションのコンテンツを保持するようになりました。クライアントアプリケーションの終了 を参照してください。(ANDROID-2263)
以下の Kanzi Android Service の問題を修正しました (ANDROID-2207):
Kanzi Android Service ホストが
KanziServiceRuntime.handleVisibilityChangeでプリロード済みコンテンツを非表示にしていた場合、クライアントアプリケーションにコンテンツが表示されず、入力も受け取りませんでした。クライアントアプリケーションがサーフェスを提供すると、コンテンツが表示されるようになりました。プレハブの読み込みが完了する前にプリロード済みコンテンツを非表示または表示にすると、読み込みが停止していました。
サーフェスなしでプリロード済みクライアントアプリケーションを表示すると、別のクライアントアプリケーションがウィンドウを失ったときに Kanzi Android Service ホストのデバッグビルドが終了していました。
すでにサーフェスを持つコンテンツに対してクライアントアプリケーションがサーフェスを提供すると、Kanzi Android Service ホストがサーフェスをリークしていました。
クライアントビューがウィンドウにアタッチされる前やデタッチされた後など、コンテンツを持たないクライアントの表示状態をクライアントアプリケーションまたは Kanzi Android Service ホストが変更すると、リリースビルドでも Kanzi Android Service ホストが終了していました。Kanzi Android Service はこのような表示状態の変更を無視するようになりました。
KanziServiceRuntime.preloadClientPrefabが、プリロードするプレハブではなく、クライアントアプリケーションが登録した起動プレハブを読み込む問題を修正しました。プレハブ URL が空の場合、クライアントアプリケーションがサーフェスを提供すると Kanzi Android Service ホストが終了していました。preloadClientPrefabはプリロードするプレハブを読み込むようになり、プレハブ URL が空の場合はクライアントアプリケーションの起動プレハブを維持します。(ANDROID-2246)データソース URL の入力ミスや、読み込まれていない kzb ファイルなど、存在しないデータソースにクライアントアプリケーションがデータをプッシュすると、Kanzi Android Service ホストとそのすべてのクライアントアプリケーションが終了する問題を修正しました。ホストはエラーをログに記録し、実行を継続するようになりました。(ANDROID-2261)
Kanzi Studio¶
プロジェクトでシステムシェーダーをオーバーライドできない問題を修正しました。プロジェクトの
Shadersディレクトリ内で、システムシェーダーと同じパスにあるファイルは、すべての箇所でそのシステムシェーダーを置き換えるようになりました。これには、他のシステムシェーダーや Kanzi Studio が提供するマテリアルタイプも含まれます。Clone To Project はシステムシェーダーのパスを維持するようになったため、クローンがシステムシェーダーをオーバーライドします。以前のバージョンの Kanzi Studio で作成したクローンでシステムシェーダーをオーバーライドするには、そのクローンをシステムシェーダーと同じパスに移動してください。(RENDERING-3549)これにより、既存のプロジェクトが使用するファイルが変わる場合があります。プロジェクト内でシステムシェーダーのパスにすでに存在するファイルは、そのシステムシェーダーを置き換えるようになりました。
#include <file.glsl>は、#includeを含むシェーダーと同じ場所にあるファイルよりも先に、Shadersディレクトリ内のファイルを見つけるようになりました。システムシェーダーをプロジェクトにクローンする を参照してください。
ドキュメント¶
レンダリングのベストプラクティス に、Kanzi は Visible プロパティが無効になっている 3D ノードを変換しないと記載されていた問題を修正しました。Kanzi 4.1.0 以降、Kanzi Engine はこれらのノードとその子ノードを変換するため、3D ノードを非表示にしても、Kanzi Engine がそのノードの変換に費やす時間は節約されません。Viewport 2D ノードの 3D コンテンツの変換をスキップするには、Scene ノードまたは Viewport 2D ノードの Visible プロパティを無効にしてください。(FMW-1770)
Kanzi Android framework (droidfw) と Kanzi Java API には Java 8 が必要であるとドキュメントに記載されていた問題を修正しました。Kanzi 4.0.0 以降、これらには Java 言語レベル 11 以上が必要です。また、Kanzi Android framework (droidfw) プロジェクトの操作 の Groovy の例で、Gradle で定義されていない
JavaVersion.VERSION_1_11を使用していた問題も修正しました。(ANDROID-2271)