トップ 最新

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はつくづくクソ言語で困ります。