mmd-for-unity-proj / mmd-for-unity

MikuMikuDance for Unity
BSD 3-Clause "New" or "Revised" License
415 stars 83 forks source link

エッジ描画の調整 #28

Closed eral closed 10 years ago

eral commented 10 years ago

画角やスケールに依ってエッジ幅が変わる不具合を修正しました。 それに伴い、旧エッジ幅を元に調整されていた定数等は削除・再設定しています。 これでエッジが妙に太く表示されるのは改善されたかと思います。

エッジにエッジ不透明度が反映されていない不具合を修正しました。

エディタ時に於けるエッジ幅のリアルタイム変更に対応しました。 Start()に有ったエッジ幅設定を全面的にInspecotre側に移動しました。 副作用として、同一プレファブのモデルを複数表示しているとエッジ幅が共有されてしまいます。 メッシュが共有されていた時の解決策と同様の事をすれば分離出来るのですが、しませんでした(単に手抜きです)。 MMDEngineのShaderListも共有に為っている事に気付いたので、分けた方が良いかもしれませんね。

テストモデル

GRGSIBERIA commented 10 years ago

ご連絡遅くなってすみません.Pull requestありがとうございます. 一応,XSミクさんのほうでもエッジ幅の問題点等が解決されたのを確認しました. Mergeさせて頂きます.

>エッジ幅の共有 実行時にいちいちメッシュを分けていたらロードに時間がかかってしまうので, 設定で分けるかどうか選択できるようにしたほうがいいかもしれませんね.

eral commented 10 years ago

Merge感謝です。 なんで師走ってこんなに忙しいんですかね~。

エッジ幅は(メッシュでは無く)Materialに格納されていますので、 Materialを共有にしなければ、自ずとエッジ幅の共有は解決出来ると思います。

と為るとMaterialの共有を止めれば良いのですが、 Prefabから生成する関係上、生成直後は共有している状態から始まってしまいます。 初手が共有から始まるのが決定しているので、何処かのタイミングで独立する事に為ります。 考えられるのが「エッジ幅の変更が発生した時」かな~と思います。 独立はMaterialを複製して、そのGameObjcet専属のMaterialにすれば良いです。 そんなに難しくないです(多分…)。

其処で気に為ったのが大元のPrefabからエッジ幅を変更したい場合です。 独立してしまうとエッジ幅の変更はそのGameObjcetにだけ有効に為ります。 当然Prefab側は変わらなく為ります。

Prefab側のエッジ幅を変えたい場合はInspeocterのApplyボタンを押す事に為ると思うのですが、 この時、専属のMaterialはAsset化されていませんので、メモリ上にしか存在しない筈です。 アセット名決めてませんし…。

この状態でApplyボタンって押して大丈夫なのかな~と考え始めたら、 その後考えが纏まらなく為ってしまって放り出しました。

まぁ「やってみて上手く行けばそれで、いかなかったらその時考える。」ってのでも良いのかも知れませんね~。