トップページ > 過去ログ > 記事閲覧
MV1SetFrameOpacityRateを使うと…
名前:もんちき 日時: 2010/09/24 00:25

 こんにちは、もんちきと申します。  フレーム構造を持つxfileを読み込み、MV1SetFrameOpacityRateで特定のフレームを 半透明でレンダリングすると、その背景にあるものが正常に描画されなくなります。  これがそのスクリーン・ショットです。  ttp://homepage2.nifty.com/essex/temp/1.jpg  分かりにくいので、半透明でレンダリングしているフレームを、MV1SetFrameVisibleで 非表示にしたスクリーン・ショットも撮りました。  ttp://homepage2.nifty.com/essex/temp/2.jpg  これは、データの不具合によるものでしょうか?  それと…mqo形式のファイルでボーンやアニメーションを設定する場合、どの様にすれば 良いのでしょうか?  現在は 1 メタセコイアで、モデルとボーンのためのワイヤを出力 2 RokDeBoneでボーンとスキニング等を設定 3 RokDeBoneでxfileとして出力  の順で製作しています。  DxLibでは、mqo形式そのままで読み込んだ方が、半透明でのレンダリング等も意識せず 使い勝手が良いのは分かっているのですが、その場合ボーンの設定の仕方が分かりらず xFileを経由しています。  ご教授よろしくお願いします。

Page: 1 |

Re: MV1SetFrameOpacityRateを使うと… ( No.1 )
名前:七篠 日時:2010/09/24 12:25

なんとなくココで聞く話ではないと思いますが、メタセコイアは、基本モデラなので単体でのボーン入れの概念はありません。 もんちきさんはメタセコイヤのいずれをお使いですか? シェア版(ライセンス購入済) シェア版(ライセンス未購入)・フリー版 ライセンス購入済みのシェア版ならプラグインが使えるようになり、そのプラグインの中にボーンを入れることの出来るものもあります。(PMDとかx出力可能になる) それ以外の場合はRokDeBoneなど外部ソフトを使われてする形になります。 5000円と有料になりますが非常に楽になりますので検討されてはどうですか? 作者さんに試用ライセンスをもらわれて、その上で河岸が得られてもいいと思います
Re: MV1SetFrameOpacityRateを使うと… ( No.2 )
名前:もんちき 日時:2010/09/24 19:39

 七篠さん、情報をありがとうございました<(_ _)> そうですね。確かにここで聞くのには、不適切だったかも知れませんね。  一応私の質問の意図をご説明しますと、DxLib専用フォーマットのmv1形式のデータは、 (私の理解では)DxLibModelViewerで出力されるもので、そうするとそのデータは、 DxLibModelViewerが対応しているxfile、mqo、pmdからコンバートされる事になります。  内、xfileやpmd形式のファイルについては、ボーンの設定やアニメーションデータの 作成の仕方が分かったのですが、mqo形式については七篠さんの書き込みにもあります様に モデリング・データですので、DxLibModelViewerが前提とするモーションデータの作成の仕方があれば、 それをお聞きしたいと思いました。  という事は、メタセコイアのシェア版でボーンを設定し、それをDxLibModelViewerで mv1形式にコンバートすれば良いのですね。  …ところで、メインの質問であるMV1SetFrameOpacityRateについてですが、半透明の レンダリングを設定したフレームの奥にあるメッシュに関しては、SetUseBackCullingを TRUEにしなくても、両面のレンダリングがなされる様です。フレームではなく、異なるモデルを 前後に重ねた場合同じ事は起きないようですから、フレームのレンダリング固有の現象みたいです。
Re: MV1SetFrameOpacityRateを使うと… ( No.3 )
名前:管理人 日時:2010/09/25 20:51

