資料館/RenderStateのメモ

Last-modified: 2009-03-18 (水) 13:13:28

RenderStateのメモ

E3DSetRenderStateを使用することで、オブジェクトが持つステータスを変更する事ができる。うまく利用すれば様々な便利な処理を行う事ができるが、初心者には扱いにくい。
おちゃっこ氏は「DirectXのマニュアル見てね^^」というスタンスだが、まあそのマニュアルっつーのもチルドレン達にとっては見れたものではないので、暇つぶしにでもまとめてみようと思う。
マイクソソフトのマニュアルを読んで投げ出してしまった人は、コレを気にもう一度実験してみてはどうだろうか。

注意点

  • Easy3Dは内部で独自処理を行っているらしく、設定しても効果がないものもある
  • 一部の機能はハードウェアのサポートがいるため、環境依存である
  • Easy3D側で別途ステータスを変更する命令が用意されているならそれを使うべき
  • ステータスをメチャクチャに変更し、バグが出たりしてもシラネ
    • おちゃっこ氏にきかないように
    • 俺にも聞かないように
  • 用途は不明。自分で見いだせ。そして俺に教えてくれ

RenderState一覧

TRUEを指定すべき所では非0、FALSEを指定すべき所では0を指定すればいいっぽい。
特に書かない限り、非0のところでは1を指定することにした。


また、DirectXではパラメータが定数として定義されているが、ここでは整数値に読み替えて説明する。
今後サンプル等、いいページがあればリンクを貼っていくし、俺が勝手に実験した結果を載せるかもしれない。

D3DRS_ZENABLE

与える引数7
パラメータ0
1
2
デフォルト値1
E3Dでの動作



Zバッファについての設定を行う。0を指定した場合、パーツのZバッファが無効になる。1を指定するとZバッファを利用する。2を指定するとWバッファというものを利用する。ただしWバッファを利用するにはハードウェアのサポートが必要だ。
Wバッファについて適当に解説すると、Zバッファをちょっと改良したもので、精度がよいらしい。

D3DRS_FILLMODE

与える引数8
パラメータ1
2
3
デフォルト値3
E3Dでの動作



塗りつぶし状態の設定を行う。1を指定した場合、オブジェクトの頂点のみが描写される。2を指定した場合は、頂点と辺のみが描写される。所謂ワイヤーフレーム。3を指定すると、通常通り、面全てが描写される。
8-1.jpg

D3DRS_SHADEMODE

与える引数9
パラメータ1
2
3
デフォルト値2
E3Dでの動作



シェードモードの設定。オイラはわりとよく使う。効果についてはココも参照
1を指定するとフラットシェーディング。所謂スムージングOFF状態であり、1頂点の色情報が全ての面にベタ塗りされる。あえてカクカク状態を表現する場合にはコレを使う。2を指定するとグーローシェーディングとなり、影が各頂点ごとに補完され、滑らかな表示となる。スムージングON。3を指定するとフォンシェーディングとなるが、対応していない。

D3DRS_ZWRITEENABLE

与える引数14
パラメータ0
1
デフォルト値1
E3Dでの動作



Zバッファの書き込みを制御する。0を指定した場合、Zバッファに書き込みを行わなくなる。今までのZバッファを参照し描写を行うが、Zバッファの値を更新しない、という意味だと思う。うまく設定すれば描写が簡略化できるかもしれない。エフェクトなんかに使うのかな?
オブジェクトの順序を入れ替えておかないと大変な事になる。具体的にはこうなる。
14-1.jpg14-2.jpg
左が、0を指定した状態。最初に髪の毛が描写されるが、Zバッファが更新されないため顔がその上にどかっと描写され前髪が消える。ブーツも足を無視して描写されている。カメラの向きが固定されていればメタセコのオブジェクトの順序を変更すればいいと思う。
でも恐らく、こういった複雑なモデルに適用するようなものではない。

D3DRS_ALPHATESTENABLE

与える引数15
パラメータ0
1
デフォルト値0
E3Dでの動作



アルファテストの有効無効を切り替える。デフォルトはFALSE。アルファテストっつーのは、ある一定の数字を決めて、その数字よりアルファ値が高いピクセルのみを描写する。TRUEにすると有効になる。わからねー場合は適当にぐぐれば出てくる。透明なテクスチャを多用する場合に使えるほか、工夫次第でかなり色々な事ができそうだ。なお、比較に利用するある一定の値、というのは別の所で設定する。

D3DRS_LASTPIXEL

与える引数16
パラメータ0
1
デフォルト値1
E3Dでの動作



各線の最後の頂点を描写するかどうかの設定。デフォルトはTRUE。例えば、V字のような連続した2本の折れ線を書く場合、最初の1本目の終わりの点の上に二本目の最初の点が描写される。コレによって見栄えが悪くなる場合にFALSEを設定すれば改善される。

