ライト#

pyvista.Light クラスは, vtk.vtkLight クラスに追加機能とPython APIを追加します. pyvista.Plotter オブジェクトには,ほとんどの場合に適切に機能するデフォルトのライトセットが付属していますが,多くの場合,より実践的なライトへのアクセスが必要です.

簡単な例#

原点を照らす赤いスポットライトを作成し,ライティングなしのシーンを作成して,ライトを手動で追加します.

import pyvista as pv
from pyvista import examples
light = pv.Light(position=(-1, 1, 1), color='red')
light.positional = True

import pyvista as pv
from pyvista import examples
plotter = pv.Plotter(lighting='none')
plotter.background_color = 'white'
mesh = examples.download_bunny()
mesh.rotate_x(90, inplace=True)
mesh.rotate_z(180, inplace=True)
plotter.add_mesh(mesh, specular=1.0, diffuse=0.7, smooth_shading=True)
plotter.add_light(light)
plotter.show()
../../_images/lights-1_00_00.png

詳細な例は 照明 を参照してください.

ライト API#

pyvista.Light インスタンスには,ヘッドライト,カメラライト,シーンライトの3つのタイプがあります.ヘッドライトは常にカメラの軸に沿って輝き,カメラライトはカメラに対して固定位置を持ち,シーンライトはシーンに対して配置されるため,カメラの周りを移動してもシーンのライティングには影響しません.

ライトには,ライトの軸を定義する positionfocal_point があります.これらの意味は,ライトのタイプによって異なります.ライトのカラーは,アンビエント,拡散,スペキュラの各コンポーネントに応じて設定できます.明るさは intensity プロパティで設定でき,書き込み可能な on プロパティはライトをオンにするかどうかを指定します.

ライトはディレクショナル (無限に離れた点源を意味します) または positional のいずれかです.ポジションライトには,ライトのジオメトリと空間分布を記述する追加のプロパティがあります. cone_angle プロパティと exponent プロパティは,ライトビームの形状とそのビーム内のライト強度の角度分布を定義します.距離による光のフェードは, attenuation_values プロパティを使用してカスタマイズできます.ポジションライトでは,ワイヤフレームを使用してライトのシェイプとカラーを表すアクターを使用することもできます. show_actor を参照してください .

cone_angle が90度未満の位置ライトはスポットライトと呼ばれます.スポットライトは一方向性であり,ビーム成形特性,すなわち exponent と減衰を完全に利用します.ただし,スポットライト以外の位置ライトは,実際のライトの位置にあるポイントソースのように機能し,空間のすべての方向を照らします.光源からの距離に応じた減衰が表示されますが,ビームは空間内で等方性です.対照的に,ディレクショナルライトは無限に離れたポイントソースとして機能するため,単一方向ですが減衰しません.

シャドウ#

指向性ライトを使用すると,複雑なライティングシナリオを作成できます.たとえば,ライトをアクター(この場合は球体)の真上に配置して,その真下にシャドウを作成できます.

次の例では,位置ライトを使用して,ライトの円錐角度と指数値を制御し,球体の下に日食のようなシャドウを作成します.

import pyvista as pv

plotter = pv.Plotter(lighting=None, window_size=(800, 800))

# create a top down light
light = pv.Light(position=(0, 0, 3), show_actor=True, positional=True,
                 cone_angle=30, exponent=20, intensity=1.5)
plotter.add_light(light)

# add a sphere to the plotter
sphere = pv.Sphere(radius=0.3, center=(0, 0, 1))
plotter.add_mesh(sphere, ambient=0.2, diffuse=0.5, specular=0.8,
                 specular_power=30, smooth_shading=True,
                 color='dodgerblue')

# add the grid
grid = pv.Plane(i_size=4, j_size=4)
plotter.add_mesh(grid, ambient=0, diffuse=0.5, specular=0.8, color='white')

# set up and show the plotter
plotter.enable_shadows()
plotter.set_background('darkgrey')
plotter.show()
../../_images/lights-2_00_00.png

注釈

特定のウィンドウサイズでシャドウをレンダリングする場合,VTKに既知の問題があります. window_size パラメータを試してみることをお勧めします.

APIリファレンス#

Light([position, focal_point, color, ...])

Light クラス.