2014年07月

2014年07月31日

modo801の新機能を調べてみた その25 modo801

前回に引き続き「Shader Inputs」について調べてみたい。

fig06

「パーティクル寿命」は「Particle Simulation」アイテムの「パーティクルの寿命」オプションがONになっていればパーティクル発生時からの経過秒数として値が取得出来る。

例えばサーフェスエミッタをシリンダーアイテムに仕込んで、そのパーティクルにBlobを割り当てて、

fig05

Blobにアイテムマスクを作成して、

fig03

ディフューズの色をちょっと変更して、

fig04

「Shader Inputs」の「パーティクル寿命」を「Basic Math:減算」で1から「パーティクル寿命」を減じて、それを「Basic Math:最大」で0と比較して値がマイナスにならないようにしてから「ディフューズ量」に入力し、さらに「パーティクル寿命」を「Basic Math:最小」で1と比較して値が1より大きくならないようにして、それを「透過量」に入力してみた。

fig02

これがその結果。パーティクル生成からの時間で「Blob」のマテリアルのパラメータがパーティクルごとに変化しているのがわかる。FPSが24なら生成後24フレーム目で寿命値が1になる。

fig06

「パーティクルサイズ」、「パーティクルディゾルブ」、「パーティクルルミナンス」は今のところ「パーティクルオペレータ」で操作しない限り変化しないチャンネルだ。だからこれらの値は「パーティクルオペレータ」で操作して、それをパーティクル経由で「Shader Inputs」から取得してシェーダーチャンネルに適用する流れになる。しかしパーティクルに割り当てられる「Volume」、「Sprite」、「Blob」、「Replicator」で全て取得可能かと思ったらそうではないみたいだ。

ここで今までのまとめとしてパーティクル系のパラメータにつてい全て調べて取得可能かどうかを表にまとめてみた。ヴォリューム系は「ボリューメトリックルミナンス量」と「ボリューメトリックルミナンスの色」を「Constant」シェーダーで割り当てて、レプリカには「Material」の「ディフューズの色」を割り当てて、

fig09

「Particle Operator」で「寿命」をチャンネルに割り当てて、

fig07

「Shader Inputs」からそのチャンネルを取得した値を「Constance」の「ルミナンスの色」と「Material」の「ディフューズの色」に、Rは直接、GBは1から引いて反転して入力してみた。

fig08

これで1秒後のシミュレーション結果でRGB(0,1,1)とRGB(1,0,0)の色のグラデーションになればその値が取得できている事になる。

fig10

結果は以下の通り。ベクトルは結局わからず終いだ。

  Blob Replicator Sprite Volume
速度 × × ×
ベクトル
× × ×
ID
長さ ×
寿命
サイズ × × ×
ディゾルブ
ルミナンス × × ×

ヴォリューム系はサイズなどにアイテム側に独自のコントロールシステムがあるからそれとかち合ったりして取得できないのかな?結構ややこしい結果になったので使おうとした時に出来そうで出来ない事があって混乱しそうだな。早めに全部で値取得が出来るようになって欲しいな。

それではまた次回。

modo801ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2014年07月30日

2015の新機能を調べてみた その28 3dsmax 2015

今回も「ShaderFX」で出てくる「Material」の「VertexShader」グループについて調べてみたい。

前回も書いた通りテッセレーションについては「Tessellation」ノードでブラックボックス化されていて、出来るのはこのノードが動作するのに必要なものを集めて繋ぐだけみたいだ。

fig01

入力ソケットは以下の通り。

  • WorldNormal Vert Shader
  • Vertex Pos World Space
  • Tessellation Factor
  • Displacement
  • Flat Blend
  • Face Clipping Bias
  • Object Clipping Bias
  • View Prj
  • Tessellation Method
  • Vertex Position Output

「WorldNormal Vert Shader」にはワールド座標系で表わされた頂点の法線ベクトルを取得するグラフを接続する。

