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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0508
アキアキノヒロロカスタムシェーダーを使ったオブジェクトへ、ライトを反映させるには?3解決


アキアキノヒロロ

リンク

2024/5/8(Wed) 16:46:10|NO.101688

ライトを設定すると、それ以降に生成されるモデル・マテリアルはカレントライトの影響を受ける訳ですが、
[hgimg4]のサンプル[customshader.hsp]のように、カスタムシェーダーを使った[plate]や[box]などは、
一般の[gpfloor]や[gpbox]のようには、ライトの影響を受けません。
これを叶えるにはどうしたらいいのでしょうか。
自作の3Dオブジェクトなら、そのマテリアルを書き換えればできますが、この場合はどうすればいいのか、
分かりません。お教え願います。

テスト用スクリプトは、以下のものです。
ディレクショナルライトを有効にしても、[id_qbox]には変化がありません。
#include "hgimg4.as"
chdir dir_exe+"\\sample\\hgimg4" gpreset setcls CLSMODE_SOLID, $909090 // 以下2行を有効にしてみると? // setcolor GPOBJ_LIGHT, 0.3,0.3,0.3 ; 標準ライトカラーを設定 // setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; 標準アンビエントカラーを設定 gpfloor id_floor, 15,15, $00ffff gpbox id_box, 2 setpos id_box, 3, 1, 0 id_texture = "res/qbox.png" gpusermat id_mat, "res/shaders/textured.vert","res/shaders/textured_gray.frag","MODULATE_ALPHA;MODULATE_COLOR" gpmatprmt id_mat, "u_diffuseTexture", id_texture gpmatprm4 id_mat,"u_modulateColor", 1,1,0,1 gpbox id_qbox, 2, , id_mat setpos id_qbox, 0, 1, 0 setpos GPOBJ_CAMERA, 5,10,20 gplookat GPOBJ_CAMERA, 0,0,0 repeat redraw 0 : gpdraw : redraw 1 await 1000/60 loop



この記事に返信する


buhio

リンク

2024/5/8(Wed) 18:49:01|NO.101689

こんにちわ

 シェーダー勉強中ですが、マテリアルの追加ラベル定義に、「DIRECTIONAL_LIGHT_COUNT 1」を追加してみてはいかがでしょうか
 ディレクショナルライトを1個使いますという定義になると思います。
 通常は、HGIMG4ツールのマテリアル設定で行うと思いますが、ユーザーシェーダーなので、指定が必要かなと思います。
 わたしの環境ではライトが反映されました。

 

;16行目 "MODULATE_ALPHA;MODULATE_COLOR;DIRECTIONAL_LIGHT_COUNT 1"  



buhio

リンク

2024/5/8(Wed) 19:12:40|NO.101690

メモ

 textured.fragファイル内のラベル定義(textured_gray.fragも定義は共通のようです)
 
 LIGHTMAP ←u_lightmapTextureの画像からライトの影響色を乗算指定
 LIGHTING ←これをラベル定義してもいけるようです。包括的な指定
 BUMPED  ←バンプマップ(一応u_normalmapTextureに渡すと動きそう)
 DIRECTIONAL_LIGHT_COUNT ←ディレクショナルライト
POINT_LIGHT_COUNT ←ポイントライト
 SPOT_LIGHT_COUNT ←スポットライト
 SPECULAR    ←キラリ反射
 MODULATE_COLOR ←カラーを乗算
 MODULATE_ALPHA ←透明を乗算
 CLIP_PLANE   ←指定した距離より近い部分を描画しない(未検証:動きそう)
 MIRRORTEX    ←u_diffuseTextureを反転して表示
 TEXTURE_NODISCARD_ALPHA
 
 フラグメントシェーダーの記載に依存するので、ゼロベースで作ったシェーダーは自分で好きに定義を追加して、なんやかんやできるようです。
 奮闘中ですが、とても難しい、、、



アキアキノヒロロ

リンク

2024/5/8(Wed) 19:47:18|NO.101691

buhioさん、早速のご返答、有難うございます。

[gpusermat]第4パラメータの追加ラベル定義に、
「DIRECTIONAL_LIGHT_COUNT 1」を付け足せばいいんですね。
[.material]ファイル内で指定することをここに書くということですね。

わたしの環境でも、無事ライトが反映されました。
解決と致します。

buhioさんの『メモ』も、とてもありがたいです。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101688への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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