プロッタ照明システム#

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()
plotter builtins

3ライトイルミネーション#

3つのライトのイルミネーションに切り替えると,フィギュアに異なるキャラクタが追加されます.この場合は,上から山を見たときのコントラストは小さくなりますが,横から見たときのコントラストは大きくなります.これは,図形を対話的に探索する場合に特に明らかになります.

plotter = pv.Plotter(lighting='three lights')
plotter.add_mesh(mesh, color='white')
plotter.show()
plotter builtins

ここでも,この設定で使用されるライトの種類を確認できます.

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()
plotter builtins

影付きのカスタムライティング#

ここでは, 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()
plotter builtins

Total running time of the script: (0 minutes 7.096 seconds)

Sphinx-Galleryによるギャラリー