レンダリングアルゴリズム記述専用言語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に出れるかなという。