2014年05月24日

立体

とりあえずアンケートやってます。アンケート終了しました。ご協力ありがとうございました。
ニコニ立体でのPMX利用についてのアンケート

サービス公開前に一度問い合わせがありましたが、詳細もよくわかりませんでしたので(判断を求められても判断のしようがない)

「実際にサービス始まってからユーザーさんの反応次第で」

みたいな感じで保留しておきました。別にPMX必須というわけでもないでしょうからね。


個人的には 3DCGARTS あたりで既に行われているサービスと類似のもの(モデルを見回す程度)であるなら、わざわざ特殊な稼動用データが含まれた PMDや PMXを直接的に利用する意味は薄いと考えます。

※MMDを想定した環境に最適化されたデータを Web上において整合させるのも色々面倒であり、また制約事項も多くなってしまいます。異なる用途/環境に対してはそれらに最適な形式で、というのは前々から述べていることの繰り返しです。

そういったことから積極的に協力する理由は特にありません。

といっても無理に制限をしなければならないような話でもありませんので、後はユーザーの判断次第という方針になりました。

まあ MMD周辺を UGC的な捕らえ方をされる人も多い気がしますので、「ユーザーに大きく関わることはユーザーが決める」みたいな感じで丁度よいのではないかと思います。

甚だテキトーな対応ですが、商用、非商用に関わらず自分が興味のないことに関しては基本的にこんなもんです(そもそも PMXを企業が利用することなど最初から考えていませんし、商用に耐えうるようなものではありません)

※アンケートについてはこちらのブログ上で行うこともできないわけではありませんが、
・ニコニコでのサービスに関してはニコニコ内で
・個人証明が簡易(こっちでは騙りし放題)
といったあたりを考慮してブロマガをお借りしております(製作者アカは既にプレアカではないので自分のとこではできません)


一応 3Dモデルをサイト上で表示するようなことは WebGLを使って私的に遊んでいたりもしますが、現状では「個人サイトでの取り扱いもそれなりに簡単になれば、将来的にそういう機能セットを用意していくのもいいかな?」みたいに考えている程度です。

当然ながらその際は直接 PMXとしてデータを扱うのではなく、Web上での取り扱いにより適した別の形式へ変換し編集することになるでしょう。

ただ、WebGLなど(素の)クライアント単体での利用ではキャッシュやソースから関連データを拾うこともさして難しいことではありませんので、画像データのように単に「サイト上に表示したいだけ」といった場合でも、公開データの利用では再配布事項に引っ掛かってしまう懸念もあります。

※ニコニ立体ではそれらの問題に対して暗号化により対応されているとお話を聞いております。

モデルに限らずあらゆるデータを製作、配布されているユーザーさん方の心情と、そのあたりの実情を摺り合わせていくのはなかなかに容易なことではありませんが、配慮のない一方的なやり方がうまくいかないのは過去の事例を見れば明らかでしょう。

特に MMD周辺のような「不特定多数のユーザーの間接的な協力があって初めて一つの形になるような場」では尚更です。


さて冒頭に戻って今回の主題となっているサービスについて、ここまでの内容では(自分が意図せずとも)「否定的なバイアスをかけている」という穿った見方をされる方もいるかもしれませんので、一つ違った視点での内容を書いておこうかと思います。

現在 PMXモデルなど MMD関係の多くのデータは BowlRoll に集中している状況です。ご存知の通り BowlRoll は個人サイトであり、その運用にかかる資金などでも大変な負担をされています。

全てのデータを移管する必要はありませんが、企業が責任を持ってデータ管理をしてくれるというなら、それをうまく活用して適切に負荷軽減/分散していくのも一つの選択でしょう(ただし規約等にはご注意ください)

そういった考え方もあるといったことなどを考慮して、多角的に判断して頂ければと思います。

以上

posted by - at 21:59| PMX | 更新情報をチェックする

2014年03月29日

0222

■更新内容
・<readme>タグによるテキスト表示
・コメントタグ編集
・CSScriptプラグイン更新(Cプラグイン対応/サンプル更新)
・不具合修正

以上


うちのリドミや規約に対する認識は以前書いた通りですが、世の中には「どうしても読ませたい」「読まれなくてはならない」というように考えられる方も一部いらっしゃるようなので、多少の対応をしてみました。

※アーカイバなどいくつかのケースにおいて何度も同じような問題でループしているように見えますが、解決策が模索できないのは 「モデルデータ本体と規約などが書かれた文書データが直接紐付いていない」 ことが一因だからでしょう。

