2010年12月28日火曜日

BlenderでMikuMikuDance(MMD for pmd形式)の読み込み ボーン編③

今回は2.5版の読み込みを行いました。
以前に比べてまともに表示できるようになりました。


まだ完成はしていませんが、
ボーンが読み込めるインポーターを2.49版、2.5版ともにBeta版として公開してます。

ボーンの親子関係は全てオフセット、2.5版はIKボーンの設定を行っておりません。

2.49 Beta版 http://pr0jectze10.tuzigiri.com/simpleVC_20101031221332.html
2.5 Beta版 http://pr0jectze10.tuzigiri.com/simpleVC_20101031222442.html

おそらく今回がことし最後の更新になると思います。
開発は年が明けてからまた再開する予定です。

Blender用メタセコイアインポーター/エクスポーターの更新【オプション機能追加】

今回は入出力時のオプション機能の修正と追加を行いました。

以前より使い勝手が良くなったと勝手に思ってます。

スクリプト名 更新・修正内容 前回更新
Blender2.49対応メタセコイア入出力スクリプト
(インポーター/エクスポーター)
・インポーターにマテリアル毎オブジェクト分割選択機能を追加

・エクスポーターにマテリアルのシェーダー選択機能を追加
2010/12/23
Blender2.5対応メタセコイア入出力スクリプト
(インポーター/エクスポーター)

・エクスポーターにマテリアルのシェーダー選択機能を追加
2010/12/23

さて、年内にMMDのボーン対応終わるだろうか?

2010年12月23日木曜日

Blender2.5用メタセコイアインポーター/エクスポーターの更新【バグ修正】

前の記事で書いた、マテリアル増加バグがコチラにも起こっていたので修正しました。

こちらからダウンロードできますので更新お願いします。

ちなみに、前バージョンからオブジェクト名・マテリアル名の日本語化には対応してるみたいです。

Blender2.49用メタセコイアインポーター/エクスポーターの更新【バグ修正&日本語化】

5時間程格闘してました。眠いです。

さて、今回の更新・修正内容は以下の通りです。

スクリプト名 更新・修正内容 前回更新
Blender2.49対応メタセコイア入出力スクリプト

(インポーター/エクスポーター)
・オブジェクト名・マテリアル名の日本語化対応

・MQO側でマテリアルを作成してない場合にマテリアルが増加するバグを修正

・面データが重複した際にUV座標がおかしくなるバグを修正
2010/12/20

日本語化は全てのスクリプトに導入する予定です。

さて、寝るか・・・

2010年12月22日水曜日

BlenderでMikuMikuDance(MMD for pmd形式)の読み込み ボーン編②

前回からの続き

一旦開発ターゲットをBlender2.49に戻してMMDからボーンを読み込ませることにしました。

今回は追加するボーンをMikuMikuDanceで「ボーン・フレーム操作」に表示される
ボーンと、その親だけをアーマチュアとして読み込ませました。

結果は以下の通りです。



形はどうにかなった感じです。
あとはIKボーンの導入と頂点ウェイトの設定さえ出来れば完成しそうです。

完成しだい2.49版、2.5版をリリースする予定です。
でも表情スキンとかどうやってBlenderに読み込ませればいいのだろう?

追記:
ボーンが読み込めるインポーターを2.49版だけBeta版として公開してます。
http://pr0jectze10.tuzigiri.com/simpleVC_20101031221332.html

2010年12月21日火曜日

BlenderでMikuMikuDance(MMD for pmd形式)の読み込み ボーン編①

以前作ったMMDインポーターにボーン読み込みを追加させました。

といっても、読み込み自体は以前の状態で既に出来ていて
Blenderにボーンデータを渡す部分だけ作っていなかったのですが

とりあえず表示・非表示等を全く気にせずに追加してみました。


・・・・なにこのカオス

非表示ボーンを出さないようにすればまともになるかな?
まだまだ改良が必要だ。

ちなみにコレがボーンなしの状態。

2010年12月20日月曜日

Blenderスクリプトの更新のお知らせ

久しぶりの更新です。久しぶりなので、一気に4つのスクリプトを更新したよ。

更新内容は以下の通りです。
スクリプト名を押すとダウンロードページへ移動します。
こちらからも移動可能です。

