Azukimochi / LightLimitChangerForMA

MIT License
33 stars 11 forks source link

「初期の上限と下限を上書きする」有効時に「明るさの下限」が正しく反映されない #225

Closed idzuna closed 2 months ago

idzuna commented 2 months ago

バージョン 1.13.2 で「初期の上限と下限を上書きする」を有効にしたとき、「明るさの下限」が正しく反映されません。

再現手順:

  1. Unity 上で「初期の上限と下限を上書きする」を有効、「明るさの下限」に 0 以外の値を設定する(それ以外はデフォルト)
  2. Unity を Play Mode に切り替えて Gesture Manager Emulator を起動する
  3. アニメーターが動作して「明るさの下限」に設定した値がマテリアルに設定されるはずが、0 が設定されてしまう

問題は 1.13.2 で発生しており、バージョン 1.13.1 に戻したところ「明るさの下限」の値が正しく反映されました。

222 で、ツール無効時にも「明るさの上限の初期値」「明るさの下限の初期値」を反映することを意図したと思われる修正が入っていますが、ツール無効時には単に「明るさの上限」「明るさの下限」をそのまま適用する 1.13.1 の挙動がありがたいです。

(最初から初期値の値を適用したいユーザーは「初期状態で適用する」を有効にして使えばよいです)

※もし、ツール無効時にも初期値の値を反映させることを仕様とされるのであれば、 IsSeparateLightControl の値を考慮する必要があるのと、単純に値をかけ算するのではなく、MinLightValue と MaxLightValue の値を DefaultMinLightValue と DefaultMaxLightValue の比率でブレンドすることになるので、 https://github.com/Azukimochi/LightLimitChangerForMA/blob/develop/Editor/NDMF/Passes.GenerateAnimationsPass.cs#L52 は以下のようになると思います。

if (parameters.IsSeparateLightControl)
{
    defaultMinLight = parameters.MinLightValue * (1 - parameters.DefaultMinLightValue) +
                      parameters.MaxLightValue * parameters.DefaultMinLightValue;
    defaultMaxLight = parameters.MinLightValue * (1 - parameters.DefaultMaxLightValue) +
                      parameters.MaxLightValue * parameters.DefaultMaxLightValue;
}
else
{
    defaultMinLight = parameters.MinLightValue;
    defaultMaxLight = parameters.MaxLightValue;
}

ご検討よろしくお願いいたします。

Azukimochi commented 2 months ago

対応遅くなりました🙏

ご提案いただいた式を少々改良し、以下のような計算式で実装の方行いました。 これはMaxLightが1以上設定されることがあるため(lilToonの明るさの上限の値域が0-10)、このような計算式にした感じです。

 defaultMinLight = (parameters.MaxLightValue - parameters.MinLightValue) * 
                             parameters.DefaultMinLightValue + parameters.MinLightValue;
defaultMaxLight = (parameters.MaxLightValue - parameters.MinLightValue) * 
                             parameters.DefaultMaxLightValue + parameters.MinLightValue;

当環境ではこの式で問題なく動作いたしましたがすべてのパターンは網羅できていないため、一旦修正したとしてIssueの方クローズしますがまだ不具合が残っていれば再度コメントの方よろしくお願いします。