オブジェクトのアウトラインを表示する

January 21, 2020

three.jsでオブジェクトのアウトラインを表示する方法を調べていたのでメモを残します。 ユースケースとしては、ユーザーが選択したオブジェクトを強調表示したい、などでしょうか。

まずは以下のサンプルを見てください。

https://jsfiddle.net/hokuma/xL25smw3/

立方体オブジェクトのアウトラインが白い線で表示されています。

three.jsのPost-Processsingという機構を利用しています。

https://threejs.org/docs/#manual/en/introduction/How-to-use-post-processing

Post-Processingの機構を利用することで、描画結果に対してglichやアウトラインなどの様々なエフェクトをかけることができます。 公式サイトにある例を見てみるとなかなか面白いです。 https://threejs.org/docs/#examples/en/postprocessing/EffectComposer

実装の特徴として、描画処理を WebGLRenderer ではなく EffectComposer に実行させています。

画面への描画処理は、addPass で追加された順に処理が適用されます。 RenderPass はオブジェクト自体を描画する処理です。 ほとんどのケースでまず RendearPass にてオブジェクトを描画し、その後に適用したいエフェクトに応じた Pass を追加していきます。

アウトラインを表示するときは、 OutlinePass を利用します。 selectedObjects に配列でアウトラインを表示したいオブジェクトを渡すと、良い感じに表示してくれます。

2つのオブジェクトを指定すると次のようになります。

https://jsfiddle.net/hokuma/gspkwL3o/

アウトライン表示の対象が2つのオブジェクトになるので、2つのオブジェクト全体としてのアウトラインが表示されます。 複数のオブジェクトを選択して強調表示したい場合には少し不向きです。

以下の方法が推奨される方法かはちょっとわからないのですが、オブジェクトごとにOutlineを用意することで個々のオブジェクトごとにアウトラインを表示することができます。 ただ、アウトラインの抽出処理は重そう?な気もするので、数が増えてくると負荷が上がってくるかもしれません。

https://jsfiddle.net/hokuma/pfbwk9v2/

comments powered by Disqus