注釈
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を使ったプロット#
Now plot this with SSAO using enable_ssao()
. Note how adjacent cubes affect the lighting of each
other to make it look less artificial.
低い 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 17.164 seconds)