【解決済み】Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

【解決済み】Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

投稿記事by DEDEN » 2021年1月30日(土) 10:56

現在スクリプト勉強中です
キャラチップやアニメーションはそのままにマップのタイルや遠景のみを色調変更したいと考え、
色調変更機能があるクラスを読み解こうとしていたのですが
アクセスメソッドとして宣言されたインスタンス変数@toneはToneクラスで赤青緑グレーの色情報が格納されている
start_tone_changeメソッドで@tone_durationの値を変更
それによってupdate_toneメソッドが動き出しdurationの値に応じて徐々に@toneの中身を変更
までは読み解けました
しかし肝心な@toneの中身を変更するだけで色調が変化している仕組みがわかりません
どこで紐付けされているのでしょうか
詳しい方がいらっしゃいましたらご教授お願いいたします
最後に編集したユーザー DEDEN on 2021年2月21日(日) 12:46 [ 編集 1 回目 ]

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

投稿記事by 名無し蛙 » 2021年2月20日(土) 11:30

どうもこんにちは。
亀な上に微妙な回答ですが、toneは最終的に
RGSS3が提供している基本クラスであるViewport,Plane,Sprite,Windowのいずれかに引き渡されて
描画時に内部的に使用されます。従って、ユーザが当該部分のソースコードを確認する事は出来ませんね。

おそらくDirectXのシェーダーという機能を使って色調変化させているのだと思うんですけど
ここから先は雲を掴むような話になるので「そういうもの」と割り切った方が良いです。
マップ遠景の色調を変えたいのであれば
Spriteset_Map内で使用している@parallax.toneに新しいToneを設定すれば色調が変わりますね。
ただ設定するとすぐに変化してしまうので、滑らかに変化させたい場合は
Game_Screenの処理を参考するなり流用するなりの工夫が必要になりますけど。
DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

Re: Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

投稿記事by DEDEN » 2021年2月20日(土) 22:44

名無し蛙 様
わかりやすい説明ありがとうございます
なるほど所謂ブラックボックスなんですね…
お陰様で遠景の色調は変更することができました
残るはマップチップですがTilemapクラスはブラックボックスのようなのでtoneを定義するのは不可能という事でしょうか
引数のviewportのtoneを変更しても効果は無いようです
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

投稿記事by 名無し蛙 » 2021年2月21日(日) 08:05

DEDEN さんが書きました:残るはマップチップですがTilemapクラスはブラックボックスのようなのでtoneを定義するのは不可能という事でしょうか
引数のviewportのtoneを変更しても効果は無いようです

変化がないように見えるのはSpriteset_Mapの265行目で
関連付けられた@viewport1.toneと$game_map.screen.toneを毎フレーム同期させている為だと思います。
ただそこを変えても@viewport1に関連付けられた全てのスプライトに影響が出ますけど。

綺麗に解決する方法は多分無いですね。例えば

コード: 全て選択

@viewport4 = Viewport.new
@viewport4.z = -1

を新しく作り遠景とタイルマップに関連付ければこの二つだけ色調を変える、という事も可能ですが
キャラクターの上に表示するべきタイルも下に来てしまう、という小さくない弊害が発生します。
他にも@viewport1内のz値1-99番台にフィルター代わりのSpriteを配置する、
逆転の発想で一度全ての色調を変えた後に遠景とタイル以外全て戻す、とか考えてみましたけど
現行の仕様だと微妙に痒いところに手が届かずパッとしませんね。(せめてviewportの入れ子が出来れば…)
恒常的に変化させたいなら単純に予め色調補正済みのタイルセット素材を用意して差し替える、変化演出が欲しいなら上記の方法と組み合わせる、とか。
海外勢を中心に解析、改造している方もいらっしゃるので不可能と断言は出来ませんけど小手先のテクニックだけでは限界があると思います。
DEDEN
記事: 58
登録日時: 2018年8月25日(土) 15:06

Re: Game_ScreenやGame_Pictureで@toneを変更するだけで色調が変わる仕組みがわかりません

投稿記事by DEDEN » 2021年2月21日(日) 12:45

名無し蛙 様
結論から言うとお陰様で理想の挙動を実現できました
本当にありがとうございます
名無し蛙様のアドバイスのお陰でキャラチップやマップはviewportを共有して個別にz座標を設定している仕様に気付くことができました
まだスクリプトの扱いには不慣れなものでこの仕様を見落としていました
フィルタをキャラとマップの間に挿入する案は私も以前から考えていたのですがどうしても両方の上か下に表示されてしまい上手く実装できずにいました
フィルタも同じviewportにすればいいと教えて頂けたのであっさり実装できました
これでフィルタのtoneを変更した後にopacityを徐々に変更すれば理想の演出になりました
本当にありがとうございました
プレイヤーより上に表示されるタイルについては演出を使う場面では使用を控えるようにすれば解決するので大丈夫です

“VX / Ace:質問” へ戻る