D3DRS_SRCBLEND

与える引数19
パラメータ1~15
デフォルト値1
E3Dでの動作



画像合成を行う際の、ソース画像ブレンディングモードの設定を行う。これと後述するD3DRS_DESTBLENDを適宜設定することで加算合成を行ったりする事が可能となる。
二枚の画像をどのようにブレンドするか、という事を設定するのだが、それぞれをSRCとDESTとし、各々の設定を変更する事で様々な表現が可能だ。
与えるパラメータによってブレンディング関数が変更される。一覧はマイクソソフトのところに書いてあるのでリンクを貼ろうかと思ったが、もっと見やすいところを発見したのでリンクを貼っておく。

D3DRS_DESTBLEND

与える引数20
パラメータ1~15
デフォルト値1
E3Dでの動作



DESTのブレンディングモードを設定する。↑の項目を参照。

D3DRS_CULLMODE

与える引数22
パラメータ1
2
3
デフォルト値3
E3Dでの動作



ポリゴンの背面(カメラから見えない面)のカリングの設定を行う。1を指定すると、カリングが行われない。2の場合は右回り、3の場合は左回りにカリングする。

D3DRS_ZFUNC

与える引数23
パラメータ1~8
デフォルト値4
E3Dでの動作



Zバッファ利用時の、計算結果に対する設定。Zバッファの値を参照した際、どのような状態のときに描写を行う、という定義を変更する事ができる。
奥にあるオブジェクトを透視するとか、一部表現でナイスな動作を提供してくれるはず

  • 1:Zバッファに関わらず常に描写されない
  • 2:Zバッファの値より、小さい時(手前にあるとき)描写される
  • 3:Zバッファの値と等しい時に描写される
  • 4:Zバッファの値以下の時(同じか、手前にあるとき)描写される
  • 5:Zバッファの値より、大きい時(奥にあるとき)描写される
  • 6:Zバッファの値と等しくない時に描写される
  • 7:Zバッファの値以上の時(同じか、奥にあるとき)描写される
  • 8:Zバッファに関わらず常に描写される

D3DRS_ALPHAREF

与える引数24
パラメータ0~255
デフォルト値0
E3Dでの動作



アルファテスト利用時の基準となる透明度。0から255の間で指定する。

D3DRS_ALPHAFUNC

与える引数25
パラメータ1~8
デフォルト値8
E3Dでの動作



アルファテストにおける、計算結果の設定。値についてはD3DRS_ZFUNCと同じ。

D3DRS_DITHERENABLE

与える引数26
パラメータ0
1
デフォルト値0
E3Dでの動作



ディザリングの設定。デフォルトはFALSE。ディザリングを行うと、グラデーションを滑らかに表示させることが出来るはず。ただしテクスチャの解像度が犠牲になる。

D3DRS_ALPHABLENDENABLE

与える引数27
パラメータ0
1
デフォルト値0
E3Dでの動作



アルファブレンドを行う際に、透明化に関する設定。デフォルトはFALSE。

D3DRS_FOGENABLE

与える引数28
パラメータ0
1
デフォルト値0
E3Dでの動作



フォグに関する設定。デフォルトはFALSE。オブジェクトのパーツ単位でフォグの有効無効を切り替える事ができる。E3Dにはフォグを設定する命令がそれぞれ用意されているので、これを直接弄るような場面は少ないのではないだろうか。
E3Dではパーツ単位で設定する事ができないので、オブジェクトの一部分にフォグをかけたくない場合などに設定すると良いだろう。

D3DRS_SPECULARENABLE

与える引数29
パラメータ0
1
デフォルト値0
E3Dでの動作



スペキュラーハイライトの設定。デフォルトはFALSE。
これを有効にすると、金属のようにテカテカする表示となる。

D3DRS_FOGCOLOR

与える引数34
パラメータ0~4294967295
デフォルト値0
E3Dでの動作



フォグの色を設定する。HSPからコイツを設定するより、E3D側で設定する命令があるのでそれを使うべきである。めんどい。

D3DRS_FOGTABLEMODE

与える引数35
パラメータ0~3
デフォルト値0
E3Dでの動作



ピクセルフォグの設定を行う。現在の所、0か3しか指定できない。
E3Dでピクセルフォグが使えるのかどうか不明。タブン使えないはずだ。

D3DRS_FOGSTART

与える引数36
パラメータ0.0f~
デフォルト値0.0f
E3Dでの動作



フォグの開始距離。視点からの相対距離のはず。E3Dの命令で設定したほうがいい。

D3DRS_FOGEND