「Vertex Pos World Space」にはワールド座標系で表わされた頂点の座標値を取得するグラフを接続する。

「Tessellation Factor」はエッジに対する分割数で1.0で分解なしになる。

「Displacement」はディスプレースメント値を取得するグラフを接続する。

「Flat Blend」はFlatテッセレーションと今のテッセレーションとの間のブレンド具合を決める値。0ならそのまま1ならFlatテッセレーションになる。

「Face Clipping Bias」はオブジェクトの面がビューからクリップされるかを決めるための最大ディスプレースメント量を決める。

「Object Clipping Bias」は「Face Clipping Bias」のかわりにバウンディングボックスの拡張スケールを使用してオブジェクトをクリップされないようにするためのもの。HLSL5形式で出力したコードを見ると使われていないようだ。

「View Prj」はビューの射影変換マトリクス。

「Tessellation Method」はテッセレーションの方式の切り替え。

  • 0:PN-AEN (Point Normal - Adjacent Edge Normals)
  • 1:PN-Triangles (Point Normal - Triangles)
  • 2:Flat

「Vertex Position Output」はテッセレーション処理の最終段階に頂点に加える処理。ここでジオメトリシェーダーに渡すかわりに直接ラスタライザに渡す場合にポイントを射影変換するグラフを接続する。

「Tessellation」グループノードは「Tessellation」ノードのソケットにそれぞれ必要なグラフを接続する構造になっている。

fig02

「Tessellation Factor」に「float」ノードが接続されてコード形式がHLSL5なら「ShaderHull()」「ShaderDomain()」が追加されてHullシェーダーとDomainシェーダーが有効になる。下はパスに追加されたコード。

fig04

「Vertex Position Output」に接続されているグラフは「Stage Outputs To Pixel」と「Skip」ノードの組み合わせで、「Skip」ノードの「Input」ソケットに繋がるグラフは「Stage Outputs To Pixel」がTrueの時に「Vertex Position Output」接続されるようになっている。つまりDomainシェーダーの出力が直接ラスタライザに渡される場合にこのグラフが有効になる。

fig03

これはVertexシェーダーにもあったね。頂点座標をGeometryシェーダーはWorld座標系で受け取るけどラスタライザは射影座標系で受け取るからGeometryシェーダーをスキップする時はWorld座標から射影座標に変換する必要があるわけだ。

そのためこのグラフでは「VertexWorldPos」ノードと「View Prj」ノードを掛け算して、「TexCoord Output」ノードで「Texcoord name」を「Position」、「Semantic」を「SV_Position」に割り当てている。

このグラフが「ShaderDomain()」ファンクションの最後に下のように追加される。

fig05

だからGeometryシェーダーがある場合はこの部分が省略される。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2014年07月29日

Replicatorのディゾルブ modo801

今さらなんだけど、Replicatorの「ディゾルブ」パラメータって機能してないよね?

fig01

マニュアルにはこう書かれている。

Dissolve: The 'Dissolve' function is a convenient way to fade all replicated items from view. At 100%, the item will render normally, while values lower than 100% will fade all replicas ramping toward 0% where the replicated items would be come completely invisible.

Dissolve (ディゾルブ): リプリケータアイテム全体の透明度を調整します。0% では通常にレンダリングされます。0% より高い低い値にすると次第に透明度が増し、100% で完全に見えくなります。

だからこのパラメータを100%にしたらレプリカは透明になってレンダリングされないはずだ。

例えばラディアルエミッタをポイントソースに立方体のメッシュを原型となるアイテムとして割り当てると、

fig03

このようにパーティクルにレプリカが表示される。

fig02

ここで「Replicator」の「ディゾルブ」パラメータを100%にしたら、マニュアルの説明ではこれらの立方体が透明になって消えるはずだけど何も起こらない。

