トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     PaperVision3Dでマテリアルがうまく適用できません
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kimukimura
Åê¹ÆNo.43949
投稿日時: 2009-11-16 22:37
新米
居住地: 三鷹市
投稿: 11
使用環境:
タイガーマック、WinXP、主にFlashDevelop + FlashCS3,CS4。Flex勉強中。
PaperVision3Dでマテリアルがうまく適用できません
非常に困っています、ご存知の方、ぜひ知恵をお借りしたいです。

PaperVision3Dで布地形状の3dsファイルを読み込み、布地のビットマップデータをアテたいのですが単色のべた塗り状態になってしまいます。同様のコード、同様のビットマップで別のモデリングデータに貼付けてみたところ問題なく適用できます。

マテリアル適用においてモデリングの段階で必要な処理があるのでしょうか?それともマテリアルを適用する段階での処理に方法があるのでしょうか?あて方に何通りか種類があるのでしょうか?

ご教授お願いいたします。
※PaperVisionは2.0を使用しています。

-----------------------------------------------------------------
// view等は省略します

var kmzFile:String = "hoge.3ds";
var material:BitmapAssetMaterial = new BitmapAssetMaterial("Image");
var materials:MaterialsList = new MaterialsList({all:material});
model = new KMZ();
model.load(kmzFile, materials);
scene.addChild(model);
ゲスト
Åê¹ÆNo.43951
投稿日時: 2009-11-16 23:24
Re: PaperVision3Dでマテリアルがうまく適用できません
こんにちは。
私のところで試したところ3dsファイルを読み込み、
ビットマップ画像を貼り付けることができました。

投稿されたスクリプトを拝見すると、
KMZクラスを使用して3dsファイルを読み込まれておりますが、
Max3DSクラスを使用してみてはいかがでしょうか?
(パッケージ名は org.papervision3d.objects.parsers.Max3DS )

KMZクラスはGoogle SketchUp等で書き出されたKMZファイルを解析し表示するためのパーサークラスで、3DSファイルの場合はMax3DSクラスがそれに相当します。

なお、参考までに私がテストしたデータを下記URLにアップしております。
http://clockmaker.jp/labs/091116_pv3d_3ds/src.zip

※3DSファイルは http://blog.r3c7.net/?p=121 からダウンロードしたミクのDAEファイルをBlenderで3dsファイルに変換したものです。

※Papervision3Dのバージョンですが、2.1 (リビジョン920)にて試しています。
2.0よりも解析系の処理が強くなってますので、差し支えなければ2.1で試してみてはいかがでしょうか。
kimukimura
Åê¹ÆNo.43961
投稿日時: 2009-11-17 16:35
新米
居住地: 三鷹市
投稿: 11
使用環境:
タイガーマック、WinXP、主にFlashDevelop + FlashCS3,CS4。Flex勉強中。
Re: PaperVision3Dでマテリアルがうまく適用できません
clockmakerさん

ご投稿いただきありがとうございます、いつもBlogのほう参考にさせていただいております。

投稿いただいた形でMax3DSクラスを使用してみました、CS4でパブリッシュするとなぜかMax3DSクラス内でエラーが出まくりました(未定義のプロパティ...)、cs3で試したら問題なく動作したのですがご経験おありでしょうか?

ちなみに最初の投稿で.kmzを使用していると書きましたが、

3dsをインポート >> kmz形式で書出し >> KMZクラスで読込み

という流れでした。


clockmakerさんに教えていただいた方法で
試してみた結果、以下のようになりました。
-------------------------------------------
■生地モデリング(.3ds)をMax3DSで読み込む
>> ワイヤーフレームのみ表示、なぜかカラフルな色付き。コンパイル毎に色まで変わる(ワイヤー部分です)。マテリアルは全く適用されず。。。

■miku.3dsを同様にMax3DSで読み込む
>>問題なく表示でき、マテリアルも適用できました。

■miku.3dsを.kmz形式に変換してKMZクラスで読込み
>> 単色べた塗りになってしまいました。