機能としては、コメント(英)側に <readme>readme.txt</readme> などと記述しておけばオープン時にテキスト表示されるようになっています。

テキストファイル以外でもシェル(OS側)でオープン可能なファイルを開くことはできますが、各種スクリプトやネット経由による不正処理なども可能なので、利用者側において注意してください。またこの仕様は PMDファイルにも適用されています。

当然ながらこの動作仕様はうちが勝手にやっていることなので、他の PMD/PMX対応ツールにおいても同様に対応される保障はありませんし、また対応しなければならないものでもありません。

あくまでモデル側の意思表示として設けている程度のものだということを忘れないで下さい。


タグ追加に合わせて、任意のタグでの編集が可能な機能を追加しておきました。

本体メニュー [編集]-[タグ編集] から編集窓が表示されます。至って簡単な機能なので説明は特に不要かと思われます。

同仕様においてフォーマット上記述できないデータなどをフォーマット利用側が任意に拡張することも一応可能です。

※タグ機能は元々エフェクト関係で材質メモに似たような拡張仕様を設けることを考えていた名残の機能だったりします(<effect>**.fx</effect> とか)


あと前ver修正版で入っていましたが、CSScriptプラグインがいくつか更新されています。随分放置していましたがやっと PMX用のサンプルが追加されました。


以上、特にバージョン番号に触れることはない更新でした。

posted by - at 23:12| PMX | 更新情報をチェックする

2014年02月26日

プラグインデバッグ

プラグイン作成でのデバッグ利用について簡単に紹介します。

まず以下の説明では Visual Studio Express 2013 for Windows Desktop を使います。