スクリプト名 更新・修正内容 前回更新
Blender2.49対応メタセコイア入出力スクリプト
(インポーター/エクスポーター)
・出力データのマテリアルが暗くなるバグを修正
・出力ファイルのデータサイズを減量
2010/11/09
Blender2.5対応メタセコイア入出力スクリプト
(インポーター/エクスポーター)
・スケール値変更及びY-Z軸変換機能を追加
・出力ファイルのデータサイズを減量
2010/11/09
Blender2.49対応
MikuMikuDance(MMD)インポーター
・モデルデータが左右反転するバグを修正 2010/11/05
Blender2.5対応
MikuMikuDance(MMD)インポーター
・モデルデータが左右反転するバグを修正 2010/11/05

これからも随時更新していく予定です。

もし不具合等を発見した方は、
恐れ入りますがコメント又はメールフォームにてお知らせ下さい。

また、追加してほしい機能等があれば私の知識・技術が及ぶ範囲のものなら
作成しますのでヨロシク(正直ネタが思いつかない・・・)。

追記:
そろそろMMDインポーターにアニメーション読み込みを導入すべきか・・・

開発倉庫 http://pr0jectze10.tuzigiri.com/
今までの更新履歴http://pr0jectze10.tuzigiri.com/simpleVC_20101220191415.html

2010年11月17日水曜日

Androidでスキンメッシュアニメーション【Collada版】 とりあえず完成!

遂に完成しました。長かった~(ノ△T)

テスト用に作成したColladaファイルをオリジナルバイナリファイルに変換して描画したものです。

本当は実行画面を動画キャプチャしたかったけど、カクカクになっちゃうので1フレームずつイメージキャプチャしてパラパラアニメ風にしました(本当はswf形式でアップロードしたかった・・・)。

箱を移動・回転させるだけの簡単なアニメーションです。形状を変形させるアニメーションをさせればよかったのですが、今回はさせていません。

結局、ここまでやるのに2ヶ月ほど掛かってしまいました。
予想以上のタイムロスです。

まあファイルからデータの抽出を行うのは早い段階で完成してたのですが、
その後のボーンとアニメーションデータの組み合わせ方に時間が掛かってしまいました。

色々あったな~

ただ、ボーン数やボーンの影響度数に制限があるようなので、その制限を越えるデータにどのように対応させるかが今後の課題になりそうです。

最大数の取得方法
int[] params = new int[2];

gl.glGetIntegerv(GL11Ext.GL_MAX_PALETTE_MATRICES_OES, params, 0);
gl.glGetIntegerv(GL11Ext.GL_MAX_VERTEX_UNITS_OES, params, 1);

>> params[0] // GL_MAX_PALETTE_MATRICES_OES 一度の描画で使用できるボーンの最大数
>> params[1] // GL_MAX_VERTEX_UNITS_OES 一頂点に割り当てられるボーンの最大数

IS01で確認したところ、GL_MAX_PALETTE_MATRICES_OES = 20、GL_MAX_VERTEX_UNITS_OES = 4でした。
思ったよりボーン数が少なかったです。

次からはこの制限を越えるデータを描画できるように一工夫入れようと思っています。

----------------------------------作業を行う過程でわかったこと----------------------------------

①Android SDK 1.6はスキンメッシュアニメーションのサポートを行っていない
    ・JavaでMatrixPaletteが使えない
    ・ハードウェアはサポートしているがJavaのライブラリが対応してない
    ・実際に使用すると例外「UnsupportedOperationException」が発生

    解決策
    ・Android NDKを導入してスキンメッシュのコードをC/C++で組む(Native化)

②Colladaのボーンオフセット行列の求め方(コレに気付くまでに2週間かかった・・・)
    ・ボーンオフセット行列はボーンの初期姿勢行列(ベースポーズ)を
     逆行列化したもの(これも今更だな・・・学生時代習ったはずなのに)

    ・Colladaの場合、INV_BIND_MATRIXの転置行列?

テストで使用したColladaファイルのスキン情報

    
      
        1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
        
          Armature_Bone Armature_Bone_001
          
            
              
          
        
        
          1 0 0 0 0 -1 -6.30567e-7 0 0 6.30567e-7 -1 0 0 0 0 1 1 0 0 0 0 -0.999957084655 0.009265959262 -1.392618 0 -0.009265959262 -0.999957025051 -0.012905418872 0 0 0 1
          
            
              
          
        
        
          0.999999642372 0.999999701976 0.999999761581 0.999999761581 0.999999761581 0.999999761581 0.999999821186 0.999999940395 0.99999988079 1 1 1 0.99999988079 0.999999940395 1 0.99999988079
          
            
              
          
        
        
          
          
        
        
          
          
          1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
          1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15
        
      
    
  