■色々な3dsファイルを試してみる
>> 貼れるものもあり単色に塗りつぶされる物もあり、、、


-------------------------------------------------------

という結果でした。
モデリング方法に種類があるのでしょうか。。。

それともう一つ質問したいのですが、それぞれの面に対してマテリアルの適用される順序のようなものはありますか?それとも一枚の画像でラッピングするような解釈でしょうか?


まだまだ3Dの理解が乏しいため意味不明な点はスルーしていただいて結構です^^;

宜しくお願いいたします。






ゲスト
Åê¹ÆNo.43971
投稿日時: 2009-11-19 5:27
Re: PaperVision3Dでマテリアルがうまく適用できません
返事が遅くなりすみません。
ブログのほうご覧頂いているとのこと、ありがとうございます!

引用:
投稿いただいた形でMax3DSクラスを使用してみました、CS4でパブリッシュするとなぜかMax3DSクラス内でエラーが出まくりました(未定義のプロパティ...)、cs3で試したら問題なく動作したのですがご経験おありでしょうか?

私の方でも確認してみましたが、Flash CS4 (10.0.2) / PV3D 2.1 (r920) のほうでエラーが発生せずパブリッシュできました。コンパイルエラーの原因として以下の項目が思い当たります。
・ライブラリファイルのパスが通っていない
・Max3DSクラスが古いものを使用している
・何かしらの原因で該当のクラスファイルの文字コード/改行コードが変更されている
…あまりアテにならない回答ですみません

3DSのインポートについて、モデリングソフトのほうでUVマッピングのほうを確認してみる必要がありそうかと思いました。(当方、モデリングソフトに詳しくなく、あまり助言できないのですが…)。


それと、Papervision3Dのリビジョン924(アーカイブで提供されているものよりも最新)で、Max3DSクラスのマテリアルの何かしらの問題が解消されているらしいです。
参考:Changes - Papervision3D Google Code

引用:
それともう一つ質問したいのですが、それぞれの面に対してマテリアルの適用される順序のようなものはありますか?それとも一枚の画像でラッピングするような解釈でしょうか?

適用されるマテリアルの順番は把握していないのですが、基本的にはデータの順番に基づいて初期化の際、テクスチャの処理が行われるのだと思われます(間違っていたらすみません。。)
kimukimura
Åê¹ÆNo.43985
投稿日時: 2009-11-20 14:56
新米
居住地: 三鷹市
投稿: 11
使用環境:
タイガーマック、WinXP、主にFlashDevelop + FlashCS3,CS4。Flex勉強中。
Re: PaperVision3Dでマテリアルがうまく適用できません
clockmakerさん

お忙しい中色々とご確認いただきありがとうございます!

引用:

私の方でも確認してみましたが、Flash CS4 (10.0.2) / PV3D 2.1 (r920) のほうでエラーが発生せずパブリッシュできました。コンパイルエラーの原因として以下の項目が思い当たります。
・ライブラリファイルのパスが通っていない
・Max3DSクラスが古いものを使用している
・何かしらの原因で該当のクラスファイルの文字コード/改行コードが変更されている
…あまりアテにならない回答ですみません


了解です、クラスパスの確認、Revision920をtrunkごとがっつりチェックアウト(方法合ってますよね?)、と試してみたのですが、、、引き続き原因を調べます!

引用:

3DSのインポートについて、モデリングソフトのほうでUVマッピングのほうを確認してみる必要がありそうかと思いました。(当方、モデリングソフトに詳しくなく、あまり助言できないのですが…)。


モデリングを担当されている方に確認をお願いしたところ、ご指摘の通りUVマッピングの設定がされていないことが原因でした。マテリアルの適用は成功したのですが、テクスチャとオブジェクトの比率が合っていなかったり、正確な表現にはまだまだほど遠いので試行錯誤してみます!

ここにきて次の壁にぶち当たりました。モデルを読み込み、さらに陰を付けていきたいのですがMax3DSクラスのMaterialsListにShadedMaterialを渡すとエラーが出てしまいます。PV3D側で作成したプリミティブオブジェクトには問題なく適用されるのですが。。。


