レンダリングアルゴリズム記述専用言語Raylly

レイトレがこんな感じでかける言語が欲しいなぁという妄想。

元ネタはIo言語とかrubyとか。動的型言語ではない。型推論をがんばってコンパイル時に静的に全部型を決定しちゃう。

RECURSION_MAX = 3 # 定数定義

# メソッド定義
method raytrace(ray) recursionlevel # recursionlevelは修飾子 これを定義すると再帰レベルが計算されるようになる
{
  return 0 if recursionlevel > RECURSION_MAX # 後置if有り

  import @scene intersect ray # @scene (インスタンス変数scene)にメッセージintersectを送った結果にメッセージrayを送る
                              # 結果のオブジェクトのインスタンス変数をローカルスコープの変数としてインポート

  wo = ray dir flip

  di = \int_{halfO(normal)}(wi, scene lights all (wi) * material brdf (wo, wi) ) # \intは積分演算子 halfO(normal)はnormal周りの半球面領域
  refl = material krefl * raytrace(ray refl normal) # *(要素ごとの積演算子)は 左側が微少量だった場合その時点で0ベクトルを返す
  refr = mateiral krefr * raytrace(ray refr(normal, material ior))

  di + refl + refr # return 省略可
)

名前は適当。とりあえずllをいれておけば次回のLL hogehogeに出れるかなという。