※無料版(ExpressEdition)の古いバージョン(VC#2010とか)だと、説明中のプロセスアタッチ機能が使えない場合があるのでご注意ください。


最初にプラグイン作成の雛形まで作ります。

1. 新規プロジェクトから C#のクラスライブラリを選択
2. プロジェクトのプロパティからフレームワークを ".NET Framework 4" へ変更
3. 参照設定から PMXエディタ内(Libフォルダ以下)の "PEPlugin.dll" と "SlimDX.dll" を追加

これで最低限の雛形ができました。

※SlimDXのプロパティ "特定バージョン" が "False" になっていないと、公開プラグインでは面倒が出るかもしれません。


では実際に以下のプラグインを使って確認してみましょう(Class1.cs に全貼り付けでOK)。内容としては モデル名をメッセージ表示するだけの簡単なものです。

※参照設定から "System.Windows.Forms" を追加しておきましょう。
using System;
using System.Windows.Forms;
using PEPlugin;

namespace PluginTest
{
public class Class1 : PEPluginClass
{
public override void Run(IPERunArgs args)
{
base.Run(args);
try {
var pmx = args.Host.Connector.Pmx.GetCurrentState();
MessageBox.Show(pmx.ModelInfo.ModelName);
}
catch (Exception ex) {
System.Diagnostics.Debug.Assert(false, ex.Message);
}
}
}
}

通常、PMXエディタのプラグインは "_plugin"フォルダ以下に DLLファイルを配置して使いますが、一々コピーして起動していては面倒なので、プラグインの外部実行機能を利用します。

本体メニュー [編集]-[プラグインDLLの直接実行] から以下の操作窓が表示できるので、

0027.jpg

この窓に作成されたプラグインの DLLファイル(bin/Debug/****.dll) をドロップしてやれば、そのままプラグインとして実行することができます。

あとはコード側から起動中の PMXエディタにプロセスアタッチすることで、デバッグ機能を使ったプラグインの確認ができるようになります。

※ブレークポイントやステップ実行の方法などは、既にあちらこちらで説明されているのでここでは省略します。

0028.jpg


で、デバッグを終了しソース編集に戻ってリビルドし直してみましょう。

0029.jpg

こんな感じでエラーになってしまったと思います。従来のプラグインでは一度本体側に取り込まれたプラグインは切り離すことができないため、このようなエラーが出てしまいます。解決するには PMXエディタ自体を再起動する必要があります。

簡単な内容のプラグインなら一々再起動して対応できないこともないでしょうが、色々手間なことには違いありません。まして規模が大きくなったり、前提条件を一々設定し直さなければならない場合などは尚更です。


ということで、今回作成した Cプラグインの出番となります。PMXエディタは一旦終了して再起動しておいてください。

まずコードを貼ってしまいましょう。
using System;
using PXCPlugin;
using PEPlugin.Pmx;
using PEPlugin.SDX;

namespace PXCPlugin
{
public class Register : RegisterBase
{
public override string[] ClassNames
{
get
{
return new string[]{
"CPluginTest.Class1"
};
}
}
}
}

namespace CPluginTest
{
public class Class1 : PXCPluginClass
{
public override void Run(IPXCPluginRunArgs args)
{
base.Run(args);
try {
// PMX取得
IPXPmx pmx = PXCBridge.GetCurrentPmx(args.Connector);
IPXMaterial m = null;
if (pmx.Material.Count < 1) {
// 材質追加
m = m_bld.Material();
V3 col = new V3(1, 0, 1);
m.Diffuse = new V4(col, 1);
m.Ambient = col;
m.Toon = "toon01.bmp";
m.Shadow = true;
pmx.Material.Add(m);
}
else {
m = pmx.Material[0];
}

V3.SetRandSeed((int)DateTime.Now.Ticks);
V3 pos = V3.Rand(new V3(-20, 0, -20), new V3(20, 20, 20));
float r = V3.Rand(1, 3).X;

// ボーン(物理用)
var bone = m_bld.Bone();
bone.Position = pos;
bone.IsTranslation = true;
pmx.Bone.Add(bone);

// 球追加
PXCBridge.PrimitiveBuilder.AddSphere(pmx, 0, pos, r, 12, 8, bone);

// 同サイズの剛体追加
var body = m_bld.Body();
body.Bone = bone;
body.BoxKind = PEPlugin.Pmd.BodyBoxKind.Sphere;
body.BoxSize = new V3(r, 0, 0);
body.Position = pos;
body.Mode = PEPlugin.Pmd.BodyMode.Dynamic;
body.Restitution = 1;
body.PositionDamping = 0;
body.RotationDamping = 0;
pmx.Body.Add(body);

// PMX更新
PXCBridge.UpdatePmx(args.Connector, pmx);
}
catch (Exception ex) {
System.Diagnostics.Debug.Assert(false, ex.Message);
}
}
}
}

先のプラグインと同じように雛形から Class1.cs に全貼り付けで OKです。

あまり簡素な内容でもつまらないので、ちょっと長くなっていますが、何をやっているかは実行してみればすぐに解ると思います。

アタッチするのは後回しにして、ビルド後に DLLをプラグイン実行窓へドロップしてみましょう。先ほどとは異なり右側の "破棄" ボタンが使えるようになっています。

0030.jpg

試しに実行してみるとこんな感じになります(何度か実行処理を繰り返しています)

0031.jpg

※今回の主題とは特に関係ありませんが、TransformViewで物理演算の確認をしてみれば、プラグインの内容も見えてくるかと思います。

動作確認もできたので、一度プラグインを実行窓から破棄してみましょう。破棄ボタンを押すだけです。

破棄後、ソース編集側へ戻りリビルドしてみると、(従来プラグインではエラーになりましたが) Cプラグインでは問題なくビルドが完了したと思います。

※破棄したプラグインDLLは同じボタンでリロードが可能なので、修正後の再実行も簡単に行えます。

後は先ほどと同じようにプロセスアタッチを併用すれば、デバッグ機能を使いながら効率よくプラグインの編集、作成ができるというわけです。


ちなみにプロセスアタッチの作業も通常の方法([ツール]-[プロセスにアタッチ])ではテスト毎に一々プロセス選択が必要だったりと ちと面倒なので、これももっと簡単な方法にしてしまいましょう。

まずプラグインのソリューションに既存プロジェクトを追加。追加するファイルに "PmxEditor.exe" を指定します。

※プロジェクトファイルじゃないのに大丈夫なの?と最初思われるかもしれませんが、論より証拠。とりあえずやってみましょう。

PMXエディタがソリューション内に取り込まれたはずなので、あとは

・PmxEditor をスタートアッププロジェクトへ変更
・PmxEditor のプロパティを表示し、アタッチを "はい" へ変更

とすれば OKです。

0032.jpg

0033.jpg

これで通常のデバッグと同様に F5 で自動的にアタッチするようになります。

※DLL側のビルドは手動(F7など)で行う必要があるようです(依存関係は作れないっぽい?)

本体側の破棄/リロードは必要ですが、プラグインDLLを一般的な実行可能アプリのような感覚で作成することができるようになるかと思われます。

従来のプラグインをある程度の規模で作成されたことのある方は、デバッグやテストに関してその面倒さに辟易されたと思いますが、新しい環境では非常に楽ができるようになりました。


以上、少々・・・と言うにはかなり無理がある分量になってしまいましたが、プラグイン作成でのデバッグ利用についての紹介でした。

posted by - at 00:33| PMX | 更新情報をチェックする