トップページ > 記事閲覧
SetUseLarge3DPositionSupport()を使った時の影シェーダーについて
名前:Comaneco 日時: 2020/06/26 14:04

お世話になります。 最近少しシェーダーをやり始め、とりあえずこちら えいちてぃーてぃーぴー://dxlib.xsrv.jp/program/dxprogram_3DModelShaderBase.html のサンプルプログラムを元に、フォンシェーディングでの描画と影の描画をやりました。 しかし、フリーのモデルを使った時に描画が乱れたため、SetUseLarge3DPositionSupport()の関数を使いビルドしたところ、 乱れは直ったのですが、これまで正常に表示されていた影が全く違うところに出てしまいました。 そこで、サンプルプログラムのこちらの えいちてぃーてぃーぴー://dxlib.xsrv.jp/program/dxprogram_3DAction_DepthShadow.html をダウンロードし、シェーダー側をいじらず、 C++側のInit前にSetUseLarge3DPositionSupport()を追加したところ、 追加する前と後で影が全然違う位置に表示されました。 こちらは、DXLibの仕様なのでしょうか? 初歩的な質問でしたら申し訳ないのですが、ご教授をお願い致します。 ※えいちてぃーてぃーぴーのところは半角英数字で入力して下さい。
メンテ

Page: 1 |

Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.1 )
名前:管理人 日時:2020/06/28 00:58

すみません、SetUseLarge3DPositionSupport はかなり特殊な状況( 50000000000.0 など、 巨大な値の座標を扱うような状況 )のための機能なので、影の描画には対応していません > しかし、フリーのモデルを使った時に描画が乱れたため 描画が乱れたとのことですが、どのように乱れたのでしょうか? よくあるのが深度バッファの精度不足が原因で描画が乱れるので、その場合は DxLib_Init の前に SetZBufferBitDepth( 24 ); という記述を増やして深度バッファの精度を上げることで描画の乱れを解消することが出来ます よろしければお試しください m(_ _)m
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.2 )
名前:Comaneco 日時:2020/06/28 19:17

対応していなかったのですね。すみません。 >描画が乱れたとのことですが、どのように乱れたのでしょうか? 描画の乱れ方としましては、モデルの骨の部分辺りから原点に向かってポリゴンが伸びる? 様な感じです。 また、おかしいとは思ったのですが、モデルによってはそもそも原点でも Tポーズの手の部分からポリゴンが伸びていたりもしてました。 また、シェーダーを適応せずに描画すると正常に描画されたり、 モデルによってはシェーダーを適応しても伸びなかったり、としているため、 モデルの構造もしくは自作したシェーダー側の問題なのではないかと思っているのですが、 理解が浅いため、いまいち原因が分からない状態です。 SetZBufferBitDepth( 24 );を入れてみたのですが、改善は見られませんでした、、、 念のため、現象が起きたソースをこちらにアップロードしておきましたので、お時間あるときに確認をお願い致します。 原点でも手のひら辺りからポリゴンが伸びている状態の奴です。 えいちてぃーてぃーぴー://drive.google.com/file/d/1W2daboM-GHlXrlkuN2_ONopOk9AgqROB/view?usp=sharing ※えいちてぃーてぃーぴーのところは半角英数字で入力して下さい。
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.3 )
名前:管理人 日時:2020/06/29 00:32

SetZBufferBitDepth( 24 ); で直るタイプの問題ではありませんでしたか… > 念のため、現象が起きたソースをこちらにアップロードしておきましたので、お時間あるときに確認をお願い致します。 ファイルのアップありがとうございます ただ、一般公開の設定がされていないようで、載せていただいたURLを開いたところ 『アクセス権が必要です アクセス権をリクエストするか、アクセス権のあるアカウントに切り替えてください。』 と表示されました アクセス権が無くてもアクセスできる設定にしていただけますでしょうか? m(_ _)m
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.4 )
名前:Comaneco 日時:2020/06/29 10:12

>管理者様 お手間をとらせて申し訳ないです。 こちらにアップロードし直したのでご確認をお願い致します えいちてぃーてぃーぴー://drive.google.com/file/d/15MHct4KM5Y3FE7ROlZ0v7Hm-IT-du1sZ/view?usp=sharing ※えいちてぃーてぃーぴーのところは半角英数字で入力して下さい。
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.5 )
名前:管理人 日時:2020/06/30 22:17

ありがとうございます、アップロードしていただいたファイルをダウンロードできました プログラム中で読み込んでいる Player.mv1 を DxLibModelViewer で読み込み確認したところ 4ボーンより多くのボーンのウェイトが割り当てられている部分が400ポリゴンほどあり、 そこが4ボーン以内用のシェーダーで正常に処理されず、ポリゴンが伸びる状態になってしまっているようです DxLibModelViewer で Player.mv1 を読み込み、『フレーム』タブを選択して フレーム一覧の中から『0:Mesh』を選択して、真ん中の枠の中の 『No:0 ポリゴン数:27207 頂点数:21594 マテリアル:[0]SpacePirate_M』 と書かれている部分をクリックすると下側の枠の中にメッシュの情報が表示されます メッシュ情報をスクロールバーを使って一番下の部分を表示すると [3] ポリゴン数:385 頂点数:384 頂点タイプ:法線マップ付き8ボーン以内スキニングメッシュ [4] ポリゴン数:18 頂点数:16 頂点タイプ:法線マップ付き8ボーン以内スキニングメッシュ という2行があります こちらが4ボーンより多くのボーンが影響している頂点が含まれるメッシュとなっています こちらの2行の左側にあるチェックマークを外すと4ボーンより多くのボーンを使用して しまっている部分が非表示になりますので、その部分を確認して、その部分で使用する ボーンの数を4ボーン以内になるように調整してみてください m(_ _)m
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて(解決済み) ( No.6 )
名前:Comaneco 日時:2020/07/01 09:57

まさかこんなところが原因とは、、、 確認したところ、確かにその部分でした。 私がモデルに関して余り知識がなかったのが原因でお手間をとらせて申し訳ないです。 また、丁寧な回答ありがとうございました。 これにて解決済みとさせて頂きます。
メンテ
Re: SetUseLarge3DPositionSupport()を使った時の影シェーダーについて ( No.7 )
名前:Comaneco(解決) 日時:2020/07/01 09:59

解決の場所名前の後だったのですね…すみません
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存