|
|
2023/11/20(Mon) 15:50:14|NO.100627
はしけむさんの『デプスシャドウシェーダー』で、その陰影に関してではなく、
そのライトの設定に関する、実行可能なアイデアを考えあぐねている。
こう出来たらなと思うアイデアはあっても、それを可能にする方法が思いつかない。
陰影可能な状態で、なおかつライト設定等の変更ができないものか。
誰か、ヒントくれないかな。
|
|
2023/11/22(Wed) 13:48:41|NO.100651
>誰か、ヒントくれないかな。
HSP3.7に向けたβテストについてのお願い(3.7β7)のNO.100355「HGIMG4のgpnodeinfoの不具合」で報告したのですが、今gpnodeinfoには不具合があって、1つのオブジェクトのメッシュに複数のマテリアルを設定している場合、最初の1つ以外のマテリアルIDを取得できない状態にあります。
マテリアルIDを取得できないということは、そのマテリアルにuniformから値を渡すことができないということです。
ということもあって、今はまだあまり複雑なマテリアルを作成することができません。
この不具合が解決すれば、1つのメッシュの複数のマテリアルのuniformへ自由に値を渡すことができるようになりますから、色々なシェーダーが作りやすくなると思います。
> Twitterの記事について
今Twitter(X)はTwitterユーザーしか閲覧できない状態なので記事を追うことができません。
見られるのは固定ツイートと、URLが明かされている記事のみとなっているようです。
今見れるのは例えば、アキアキノヒロロさんの記事だとURLのリンクが貼られている記事のみですね。
今Twitterのアカウントを取るにしても、使っているAndroid端末が古いせいでアプリがインストールできないし、今はTwitterの記事は見れない状態です。
|
|
2023/11/22(Wed) 15:25:40|NO.100654
>zrs90(5さい)さん
>Nitterとは、Twitterのアカウントがなくても制限なく
>検索・閲覧できるサービスです
情報提供ありがとうございます。Nitterを使って閲覧してみました。
Twitterって、こんな感じにコミニュケーションしてるんですね。いつもは単体の記事が見れるだけだったので、初めて全体を見ました。
|
|
2023/11/22(Wed) 15:42:57|NO.100655
はしけむさんの記事の解説をすればいいのかな?
>ソフトシャドウ化、影のcast/recieve設定、ステージ/車両追加、非effekseerのパーティクルモジュール作成などなど
ソフトシャドウというのは、自分も以前やりましたから分かります。
ソフトシャドウというのは、影の縁がソフトなシャドウのことです。
ゴールデンザル ソフトシャドウシェーダーデモンストレーション / HSP3.7beta4 - HGIMG4
https://youtu.be/d42e9SZPAj0
影のcast/recieve設定というのは、おそらく影の受け側と発生側の設定のことじゃないかなと思います。
effekseerというのは、エフェクト画像生成ツールのことですね。
影の高画像度というのは、「兎と少女」でも可能です。
設定ツールの影の精度の値を上げると可能です。デフォルトでは4096になっていると思いますが、これを倍の8192にすれば、縁がハッキリとした高画像度シャドウが見れます。
ただし、精度を上げると負荷が高くなるのでそれなりのGPUが必要です。
兎と少女
https://dev.onionsoft.net/seed/info.ax?id=2390
はしけむさんのシャドウシェーダーは一番最初のものだけ見させて貰ったことがあるのですが、あれは自分のシャドウシェーダーとは仕組みが違いましたね。
|
|
2023/11/22(Wed) 22:53:17|NO.100662
zrs90(5さい)さん、Nitterを初めて知りました。こんなのあるんですね。
youdaiさん、ググってみて、なんとなくの感じは掴めていたのですが、
解説、ありがとうございます。
私として、ヒントが欲しいのは、陰影描画とともにライトの設定もできないものか、
その点に関してです。
陰影に関しては、はしけむさんの『デプスシャドウシェーダー』を利用させてもらうことで、
今現在私自身再現出来ているレベル程度が、私がゲームに求める一般的なラインなので、
これ以上を求めるつもりはありませんし、あまりに高度な表現になって、
パソコンに高スペックを求めるようになるのも気が進みません。
この程度の陰影描画でいいので、それと合わせて、
ディレクショナルライトの明度や色合いを設定できないか、
あるいは、ポイントやスポットライトも同時使用できないか、
これが出来れば、随分と表現世界が広がると思うからです。
youdaiさんがおっしゃる[gpnodeinfo]の不具合が改善されれば、
これらのためのシェーダーが作れて表現が可能になるはず、ということなのでしょうか。
|
|
2023/11/22(Wed) 23:08:13|NO.100663
usagiさんも、レスしてくださるとはありがとうございます。
開発現況のもの、今日、コンテストページにアップしましたので、
様子だけでも見ていただけると、話がつたわりやすいかも知れません。
まだ、ダウンロード元には反映されていませんが。
|
|
2023/11/23(Thu) 16:10:33|NO.100664
>アキアキノヒロロさんへ
>この程度の陰影描画でいいので、それと合わせて、
>ディレクショナルライトの明度や色合いを設定できないか、
>あるいは、ポイントやスポットライトも同時使用できないか、
これについてはそのシェーダーの開発者のはしけむさんに問い合わせてみるのが一番いいと思います。
>youdaiさんがおっしゃる[gpnodeinfo]の不具合が改善されれば、
>これらのためのシェーダーが作れて表現が可能になるはず、ということなのでしょうか。
これについては「開発のしやすさ」に関係しています。
不具合があるせいでできないこともあるし、可能なことでも不具合を避けて開発しなければならないですから。
|
|
2023/11/24(Fri) 14:33:37|NO.100669
|
|
2023/11/24(Fri) 16:52:08|NO.100670
>アキアキノヒロロさん
やりたかった事が出来るようになって良かったですねー。
白っぽくなるとの事でしたが、ポイントやスポットライトなので仕方が無いかもしれません。
(光度が強ければ白飛びしてしまうので)
最終的にどの様な絵作りをしたかったのか、
私が理解出来ていなくて大変申し訳ないのですが、
たとえば、日の光の様な物がやりたかったら簡単で軽い方法で、
ポストエフェクトの要領で、レンダリング後の画像に乗算で色を重ねる方法もあります。
(日の光は全体に影響するとして)
一例ですがどうぞ
#include "hgimg4.as"
chdir dir_exe+"\\sample\\hgimg4"
screen 0, 640,480
gpreset : setcls CLSMODE_SOLID
repeat 3:gpbox _,10,$FF<<(8*cnt):setpos _,20-(20*cnt),-10,0:loop
gpfloor _, 500,500, $FFFFFF:setpos _,0,-20,0
buffer 1,640,480, screen_offscreen
hour = 0.0
*MAIN
daycolor mRepeat(hour,24)
hour+=0.05
gsel 1:redraw 0:gpdraw:redraw 1
gsel 0:redraw 0
gmulcolor ginfo_r,ginfo_g,ginfo_b:pos 0,0:celput 1; 乗算でコピー
boxf 0,0,32,32:rgbcolor $FFFFFF:pos 32,0:mes strf("時間:%f", hour)
redraw 1
await 1000/60
goto *MAIN
#module
; p1を0〜p2の範囲にする
#defcfunc mRepeat double _p1, double _p2
d=_p1:d\=_p2 : return d+(d<0)*_p2
#deffunc daycolor double _hour
;仮の適当テーブル(ちゃんと色味を感がえる事)
r=38,43,48,54,59,75,108,136,165,180,196,211,227,227,227,227,227,225,180,38,38,38,38,38
g=38,44,51,58,65,72,72,118,165,179,193,207,221,221,221,221,221,190,154,38,38,38,38,38
b=65,81,98,114,131,148,134,186,238,234,231,227,224,224,224,224,224,176,120,65,65,65,65,65
h1=int(_hour) : h2=(h1+1)\24:d =_hour-double(h1)
setease r.h1,r.h2,ease_linear: rr=geteasef(d)
setease g.h1,g.h2,ease_linear: gg=geteasef(d)
setease b.h1,b.h2,ease_linear: bb=geteasef(d)
color rr,gg,bb
return
#global
乗算なので元の色より暗くなる性質があるので陰影の表現には向いてます。
明るくしたければ加算(スクリーンの方がいいかも)もよいかと思います。
(グレアなどに使います。たしかポストエフェクトにあったかも)
シェーダーでやってる事もコレをピクセル単位で計算して、
乗算したり加算したりして絵を作ってるわけですね。
| |
|
2023/11/25(Sat) 09:54:37|NO.100675
usagiさん、アイデア有難うございます。
私もシェーダーでやるのではなく、板ノードか何かをカメラのフィルターとして使って、
色を重ねれば、というようなことも考えました。
シェーダー以外の方法も色々試してみようと思います。
ただ、はしけむさんのこれを使う方法も引き続き考えたいので、以下、その対策方針?
パラメータで白っぽく光る感じを出来るだけ抑え、
全体白化が生じてしまう逆光が発生しないよう制御し、
夜間はディレクショナルライトの働きをなくし、時間だけを進める。
朝焼けや夕焼けは色味を調整したスポットライトの動きを太陽の動きに似せて表現する。
これ、出来るかな。
|
|
2023/11/25(Sat) 13:27:49|NO.100676
もし、作りたい絵作りが日光であっているのであれば、
スポットライトは、懐中電灯やヘッドライトなどのシミュレーションに向いているので、
先にご連絡した通り、難しいかと考えております。
ディレクショナルライトの使用をお勧めしまして、
こちらは太陽や月の光など、限りなく遠い位置に存在する光源のシミュレーションに向いています。
>夜間はディレクショナルライトの働きをなくし、時間だけを進める。
>朝焼けや夕焼けは色味を調整したスポットライトの動きを太陽の動きに似せて表現する。
朝と夜(太陽と月)はライト分をけた方がいいと思います。(位置、色が違いますから)
色味に関しては環境光を設定してあげれば良いです。
おそらくこれをスポットで色付けとして使用とされているのではないでしょうか?
一例ですがどうぞ
#include "hgimg4.as"
chdir dir_exe+"\\sample\\hgimg4"
screen 0, 640,480
gpreset : setcls CLSMODE_SOLID
repeat 3:gpbox _,10,$FF<<(8*cnt):setpos _,20-(20*cnt),10,0:setangr _,,32:loop
gpfloor _, 100,100, $FFFFFF:setpos _,0,0,0
setpos GPOBJ_CAMERA, 0,40,80 : gplookat GPOBJ_CAMERA, 0,20,0
daycolinit : hour = 0.0
*MAIN
; ディレクショナルライト
; 朝夜で影を切り替え(ホントは境界を滑らかにした方が良い)
if (hour > 18) | (hour < 6) {
setcolor GPOBJ_LIGHT, 0,0,0
} else {
setcolor GPOBJ_LIGHT, 1,1,1
}
; ★環境光の色
dayambcol hour
setdir GPOBJ_LIGHT, double(ginfo_r)/255, double(ginfo_g)/255, double(ginfo_b)/255
; 簡易方向(今回の趣旨とは関係無いので簡易的に)
ang = deg2rad(15.*hour)
setang GPOBJ_LIGHT, cos(ang),-sin(ang),0
redraw 0
daybg hour : gpdraw
dayambcol hour : boxf 80,20,120,60
rgbcolor $FFFFFF: pos 0,0: mes strf("時間:%.1f", hour),4
ang = deg2rad(30.*hour)
pos 30,50 : line sin(ang)*30 + 30, -cos(ang)*30 + 50 : circle 0,20,60,80, 0
redraw 1
hour+=0.05 : hour\=24 : await 1000/60
goto *MAIN
#module
#define ctype rgb(%1,%2,%3) ((%1<<16) | (%2<<8) | %3)
#define ctype lerp(%1,%2,%3) (%3*(%2-%1) + %1)
#define divH(%1,%2,%3,%4) %1 = %4\1.0 : %2 = int(%4) : %3 = (%2+1)\24
#define divC(%1,%2,%3,%4) %1 = ((%4)>>16) & $FF : %2 = ((%4)>>8) & $FF : %3 = %4 & $FF
#defcfunc local dayColor double _hour, array aColor
divH m, h1, h2, _hour : divC r1, g1, b1, aColor.h1 : divC r2, g2, b2, aColor.h2
r = int( lerp(r1, r2, m) ) : g = int( lerp(g1, g2, m) ) : b = int( lerp(b1, b2, m) ) : color r, g, b
return rgb(r, g, b)
#deffunc daybg double _hour
gradf 0, 0, ginfo_winx, ginfo_winy, 1, dayColor(_hour, mGraCol1), dayColor(_hour, mGraCol2)
return
#deffunc dayambcol double _hour
return dayColor(_hour, mAmbCol)
#deffunc daycolinit;適当色テーブル
mGraCol1 = 0x111122, 0x111122, 0x111122, 0x111122, 0x111122, 0x4411aa, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0x0088ee, 0xdd1133, 0x111122, 0x111122, 0x111122, 0x111122, 0x111122
mGraCol2 = 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0xee8800, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xee8800, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa
mAmbCol = 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0xee8800, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xbbddee, 0xee8800, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa, 0x4411aa
return
#global
| |
|
2023/11/26(Sun) 17:44:54|NO.100677
usagiさん、いくつものアイデア、有難うございます。
私は、はしけむさんのシェーダーを使うことで、
太陽移動による陰影変化の表現がやっと叶ったので、
これに太陽光の色味変化を重ね合わせたいのです。
usagiさんの2番目のアイデアでは、ライト自体の色を変化させているので、
はしけむさんのシェーダーでやろうとすると、
その更新前のものでは、色変化はできないので、
更新された方のシェーダーを使うことになります。
ただ、これだと移動可能なカメラ位置との関係で、どうしても白化が生じてしまい、
パラメータの調整でこれを防ぐことが出来ませんでした。
なので、はしけむさんの更新前のシェーダーを使うものの、
ライト自体の色変化は、はしけむさんのによるのではなく、
usagiさんの最初のアイデアのようにオフスクリーンバッファを使って、
乗算で色を重ねる方法か、あるいは、板ノードによるカメラのフィルターを
通す方法になりそうです。夕焼け等もこれで表現してもいいです。
残念なのは、ポイントスポットライトが使えないことです。
ディレクショナルライトの位置、ベクトルともに固定、
かつ、カメラ位置固定で白化を避けるパラメータ設定でなら、
限定的に使えると思いますが。
|
|
2023/11/27(Mon) 12:21:54|NO.100678
オフスクリーンバッファによる乗算の方法は、
はしけむさんのシェーダーで使っているオフスクリーンバッファが6つもあって、
それらとの競合回避と乗算の手立てが上手くいかない。
板ノードによるカメラの半透明フィルターを通す方法は、
透明度を設定しているオブジェクトが全て消えてしまう。
どうも、八方塞がりだな。
|
|
2023/11/27(Mon) 16:33:27|NO.100679
見て頂きありがとうございました。
あら、何で環境光で白飛び(白化?)しまうんですかね。
私のサンプルで色付きのオブジェクト白飛びしてないので、
きっと何かシェーダーの仕様や使い方に違いがあるんでしょうね。
(スペキュラな気もしますけど。。。)
また、いろいろと事情、制限がある事も大変理解いたしました。
あくまで私からのは一例ですので、
「ドライバーでも木に穴は開けられますが、ドリル使った方が専用に作られているので簡単」
という程度な意味合いでディレクショナルライトを提案させて頂きました。
別の方法でも全然いいと考えてますので、
どの様に解決されるのかが楽しみにしております。
|
|
2023/11/27(Mon) 18:24:30|NO.100680
こちらこそ、有難うございます。
3Dゲームという動的変化を抜きには考えられないプログラムで、
その動きの制限を設けないと叶わない表現描写は、何かしらを諦める潔さも必要かもです。
欲張って良いことはそうそうありませんが、もう少し、粘ってみるつもりです。
バッファをいじくっているところです。
朝焼け夕焼け表現の時だけ、固定カメラに限定してしまおうか。
ポイントスポットライトで朝焼け夕焼けに似せた表現が出来ないかも、
あれこれ試したいです。
知識もなく頭も硬くなってるおじさんは、相も変わらず、
みなダメ元の、試行錯誤、トライ&エラーでいくしかないかな。
|
|
2023/11/27(Mon) 19:02:16|NO.100681
[shadowRange (シャドウマップ範囲)]を[0.1]など[0]に近い数値にすれば、陰影はなくなる。
それとともに、白化もなくなり、かつディレクショナルライトを
lightColor=0.1 : ambientColor=0.0
のようにすると、夜景での鮮やかなポイントスポットライトが使えそうなので、
現状の[hgimg4]と同じようになりそうだ。
陰影は丸影を伸ばした簡易の影で代用し、それを長さ調節 [setscale] 角度調節して足元の位置にセットするのはどうかな。
凸凹地形の上では不自然か。影の角度は[gppraytest] で [getwork2] して、この法線情報で手に入れられるはずだが。
でも、これじゃあ、はしけむさんのシェーダー使ってる意味がないか。
|
|
2023/11/28(Tue) 15:31:29|NO.100683
白化ってデプスシャドウが白くなる事だったんですね。
私のは全然違う話をしておりましたね。難しかったぁ。。。
フラグメントに掛け合わせる値を減らす事で対応した感じっぽいですが、
シャドウでこう言った事が起きるんですね、勉強になりました。
それでは失礼いたします。
|
|
2023/11/30(Thu) 11:17:57|NO.100698
29日現在のものをアップしました。
まだ、ダウンロード元には、反映されてませんが。
反映されましたら、覗いてみて下さい。
スクリプトも同梱してありますので、ご自由になさって構いません。
|
|
2023/12/3(Sun) 07:51:40|NO.100713
はしけむさんの『デプスシャドウシェーダー』
ソフトシャドウ化をオフにすれば、ディレクショナルライトの色指定も、
ポイント / スポットライト利用も、オリジナルの [hgimg4] での機能そのままを
使用できます。
これは私のパソコンスペックでの話であって、スペックが許せば、ソフトシャドウも
もちろん同時再現可能なわけで、はしけむさんご本人がおっしゃっているように、
GPU限定となるのも当然なことなのですが。
ただ、ライト周りの表現と陰影表現とを共有できる環境は、広くあって欲しいので、
機能制限を受け入れる選択肢があってもいい気がします。
|
|
2023/12/5(Tue) 00:31:44|NO.100738
|
|
2023/12/7(Thu) 18:12:04|NO.100768
編成車両は平面走行とし、起伏走行は自動車等単一ものにするのが無難な気がする。
そうすれば、陰影やライトの表現も両立させられると思う。
列車が走り、ケーブルカーやロープウェーも動いている。起伏のある山道を車が進む。
昼間は、太陽の移動に合わせて陰影が動き、夜には、それぞれの乗り物はヘッドライトや
室内灯が灯る。そんな高低差のある中を主人公が歩き回る。
できるかなあ。
|
|
2023/12/10(Sun) 21:59:02|NO.100804
|
|