Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[5412] HLSLシェーダーで追加テクスチャの指定方法 / まじかる☆しげぽん
[質問,Ver4.4.2] 返信
Data\ShaderにPMD(HLSL)のシェーダーが入っていたので、そちらを参考にプログラマに添付画像のようなMatcapシェーダーを作成してもらいました。

レイアウトファイルの.xmlファイルで<maps>に、Matcap用テクスチャの<map name="Matcap" />を追加し、メタセコの材質設定でその欄が追加されテクスチャが指定できるのを確認し、MQOファイルにもテクスチャパスが保存されてるようですが、.hlslファイルでこのテクスチャを指定するにはどうすればいいのでしょうか?
.hlslファイルを見ると、#if TEXTURE以降の部分でそれぞれのテクスチャを定義してるようですが、名前を合わせてみたりしても反映できなかったようです。
テクスチャの登録指定がregister( t0 )、サンプラー登録が( s0 )?という風に、模様、透明、凹凸が番号が振られているのでその番号を増やしていけばいいのかと思ったのですが、その次はシャドーマップがt3に登録されており、その次にt4として項目を追加してみても反映されなかったようです。

XMLでこのようにMatcapの項目を追加
---------------------------------------------------
  <maps>
    <map name="Texture" />
    <map name="Alpha" />
    <map name="Bump" />
    <map name="Matcap" />
  </maps>
---------------------------------------------------
そこにパスを指定してMQOに保存されていた情報
MaterialEx 3 {
    material 0 {
        shadertype "hlsl"
        shadername "matcap"

続きを表示...
2015-03-14 06:03
[5413] Re: HLSLシェーダーで追加テクスチャの指定方法 / まじかる☆しげぽん
ちなみに、Matcapシェーダーは以前実装を要望してたZBrush等で使われてるマテリアルをテクスチャにベイクしたシェーダーです。
ライトが固定された形になりますが、通常シェーダーで実装すると大変な表現もマテリアルをキャプチャしたテクスチャを用意すれば簡単に表現できるので、是非メタセコの標準マテリアルでも実装してほしいです。
特にスカルプト作業と相性が良いですね。

こちらはGLSLでの実装が書いてあります。
http://qwertyfk.blog16.fc2.com/blog-entry-108.html
https://www.opengl.org/discussion_boards/showthread.php/175782-MatCap-Shader

Matcapテクスチャを追加テクスチャとして指定したいのは、下記のモデルのようにディフューズテクスチャ(模様)が貼られた上で、Matcapのシェーディングが入った状態にしたいからです。
http://www.zbrushcentral.com/showthread.php?185785&p=1080931&viewfull=1#post1080931
2015-03-14 06:25
[5421] Re: HLSLシェーダーで追加テクスチャの指定方法 / 管理者
標準以外のHLSLシェーダの追加は公式にはサポートしませんので、
※※※以降は自己責任でお願いします※※※

テクスチャはt4以降に割り当てられます。
サンプラーはs4以降は未使用なので、固定値かまたはs0-s3を使用します。

参考用に以前に試作した環境マップシェーダを添付しておきます。
鏡面反射の値を0より大きくしてEnvironmentマップを指定すると環境マップが表示されます。
ただ十分な検証はしていないため、条件によって動かないケースがでる可能性は否定できません。

※※※以上は現行バージョンでの仕様で、今後のバージョンでの互換性は保証されません※※※
ファイル [env.zip]
2015-03-16 11:20
[5422] Re: Re: HLSLシェーダーで追加テクスチャの指定方法 / まじかる☆しげぽん
ご返答ありがとうございます!
公式サポートしない、自己責任了解です。互換性の保証も了解です。
サンプルまでアップしていただきありがとうございます。
試してみます。

実際、HLSLシェーダーを正式に対応をオープンにすることはあるのでしょうか?
プラグインSDKみたいに
2015-03-16 13:37
[5424] Re: Re: Re: HLSLシェーダーで追加テクスチャの指定方法 / 管理者
>実際、HLSLシェーダーを正式に対応をオープンにすることはあるのでしょうか?
>プラグインSDKみたいに

当初の構想にはそういうのもなくはなかったので外部ファイルで定義できる仕組みを用意している訳ですが、
既存のシェーダを見ても結構複雑で、このまま互換性を維持しながら仕様を拡張していくのも困難ですので、
仕様の公開というのは当面は難しいかなと思っています。
2015-03-16 15:25
[5437] Re: Re: Re: Re: HLSLシェーダーで追加テクスチャの指定方法 / まじかる☆しげぽん
すみません追加で質問です。
材質の自己照明、反射光、周囲光はRGBで指定することが可能ですが、それをHLSLの追加メニューで使用することは可能でしょうか?

またビュー上では正しくシェーダーが当たった状態になるのですが、材質設定に表示される球体がまっ黒の球体になってしまい状態を確認するのに毎回OKボタンを押してビューで確認してるのですが、黒くならずに正常に表示させるのに重要な部分をアップしたEnvかPMDのシェーダーを参考に教えていただけるでしょうか。


あと、仕様もまだまだ固まっていないようなので要望も出してもいいんでしょうか?
今作ってる、Matcapシェーダーで模様に重ねる処理(乗算、加算、オーバーレイとかPhotoshopのレイヤー重ねる処理と同じような感じ)をスライダーの数値の変化で指定してるのですが如何せん数値なのでどの状態か分からないので、プルダウンメニューで文字列と数値で指定できるようなUIスタイルも欲しいです。

例えば、
合成モード[通常 ▼]プルダウンメニューで下記のように選択した項目で数値が指定される形
通常[1],乗算[2],スクリーン[3],オーバーレイ[4]

ご検討よろしくお願いします。
2015-03-18 01:25
[5439] Re: Re: Re: Re: Re: HLSLシェーダーで追加テクスチャの指定方法 / 管理者
>材質の自己照明、反射光、周囲光はRGBで指定することが可能ですが、それをHLSLの追加メニューで使用することは可能でしょうか?

それらのように単値とカラーの切り替えはできませんが、
<param name="Hoge" type="color" default_value="1,1,1" />
のように指定すればRGBでの指定が可能です。

>またビュー上では正しくシェーダーが当たった状態になるのですが、材質設定に表示される球体がまっ黒の球体になってしまい状態を確認するのに毎回OKボタンを押してビューで確認してるのですが、

材質設定のプレビューには拡散光や自己照明などの基本パラメータが使用され、シェーダ用パラメータは反映されません。
このため基本パラメータが黒くなる設定ではHLSLシェーダでどのような設定にしても黒く表示されます。
2015-03-18 10:08
[5441] Re: Re: Re: Re: Re: Re: HLSLシェーダーで追加テクスチャの指定方法 / まじかる☆しげぽん
ご返答ありがとうございます。
RGB指定できるUIが表示できるのを確認しました。

なるほど、シェーダ用パラメーターは反映されないのですね。
了解です。
将来的には反映できるようになるといいですね。
2015-03-18 12:35