-
Notifications
You must be signed in to change notification settings - Fork 435
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
タンジェントがプリプロセッサで自動的生成されている #55
Comments
部外者が不躾で申し訳ないですが、特別なTangentSpaceを要求するノーマルマップの生成方法を、標準的な(Mikk)TangentSpaceを用いてノーマルマップを生成する方法へ変更するべきだと私は思います。失礼しました。 |
https://www.youtube.com/watch?v=gR3r7Xmhmlk Unityで読み込むOpenGL向けのノーマルマップをベイクする場合は、SubstancePainterではFBXエクスポート時にタンジェントをエクスポートし、SubstancePainter側ではタンジェントの自動計算を行わないで読み込む設定と解説されており、モデルのタンジェントをインポートして整合性が取れるノーマルをベイクする形となっております。 また、UE4ではDirectX向け設定ではTangentを自動計算で問題ないとされていましたが実際に、あったケースで自動計算で正しくノーマルが表現されず、最終的にUnity向けと同じようにFBXエクスポート時にタンジェントもエクスポートし、インポートすることで正しい結果になるという状況がありました。 その為、それらの経験則からDirectX、GL向けともFBXエクスポート時は基本的に、ノーマルと接戦と重法線をエクスポートしインポート時にモデルと同じタンジェントをインポートするのが確実性が高いという結果になっております。 また、GLTLFの仕様には(GLTF_EXPORT_TANGENTS、UNIGLTF_IMPORT_TANGENTS)とタンジェントをエクスポート、インポートするところまでサポートされております。 そこで、VRMの拡張オプションとしてタンジェントの自動計算が必要かどうかのフラグを持てないでしょうか? これにより、ベイク環境による問題が解決するかと思われます。 |
また何故これが必要かというと、ノーマルマップは必ずしもオブジェクトからベイクされたノーマルマップが使用されるとは限らないからです。 |
私は、エディタ読み込みの場合、他形式->VRMの際にtangentがimportできるならする(もしくはユーザーに確認する)。書き出し時には、理想を言えばuniVRM側で(MikkTSに合わせた)bakeをしてノーマルマップを出力してくれる(VRM形式としてはtangentを持たない)というのが一番ありがたいと思います。 補足?ですが、
|
MikkTSのみしか扱えない環境があるとなると、理想的なのは仰る通り以下の処理だと思われます。
UniVRMのエクスポート時に、アーティストが用意したタンジェントとノーマルマップを上記のようにMikkTSベースのノーマルマップにベイク(変換)する処理が行われれば、UniVRMのエクスポート元のタンジェントとノーマルマップが適用された見た目が再現できるので、インポート時はMikkTSベースのタンジェントを自動計算する処理で問題無いと思います。 iCyPさんが提案されている方法の実装を検討頂ければと思います。 |
右手系GLTFと左手系Unity間でTangentの変換が必要なのかどうか等よくわかっておらず、MikkTSpaceであることを前提にRecalculateする実装となっております。
技術的に難しいので今後の課題にしたいと思います。 |
tangentに関しては、1.0と0.xともに保存しない方針になります。 |
前回立てたIssuesの検証結果です。
UniVRMというよりUniGLTF側の問題かもしれませんが、前回の報告の結果も含めてこちらの方にIssueを立てておきます。
現状、タンジェントが自動生成されてしまっており(RecalculateTangentsが実行されているよう?)VRoid上で出力されているタンジェントと自動生成されたタンジェントで結果がことなってしまうため#46の問題が起きているようでした。
(GLTF_EXPORT_TANGENTS、UNIGLTF_IMPORT_TANGENTS)はデフォルトではオフになっているようですが、これがデフォルトで有効になるように変更していただけないでしょうか。
Unity、UE4向けにノーマルマップの出力をこれまで行ってきましたが、タンジェントが自動生成になっていると正しく読み込めないケースがあり基本的にはMayaのFBXエクスポート時にタンジェントをエクスポートする設定、エンジン側で読み込むという形をとっております。
そのため、UniVRMでもタンジェントは自動生成ではなくオブジェクトが持っているタンジェントを読み込んでいただけるとこのような問題が起きるのを防げます。
そのまま読み込むインポート設定ですと、出力時にエクスポート設定を行えばいいだけですがランタイム読み込み側で自動生成になっているとデータ作成側は対応不能になります。
ご検討よろしくお願いします。
The text was updated successfully, but these errors were encountered: