注釈
Go to the end をクリックすると完全なサンプルコードをダウンロードできます.
Surface Space Ambient Occlusion#
Surface Space Ambient Occlusionの使用方法を説明します.
Surface Space Ambient Occlusion (SSAO) は,レイトレーシングよりも効率的に影を近似でき,同様の結果を得ることができます.近くのメッシュが近くの光源を遮ることで互いに及ぼすオクルージョン効果をプロットしたい場合に使用します.
詳しくは Kitware: Screen-Space Ambient Occlusion をご覧ください
# First, let's create several cubes nearby each other
import pyvista as pv
from pyvista import examples
grid = pv.ImageData(dimensions=(5, 5, 5)).explode(0.2)
デフォルトでプロットする#
これを SSAO なしでプロットしてみましょう.各キューブで照明が同じであることに注意してください.
pl = pv.Plotter()
pl.add_mesh(grid)
pl.show()
SSAOを使ったプロット#
今度はこれをSSAOでプロットしてみましょう.隣接するキューブが互いの照明に影響を与え,人工的でないように見えることに注意してください.
低い kernel_size
では,画質を犠牲にして,画像のレンダリングが速くなります.
pl = pv.Plotter()
pl.add_mesh(grid)
pl.enable_ssao(kernel_size=32)
pl.show()
SSAOレンダリングの改善#
ここでは,SSAO の品質を向上させるために kernel_size
を大きくし,SSAO から生じるアーティファクトを滑らかにするために SSAA アンチエイリアシングも有効にしています.
pl = pv.Plotter()
pl.add_mesh(grid)
pl.enable_ssao(kernel_size=128)
pl.enable_anti_aliasing('ssaa')
pl.show()
SSAOを使用しないCADモデルの作図#
こちらもSSAOを使わない例です.これはRaspberry PIの筐体のCADモデルです.
mesh = examples.download_cad_model_case()
pl = pv.Plotter()
pl.add_mesh(mesh, smooth_shading=True, split_sharp_edges=True)
pl.enable_anti_aliasing('ssaa')
pl.camera.zoom(1.7)
pl.show()
SSAOを使ったプロット#
同じCADモデルをSSAOで表示したところです.シーンの大きさが相対的に大きくなったため, radius
と bias
の両方を大きくする必要があったことに注意してください.
オクルージョンはまだかなり小さいようですが,注意してください.次の例では, radius
を大きくして,オクルージョンの効果を大きくしてみましょう.
pl = pv.Plotter()
pl.add_mesh(mesh, smooth_shading=True, split_sharp_edges=True)
pl.enable_ssao(radius=2, bias=0.5)
pl.enable_anti_aliasing('ssaa')
pl.camera.zoom(1.7)
pl.show()
半径を大きくする#
ここでは,ケースオクルージョンが過剰にならずにリアルに見える程度に radius
を大きくしています.
pl = pv.Plotter()
pl.add_mesh(mesh, smooth_shading=True, split_sharp_edges=True)
pl.enable_ssao(radius=15, bias=0.5)
pl.enable_anti_aliasing('ssaa')
pl.camera.zoom(1.7)
pl.show()
Total running time of the script: (0 minutes 19.338 seconds)