Processing

PythonでProcessing Rendering hint()

この関数は、グラフィックスの描画方法を制御する特別な機能を有効または無効にするために使用される。Processingを開発する過程で、パフォーマンスとビジュアルクオリティのトレードオフについて、難しい判断を迫られる。多くのユーザーにとって何が最も理にかなっているかを判断することに多大な努力を払い、hint()のような関数を使って、ユーザーが特定のスケッチのために設定を調整できるようにしている。

hint()の実装は、よりエレガントな解決策が見つからない場合に使用される最後の手段。いくつかのオプションは、時間の経過とともにヒントではなく標準機能に移行したり、(メジャー)リリースの間に追加されたり削除されたりする可能性がある。

デフォルトのレンダラーのためのヒント

ENABLE_STROKE_PURE
ストロークを持ち、小さなステップでレンダリングされる図形(例えば、互いに近い点を持つvertex()を使用するなど)や、小さなサイズで描かれる図形の問題を修正する。

P2DとP3Dのためのヒント

DISABLE_ASYNC_SAVEFRAME
save()とsaveFrame()は、保存のために別のスレッドを使用せず、画像がドライブに書き込まれるまでブロックされる。これは 3.0b7 以前のデフォルトの動作。有効にするには、hint(ENABLE_ASYNC_SAVEFRAME)を呼び出す。

DISABLE_OPENGL_ERRORS
実行中のエラーチェックを行わないことで、P3Dレンダラーの設定を高速化する。

DISABLE_TEXTURE_MIPMAPS
P2DまたはP3Dでのテクスチャミップマップの生成を無効にする。ネイティブの解像度よりも小さく表示されるテクスチャ画像のレンダリングが低品質になるが、高速になる(ミップマップはテクスチャを縮小したもので、小さなサイズで描画する際に見栄えを良くするためのもの)。ただし、最近のデスクトップ用ビデオカードでは、パフォーマンスの差はかなり小さい。

P3Dのためのヒント

DISABLE_DEPTH_MASK
デプスバッファへの書き込みを無効する。このヒントを使って描いた図形は、カメラからの距離に関係なく、後から描いた別の図形に隠れることができる。これは、深度テストを無効にすることとは異なることに注意が必要。DISABLE_DEPTH_TESTヒントが呼び出されない限り、深度テストは適用されるが、オブジェクトの深度値は記録されない。これは、半透明の3Dオブジェクトを深度ソートせずに描画する場合に便利で、オブジェクトの面がカメラから異なる距離にあることによる視覚的な不具合を回避しつつ、シーン内の他のオブジェクトによってオブジェクトが適切にオクルージョンされるようにできる。

ENABLE_DEPTH_SORT
P3Dで三角形と線のプリミティブなZソートを有効にする。これはパフォーマンスを著しく低下させる可能性があり、アルゴリズムはまだ完全ではない。

DISABLE_DEPTH_TEST
zbufferを無効にして、すべての上に自由に描画できるようにする。デプステストを無効にすると、アイテムは絵画のように順番に画面に描画される。このヒントは、3Dで描画した後、その上に2Dで描画するために最もよく使用される(例えば、3Dインターフェイスの上に2DでGUIコントロールを描画する場合など)。これが呼ばれると、深度バッファもクリアされる。hint(ENABLE_DEPTH_TEST)でデフォルトに戻すことができるが、深度バッファがクリアされた状態では、後に行われる3D描画はスクリーン上の既存の図形を無視することになるので注意が必要。

DISABLE_OPTIMIZED_STROKE
P3Dレンダラーは、パフォーマンスを向上させるために図形を大きなグループにまとめるのではなく、各図形(ストロークを含む)を個別に描画する。これにより、P3Dで描画された2Dアイテムは、描画された順番に応じて、画面上で正しくスタックされる。そうしないと、ストロークラインがすべての図形の内部の上に描かれてしまうなどの不具合が発生する。ただし、このヒントを使用するとレンダリング速度が大幅に低下するため、少量のシェイプを描画する場合にのみ使用することが推奨される。二次元のシーンを描画する場合は、P2Dレンダラーを使用すること。

ENABLE_STROKE_PERSPECTIVE
ストロークのジオメトリ(線や点)がパースペクティブの影響を受けるようにする。カメラから遠ざかるにつれて小さく見えるようになる。