/* ライト等は省略します*/

private function setModel(src:String):void
{
var texture:BitmapMaterial = new BitmapMaterial(new Bitmap(new Image(0,0)).bitmapData);

var shader:GouraudShader = new GouraudShader(_light, 0xFFFFFF, 0x000000, 20);
var shaded:ShadedMaterial = new ShadedMaterial(texture, shader);
_model = new Max3DS();
_model.load(src, new MaterialsList( { all: shaded} ));

_model.addEventListener(FileLoadEvent.LOAD_COMPLETE, function():void
{
_scene.addChild(_model);
_renderer.renderScene(_scene, _camera, _viewport);
});
}


----------------------------
/* _renderer.renderScene()でエラー

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at org.papervision3d.materials.shaders::ShadedMaterial/drawTriangle()
at org.papervision3d.core.render.command::RenderTriangle/render()
at org.papervision3d.render::BasicRenderEngine/doRender()
at org.papervision3d.render::BasicRenderEngine/renderScene()
at MethodInfo-1235()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at org.papervision3d.objects.parsers::Max3DS/parse()
at org.papervision3d.objects.parsers::Max3DS/onFileLoadComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()



---------------------
試してみたこと

Max3DSクラス同様、MaterialsListを渡すCubeクラスで試す
>> 問題なし

モデル読み込みでMaterialsListにテクスチャを渡す
>> 問題なし

モデル読み込みでMaterialsListにシェードマテリアルを渡す
>> エラー

最新のバージョンを試す
>> 変わらず

キューブに上記を試す
>> オールOK


----------------------------------------

ほんと、とほほな感じです ;;
できる限りでググってみたのですが英語で同様の問題に直面している(ように見えた)記事があったきりで事例も見つかりません。
http://osflash.org/pipermail/papervision3d_osflash.org/2008-June/022182.html

引き続き方法を模索しますが、もし解決策がありましたら教えていただければ幸いです。

ありがとうございました!
kimukimura
Åê¹ÆNo.44091
投稿日時: 2009-12-8 10:37
新米
居住地: 三鷹市
投稿: 11
使用環境:
タイガーマック、WinXP、主にFlashDevelop + FlashCS3,CS4。Flex勉強中。
Re: PaperVision3Dでマテリアルがうまく適用できません
先日の投稿ですが自己解決しました、もしかしたら適切な方法が別にあるかもしれませんがMax3DSにShadedMaterialを適用できた方法を記載しておきます。


-----------------------------------------------------------

private function setModel(src:String):void
{
var texture:BitmapMaterial = new BitmapMaterial(new Bitmap(new Image(0,0)).bitmapData);

var shader:GouraudShader = new GouraudShader(_light, 0xFFFFFF, 0x000000, 20);
var shaded:ShadedMaterial = new ShadedMaterial(texture, shader);
_model = new Max3DS();


/**
* ここでShadedMaterialを当てるとエラー
**/
_model.load(src, new MaterialsList( { all: texture} ));

_model.addEventListener(FileLoadEvent.LOAD_COMPLETE, function():void
{

/**
* このタイミングでShadedMaterialを差し替えるとOK。
**/
_model.replaceMaterialByName({shaded,"all"})

_scene.addChild(_model);
_renderer.renderScene(_scene, _camera, _viewport);
});
}

---------------------------------------------------------

べた塗りになった現象はモデリング書き出し時のUVアンラップ加工が必要だったということ、モデルが消えてしまった現象は裏表がひっくり返った状態で更にoneSideプロパティがfalseになっていたこと、などなど。

ちなみにパフォーマンスのためポリゴン数を落としたら黒ベタの陰(たぶんシェード)が少し目立ちました、これはShadedMaterialのcompositeModeを1に設定したら見違えるほどきれいになりました(そのかわり重くなりますが)

モデリングを扱うなら必要最低限なモデリング知識は必要だなと痛感しました。。。


ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops