2016-05-29 4 views
1

をレンダリングされるバッファに関するなしは:グラフィックス - バッファ間でブレンドし、私が使用して配合することが可能ています最初の

self.pipelineDescriptor.colorAttachments[0].blendingEnabled = true 
self.pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactor.SourceAlpha 
self.pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactor.OneMinusSourceAlpha 

は、私は、バッファAをレンダリングし、私はBをバッファレンダリングよりも、それらのそれぞれは、透明なオブジェクトを持つことができます。問題はレンダリングの順序が重要であるということです。透明性は一方向にしか働かないので、最初にAを、Aに透明なオブジェクトがあれば、BはAの背後にレンダリングされません。

解決できますか?

答えて

1

これはグラフィックスほど古い問題です。非可換のブレンド関数を使用して半透明オブジェクトをレンダリングする場合は、最初にすべての不透明オブジェクトを描画してから、透明オブジェクトを前後にレンダリングする必要があります。ここ数年の間に、深さ剥離などの技法が、オーダーに依存しない透明度を近似するために使用されていましたが、このようなテクニックはすべて、レンダリング時間、メモリ、および正確性に関連するトレードオフを伴います。

透過的なオブジェクトを明白にソートできない病理学的なケースがないと仮定すると、最初に不透明なオブジェクトを通常の方法でレンダリングし、深度の書き込みと深度のテストを有効にしてから、深度書き込み無効と深度テストが有効になっています。これはアルファブレンディングで "正しい"結果を得る唯一の方法です。

関連する問題