> フレーム構造を持つxfileを読み込み、MV1SetFrameOpacityRateで特定のフレームを > 半透明でレンダリングすると、その背景にあるものが正常に描画されなくなります。 > これは、データの不具合によるものでしょうか? いえ、データの不具合によるものではありません、DXライブラリの仕様によるものです DXライブラリが描画物同士の前後関係の整合性を解決するために使用しているZバッファという 機能の関係上、半透明が描画物に含まれる場合、各描画物をカメラから遠い順に描画しないと 正常な描画結果を得ることができません ただ、MV1DrawModel では描画物の前後関係と関係なく常にフレーム構造の順番通りに描画されて しまいますので、カメラに近い半透明の描画物が描画された後に、描画された半透明の描画物の背後に ある描画物が描画されてしまうという事も起こります この場合、先に描かれた半透明の描画物の背後に位置する描画物で半透明の描画物と被っている ピクセルには後から描画した描画物を構成するピクセルは描画されないという事態になります これを解決する方法としては MV1DrawModel の代わりに MV1DrawFrame でフレーム単位に 描画するようにして、不透明のフレームを全て描画した後、半透明のフレームをカメラから 遠い順に描画するというものがあります ただ、余程はっきり離れていない限りフレーム単位の前後関係の判断は中々難しいので、 半透明のフレームが複数ある場合にどのような状況でも正常な描画結果を得られるように するのは難しいかもしれません・・・ ちなみに、この問題は半透明のフレーム内に含まれるポリゴン同士でも発生します 完璧な対処方法はDXライブラリに限らずまだ存在しないので 3Dゲーム界隈での半透明の表現には皆それなりに工夫を強いられています ( CG映画やCMに使われているCG等の時間をかけてレンダリング結果を出す界隈では  レンダリングの仕組み自体が全く違うのでこの問題はありません ) かなり重要なこの仕様に関するドキュメントが無くて申し訳ありません m(_ _;m >  …ところで、メインの質問であるMV1SetFrameOpacityRateについてですが、半透明の > レンダリングを設定したフレームの奥にあるメッシュに関しては、SetUseBackCullingを > TRUEにしなくても、両面のレンダリングがなされる様です。フレームではなく、異なるモデルを > 前後に重ねた場合同じ事は起きないようですから、フレームのレンダリング固有の現象みたいです。 こちらで簡単なテストをしてみましたが、再現できませんでした テストに使用したプログラムをアップしましたので、よろしければもんちきさんの環境でも 問題が発生しないかお試しになってみていただけないでしょうか? http://homepage2.nifty.com/natupaji/temp/BackCullingTest.zip もしかしたら発生条件が複雑なのかもしれません・・・
Re: MV1SetFrameOpacityRateを使うと… ( No.4 )
名前:もんちき 日時:2010/09/26 16:12

 管理人様、ご回答下さりありがとうございました。  半透明のフレームが複数ある場合、正常に描画されるフレームとされないフレームがあるのが 非常に不思議だったのですが、なるほど…とても良く分かりました。描画の順序を変えるか 仕様を踏まえてモデルを作り直すか、色々試してみたいと思います。  ところでバックカリングについてですが、私のイメージでは、バックカリングをTRUEにすると こんな風な絵になるかと思っていたのですが  ttp://homepage2.nifty.com/essex/temp/1.jpg  実際はFALSEにするとこうなるのですね。  ちなみに上の絵は、管理人様が作成されたデータをオブジェクト毎別ファイルにし、 それぞれ別個に読み込んだ結果で、管理人様のデータのまま読み込むと  ttp://homepage2.nifty.com/essex/temp/2.jpg  この様になりました。(角度は変更しましたが)これは、管理人様の判断なさる上での 材料になりますでしょうか?
Re: MV1SetFrameOpacityRateを使うと… ( No.5 )
名前:管理人 日時:2010/10/04 05:27

すみません、ちょっと状況を把握できていないかもしれません ttp://homepage2.nifty.com/essex/temp/2.jpg アップしていただいたこちらの画像は「バックカリング無し」の設定で動作させた場合の 表示としては正常なのですが、「バックカリング有り」でも特定のフレームに対して MV1SetFrameOpacityRate を使用するとこちらのような表示になってしまうということでしょうか?
Re: MV1SetFrameOpacityRateを使うと… ( No.6 )
名前:もんちき 日時:2010/10/07 01:28

 管理人様、お手数をおかけして済みません。  お騒がせしてしまいましたが、バックカリングについては、どうも私の 勘違いのようです。  一応、モデリングソフトをキャプチャーした画像で説明しますと… 1 私が最初期待したのはこの様な描画結果でした。  ttp://homepage2.nifty.com/essex/temp/1.jpg  このデータでガラスの部分を表現するために、透明の部品だけを 一つのフレームに集めて描画したところ、管理人様のご説明にあった様に、 フレームの描画順により、透明部品の向こう側が描画されませんでした。 2 その場合、こんな描画結果になるのかな…と思ったのですが、  ttp://homepage2.nifty.com/essex/temp/2.jpg 3 実際はこの様な結果になりました。  ttp://homepage2.nifty.com/essex/temp/3.jpg  私の理解では、ポリゴンの裏面は描画しないのが初期設定で、この様に 両面を描画するのは、バックカリングの処理が勝手に働いているのだと 思ったのですが、リファレンスを良く読むと、両面を描画するのが 初期設定なのですね。  済みません。ご迷惑をおかけしてしまいました。  ちなみに描画の問題については、管理人様からいただいたアドバイス通り、 フレームの描画順序を入れ替える事で無事解決しました。  ありがとうございました。それとご迷惑をおかけして、済みませんでした。
Re: MV1SetFrameOpacityRateを使うと… ( No.7 )
名前:管理人 日時:2010/10/08 08:44

問題が解決したようで何よりです バックカリングについてですが、3Dモデルの描画については SetUseBackCulling の設定は反映されないようになっています 3DモデルはPMDファイルの半透明のマテリアルを持つメッシュのみバックカリングが行われず( 両面描画 ) それ以外のファイルフォーマットでは MV1SetMeshBackCulling で設定を変更しない限り無条件でバックカリングが行われます

Page: 1 |