見出し画像

ゲーム開発日記7(6月17日から6月24日)


週一の進捗日記7
コードとかは乗せるかもしれないけどゲーム部分、ストーリーやギミックのネタバレは避けます

ゲームエンジン godot4.2 OS windows10 開発ゲーム:リミナルスペースをもとにしたメトロイドヴァニアホラーアクション

進捗

今回は進んだよ やったこととしてはシェーダーの勉強と演出の勉強

動きの演出 

私にはゲームの演出についてある考えがあった 動画や映画などの映像作品に比べゲームの演出はしょぼくなりがちだ、というもの
その理由の一つにツールの差があるのだと思う 動画編集ソフトのようにエフェクトやトランジションをワンクリックで使られるようになったらゲームの演出というのは大きく向上するのではないか?、と
そこでそのようなアセットを現在並行して作っている途中である(ゲームの実際のステージをつくっていくようになるのはいつになるんだろうか?)

演出を簡単にできるようにトランジションを作成した
演出(エフェクト)についてどうしたらいいか方向性は見えた 主に以下に分けられると思う
・spriteEffect   演出用のシェーダーを割り当てたスプライトを貼り付け演出用のフィルターにする   たとえば入るとモノクロになる空間とかを作る場合に使う
・compornentEffect オブジェクトに取り付けキャラクターに演出的な効果を与える オブジェクト自体にかかる影や光などを担当する
・CameraEffect  カメラに同期する画面全体のエフェクト ポストプロセスっていうやつだ 画面にノイズを出したり色身を調整したりだ
・パーティクル/スプライト 背景素材や煙などのものゲームオブジェクトとしての性質ももつ ほか三つと違ってゲーム自体に相互作用する場合がある(たとえば煙がキャラが動いたことに風でうごいたり 瓦礫なんかがこれだ)


シェーダーについて

前から調べていた下の色を取得する方法がわかった  
そして情報が少なかったGDsherderの知識がかなり増えた(組み込みの関数や変数が何があるかの情報源を見つけた 結果から言うと結局公式のレファレンスに書いてあった) これによって一気にやれることが増えた ようやく停滞していた開発が進み始めそうである

texture(SCREEN_TEXTURE, SCREEN_UV);で入手できる
ただgodot4からは変更されたらしくuniform sampler2D SCREEN_TEXTURE:hint_screen_texture, filter_linear_mipmap;を追加する必要がある

レイヤーの再現

クリスタのレイヤーの再現にとりかかった レイヤー単位で素材を分割してくみあわさられるとべんりだからだ、おもに動く光や影などを作るときに
そして再現結果

乗算/スクリーン/覆い焼き発光/焼きこみリニアの結果である 乗算についてはうまくいっている しかしスクリーンはおかしいし焼きこみリニアはなぜか明るくなっている
下の色と掛け合わせるだけならrender_mode blend_mulというのがあるがそれでは同じ結果にはならない 理由としては透明度のせいだ

乗算のシェーダーコード

shader_type canvas_item;
//render_mode blend_mul; おそらく透明度も乗算してしまう
uniform sampler2D SCREEN_TEXTURE:hint_screen_texture, filter_linear_mipmap;
void vertex() {
	// Called for every vertex the material is visible on.
}

void fragment() {
    vec4 screen_color = texture(SCREEN_TEXTURE, SCREEN_UV);
	vec4 color=texture(TEXTURE, UV.xy);
	
	COLOR.rgb = color.rgb * screen_color.rgb;
}

これでいい感じに同じ結果になった 注目してほしいのはこの部分 COLOR.rgb = color.rgb * screen_color.rgb; 透明度だけ省いてるところ
見え方に差ができるのはblend_mulだと透明度も掛け算してしまうのだと思う そのせいでおかしくなってる クリスタの計算をgodot的に解釈するなら rgbを掛け合わせた後 mixmodeで合成する、なのだろう


わかったことメモ

それとなんだがシェーダーを適応するとそのスプライトのmodulateがきかなくなることが分かった

レンダーモードというものがあるrender_mode xxxxで可能
render_modeというのを設定すると乗算や加算のような事が機出ることがわかった ただクリスタの乗算とは様子が違う
おそらく透明度の値が悪さしてる あとライトを当てると挙動がさらに変になる 証拠として実装でCOLOR.rgb = color.rgb * screen_color.rgb;に変更すると一気にクリスタ乗算に近づいた
明るさが欲しいだけで法線マップや影の機能使わないなら加算効果を持つスプライト使った方がいいかも レンダーモードと干渉すると変になる

問題点

2スクリーンと焼きこみリニアの見え方の差を改善
3GDshederの関数や変数についての情報が少ないまま
4 リムライトや鏡面反射は自分で実装する必要がありそう
5絵のクオリティ向上
6動き関連の知識とノウハウが少ないので強化する必要がある

スケルトン2Dについては相変わらずようわかんまま

絵素材は自分で書けるからいいが音楽とか音ほんとにどうしよ、BGMは必須だよな でもフリー素材は被る なあ、一年で音楽ってどれぐらいうまくなれる??
 コード..いっぱいあって覚えられん

この記事が気に入ったらサポートをしてみませんか?