関連項目
Android NDK
転置行列

2010年11月15日月曜日

AndroidでColladaファイルの読み込み

ColladaファイルをAndroidで表示するプログラムを作ってた
Colladaを知らない方はコチラ

といっても私この作業を2ヶ月前からやっておりまして、 形状だけは大丈夫なのですがアニメーション部分の実装に苦戦し最近になってようやくそれっぽいものが描画できるようになり、もうすぐ完成しそうです。

でもやはりAndroid、組み込み用のOpenGL「OpenGL ES」を使ってるので色々と制限があって不便なものです。

例えば一度に描画できるポリゴン数は65535個までだったり、
一頂点に対して影響するボーンの個数(BONE_INDICES:普通は多くても4つまで?)が少なかったりと色々と制限が決まってます。

なのでその制限内に収まるようなデータを用意しなければならないのですが、コレがまためんどくさい!

Blenderで人型のモデルにボーンを入れるとBONE_INDICESが軽く4を超えるんですよね~おかしなことに。
以前手に入れたフリーのモデルデータはBONE_INDICESが11個もあって目を疑ったモンです。

しょうがないから四角形にボーンをひとつ入れてアニメーションさせてるのですが、やっぱりこういうのは人型を動かさないと意味がないように思えます。

自分で作れたらいいんだけどそんな技術は持ち合わせてない!
どこかにボーン数と影響数が手頃なColladaファイルはないだろうか・・・?

2010年11月9日火曜日

Blender用メタセコイアエクスポーターの更新

久しぶりの更新。

出力の際、マテリアルの頂点色が無視されていたので反映されるように修正を行いました。

旧バージョンをもっている方がいれば、更新をお願いします。

2010年11月6日土曜日

AndroidでMikuMikuDanceの読み込み③

高速化を図るために、やたらとたくさん存在するマテリアルの重複チェックを実施。
案の定同じマテリアルが幾つか見つかった。

で、重複したマテリアルを省いてみたところ、以前よりかなり高速に描画できるようになった。


18~23FPSしかでなかった「てゐ.pmd」をこの作業で30FPSで描画することに成功した。

只このデータは今持っているpmdファイルの中で一番ポリゴン数が少ないもので、他のファイルを描画すると20~24FPS程に落ちてしまうらしい。

まだまだ改良が必要なようだが、やはりAndroidでゲームを作るならpmdはやめておいた方がよさそうだ。

あとパネルをタッチすることでモデルを任意軸で回転できるようになった。
実装は結構簡単だった。以下のような感じである。
import android.opengl.Matrix;
import net.npaka.androidopengl.math.MathHelper;
import net.npaka.androidopengl.math.MatrixHelper;
import net.npaka.androidopengl.math.Vector2;

/**
 * OpenGLサーフェイスクラス
 * 
 * @author hamada
 */
public class OpenGLSurface extends GLSurfaceView {
 Vector2 axis, pos, old;
 float rot = 0;
 float[] m;
 boolean enable;

 /**
  * コンストラクタ
  * 
  * @param context
  */
 public OpenGLSurface(Context context) {
  super(context);
  setRenderer(new OpenGLRenderer(context));
  
  axis = new Vector2();
  pos = new Vector2();
  old = new Vector2();
  m = MatrixHelper.identity();
 }
 
 /**
  * 画面タッチイベント
  */
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  switch(event.getAction()) {  
  // 移動イベント
  case MotionEvent.ACTION_MOVE:
   enable = false;

   // クリックした場所の座標を取得
   pos.X = event.getX();
   pos.Y = event.getY();
   
   // 以前の座標間のベクトル
   float tx = axis.X = pos.X - old.X;
   float ty = axis.Y = pos.Y - old.Y;
   
   // Z軸で90度回転
   float rad = MathHelper.toRadian(90);
   float cos = (float) Math.cos(rad);
   float sin = (float) Math.sin(rad);
   axis.X = cos * tx - sin * ty;
   axis.Y = sin * tx + cos * ty;

   // 移動量の算出
   float speed = axis.X * axis.X + axis.Y * axis.Y;
   
   // 移動したか判断(以前と同じ座標なら更新はしない)
   if(speed != 0) {
    rot = speed = (float) Math.sqrt(speed);

    // ベクトルの正規化
    speed = 1 / speed; // 乗算用
    axis.X *= -speed;
    axis.Y *= speed;
   }
   
   createMatrix(); // 行列の更新
   old.copy(pos); // 座標の更新
   break;
  
  // 押下イベント
  case MotionEvent.ACTION_DOWN:
   old.X = event.getX();
   old.Y = event.getY();
   break;
  
  // 押上イベント
  case MotionEvent.ACTION_UP:
   enable = true;
   break;
  }
  
