注釈
Go to the end をクリックすると完全なサンプルコードをダウンロードできます.
プロッタ照明システム#
pyvista.Plotter
クラスには,既定の照明システム用に次の3つのオプションがあります.
ヘッドライトと4つのカメラライトで構成されたライトキット
カメラの周囲に配置された3つのライトを含む照明システム,
照明なし.
メッシュのカラーにエンコードされた深度情報がない場合,正確に表示するには適切なライティング設定が最も重要になります.
ライトキット#
デフォルトの lighting='light kit'
オプションは, vtk.vtkLightKit
に対応するライティング設定を再作成します.このライティングがどのタイプのライトで構成されているかを確認できます.
import pyvista as pv
from pyvista import examples
# default: light kit
plotter = pv.Plotter()
light_types = [light.light_type for light in plotter.renderer.lights]
# Remove from plotters so output is not produced in docs
pv.plotting.plotter._ALL_PLOTTERS.clear()
light_types
[<LightType.HEADLIGHT: 1>, <LightType.CAMERA_LIGHT: 2>, <LightType.CAMERA_LIGHT: 2>, <LightType.CAMERA_LIGHT: 2>, <LightType.CAMERA_LIGHT: 2>]
シーンに白い地形を追加する:
mesh = examples.download_st_helens().warp_by_scalar()
plotter = pv.Plotter()
plotter.add_mesh(mesh, color='white')
plotter.show()
3ライトイルミネーション#
3つのライトのイルミネーションに切り替えると,フィギュアに異なるキャラクタが追加されます.この場合は,上から山を見たときのコントラストは小さくなりますが,横から見たときのコントラストは大きくなります.これは,図形を対話的に探索する場合に特に明らかになります.
plotter = pv.Plotter(lighting='three lights')
plotter.add_mesh(mesh, color='white')
plotter.show()
ここでも,この設定で使用されるライトの種類を確認できます.
plotter = pv.Plotter(lighting='three lights')
light_types = [light.light_type for light in plotter.renderer.lights]
# Remove from plotters so output is not produced in docs
pv.plotting.plotter._ALL_PLOTTERS.clear()
light_types
[<LightType.CAMERA_LIGHT: 2>, <LightType.CAMERA_LIGHT: 2>, <LightType.CAMERA_LIGHT: 2>]
カスタム照明#
プロッタの初期化時に照明を無効にすることで,独自の照明をゼロから導入できます.単一のシーンライトをシーンに追加すると,オブジェクトのシャドウの領域が大きくなるため,不気味な外観になることがよくあります.
plotter = pv.Plotter(lighting='none', window_size=(1000, 1000))
plotter.add_mesh(mesh, color='white', smooth_shading=True)
light = pv.Light()
light.set_direction_angle(30, -20)
plotter.add_light(light)
plotter.show()
影付きのカスタムライティング#
ここでは, enable_shadows
を使用して照明角度の効果を強化しています.微妙ですが,リアルな効果が得られます.山頂に起因する鋭い影に注目してください.
plotter = pv.Plotter(lighting='none', window_size=(1000, 1000))
plotter.add_mesh(mesh, color='white', smooth_shading=True)
light = pv.Light()
light.set_direction_angle(20, -20)
plotter.add_light(light)
plotter.enable_shadows()
plotter.show()
Total running time of the script: (0 minutes 7.096 seconds)