ディゾルブ自体何かの設定をしないと使えないかと言えば、Meshアイテムの「ディゾルブ」パラメータはちゃんと機能していて、下のように「ディゾルブ」パラメータを85%にしたら半透明になったし、100%にしたらレンダリングされなくなった。

fig04

さかのぼったら501までは機能してるんだけど601からはパラメータをいじってもレプリカがディゾルブしなくなってる。

下の画像は501でやってみたもの。「ディゾルブ」を80%にしたら円柱表面にあるレプリカが半透明になっているのがわかる。

fig05

601から仕様が変わっているのでなければそれ以降のバージョンでもこれと同じように動作するはずだよね。通常はディゾルブよりマテリアルの透過をいじるだろうからあまりこの設定は使わないだろうけど、機能し無いのは困るね。

601と言えばパーティクルが導入された時なので、それが影響している可能性が考えられるかな。例えばパーティクルにリプリケータでメッシュオブジェクトを割り当てて、パーティクルオペレータに「寿命」と「ディゾルブ」を追加して下のように接続すると、

fig06

パーティクル生成1秒後にディゾルブの値が100%になり、このように透明になっていくのが確認できる。

fig07

リプリケータのディゾルブはこのパーティクルからの値が優先してしまってリプリケータ自身の「ディゾルブ」パラメータが無視されてしまっている可能性がある。

それではまた次回。

modo801ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2014年07月28日

2015の新機能を調べてみた その27 3dsmax 2015

今回も「ShaderFX」で出てくる「Material」について調べてみたい。

前回は「Material」グループの「VertexShader」グループについて調べた。今回は「Tessellation」グループについて調べてみたい。

fig01

テッセレーションは少ないポイントで構成されたポリゴンメッシュのポリゴンを細かく分割して滑らかな曲面やディスプレースメントマップを使った詳細なディテールを生成したりする仕組みだ。DirectX11のプログラマブルシェーダーではこのテッセレーションの入り口の「Hull Shader」と出口の「Domain Shader」をプログラミングする事でこの機能をカスタマイズできるようになっている。

このノードは「Material」グループ外側の「Tessallation Factor」、「Displacement」が接続されていて、

fig02

「Tessellation」からの出力は3つの「Pass」グループノードに接続されていて、

fig03

その中で「Pass」ノードの「Hull and Domain Shader」ソケットに接続されている。

fig04

このことから「Tessellation」グループノードにHullシェーダーとDomainシェーダーの定義が全て含まれているようだ。

Hullシェーダーの役割はテッセレーターに分割方法などのパラメータを指定することで、DomainシェーダーはTessellatorによって分割されたポリゴンの頂点に対して処理を行うことだ。Vertexシェーダー同様、Geometryシェーダーを飛ばしてPixelシェーダーに出力を渡す事も出来る。

「Tessellation」グループノードを開くとこのようになっている。

fig05

まず「Tessellation Factor」ソケットに何か接続されているかどうかが「Socket Filled」ノードでチェックされ、シェーダーがDirectX11用なのかどうかを「Is Shader Config」ノードでチェックしている。これらが両方ともtrueの時だけ「Skip」ノードの「Input」ソケットと「Result」ソケットが接続されて有効になり、テッセレーションの出力が有効になる。

fig06

「Path Direction List」ノードには「Int Value」ノードが3つ接続されていて、「PNAEN:0」、「PNTriangles:1」、「Flat:2」の3つの値から選択するようになっていて、それが「Tessellation Method」、「Tessellation Type」のソケットに接続されている。

fig07

これはグループノードのプロパティとして現れるので、「Material」グループのプロパティで切り替える事が出来る。

fig08

この値はテッセレーションの方式を、「PN-AEN (Point Normal - Adjacent Edge Normals) 」、「PN-Triangles (Point Normal - Triangles)」、「Flat」で切り替えるためのものだ。