与える引数37
パラメータ0.0f~
デフォルト値1.0f
E3Dでの動作



フォグの終了距離。視点からの相対距離のはず。開始距離と共にE3Dの命令で設定したほうがいい。

D3DRS_FOGDENSITY

与える引数38
パラメータ0.0~1.0
デフォルト値1.0
E3Dでの動作恐らく×



指数フォグ利用時のフォグ密度の設定。E3Dでは指数フォグが使えないので、このステータスは機能しないはずである。

D3DRS_RANGEFOGENABLE

与える引数48
パラメータ0
1
デフォルト値0
E3Dでの動作



範囲フォグモードの設定。デフォルトはFALSE。通常は視点からみた深度フォグが使われるが、範囲フォグモードにすると深度の代わりに距離が使用される。
視点が移動する際に深度フォグより精度の高いフォグが期待できるが、計算に時間がかかる。

D3DRS_STENCILENABLE

与える引数52
パラメータ0
1
デフォルト値0
E3Dでの動作



ステンシル処理の有効無効を切り替える。デフォルトはFALSE。ステンシル処理というのは恐らく、Zバッファ的な事と似たようなもので、描写する、しないをマスキングテープのように自在に設定できるとかそんな感じだと思う。ステンシル処理を使用すると、影の描写などを行う事ができる。

D3DRS_STENCILFAIL

与える引数53
パラメータ1,2,4,8,16,32,64,128,256
デフォルト値0
E3Dでの動作



ステンシルバッファを利用した時に、描写されない、と判断された際の処理を設定する。ビットを立てていくのだと思う。

  • 1:ステンシルバッファの情報を変更しない
  • 2:ステンシルバッファを0にする
  • 4:ステンシルバッファを基準値で書き換える
  • 8:ステンシルバッファの値を最大値まで増加させる
  • 16:ステンシルバッファの値を0になるまで減少させる
  • 32:ステンシルバッファのビット情報を反転させる
  • 64:ステンシルバッファの値を上昇させ、最大値に達した場合0に戻す
  • 128:ステンシルバッファの値を減少させ、0になった場合には最大値に戻す
  • 256:両面ステンシルをサポートする

D3DRS_STENCILZFAIL

与える引数54
パラメータ1,2,4,8,16,32,64,128,256
デフォルト値0
E3Dでの動作



ステンシルバッファを利用した時に、ステンシルバッファのテストはパスしたが、Zバッファと比較した結果描写されない、と判断された際の処理を設定する。設定する値については↑を見るべし

D3DRS_STENCILPASS

与える引数55
パラメータ1,2,4,8,16,32,64,128,256
デフォルト値0
E3Dでの動作



ステンシルバッファを利用した時に、ステンシルバッファ、Zバッファ双方と比較して、描写する、と判断された時の動作を設定する。設定する値については↑を参照。

D3DRS_STENCILFUNC

与える引数56
パラメータ1~8
デフォルト値8
E3Dでの動作



ステンシルテストにおける、計算結果の設定。値についてはD3DRS_ZFUNCと同じ。

D3DRS_STENCILREF

与える引数57
パラメータ0~
デフォルト値0
E3Dでの動作



ステンシルテストに利用する時の基準値をセットする。

D3DRS_STENCILMASK

与える引数58
パラメータ0,1,2,4,8....
デフォルト値4294967295
E3Dでの動作



ステンシルテストにおいて、有効ビットを決定するためのマスク。各ビット値を立てたところが有効となる。デフォルトではFFFFFFFFとなっており、全て有効である。

D3DRS_STENCILWRITEMASK

与える引数59
パラメータ0,1,2,4,8....
デフォルト値4294967295
E3Dでの動作



ステンシルバッファの書き込みにおいて、有効ビットを決定するためのマスク。各ビット値を立てたところが有効となる。デフォルトではFFFFFFFFとなっており、全て有効である。

D3DRS_TEXTUREFACTOR

与える引数60
パラメータ0~4294967295
デフォルト値4294967295
E3Dでの動作


D3DTA_TFACTOR テクスチャ ブレンディング引数
または D3DTOP_BLENDFACTORALPHA テクスチャ ブレンディング処理による
マルチテクスチャ ブレンディングで使われる色。関連する値は D3DCOLOR 変数である。
デフォルト値は不透明の白 (0xFFFFFFFF) である。

マイクソソフトの資料から引用してみた。お願いですから日本語で説明してください。
まあ適当に説明すると、複数のテクスチャを一つの面に重ねて貼り付ける際に利用するアルファ値という事になると思う。複数のテクスチャを貼り付ける手法は2種類あるが、そのうち一つはハードウェアのサポートが必要となる。
マルチテクスチャブレンディングは、ハードウェアのサポートを必要としないがパフォーマンスは劣る。