  return true;
 }
 
 /**
  * 行列取得
  * @return
  */
 public float[] getMatrix() {
  float[] result = MatrixHelper.identity();
  
  // 値だけコピーする
  for(int i = 0; i < result.length; i++) {
   result[i] = m[i];
  }
  
  return result;
 }
 
 /**
  * 行列初期化
  */
 public void identityMatrix() {
  m = MatrixHelper.identity(); // 単位行列の取得
  enable = false;
 }
 
 /**
  * 回転減速
  */
 public void slow() {
  // 画面がタッチされていなく、回転量が残ってる場合
  if(enable && rot > 0) {
   rot -= 5; // 徐々に回転量を減らす
   
   // 停止
   if(rot <= 0) {
    rot = 0;
    enable = false;
   }
   
   createMatrix();
  }
 }
 
 /**
  * 行列作成
  */
 void createMatrix() {
  float[] m1 = MatrixHelper.identity();
  
  // 行列の合成
  Matrix.rotateM(m1, 0, rot, axis.X, axis.Y, 0);
  Matrix.multiplyMM(m, 0, m1, 0, m, 0);
 }

2010年11月5日金曜日

Blender2.55の公開

Blender2.55が公開されたようです。

早速zip版をダウンロードして開発したスクリプトを導入してみましたが、特に問題なく動作しました。

ちなみにBlender2,55では、2.54で発生していたバグを340個ほど修正しているらしいです。

Blender2.54に未練がないなら2.55に更新した方がいいでしょうね。

既にスクリプトをお持ちの方も、2.55でも動作できるので安心して更新してください。

Blenderの公式サイト
http://blender.jp/

Blender2.55のダウンロード先
http://www.blender.org/download/get-254-beta/

Blender2.49用メタセコイアインポーター/エクスポーターの更新【Y-Z軸変換導入】

タイトルの通りです。メタセコイアの入出力時にアッパーベクトルのY-Z軸変換ができるようになりました。

この機能は後ほどpmdインポーターにも組み込む予定です。

Blender2.54用メタセコイアインポーター/エクスポーターにも組み込む予定ですが、こちらは私がBlender2.5でのオプションメニューの表示方法を知らないのでそれが出来るようになれば導入する予定です。

追記:2010/11/05 18:12
Blender2.49用pmdインポーターを更新しました。

2010年11月4日木曜日

Blender2.54用のインポーター/エクスポーターについて

すみません。報告が多かったのでここで書かせてもらいます。

まずスクリプトファイルの格納場所なのですが、コレはインストーラー版・zip版によって変わるようです。

インストーラー版の場合、インストールの際に選択したユーザーデータの格納先フォルダの中にscriptsフォルダがあります。

zip版の場合、解凍したフォルダ内の「2.5x」内にscriptsフォルダがあります。

それと11/1に更新したデータなのですが、ソースファイルではなくコンパイル済みのデータをあげていたのですが、このデータでもBlenderに認識されるはずなのですが認識されない方がいるようなのであらためてソースファイルに修正しておきました。

認識されない方は、是非そちらの方を使用してみてください。

2010年11月2日火曜日

AndroidでMikuMikuDanceの読み込み②

先日行ったMMDのバイナリ変換。

PC上で変換してるのにやけに処理が重いな~とか変換後のファイルサイズが膨大になっておかしいな~とか首を傾げてたんですけど、今日調べてみたところ書き込みの際にデータが重複してることが発覚しました。

データを除いてみると1つしかないはずの頂点バッファがマテリアルと同じ数だけ存在していることがわかりました・・・(笑)。

どうやらMeshクラスに読み込んだマテリアルの登録と同時に頂点バッファも登録してたようです。

道理でマテリアルと同じ数だけ存在するわけだ・・・

そこを修正したら読み込み速度向上しました。


ファイルサイズも.pmdと時より半分の要領になりました。
まあボーンや表情データを保存してないから当然なんですけどね

