Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[3996] GetGlobalDirectionalLightDirection / じょい
対応済み [質問] 返信
v4.1β1を試してみました。光源オブジェクトのパラメータの不具合と、MQEditでの日本語入力の不具合は修正されておりませんが、これらとは別に不具合なのか仕様なのかわからないことがあります。

MQScene->GetGlobalDirectionalLightDirectionで得られる方向ベクトルは、何が基準になっているのでしょうか。例えば視点パネルでヘッドを0,-60,-90,-120と変更していくと、方向ベクトルのYが下がっていってしまいます。メタセコでは視点に対して右上にライトがあるので、ヘッドだけ変えただけではYに変化はないはずだと思ったのですが。
2014-01-08 17:04
[3998] Re: GetGlobalDirectionalLightDirection / 管理者
関数名が示す通りGetGlobalDirectionalLightDirection()はグローバル座標における光源の方向を返します。

一方、視点を回転させると画面上での見た目の光源方向は変わらない、つまりグローバル座標上ではカメラの位置変更に連動して太陽の位置も変化していることになります。
従って、その太陽の位置が変更した状態における光源方向が返されているということです。
2014-01-08 17:39
[3999] Re: Re: GetGlobalDirectionalLightDirection / じょい
やっぱりそうなんですよね。そこで疑問なのは視点のヘッドを動かしても、常に視点の右上あたりにライトがあるはずなのに、なぜか方向ベクトルのYが変化しているんです。ヘッドを-90にすると、メタセコでは右上から照らされているのに、Yは完全に右下からのベクトルになってます。

XとZは正しいので、ヘッドを変化させるとライトが視点の右側で上下するような、方向ベクトルが返ってきてるということになります。

// ヘッド-30では右上からの方向ベクトル
light.dir x:-0.9369 y:-0.3418 z:0.0740
camera.ang h:-30.0000 p:30.0000 b:0.0000

// ヘッド-90では右下からの方向ベクトル
light.dir x:-0.5610 y:0.0906 z:0.8229
camera.ang h:-90.0000 p:30.0000 b:0.0000
2014-01-08 19:57
[4054] Re: Re: Re: GetGlobalDirectionalLightDirection / じょい
GetGlobalDirectionalLightDirectionの戻り値を、試しにSetGlobalDirectionalLightDirectionで、そのままの値を設定してみたのですが、なぜかメタセコでは正しく表示されてます。そうなると光源の方向ベクトルのYは、メタセコ内部では正しい値ということになりますね。

しかしエクスポートして他のソフトに光源を持っていこうとすると、どうしても方向ベクトルのYだけが正しくありません。XとZはメタセコと一致してますが、Yだけが異なる方向になってしまいます。視点のヘッドが0のときは、ほぼ正しい値になっていますが、ヘッドを-90や-120にすると、明らかにYが水平近くまたは下からの方向ベクトルになります。

気になったのでメタセコ内部でのグローバル座標を調べるために、オブジェクトを1つ作り、GetGlobalDirectionalLightDirectionの戻り値をSetLocalMatrixで与えてみたのですが、エクスポートと同様に正しくない方向に傾きます。そうなるとこの値は、一般的な意味でのグローバルとしては使えません。

できれば光源の方向ベクトルを、そのまま得られる関数がほしいですが、この値がメタセコ内部ではグローバルなんですよね・・・・。

この方向ベクトルは、視点の何かを掛け合わせているとか、何かグローバルではない計算がされてませんか?
2014-01-15 17:07
[4055] Re: Re: Re: Re: GetGlobalDirectionalLightDirection / 管理者
現在詳細を調査中ですが、ご指摘のようにどうもおかしな値を返してしまっているようです。
元々レンダラーに使う目的で設置した関数なので、ライティング計算がしやすいようグローバル座標でベクトルを返す仕様なのですが、
mqoファイル内を含めて内部では見た目の方向でデータを保持しているので、その座標変換処理に間違いがあるようです。
4.1リリース時には修正いたしますので今しばらくお待ちください。
2014-01-15 17:42
[4109] Re: Re: Re: Re: Re: GetGlobalDirectionalLightDirection / じょい
v4.1で修正を確認しました。これでヘッドを回転させても常に正しい方向ベクトルが返ってきます。

しかし新たな問題が見つかりました。バンクがゼロのときは問題ありませんが、バンクを60や-30などにすると、正しくない方向ベクトルになってしまいます。いろんなバンクを与えて試したところ、バンクに対して光源だけが逆方向にバンクしている感じです。

例えばバンク-70でのオブジェクトに対する光源の方向ベクトルは、本来であればバンク70でのベクトルみたいです。
2014-01-25 16:28
[4135] Re: Re: Re: Re: Re: Re: GetGlobalDirectionalLightDirection / 管理者
確認が不十分でした。
次のリリース(4.1.1)でバンク角があっても大丈夫なよう修正します。
2014-01-30 13:31
[4285] Re: Re: Re: Re: Re: Re: Re: GetGlobalDirectionalLightDirection / じょい
v4.1.1で修正を確認しました。これでバンクがあっても正しく方向ベクトルが得られるようになりました。ありがとうございます。
2014-02-27 17:02