D3DRS_WRAP0~WRAP7

与える引数128~135
パラメータ0,1,2,4,....
デフォルト値0
E3Dでの動作



テクスチャのラッピングの設定。4ビットのフラグそれぞれを立てることで、最大4方向のラッピング設定を有効に出来る。
簡単に言えば、テクスチャのUV座標がテクスチャのサイズより大きいと、面にテクスチャが張られない部分が出来てしまうが、そこに対してテクスチャを貼る処理を行える。U方向は有効、V方向は無効、という風に設定できる。このテクスチャを貼る処理をラッピングというらしい。

D3DRS_CLIPPING

与える引数136
パラメータ0
1
デフォルト値1
E3Dでの動作



クリッピングの設定。デフォルトはTRUE。恐らく、画面の外に出てしまったポリゴンの描写をスキップするか否か。

D3DRS_LIGHTING

与える引数137
パラメータ0
1
デフォルト値1
E3Dでの動作



ライティングの設定。デフォルトはTRUE。無効にしたオブジェクトに対してライティングが反映されない。こうなる。
137-1.jpg137-2.jpg
オブジェクト単位で設定可能なので、一部分だけ無効にするといったことも可能。手だけ無効にしてみた。

D3DRS_AMBIENT

与える引数139
パラメータ0~4294967295
デフォルト値0
E3Dでの動作



アンビエント色の設定。Easy3D側で設定するべきである。

D3DRS_FOGVERTEXMODE

与える引数140
パラメータ0
1
2
3
デフォルト値0
E3Dでの動作



頂点フォグを利用する際のフォグ形式。現在は、0(無効)もしくは3(線形フォグ)しか利用できない。

D3DRS_COLORVERTEX

与える引数141
パラメータ0
1
デフォルト値1
E3Dでの動作×?



頂点単位の色計算を有効、無効にする。デフォルトはTRUE。これを有効にしたうえで、Ambient,Diffuse,Supecular,Emissive色を設定する事で、オブジェクトの色を変更できる。


・・・ハズなのだが、こやつを無効にしても、有効にした時と同じで何の変化もない。ナゼだ。

D3DRS_LOCALVIEWER

与える引数142
パラメータ0
1
デフォルト値1
E3Dでの動作



スペキュラー(反射光)の方向に関する設定。デフォルトはTRUE。射影を行うと面とカメラの角度が変化するが、有効にした場合はカメラとの相対角度で反射光を計算するらしい。

D3DRS_NORMALIZENORMALS

与える引数143
パラメータ0
1
デフォルト値0
E3Dでの動作



頂点法線の自動正規化を行うか否か、とかいてある。デフォルトはFALSE。
環境マッピングなる機能を利用する際にはこれを有効にしておかないとダメらしい。が、負荷が高い。
ちょっと調べてみたがEasy3Dの影描写などには関係ないっぽいので無効にしておいていいはず。

D3DRS_DIFFUSEMATERIALSOURCE

与える引数145
パラメータ0
1
2
デフォルト値1
E3Dでの動作×?



Diffuse色のソースを決める。Diffuse色は物体が光源に照らされて明るくなる際の色だが、それを別の色と連動させたりする事ができるようだ。
0の場合はマテリアル色(アンビエント?)を使う。1の場合はDiffuse色を使う。2の場合はSpecular色を使う。




・・・ハズなのだが、変えても変化がない。

D3DRS_SPECULARMATERIALSOURCE

与える引数146
パラメータ0
1
2
デフォルト値2
E3Dでの動作×?



Specular色のソースを決める。↑を参照。弄っても変化がない。

D3DRS_AMBIENTMATERIALSOURCE

与える引数147
パラメータ0
1
2
デフォルト値0
E3Dでの動作×?



Ambient色のソースを決める。↑参照。弄っても変化がない。

D3DRS_EMISSIVEMATERIALSOURCE

与える引数148
パラメータ0
1
2
デフォルト値0
E3Dでの動作



Emissive色のソース。↑参照。弄っても変化がない。

D3DRS_VERTEXBLEND

与える引数151
パラメータ0,1,2,3,255,256
デフォルト値0
E3Dでの動作×?



スキニングに関係がありそうな頂点ブレンディングの設定。だが、弄ってみても変化なし。

てんぷれ

与える引数7
パラメータ0
1
2
デフォルト値1
E3Dでの動作



Zバッファについての設定を行う。0を指定した場合、パーツのZバッファが無効になる。1を指定するとZバッファを利用する。2を指定するとWバッファというものを利用する。ただしWバッファを利用するにはハードウェアのサポートが必要だ。
Wバッファについて適当に解説すると、Zバッファをちょっと改良したもので、精度がよいらしい。

参考リンク