そしてFPSが低かった理由もわかりました。
/**
 * バーテックスバッファクラス
*/
public class VertexBuffer {
    FloatBuffer coords; // 座標(3 * 頂点数)
    FloatBuffer texcoords; // UV(2 * 頂点数)
}

/**
 * インデックスバッファクラス
*/
public class IndexBuffer {
    ShortBuffer faces; // インデックス
    int vertices_index; // 頂点バッファ配列の添字
}

/**
 * マテリアルクラス
*/
public class Material {
    float[] diffuse; // 拡散光
    float[] ambient; // 環境光
    float[] emissive; // 放射光
    float[] specular; // 反射光
    float power; // 反射係数
    float alpha; // 透明度
    String name; // マテリアル名
    Bitmap texture; // テクスチャ
}

/**
 * メッシュパーツクラス
*/
public class MeshParts {
    Material material; // マテリアル
    IndexBuffer[] indices; // インデックスバッファ
}

/**
 * メッシュクラス
*/
public class Mesh {
    MeshParts[] parts; // メッシュパーツ
    VertexBuffer[] vertices; // 頂点バッファ

    /**
     * メッシュの描画
    */
    public void draw() {
        for(MeshParts meshParts : parts) {
                Material material = meshParts.material;

                // -----マテリアルの設定-----
                // -----頂点バッファとインデックスバッファの取得
                for(IndexBuffer index : meshParts.indices) {
                    VertexBuffer vertex = vertices[index.vertices_index];

                    // -----バッファの設定-----
                    // -----描画-----
                }
            }
        }
    }
}
上記のように、マテリアルをベースにループさせて描画を行っているのですが、調べてみると使っているファイルのマテリアル数が18個もあることがわかりました。

1フレームに10,000ポリゴンを超えるデータを18回も描画したらそりゃ遅くなりますよね。

とりあえずマテリアルやテクスチャの重複を調べて描画のループを減らすなどの作業が必要なようです。

まだまだ改善の見込みがあるようですね。

2010年11月1日月曜日

AndroidでMikuMikuDanceの読み込み①

とりあえず形状とマテリアルの読み込みが終わりました。


ただ読み込み速度及び FPSが遅いです。いつものようにオリジナルのバイナリ形式に変換したのですが、ファイルサイズを見てみると元データよりファイルサイズが大きい・・・

これならpmdをそのまま読み込んだ方が早そうです。

ビューワーとしては使えそうですけど、ゲームとしてはあまり使えそうにないですね。

あとプログラムを組んでて、byte型の数値・少数値変換に苦戦しました。

例えばバイナリファイルからfloat型を読み込む場合
buf = new DataInputStream(getAssets().open(fileName));
float num = buf.readFloat();
のようにやっていたのですが、今回のMMDではなぜだかうまくいかない。
数値がバグった状態でしか出てきませんでした。

そこで、byte配列を自分で数値に変換するコードを作成しました。
public class ByteConvert {
    static final int INT_SIZE = Integer.SIZE / 8; // int型のバイト数(4バイト)
    static final int FLOAT_SIZE = Float.SIZE / 8; // float型のバイト数(4バイト)
    static final int SHORT_SIZE = Short.SIZE / 8; // short型のバイト数(2バイト)

    /**
     * コンストラクタ(インスタンス化禁止)
     */
    ByteConvert() { }

    /**
     * バイナリファイルからshort型を読み込む
     * @param buf
     * @return 変換した数値
     * @throws IOException
     */
    public static short readShort(DataInputStream buf) throws IOException {
        byte[] value = new byte[SHORT_SIZE];

        // ストリームから2バイト読み込み
        buf.read(value);

        // byte配列をshort型に変換
        return (short) byteToNumber(value);
    }

    /**
     * バイナリファイルからint型を読み込む
     * @param buf
     * @return 変換した数値
     * @throws IOException
     */
    public static short readInt(DataInputStream buf) throws IOException {
        byte[] value = new byte[INT_SIZE];

        // ストリームから4バイト読み込み
        buf.read(value);

        // byte配列をint型に変換
        return byteToNumber(value);
    }

    /**
     * バイナリファイルからfloat型を読み込む
     * @param buf 入力バッファ
     * @return 読み込んだ数値
     * @throws IOException
     */
    public static float readFloat(DataInputStream buf) throws IOException {
        byte[] value = new byte[FLOAT_SIZE];

        // ストリームから4バイト読み込み
        buf.read(value);
  
        // byte配列をint型に変換後、float型に変換
        return Float.intBitsToFloat(byteToNumber(value));
    }