「Flat」はそのままポリゴン分割するもので、「PN-Triangle」は頂点の法線方向を使って分割後のポリゴンメッシュを曲面化するものだ。この方式で単純にポリゴンごとに曲面化した場合、頂点の法線が隣合うポリゴンごとに異なると曲線で膨らんだエッジに隙間(クラック)が生じてしまう欠点がある。

PN-AEN」は「PN-Triangle」の欠点を隣接エッジ法線を使うことで解決した方式。

この設定は「Tessellation」グループ内で「Tessellation」ノードの「Tessellation Method」ソケットに直接接続されているだけだ。

fig09

つまり「Shader FX」ではテッセレーションのについてはこのノードでブラックボックス化されていて、「Hull Shader」や「Domain Shader」まではカスタマイズ出来ないようだ。

結局テッセレーションについては「Tessellation」ノードが動作するために必要なものを作ってソケットに接続して提供する程度のものらしい。

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2014年07月26日

無線中継機WN-G300EXを買って見た。

慣れと言うのは恐ろしいもので、セキュリティの面で心配が尽きない電波環境は使わないようにしていたんだけど、iPadを買ってからそうもう行かず、仕方なしにWi-Fi環境を立ち上げてみたら便利すぎてすっかりセキュリティの事なんか忘れて(はいないけどw)床を這わせたLANケーブルはWi-fi電波に置き換わってしまった。もちろんWPA2暗号化やSSID非通知やMACアドレスフィルタリングくらいはやってるけどね。

※後で知ったんだけどSSID非通知は無駄にリスクを高める危険があるからやらない方がいいみたいだね。

どっぷりWi−fi環境に浸かってしまうと今度はそれが届かなかったり感度が得られないエリアに不満が出てきて、なんとかこの電波が届きにくいエリアを解消できないかと思って調べたら、中継機なるものがあることがわかった。

そこで色々と使った人のレビューを読んでみると、せっかく中継機から強い電波が出ても、おおもとのルーターの弱い電波の方と接続してしまうトラブルがあるようで、中途半端なエリアでは思っているような動作が期待できないらしいと言う事がわかってきた。たぶん中継機を経るより元の方が応答は早いだろうからそっちと繋がっちゃうんだろうね。

そういうトラブルが起きる可能性があると知って二の足を踏んでたんだけど、このトラブルを解消する中継機がI-O DATAから発売になると知って前のめりで買いに走ったわけだw

どういう仕組みかと言えば、この機械は中継の時にSSIDを振り直す機能が搭載されていて、中継の元と別の局として振舞う事が出来るようになっている。だから端末側で接続先のSSIDを手動で切り替えれば、強い電波の方と強制的に繋ぐことが出来るわけだ。

fig01

もちろん中継機側にも親のルーターと同じレベルのセキュリティ設定が出来るので、中継機の方でセキュリティのレベルが下がる事は避けられるようだ。

接続はWPSでやったり、専用アプリを使ったり、LANケーブルで繋いでパソコンからやったりいろいろ出来る。専用アプリには「設置場所アシスト機能」というのが付いていて、子機を使う場所に子機を置いてこれを表示し、中継機をあちこち動かしながら親機と子機の強度がつりあう中間地点を探せるようになっている。

fig02

これをうまく使うには子機2台あった方がいい。この画面を表示する用と距離を測る用だ。距離を測る用の子機を使いたい場所に置いて、表示用の子機と中継機を持って針が「最適」になる位置をウロウロ探せば設置場所が見つけられる。自分は3DSを距離用として置いてiPadで見ながら最適な場所を探してみた。表示は親機と子機のバランスと親機からの電波強度なので2つを見れば子機からの電波強度も推定できる仕組みだ。使ってみると最適の方に針が振れて喜んだら単に親機からの電波が弱くなっただけみたいな感じもあったりする。スペース空いてるんだから子機との電波強度も表示してほしいところだ。

今のところベストな位置はまだ見つけられていないけど今まで使えなかったエリアまで電波を飛ばすことが出来るようになって快適になった。



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)Goods 
Archives