スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

シェーダー開発ツール 7

2006年11月17日 22:27

今日も進捗報告(・∀・)

シーンパーツ表示ツリービューを追加しました。

ShaderSmith7.jpg


これを元に描画順序を作成するわけですね。
あと、面倒なのでここでレンダリングターゲットを作成できるようにしました(´ω`)


これで後追加すればいい機能は、、、
・ディスプレイリストのエディット機能
シェーダー定数設定機能
かな。

下の方は大まかなモノはほとんど出来てます。
ってことで、上のディスプレイリストのエディット機能を追加すれば、大体完成!!


ディスプレイリストのエディット機能は Maya でいうハイパーグラフみたいなモンを作ろうと思ってます。
視覚的にもわかりやすいしね(・∀・)

・・・まだまだ先が長そうだ('A`)
今月中に出来るといいなー(´ー`)y─┛~~


blog_rank
スポンサーサイト

シェーダー開発ツール 6

2006年11月14日 11:45

前回の記事から、そろそろ2週間ほど経過するので進捗報告。
シェーダー開発ツールのね。

前回は変数エディット機能入れたところでしたが、現在シェーダー定数編集機能の大まかな部分を入れ終わりました。

なんで大まかか?って言うのは、よーく考えたら各描画単位ごとにシェーダー定数を設定できるようにしてるわけなんだよね。
今はマテリアル選択リストで選択したマテリアルにシェーダーをアタッチしてるけど、実際は(マテリアルも含めた意味での)描画単位なんだよなってことに気づいてしまったわけです。

そうなるとディスプレイリストのエディット機能を追加してからじゃないとシェーダー定数をどこに設定するか?を決定できないわけです。本来は。

なんで、今は先にディスプレイリストのエディット機能を追加してます。
マテリアル選択リストは将来的に廃止かな。
ここでいう「ディスレプレイリスト」っていうのは、次世代機でいうコマンドバッファではなく、大まかな描画順序のことね。

これが出来れば、HDRやシャドウマップのシェーダーを描画順序のエディットを使って行うことが出来ます。
ポスト処理のシェーダーを実際に結果を見ながら開発できるようになるわけです。

これが出来ればかなり開発しやすくなるはず!
ってことでガンバリマス("`д´)ゞ


blog_rank

シェーダー開発ツール 5

2006年11月01日 15:56

色々と仕事の方であったので開発を中断していたシェーダー開発ツール。

2週間ぶりぐらいに開発を再開しました。
んが!なかなか気力が沸きませんよこれ(´・ω・`)

たぶん、考え事とかあるからだと思うんだけど・・・。
手が動かないです。
ってことで、今日は気分転換も兼ねてブログの更新。

前回から変わったことはあまり無いんだけどね。
追加したことって言えば、、、

・自分で定義した「変数」を、他の「変数」の計算プログラムの中で参照できるようにした。

・「変数」管理リストウィンドウを追加


ぐらいかなー。
基本はほとんど出来上がってるから、そんなに難しくなかった。
Closure 大活躍w


そんなワケで、スクリーンショット。

ShDev_061101.jpg



あと追加しないといけないことは、、、

・「変数」を実際にシェーダー定数として設定する仕組み(GUI含む)

・POST 処理系のシェーダー(HDR とか シャドウマップ とか Depth of Field とか)を
 書くための、フロー制御のエディット機能

 
かな。

どっちもGUI作るのが面倒('A`)
基本的に あるけ が自分で使うように作ってるので、
自分が使いやすければ適当に作ってもいいんだけど、
やっぱり見栄えは重要だと思うのでw

そんなこんなでGUI作るのはいっつも悩んでます。

一応基本って言うかそういうのはあって、
ProDG みたいに全部スプリットウィンドウで処理できるようにしてます。
だから、大まかなGUIは使用者が構築できるようになってて、
細かい部分だけ作ればいいんだけど、それでも悩みますw

デザインが決まってるGUI作るのは楽だし楽しいんだけど、
どうしようか悩んでる時は本当眠くなりますw


あと大まかな機能2つ入れれば完成だし、がんばりますよ( ・`ω・´)
・・・11月中に完成させたいなー('A`)
 

blog_rank

動的にシェーダー定数をプログラム

2006年10月20日 16:12

ってことで、上記タイトルの機能を あるけ が趣味で作ってるシェーダー編集エディターに追加しました。

既存のシェーダーの開発ツールとしては nVidia の FX Composer や ATI の RenderMonkey があります。
どっちのツールも定数レジスタを設定することは出来るけどプログラムすることは出来ませんでした。
射影行列を作ったり、ライトの位置を簡単な円運動させたり、そういうことは出来なかったわけです。

もちろん、定数を設定するだけなら出来ます。
たとえば、HDRの閾値を入力したり。

しかし、実際にゲームで使う場合、定数レジスタに設定する値は複雑な演算を行ったり、
計算で求めたベクトル同士の内積の値を突っ込んだりします。
そういう細かな定数レジスタの設定は、出来ませんでした。

あるけ はプログラマなので、別にスライダーなどで定数レジスタが弄れなくても、簡易的なプログラムが書け、それで定数レジスタを制御できる方がうれしいです。


・・・ってことで、Closure の機能をバリバリ使ってタイトルの機能を追加しました。
アプリケーションの中でプログラムを入力すると、構文解析を行い、エラーが無ければプログラムを構築します。

どんなことが出来るか?というと、、、


char pProgram[] = "\
 VEC vTest  = init(1,0,0); \
 MAT mtTest  = rotY( rad(cnt()) ); \
  \
 return vTest * mtTest;\
"
;



こんな感じのプログラムがあるとします。
cnt() っていうのは1フレームに1ずつ増えるカウンタを返す関数、rad() は与えられたパラメーターを Degree から Radian にする関数、init() はベクトルの初期化関数、rotY() はY軸回転の行列を返す関数です。

このテキストをほいさーって感じに Closure のジェネレーターに突っ込んでやると、これを評価する Closure が返ってきます。
後は、値が欲しい時に Closure を評価してやれば、この Closure が計算し、「Y軸周りに回転するベクトル」を取得することが出来るわけです。


Closure を使ってるので、他のプログラムの中でこのプログラムを呼び出すことも可能です。
スクリプトに見えますが、インタプリタで動いてるわけでなく、式を保存しているので Closure を評価するだけで式の実行を行います。

関数型プログラムの悪い欠点で、あまり長いプログラムはスタック食いつぶすだろうから書けないけどねw
シェーダー開発ツールはこの機能を入れてもうちょっと機能を追加したら、公開しようかな?って思ってます。


ためしに作ったようなものだけど、他のゲーム会社とかでも使われたら最高だね~w


blog_rank

ファー

2006年09月29日 11:47

ってことで、Furシェーダーを書きました。

たまには3Dのこともやらないとね('A`)

fur.png



原理はいたって単純。
一度 SRC = SRCALPHA, DST = ZERO でアルファに適当な数値(あるけ は0.1をいれた)で書き出して、次に SRC = SRCALPHA, DST = ONE で法線方向に頂点を延ばすようなシェーダーで加算していきます。
この法線方向に頂点を延ばすようなシェーダーを適当な回数(あるけ は10回にしてみた)で同じように適当なアルファ値(あるけ は0.1をいれた)で加算すると上のような絵ができます。

毛の色だけちょこっと変えることも出来たりします。
テクスチャはなるべくノイズが入ってるようなテクスチャのほうが毛っぽく見えるかな。


簡単なんで1時間もあれば出来ます。

頂点を延ばすところに風の力なんかをいれてやるとちょこっと風になびいたりすることも可能かも。

blog_rank


最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。