    /**
     * byte配列の数値変換
     * @param buf
     * @return 変換した数値
     */
    public static int byteToNumber(byte[] buf) {
        int num = 0;

        if(buf != null && buf.length > 0) {
            for(int i = buf.length - 1; i >= 0; i--) {
                num = (buf[i] & 0xff) | (num << 8);
            }
        }

        return num;
    }
}
これでうまく読み込めるようになりました。
from struct import *

def ReadWORD(fp):
 return BinaryToWORD(fp.read(2))

def ReadWORDArray(fp, count):
 values = []
 
 for i in range(count):
  values.append(ReadWORD(fp))
 return values

def ReadDWORD(fp):
 return BinaryToDWORD(fp.read(4))

def ReadDWORDArray(fp, count):
 values = []
 
 for i in range(count):
  values.append(ReadDWORD(fp))
 return values

def ReadByte(fp):
 return BinaryToByte(fp.read(1))

def ReadByteArray(fp, count):
 values = []
 
 for i in range(count):
  values.append(ReadByte(fp))
 return values

def ReadFloat(fp):
 return BinaryToFloat(fp.read(4))

def ReadFloatArray(fp, count):
 values = []
 
 for i in range(count):
  values.append(ReadFloat(fp))
 return values

def BinaryToByte(txt):
 return unpack('B', txt)[0]

def BinaryToDWORD(txt):
 return unpack('L', txt)[0]

def BinaryToWORD(txt):
 return unpack('H', txt)[0]

def BinaryToFloat(txt):
 return unpack('f', txt)[0]
pythonでのバイナリデータ読み込みです。コメント一切ないですね・・・

Blender2.49及び2.54のメタセコイアエクスポーターの不具合

すみません。メタセコイアエクスポーターのバグを発見しました。

出力時にスケール値を小さくするほど、保存した時にポリゴンがぐちゃぐちゃになるようです。

これは実際に出力したものです。


開発倉庫に修正版を追加したので、旧バージョンを持っている方は更新をお願いします。

真に申し訳ありませんでした。

2010年10月31日日曜日

MikuMikuDanceの読み込みを始めました

最近MMDなるモデルファイルの存在を知り、調べてみたところアニメーションに向いていそうなのでAndroidに導入しようかと思い、MikuMikuDanceの読み込みを開始しました。

とりあえずボーンなどはおいて形状とマテリアルだけ読み込むものを作ってBlenderのインポーターとして作ってみました。




アニメーションが無いデータならこのまま使えそうです。

インポーターとしてもそのまま使えそうなのでこちらは開発倉庫に追加しておきます。

まあMMDのBlender用インポーター/エクスポーターは開発してる人が幾人かいるようですが、やはりこういうのは自分でやってみたいですよね~

というわけで、Blender2.54用のインポーターも作ります。

エクスポーターに関しては、ボーンデータや表情の読み込みとBlender内のアニメーションの構造を調べてから作成しようと思ってます。

追記:2010/10/31 22:58
Blender2.54用のインポーターが完成しました。

参考サイト
http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4

モデルデータ入手場所
http://www6.atwiki.jp/vpvpwiki/pages/223.html#id_f9e9aa57

2010年10月30日土曜日

開発倉庫の更新【Blender2.54】

インポーター及びエクスポーターともに更新しました。

出力時にマテリアルが暗くなるバグを修正しました。

開発倉庫の更新【Blender】

Blender2.49及び2.54のインポーターを更新しました。

テクスチャがなくてもモデルだけは表示できるように修正を行っています。

2010年10月28日木曜日

Blender2.4と2.5に対応したメタセコイアインポーターとエクスポーターが出来ました!

というわけで完成しましたよ
Blender2.4と2.5に対応したメタセコイアのインポーターとエクスポーター!

動画を見てくださった方、ありがとうございます!

他にも色々upしていく予定なのでよろしく!

不具合があったら修正するので発見した方はお手数ですが連絡してくださると助かります。

ブログ始めました

というわけで、ついに念願の開発・技術系のサイトを立ち上げることになりました。

これらか日々行っている開発のことを書いていこうと思っております。

使えそうなプログラムが完成した場合は
UPしていこうと思っておりますのでよろしく。