HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0322
アキアキノヒロロ一つのモデル内のオブジェクトごとに透明不透明表示するための設定は?22未解決


アキアキノヒロロ

リンク

2022/3/22(Tue) 13:29:09|NO.95801

メタセコで、透明に材質設定したオブジェクトを含んだモデルデータを[gpb]ファイルにして、
[hgimg4]で表示した場合、その透明設定したはずのオブジェクト部分も明示されてしまいます。
一つのモデルの状態で、オブジェクトごとに透明不透明になるようにはできないのでしょうか。

透明にしたいオブジェクトを他のオブジェクトから切り分けて、別の一つのモデルデータとし、
[gpb]ファイルにして、[hgimg4]で[setalpha]命令で透明にするしかないのでしょうか。



この記事に返信する


アキアキノヒロロ

リンク

2022/3/23(Wed) 07:16:12|NO.95812

materialファイルを見てみると、

[material Textured] と [material Colored] の項目があって、それぞれに
[u_modulateAlpha] があります。
[material Colored] の方の [u_modulateAlpha] を [0] にしても、HSP上では、
表示に変化がありませんでした。
[material Textured] の方のそれを [1] 以下にすると、HSP上では、
それにあわせて、モデル全体の透明度が変化します。

また、各オブジェクトごとの項目には、
[technique { pass { defines] があって、
どのオブジェクトのそれも、
[SPECULAR;MODULATE_ALPHA] となっていて、同じです。
このオブジェクトのうち、『メタセコ上で透明にしている』はずのオブジェクトの
[technique { pass { defines] は、他のオブジェクトの設定とは違うものになるはずなのでは。
と、思うわけなのですが、知識が乏しくよくわかりません。

このあたりのこと、お教え頂けないでしょうか。



アキアキノヒロロ

リンク

2022/3/24(Thu) 04:35:54|NO.95829

何故このようなことを考えるのかと言うと、建物や乗り物の窓を表現したいからです。
窓枠だけで十分だとすれば、悩むことはありません。
しかし、わずかに色を持ったガラスのはまった窓、中から漏れる灯りの様子。
あるいは、教会のステンドグラス。
窓ガラスに日光を反射しながら走るバスや電車。あるいは、夜汽車。
これらを表現するとなると、窓ガラスだけを別の一つの[gpb]ファイルにして表示するのは、厄介です。
動かない建物ならまだしも、乗り物だと、窓ガラスとそれ以外のものとを常に同じ位置、同じ向きに表示するのはとても厄介だからです。
出来ないことはないかも知れませんが、この別々のモデルデータを同じ一つの[gpb]ファイルにまとめて作ることが出来れば、
作業がどんなにか楽にスムースになるはずだからです。

[hgimg4] のツールとして、[GPBコンバーター] の [material編集] があります。
それを使ってできないものかと思いましたが、使用方法がよく分かりません。
『HGIMG4プログラミングガイド』の「22.マテリアルの設定」「23.3Dモデルデータの表示」を見ても、具体的な使い方は載っていません。
私のこの目的が叶うとは限りませんが、せめて具体的な使用方法の解説、そのサンプル集のようなものがあると、
また違ってくるのでは、と思います。



アキアキノヒロロ

リンク

2022/3/24(Thu) 04:48:48|NO.95830

表現したい別のこととして、レースのような半透明の衣装をまとった人物があります。
この時、レースがなびく様子をアニメーションしようなどと考え出したら、
レースを別にしてしまった場合、もう手に負えなくなってしまいます。



zrs90(5さい)

リンク

2022/3/24(Thu) 21:14:13|NO.95837

...誰も回答がない?3d cg系分かる方
掲示板にいらっしゃらないのかな。

...こういった無謀な事するのは
私ぐらいですねぇ...

No.95829 の質問ですが、一つだけ。

ご存知かと思いますが、
24.3Dモデルデータのマテリアルについて

によると、.material ファイルは
テキスト形式記述があり、テキストエディタでも
閲覧、編集が可能とあります。

各パラメータも、この24.〜に書いてあり
(※対比しながらだと、結構面倒ですが。)

GPB converter の、マテリアルツールから
チェックbox、コンボbox 、入力box等
を変更する所を指定して、変更ボタンを
押せば、変更が反映される...と思います。

設定によっては、ファイルが壊れてしまう?ので
適当なバックアップで、テストして見て下さい。

...もし、説明書を作って頂けるなら
いじって見た、前と後の画像みたいなのが
あると分かりやすいかも、知れないですね。

(※私はcgのパラメータ自体から全く分かりませんが
アキアキノヒロロ さんなら、何とか出来るはずです。)


ー追記ー

半透明合成?の、クロスシュミレーションですかね?
自然な感じで動かすのは、かなり難しいはずですが
...hsp3 + hgimg4 で、出来そうなんですか?



アキアキノヒロロ

リンク

2022/3/24(Thu) 22:47:08|NO.95839

zrs90(5さい)さん、有難うございます。
反応のない私のスレに、毎回のように応じて頂き、感謝しております。


これ以上待っていても、仕方ない。
分からないながらも、自分で実際色々やってみるしかない。
そう思い始めていました。
[hgimg4] では、一人相撲の状態で、今まで幾度となくそうしてきましたから、
またやってみればいいだけだ、と腹を括って準備しようとしていたところです。

「マテリアルツール」と「マテリアルファイル(txt)」の両方でテストしようと思います。
「説明書」など、大げさなものでなく、覚書き程度ですか。
もちろん、画像で実際の変化(結果)もあわせてです。
「マテリアルツール」にも、[プレビュー](準備中)がありますね。

ただ、一般に、[gpb]ファイルの元になる、[fbx]ファイルの形式は統一されておらず、
さまざまな要素が入り乱れているようなことを聞きます。
そのうちのどのような要素が、[material] となるのかもよく分からないところからの出発です。
「24.3Dモデルデータのマテリアルについて」「 25.3Dモデルデータのライティング」も、
よく読んではみるものの、実際のところは、「マテリアルツール」の編集項目自体どういう意味か、
具体的にはやってみないとわからないですし、
「マテリアルファイル(txt)」の内容も、部分々々は分かってきても、
全体の構成から理解していかないとダメでしょうし。

まあ、あまり専門的なことにこだわらず(実際私にはそんな力はありませんし)、
[try&error] でいくだけです。



youdai

リンク

2022/3/25(Fri) 09:04:28|NO.95840

>そのうちのどのような要素が、[material] となるのかもよく分からないところからの出発です。
GPBコンバーターのスクリプトのソースコードが、HSP3フルセット版のフォルダのhspsdk/hgimg4フォルダにあります。
そこを見ればどのようにFBXからGPB用の.materialが出力されるか、仕組みが分かるようになっています。
FBXのmaterialのどの部分が、標準のcoloredやtexturedの.materialファイルに出力されるかが書いてあります。

GPBコンバーターのFBX変換による.material出力のマテリアル再現率が低いことについてですが、
それはまだ標準のcoloredシェーダーやtexturedシェーダーがHGIMG4で未完成なことにも原因があるのではないかと推測しています。
実はHGIMG4のこれらのシェーダーはgameplay3Dのその同名シェーダーを完全には再現していません。
例えば法線マップやライトマップはgameplay3Dではすでに存在しているのですが、HGIMG4の方ではまだ実装されていません。(ちなみにGLSLのシェーダー内では、すでにそれらしい記述部分が存在しています)
これらの機能についてはこの後のバージョンアップで対応されるのではないでしょうか。
それ以降になって初めて、この再現率については解決されるのではないかと思っています。

●半透明のマテリアルについて

HGIMG4で半透明のマテリアルを扱う際には、その仕組みを理解する必要があります。

HGIMG4で半透明のマテリアルが描画される際には以下の順番で描画されます。

1.不透明なマテリアルがまず半透明のマテリアルに先立って描画される
2.不透明マテリアルが描画された後に、半透明のマテリアルが描画される

という順番で描画されます。

なぜこの順番で描画されるかというと、不透明のマテリアルが描画されてからでないと
その上に半透明のマテリアルを描画できないからです。
半透明のマテリアルとは、カラーフィルムのようなものだと思ってください。
カラーフィルムを覆い被せるには、まずその下地の不透明なマテリアルが描画されている必要があるということです。

半透明のマテリアルを含むノード(オブジェクト)は、必ずsetobjmode命令でOBJ_LATEモードフラグを設定する必要があります。
この設定は上記の「指定されたノード(オブジェクト)は後から描画される」という設定です。
HGIMG4プログラミングガイド「16.オブジェクトのモード設定」を参照してください。

メッシュごとに異なる透明度を指定したい場合は、そのメッシュごとに個別のマテリアルを指定してやれば、
メッシュごとに異なる透明度を持ったマテリアルが生成できるはずです。

モデルデータ作成やFBX出力は、Blender等の「マテリアルをノードエディターで作成できるもの」を選んで使った方がいいでしょう。その方が確実です。
逆にそういったノードエディターが実装されてないツールで出力されるFBXのmaterial項目については、あくまで「メッシュデータのついでに副次的に出力されているに過ぎない」程度に思っておいた方がいいと思います。
blenderのような総合ツールでない場合は、再現率まで考慮されて出力はされないと思った方がいいでしょう。

上手く.materialが再現出力されなかった場合は、.materialを手動で調整する必要があります。
それでも反映されなかった場合は自分で独自のシェーダーを作った方が確実です。
GLSLで独自シェーダーを記述する方法については以前教えたWebGLに詳しいことが書いてあります。
ライティングを行わない単に「半透明に出力するだけ」のシェーダーであれば、簡単なシェーダーなので挑戦してみるのもいいかもしれません。



zrs90(5さい)

リンク

2022/3/27(Sun) 00:29:23|NO.95852

youdai さん
ありがとうございます。

> GPBコンバーターのスクリプトのソースコードが、
HSP3フルセット版のフォルダのhspsdk/hgimg4フォルダに
あります。

hsp3 の開発関係用フォルダの存在を
すっかり忘れてました。

gpbconv.hsp が300ライン程なので、簡単かなと
思ったら、mod_gpmaterial.as の方が
700ライン程あって、ゔっ...と思いましたが
1つ1つ、パラメータをいじるより
調べるのも楽そうです。

私は、CGとか作る技量も何もないですが
アキアキノヒロロ さんなら
今回のアドバイス、役に立つはずです。


ー追記ー

アキアキノヒロロ さん 気がついてないのかな?



アキアキノヒロロ

リンク

2022/3/27(Sun) 06:18:05|NO.95853

zrs90(5さい) さん、お心遣い、感謝いたします。

私は、毎回、言い訳のように、万年初心者だと申していますが、
本当に、基礎を持たない、能力も実力もない、旧世代の人間です。
ただ、好きで続いているだけです。


youdai さん、いつも、有難うございます。
返事が遅れました。
そうですね。GPBコンバーターのスクリプト、公開されていましたね。
以前、おにたまさんからも、その旨のレスを頂いていたこと、思い出しました。

今、少しずつ進めてはいますが、まだ一区切りといったところにも至っていないので、
ここに報告めいたことを載せるまでには、もう少し時間がかかると思います。
透明度を持ったマテリアル、これは、その後になってしまいます。



hashikemu

リンク

2022/3/27(Sun) 22:19:00|NO.95856

マテリアル(.material)の各マテリアルにある
renderStateに以下のブレンド設定を追加すると、
ブレンドが有効になり表示が半透明になります。
renderState
{
blend = true
srcBlend = SRC_ALPHA
dstBlend = ONE_MINUS_SRC_ALPHA
}

1オブジェクト内に複数のマテリアルを設定している場合の挙動が自分もまだ
よくわかっていませんが、1オブジェクト1マテリアルで半透明等であれば大丈夫かと。

あとは、ビルボード状の木などを生やしたときに、透明部分であるにもかかわらず
深度バッファには書き込まれてしまいその後に描画されるオブジェクトが
欠けてしまう現象があります。
これを解決するにはフラグメントシェーダで透明度が一定値以下である場合に
描画を破棄することで一部解決できます。
拙作を見ていただくのが早いですが… 以下のような記述を
フラグメントシェーダに追加します。
#if defined(TEXTURE_DISCARD_ALPHA)
if (gl_FragColor.a < 0.05)
discard;
#endif



アキアキノヒロロ

リンク

2022/3/28(Mon) 04:43:19|NO.95860

hashikemu さん、有難うございます。

頂いたご助言に沿って、[tamane2]で試してみました。
結果から申しますと、失敗です。

[tamane2] の [body_SD.png] を、[GIMP] で半透明にした [body_SD+.png] を作成。
[tamane2.material] ファイルを開いて、
[material bodyUV : textured] の [path = body_SD.png] を [path = body_SD+.png] にして、
> renderState
> {
> blend = true
> srcBlend = SRC_ALPHA
> dstBlend = ONE_MINUS_SRC_ALPHA
> }
を追記。
その編集後のファイルを [tamane2+.material] とファイル名変更。
[tamane2.gpb] をコピーしたものを [tamane2+.gpb] とファイル名変更。

こうした後、[tamane2.hsp] ファイルの
> gpload id_model,"res/tamane2"

> gpload id_model,"res/tamane2+"
にして、実行。

結果は、頭だけの珠音になっていました。半透明ではなく、完全な透明でした。

ブレンダーで設定し直さないとダメなのかな。



アキアキノヒロロ

リンク

2022/3/28(Mon) 08:43:23|NO.95861

[tamane2] は、「1オブジェクト内に複数のマテリアル」というものにあたるので、
うまくいかないようですが、自作の「1オブジェクト1マテリアル」のもので試したところ、
半透明になりました。

でも、当初の目的(窓ガラスを半透明に)は、やはり「1オブジェクト内に複数のマテリアル」の場合に相当するので、難しいようです。

ところで、はしけむ さんのツイッター
https://twitter.com/kemuduino/status/1508064441283547137
「1オブジェクト複数マテリアルでボディカラーだけ半透明マテリアルにしてみたやつ」
とのことですが、これの方法がよく分かりません。
これは、「1オブジェクト内に複数のマテリアル」の場合にあたると思うのですが。
やはり、「半透明マテリアルは混合しちゃいけない感じがしますね…」ということになるのでしょうか。



hashikemu

リンク

2022/3/28(Mon) 22:38:42|NO.95871

アキアキノヒロロさん、単一マテリアルではできたようで良かったです。
tamane2の場合はファイル名が良くないようにも思いますが、
こちらの環境ではtamane2に対して以下のmaterialに変更することで半透明にできました。
ポイントとしては
・共通のmaterial Texturedではなくmaterial bodyUV : textured等に記載する
・renderStateの設定
・シェーダーにおいてgl_FragColor.aが1より小さい値となるようにテクスチャのアルファを下げるorMODULATE_ALPHAを使う
だと考えています。

ツイートで行っている方法も以下のtamane2と同様に
1オブジェクトに複数マテリアルを割り当てたモデルのうち、
あるマテリアルのみ半透明にしていて、
ツイートではこの時の描画順がいまいちわからない という現状を述べています。

Unity等でも半透明マテリアルは描画順(Render Queue)を後にするなど、
不透明と半透明の混合は何らかの描画順対策が必要であり、
私の場合は不透明と半透明でオブジェクトを分ける方法(明確に描画順が制御できる方法)を
取っています。


material textured { u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX sampler u_diffuseTexture { mipmap = true wrapS = CLAMP wrapT = CLAMP minFilter = LINEAR_MIPMAP_LINEAR magFilter = LINEAR } renderState { cullFace = true depthTest = true blend = true srcBlend = SRC_ALPHA dstBlend = ONE_MINUS_SRC_ALPHA } technique { pass { vertexShader = res/shaders/textured.vert fragmentShader = res/shaders/textured.frag } } } material bodyUV : textured { u_matrixPalette = MATRIX_PALETTE u_modulateAlpha = 0.2 sampler u_diffuseTexture { path = body_SD.png wrapS = REPEAT wrapT = REPEAT } technique { pass { defines = SKINNING;SKINNING_JOINT_COUNT 12;VERTEX_COLOR;MODULATE_ALPHA } } } material headUV : textured { u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX u_matrixPalette = MATRIX_PALETTE u_modulateAlpha = 1.0 sampler u_diffuseTexture { path = head_SD.png wrapS = REPEAT wrapT = REPEAT } technique { pass { defines = SKINNING;SKINNING_JOINT_COUNT 12;VERTEX_COLOR;MODULATE_ALPHA } } }



アキアキノヒロロ

リンク

2022/3/29(Tue) 07:49:13|NO.95882

hashikemu さん、度々のご返答、有難うございます。

もう一度、頭を整理し、「NO.95860」の手順を踏んでやってみたところ、
望んだ部分(body)のみの半透明表示、成功致しました。
すいませんでした。

どうも、悪い癖で、ゴチャゴチャとあちこちファイルを開いて、
パソコン画面にたくさんのファイルが重なり合っている状態で作業をしていて、
正確に進められなかったのが原因のようでした。
ファイル名は、[...+] のままで大丈夫でした。

今回、お教え頂いた方法、
[material textured] に [renderState] の項目を加え、透明の設定を有効にして、
[bodyUV] の方の [u_modulateAlpha] を [0.2] にし、
[headUV] の方の [u_modulateAlpha] を [1.0] にすることで、
[head] は透明にならず、[body] の透明度が[0.2] で半透明になる、
こういう理解でいいのでしょうか。

なお、付け足しとして、前回の方法でも、今回の方法でも、
[bodyUV] と [headUV] の順番を入れ替えても、同様に [body] は半透明になりました。



アキアキノヒロロ

リンク

2022/3/29(Tue) 11:48:58|NO.95885

やはり、画像や動画があった方が手っ取り早いので、
私のツイッターに載せました。

https://twitter.com/akiakinohiroro/status/1508631311065489415



アキアキノヒロロ

リンク

2022/3/29(Tue) 15:42:31|NO.95888

あともう一つ疑問が浮かびました。
ライトとの関係は、どうなっているのか、ということです。

半透明マテリアルを持ったモデルに、ライトを反映させるには、どうしたらいいのか。
ライト反映の設定をそのモデルのマテリアルファイルに書き込むと、
不透明部分にだけ反映され、半透明部分は完全な透明になってしまいます。
もちろん、ライト反映の設定をそのモデルのマテリアルファイルに書き込まなければ、
ライトそのものだけをセットしても、不透明・半透明どちらの部分にも、反映されません。



アキアキノヒロロ

リンク

2022/3/30(Wed) 12:15:05|NO.95898

hashikemu さん、いくつかお聞きしたいのですが。

[try & error] で何とか、できるようになったものの、
hashikemu さんのおっしゃっていることで、まだよく掴めていないことがあります。


> [NO.95856] 「1オブジェクト内に複数のマテリアルを設定」
> [NO.95871] 「1オブジェクトに複数マテリアルを割り当てたモデル」
この言っている意味が具体的にどういうことなのか、よく分かりません。

「1オブジェクト内に複数のマテリアルを設定」って、出来るのかな。
「1つのモデルに複数オブジェクトがあり、それぞれにマテリアルを割り当てる」
「1オブジェクト1マテリアル[NO.95856]」
こういうのが、普通じゃないのかなあ。
自分も、[NO.95861] で、
「[tamane2] は、「1オブジェクト内に複数のマテリアル」というものにあたる」などと言っていますが、
これは本当は、
「[tamane2] は、「1モデル内に複数のオブジェクトがあり、かつそれぞれが、1オブジェクト1マテリアル」
ということなのですよね。


[NO.95856] の後半
> 透明部分であるにもかかわらず深度バッファには書き込まれてしまい
> その後に描画されるオブジェクトが欠けてしまう現象
これには私もしばしば悩まされていますが、hashikemu さんご提示の対処方法が分かりません。
「拙作を見ていただくのが早いですが」とは、どの部分、箇所なのでしょうか。
また、[NO.9 5871] の
> 「シェーダーにおいてgl_FragColor.aが1より小さい値となるようにテクスチャのアルファを下げる」
この方法が具体的にどうすることか、よく分かりません。

どれも、「フラグメントシェーダ」というものが具体的にイメージ出来ていないことが問題なのは分かっていますが。


色々と、あれこれ質問を重ねて、申し訳ありません。
よろしくお願いします。



hashikemu

リンク

2022/3/31(Thu) 00:24:31|NO.95904

> > [NO.95856] 「1オブジェクト内に複数のマテリアルを設定」
> > [NO.95871] 「1オブジェクトに複数マテリアルを割り当てたモデル」
> この言っている意味が具体的にどういうことなのか、よく分かりません。

1オブジェクトに複数マテリアルの例を示します。
blenderのマテリアルプロパティには複数のマテリアルがセットでき、
画像のように、面ごとに割り当てるマテリアルを変更できます。
https://twitter.com/kemuduino/status/1509174855677386758

こちらでも確認しましたが、確かにtamane2は1オブジェクト1マテリアルが4つで構成されているモデルですね。
https://twitter.com/kemuduino/status/1509179662144258059



> > 透明部分であるにもかかわらず深度バッファには書き込まれてしまい
> > その後に描画されるオブジェクトが欠けてしまう現象
> これには私もしばしば悩まされていますが、hashikemu さんご提示の対処方法が分かりません。
> 「拙作を見ていただくのが早いですが」とは、どの部分、箇所なのでしょうか。

すいません、どちらかというとsampleのtextured.frag(152行目付近)を見るのがよさそうです。最近のバージョンでは私の提示した対処方法が標準で導入されているため、マテリアル設定でTEXTURE_NODISCARD_ALPHAが指定されない限りは一定の透明度以下であれば描画が破棄されているようです。


> [NO.9 5871] の
> > 「シェーダーにおいてgl_FragColor.aが1より小さい値となるようにテクスチャのアルファを下げる」
> この方法が具体的にどうすることか、よく分かりません。

NO.95860で実施されているように「[body_SD.png] を、[GIMP] で半透明に」することを指しています。
フラグメントシェーダ上ではpngテクスチャのRGBA(RGBと透明度A(Alpha))を読み取ってgl_FragColor.aに(sampleのtextured.frag 133行目付近で)反映し、MODULATE_ALPHAが有効である場合にはgl_FragColor.aの値を再変更しているため、2通り方法があるということを説明する意図がありました。



アキアキノヒロロ

リンク

2022/4/1(Fri) 18:22:58|NO.95912

hashikemu さん、重ね重ね、有難うございます。

> blenderのマテリアルプロパティには複数のマテリアルがセットでき
こんなことができるとは、知りませんでした。(私は『いつもblenderにイジメられているクチ』の人間です。)
この状態での [____.material] ファイルの中身も、どんな記述になっているか、確認しようと思います。

> sampleのtextured.frag
とは、[HSP3] の [sample/hgimg4/res/shaders/textured.frag] のことで、その151行目
> #if !defined(TEXTURE_NODISCARD_ALPHA)
は、
> #if defined(TEXTURE_DISCARD_ALPHA)
と同義なんですね。
ただ、「透明部分のあるビルボード」を、この標準導入されたバージョンの [HSP3] hgimg4 で描画すると、後に描画されるオブジェクトが欠けないものも、欠けるものもあります。
これは、ビルボードによっては、その透明度の値が「一定の透明度以下」になっていたりいなかったりしているからなのでしょう。で、[textured.frag] の
> if (gl_FragColor.a < 0.005) discard;
を極端ですが、
> if (gl_FragColor.a < 0.500) discard;
のように直して、再度描画してみたところ、どれも欠けずに済みました。
ただ、[textured.frag] を書き換えるのは、やはり抵抗があります。
マテリアル設定で [TEXTURE_NODISCARD_ALPHA] は、指定していませんが、この違いのあるビルボードごとのマテリアル設定で調整するとしたら、どのようにするのでしょうか。



youdai

リンク

2022/4/2(Sat) 11:19:07|NO.95913

>ただ、[textured.frag] を書き換えるのは、やはり抵抗があります。
改造したシェーダー(この場合、textured.frag)を用いる場合、元になったシェーダーを直接上書き保存して使うのではなく、別名保存して使う方がいいと思います。
そうすれば、元のシェーダーもそのまま使うことができるからです。
例えば、改造したシェーダーの.fragを textured_type_alphablend.frag というような別名にして保存して、それを.materialファイルのpassの部分の


technique { pass { vertexShader = res/shaders/textured.vert fragmentShader = res/shaders/textured_type_alphablend.frag } }

として使えば、独自のシェーダーとして使うことができます。
ちなみにvertexShaderとは頂点シェーダーのことで、フラグメントシェーダーとはそのままfragmentShaderのことです。(フラグメントシェーダーについては慣習的に日本語に翻訳されて表記されることはほとんどありません)
このpassの場合、シェーダーファイルの場所はres/shadersの中にある必要がありますが、passを変えれば、その場所も変えることは自由にできます。



アキアキノヒロロ

リンク

2022/4/2(Sat) 16:25:39|NO.95914

youdai さん、ご返答有難うございます。

さっそく、採用させて頂きました。
別名改造シェーダー、正常に機能しています。

materialファイルの構造が、やっと少しずつ分かりかけてきました。
shadersフォルダも、今まではブラックボックス同然でしたが、
箱を開いて見る第一歩になりました。


今、ライトとの関係をテストしてみていますが、
ここまでくると、もう手に負えそうにありません。
一応、ツイッターに動画、載せました。
https://twitter.com/akiakinohiroro/status/1509790676292358144



youdai

リンク

2022/4/3(Sun) 12:16:15|NO.95915

>半透明部分だけを通過したライトが、その後ぶつかるオブジェクトのみに反映するようにできないものか。
ツイッターの記事読みました。
それは透光という概念で、レイトレーシングの技術になります。HGIMG4でリアルタイムで行うことは難しいと思います。
ただ、近似でいいのなら、gppraytestを使って可能です。

例えば、そのレイの光線にコリジョンが衝突しているなら、対象のモデルに対するスポットライトの色を0.0,0.0,0.0にする。
衝突していないなら照明が当たっているということになるので、スポットライトの色を1.0,1.0,1.0にする。
こうすることで、あたかも光線が障害物に邪魔されて「照らされていない」状態を作ることができます。

透光の色を反映したい場合は、たとえば障害物のフィルムの色が緑なら、緑色のフィルムに当たっているかどうかのif判定をした上で
スポットライトの色を0.0,1.0,0.0などにすれば、これもあたかも緑のフィムルを通したかのような光源として反映されます。



アキアキノヒロロ

リンク

2022/4/4(Mon) 09:26:23|NO.95916

[gppraytest] こんな命令があったとは、初めて知りました。
元々は、発射した弾などが何かに当たった時の表現等のための命令のようですが、
youdai さんのやり方で光線に応用可能になるんですね。目からウロコの方法です。

> [sample/hgimg4/physics_2.hsp]
レーザー銃(光線銃)と考えればいい訳ですが、
youdai さんのご説明を頼りに、これを具体的にどう作り替えれば透光になるか、
実際やってみないと分かりません。
手こずりそうですが、何とかやってみようと思います。



ONION software Copyright 1997-2023(c) All rights reserved.