(注意)この記事は急いで調べながら書いているので、間違いを含んでいる可能性があります。違ったらすみませんBlenderも気づけばバージョン2.79!CyclesにDenoiseも載りました。今回はCyclesのDenoiseがどうなっているか、掘り下げていこうかと思います。以下最初のシーンに適当なスザンヌとエリアライト追加してレンダーした結果です。左がdenoise無し、右がdenoise有りです。1spp2spp4spp8spp16spp32sppフルHDで、denoiseに16~17秒掛かっていますが、低サンプル数でもかなり綺麗になっています。速度については、OpenCLを使用してレンダーするようにすると、denoiseについても半分くらいの速度でレンダーできました。設定方法は簡単で、ここにチェックを入れるだけです。Denoising(デノイズ)→また、インタラクティブに確認できるサンプルがこちらにありますそれでは、Blenderのdenoiseがどうなっているのか、実装面見ていきます。検索するとそれらしきファイルが出てきました。なんか後処理っぽいコード}となっており、それっぽいですね。最後にカラーパスにコピーしているようなコメントが見えます。使用されているであろうことがわかります。Blenderは各種バッファが個別に(ノードとかで)とれると思いますが、それらのために、いっぱいNLMの計算をしているように見えます。最後に、denoising_reconstructとかいう関数で、レンダリング結果を再構成(上書き)しているようです。それらしい文字で検索してみると、https://developer.blender.org/D2592こちらのコミットでdenoise用のフィルター関数が追加されたようです。REGISTER_KERNEL(filter_divide_shadow),REGISTER_KERNEL(filter_get_feature),REGISTER_KERNEL(filter_combine_halves),REGISTER_KERNEL(filter_nlm_calc_difference),REGISTER_KERNEL(filter_nlm_blur),REGISTER_KERNEL(filter_nlm_calc_weight),REGISTER_KERNEL(filter_nlm_update_output),REGISTER_KERNEL(filter_nlm_normalize),REGISTER_KERNEL(filter_construct_transform),REGISTER_KERNEL(filter_nlm_construct_gramian),REGISTER_KERNEL(filter_finalize),とか追加されていて、やはり主にNLMを使用しているようですが、CPU用とCUDA用とOpenCL用が同時に追加されていますね。AVX用のファイルも中は空っぽいですが追加されていて、気合いを感じます。*task)こんな感じの関数が実際のフィルタ処理しているところのようです。上記チケットのレビューもしているようです。最初は、この論文を実装したいと言っていたようです。SoCのプロジェクトhttps://wiki.blender.org/index.php/User:Lukasstockner97/GSoC_2016/Proposalによって、無事、上記論文の手法が実装されたっぽいです。実装されているそうです。実装した人、2016年当時、18歳です。Blenderは優秀な若人によって日々成長しています。論文相当が実装されている。長すぎて挫折しました...(現在89ページも伸びている)。openvdb待ち中。思い出し次第増えたり減ったり。