【raytracing】光源の設定:UniformRays、RandomUniformRays、LambertianRays、RandomLambertianRays[Python]

  • URLをコピーしました!

raytracing

前回、raytracingライブラリのObjectRaysで光線を設定する方法を紹介しました。

今回は他の光源としてUniformRays、RandomUniformRays、LambertianRays、RandomLambertianRaysを紹介します。

それでは始めていきましょう、

UniformRays

UniformRaysはオブジェクトの上中下からの3箇所から発散角が狭めの光線とオブジェクトの真ん中あたりの3箇所から発散角が広めの光線が多数出ている光源です。

必須の引数はないので「path.display()」の引数に「UniformRays()」を与えるだけでとりあえずは使えます。

from raytracing import *

path = ImagingPath()
path.append(Space(d=10))
path.display(UniformRays())

実行結果

引数としてはN、M、yMin、yMax、thetaMin、thetaMaxがあります。

Nは中心周辺から出る光線一つあたりから出る光線の数です。

from raytracing import *

path = ImagingPath()
path.append(Space(d=10))
path.display(UniformRays(N=3))

実行結果

Mは中心周辺から出る光線の数です。

from raytracing import *

path = ImagingPath()
path.append(Space(d=10))
path.display(UniformRays(M=3))

実行結果

ここからはN=3、M=3としてyMin、yMax、thetaMin、thetaMaxを見ていきます。

yMin、yMaxは中心周辺からでる光線の最小の位置と最大の位置です。

つまりこれでオブジェクトの大きさを規定できます。

from raytracing import *

path = ImagingPath()
path.append(Space(d=10))
path.display(UniformRays(N=3, M=3, yMin=-0.1, yMax=0.1))

実行結果

thetaMin、thetaMaxは中心周辺からでる光源の角度の最小値と最大値で、ラジアンで指定します。

そのためNumPyの「np.radians()」で度からラジアンに変更すると分かりやすいです。

from raytracing import *
import numpy as np

path = ImagingPath()
path.append(Space(d=10))
path.display(UniformRays(N=3, M=3, thetaMin=np.radians(10), thetaMax=np.radians(50)))

実行結果

RandomUniformRays

UniformRaysの光線の中心付近から出る光線の位置や角度がランダムになっているものが「RandomUniformRays」です。

引数に「maxCount」を追加すると光線の本数を規定できます。

from raytracing import *
import numpy as np

path = ImagingPath()
path.append(Space(d=10))
path.display(RandomUniformRays(maxCount=10))

実行結果

LambertianRays

LambertianRaysはランバート反射を模したモデルで、拡散反射表面を理想的に扱った反射モデルであり、その輝度はどの角度を見ても一定になっています(下記Wikipediaのページより改変)。

必須の引数はないので「path.display()」の引数に「LambertianRays()」を与えるだけでとりあえずは使えます。

引数としてN、Mを渡すとUniformRaysのように中心周辺から出る光線一つあたりから出る光線の数と中心周辺から出る光線の数を指定できます。

また「I」という引数を追加すると中心周辺から出る光線の角度の数を設定できます。

from raytracing import *
import numpy as np

path = ImagingPath()
path.append(Space(d=10))
path.display(LambertianRays(M=5, N=5, I=10))

またUniformRays同様、yMin、yMaxを引数に追加することで、中心周辺からでる光線の最小の位置と最大の位置を指定することができます。

from raytracing import *
import numpy as np

path = ImagingPath()
path.append(Space(d=10))
path.display(LambertianRays(M=5, N=5, yMax=0.5, yMin=0.1))

実行結果

RandomLambertianRays

UniformRaysとRandomUniformRaysの関係の様に、LambertianRaysの光線の中心付近から出る光線の位置や角度がランダムになっているものが「RandomLambertianRays」です。

引数に「maxCount」を追加すると光線の本数を規定できます。

from raytracing import *
import numpy as np

path = ImagingPath()
path.append(Space(d=10))
path.display(RandomLambertianRays(maxCount=10))

実行結果

次回はraytracingライブラリで物体や像を示す矢印、ラベルを非表示にする方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする