diff --git a/src/sm_tias_lightsim/__init__.py b/src/sm_tias_lightsim/__init__.py index 8a54e1e..3ec3c24 100644 --- a/src/sm_tias_lightsim/__init__.py +++ b/src/sm_tias_lightsim/__init__.py @@ -1,2 +1,16 @@ +"""SmTIAS-LightSim パッケージ. + +パッケージ読み込み時に DRJIT_LIBLLVM_PATH を解決しておく.Mitsuba は import した +時点で Dr.Jit が LLVM の初期化を試みるため,環境変数の設定はどの mitsuba import +よりも前に済んでいる必要がある.scene/lights.py・scene/sensors.py でも同じ呼び出しを +行っているが,それらを経由しない import 順(`import sm_tias_lightsim` だけを先に行う等) +でも効くように,ここでも解決しておく(冪等な no-op). +""" + +from sm_tias_lightsim.runtime.llvm_init import ensure_drjit_libllvm_path + +ensure_drjit_libllvm_path() + + def main() -> None: print("Hello from sm-tias-lightsim!") diff --git a/src/sm_tias_lightsim/scene/lights.py b/src/sm_tias_lightsim/scene/lights.py index e9c91bc..48ef242 100644 --- a/src/sm_tias_lightsim/scene/lights.py +++ b/src/sm_tias_lightsim/scene/lights.py @@ -5,8 +5,7 @@ from __future__ import annotations -import mitsuba as mi - +from sm_tias_lightsim.runtime.llvm_init import ensure_drjit_libllvm_path from sm_tias_lightsim.scene.materials import _to_rgb from sm_tias_lightsim.scene.schema import ( AreaLight, @@ -16,6 +15,15 @@ SpotLight, ) +# mitsuba を import した時点で Dr.Jit が LLVM の初期化を試みる.そのため +# DRJIT_LIBLLVM_PATH の自動探索は import より前に済ませておく必要がある. +# 本モジュールはモジュールレベルで mitsuba を import するので, +# render/runner.py の探索呼び出しでは手遅れになる(環境変数未設定の環境では +# レンダリングが ImportError で失敗し,slow マークのレンダテストが全滅していた). +ensure_drjit_libllvm_path() + +import mitsuba as mi # noqa: E402 + def _build_area_light_transform( center: tuple[float, float, float], diff --git a/src/sm_tias_lightsim/scene/sensors.py b/src/sm_tias_lightsim/scene/sensors.py index fe42ba3..ff1474c 100644 --- a/src/sm_tias_lightsim/scene/sensors.py +++ b/src/sm_tias_lightsim/scene/sensors.py @@ -5,10 +5,18 @@ from __future__ import annotations -import mitsuba as mi - +from sm_tias_lightsim.runtime.llvm_init import ensure_drjit_libllvm_path from sm_tias_lightsim.scene.schema import SensorConfig +# mitsuba を import した時点で Dr.Jit が LLVM の初期化を試みる.そのため +# DRJIT_LIBLLVM_PATH の自動探索は import より前に済ませておく必要がある. +# 本モジュールはモジュールレベルで mitsuba を import するので, +# render/runner.py の探索呼び出しでは手遅れになる(環境変数未設定の環境では +# レンダリングが ImportError で失敗し,slow マークのレンダテストが全滅していた). +ensure_drjit_libllvm_path() + +import mitsuba as mi # noqa: E402 + def build_sensor_dict(sensor: SensorConfig, position_scale: float) -> dict: """SensorConfig を Mitsuba sensor dict に変換する.