HUDのように、2つの異なるシーンとカメラを重ねてレンダリングしようとしています。どちらも単独で正しくレンダリングされます。また、これは意図したとおりに機能するため、ヘルプシーンの下にメインシーンが表示されます。
renderer.render(mainscene, maincamera);
renderer.render(helpscene, helpcamera);
EffectComposerを使用してメインシーンをレンダリングしているとき、ヘルプシーンがまったく表示されず、コンポーザーレンダリングの結果のみが表示されます。
renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: false };
renderTarget = new THREE.WebGLRenderTarget( width, height, renderTargetParameters );
composer = new THREE.EffectComposer(renderer, renderTarget);
---- cut out for brevity ---
composer.render(delta);
renderer.render(helpscene, helpcamera); // has no effect whatsoever on the screen, why?
ここで何が起きてるの?繰り返しますが、どちらかのレンダリング呼び出しにコメントすると、正しく機能します。しかし、両方を有効にすると、作曲家のシーン/レンダリングしか表示されません。ヘルプシーンは、その前にレンダリングされたものをすべてオーバーレイ(または少なくとも上書き)することを期待します。
私は以前に非常に複雑なコードを持っていrenderer.render(helpscene, helpcamera);
ました、それはさまざまな異なるレンダリングパスを取り、エフェクトコンポーザーを使用するか、異なる設定に基づいていない可能性があります。ただし、ヘルプシーンには常にエフェクトなどのない単純なルートを使用する必要があります。そのため、別のレンダリング呼び出しを使用し、エフェクトコンポーザーパスとして組み込んでいません。
編集:それは、深度バッファ(?)を使用した面白いビジネスのためであることがわかりました。ヘルパーシーンのすべてにmaterial.depthTest=falseを設定すると、正しく表示されます。いくつかのコンポーザーパスまたはコンポーザー自体によって深度がゼロまたは非常に低く設定されているように見えますが、予期せぬことに、後続のレンダリング呼び出しでレンダリングされたものを非表示にする効果があります。
ヘルパーシーンでLineMaterialのみを使用しているため、今のところは使用できますが、depthTest = falseの回避策(後で実際のシェーディングされたオブジェクトがいくつかある可能性があり、他のオブジェクトに対する深度テストが必要になる可能性があります)でさらに問題が発生することが予想されます。同じヘルパーシーン内)。
ですから、本当の質問は、EffectComposerの後にデプスバッファ(または何か)をリセットして、それ以降のレンダリング呼び出しが影響を受けないようにするにはどうすればよいかということだと思います。最後のコンポーザーパスとしてヘルパーシーンのレンダリングを行うこともできますが、あまり違いはありません。
私の作曲家のセットアップの1つは、メインのRenderPassが、その目的のために作成された遠近法カメラの近くの歪んだ平面ジオメトリへのテクスチャとしてレンダリングすることを言及する必要があります(多くの後処理の例に見られるオルトグラフィックカメラとクワッドのセットアップのようですが、歪みがあります)。他のセットアップには、実際のシーンカメラを備えた「通常の」RenderPassがあります。ここでは、とにかくヘルパーシーンが表示されるような深度情報が期待されます(これはおそらく英語で真剣に行われています、申し訳ありませんが、非ここのネイティブスピーカーと私はより良い言葉を思い付くことができませんでした)。私は両方の選択肢で同じ問題を抱えています。