寝なきゃならんのだが。
久々に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はつくづくクソ言語で困ります。