kumaryu日記
2007-02-15 やばい
_ 寝なきゃ
寝なきゃならんのだが。
_ [Riko] エフェクトとか
久々にRikoも手つけとかなきゃと思って再開。
忘れてたのでなんかあれだな。
どうも独自シェーダを作ろうとして挫折してGLSLをなんとか使いやすくしようとした残骸が見付かった。
それ自体はそんなに悪くもなかったんでエフェクトファイルにまででっち上げようと思ってやってたんだが、途中で意味なくね?とか考えたり。
そのうちCOLLADA FXとか使うようになったらこんなもんいらんじゃないのかと。
そんなこと考えながら書いてたら出来ちゃった。
とりあえずCOLLADA FX使おうにも今のところ出力できるアプリケーションが無いしな。COLLADA対応のFX Composer2がそろそろベータ出すって話だけど、そもそも当初の予定では一昨年の年末には出てるはずのものだから全く期待はしない。
もし、FX Composer2がとても素敵なアプリケーションだとしても、COLLADA FXを読み込んだ後、結局はなんとか実行時の形にしなきゃならんはず。
てなわけでエフェクトファイル、つかそのままRubyコードだけど。
fx = RikoFX.new do uniform :light_dir, :float3 uniform :normal_matrix, :normal_matrix uniform :mvp, :modelviewprojection_matrix sampler :tex0, :sampler2D attribute :pos, :vertex attribute :normal, :normal attribute :color, :color attribute :tex0, :texcoord0 varying :pos, :vertex varying :color, :front_color varying :tex0, :texcoord0 output :color, :color technique :default do pass :pass0 do depth_enable true blend_enable true blend_source :source_alpha blend_destination :one_minus_source_alpha vertex_shader <<-EOS OUT.pos = UNI.mvp * IN.pos; float3 norm = mul(UNI.normal_matrix, normalize(IN.normal)); OUT.color = dot(UNI.light_dir, norm) * IN.color; OUT.tex0 = IN.tex0; EOS fragment_shader <<-EOS OUT.color = IN.color * sample(tex0, IN.tex0.xy); EOS end end end pp fx.compile()
こんな感じらしいですよ。普通すぎて面白くねー。
CgFXを使えるようにしてもいいんだけど、それと違うのは、ステートをRubyで簡単に増やせること、ランタイムが必要ないこと。
CgFXもステート増やせあーあーきーこーえーなーいー。
なんか最初考えたより面白くなかっな。
次どうしようか。 やることリストがあったはずなんだが忘れた。
Cg対応したいかも。やるかな。
おー、1月の日記見たら思い出した。
attributeになんかライティングとか指定しておくと計算済みの値が入ってるとかね。 とかねじゃなくて考えてるわけだが。
そりゃ便利そうだな。で、どうやって実現するつもりだ、1月の俺。考えてなかった気がするが。
まあずっと先延ばししてたCg対応を先にやるか。
どうでもいいけどGLSLはつくづくクソ言語で困ります。