スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Blenderでモーションを作成してXNAに持っていこう計画 その6

今度こそ最終回です。本当に。

昨日出来たスクリプトをブログにUP使用と思ったときにフト気づきました。
これGPLライセンスだ・・
このライセンスは改変して配布する場合はそのスクリプトもGPLライセンスになるというもので、簡単にいうと「俺から盗んだもんは隠すんじゃねー!」という大変男らしいライセンス。
このプログラムで作成したモデルとかの著作権は問題ありません。


さて、筆者は隠す気は欠片も無いわけですが、如何せん
「このライセンスをどう表記したらよいのか分からないので公開できない」
つまるところ
「というか英語わかんないし!」
が本音です。
こまった。

でもここまできて知りたい人がいたら可愛そうです。
そこで・・・苦しいながらも具体的な改造部分を記載しておきますので・・・

分からないところがあったらお父さんかお母さんに聞いてください。




【改変部分】
*注意 Python言語歴1日です パイソンをフィスォン?と読みそうな筆者が作ったものです。
それでもよい方はお進み下さい。


import Blender

と書かれた部分が読み込み処理をしているあたりなので

from Blender import Object, Mathutils, Window #for rotate_all_function

を追加。#の後ろはコメントになりますC#でいうとこの//ですね。日本語のコメントはNGでした。

次に以下の関数を追加します。
場所はfbx_ui_write関数よりも↑ならどこでもいいです。
fc2ブログはタブを認識してくれないみたいなので+を入れました。C#ではインデント最悪無くてもいいものですが、Pythonは()や{}のかわりにインデントを使用していますので注意してください。
################################################
# *rotate_all_for_XNA*
mtxRotyup = Matrix().identity() * RotationMatrix(-90,4,'x')
mtxRotzup = Matrix().identity() * RotationMatrix(90,4,'x')
def rotate_all(flg):
++++ed = Window.EditMode()
++++o = [objs for objs in bpy.data.scenes.active.objects]
++++Window.EditMode(0)
++++for obj in o:
++++++++if obj.getType()=='Mesh':
++++++++++++mesh = obj.getData()
++++++++++++if flg:
++++++++++++++++mesh.transform(mtxRotyup)
++++++++++++else:
++++++++++++++++mesh.transform(mtxRotzup)
++++++++++++mesh.update() # only now are the changes stored
++++++++elif obj.getType()=='Armature':
++++++++++++a = obj.getData()
++++++++++++a.makeEditable()
++++++++++++bones = a.bones.values()
++++++++++++for ebone in bones:
++++++++++++++++if flg:
++++++++++++++++++++ebone.head = ebone.head * mtxRotyup
++++++++++++++++++++ebone.tail = ebone.tail * mtxRotyup
++++++++++++++++else:
++++++++++++++++++++ebone.head = ebone.head * mtxRotzup
++++++++++++++++++++ebone.tail = ebone.tail * mtxRotzup
++++++++++++a.update()
++++++++elif obj.getType()=='Lamp' or obj.getType()=='Camera' or obj.getType()=='Empty':
++++++++++++if flg:
++++++++++++++++obj.setMatrix(obj.getMatrix() * mtxRotyup)
++++++++++++else:
++++++++++++++++obj.setMatrix(obj.getMatrix() * mtxRotzup)
++++Window.EditMode(ed)
################################################




最後に、書き出し実装関数であるfbx_ui_writeの中身の始まりに
rotate_all(True)
を追加し、終わりに
rotate_all(False)
を追加すれば完了。

引数が意味もなくTrueとFalseってひどい設計(苦)
気に入らないスマートなお方はちょいちょいっと手直しよろしくお願いします。


Blenderでテンキーの[1]が正面になるようにモデリング、モーション作成すればOK。
これでなんとかBlenderでモーションを作成してXNAに持っていこう計画シリーズを終われました。
ありがとうございました!


ねよっと。

コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: こんばんは

AKI様こんばんは。

実は現在Blenderを離れてC4Dというソフトに移行してしまいました。
よってスクリプトなどは一切忘れてしまったのが現状です。
Python自体扱うのも上記の記事が始めてだったりします(記事にも書いてあると思います)

スクリプト自体載せるのは楽なのですが、著作権のことを調べるのが面倒なのでそうしなかったのだと思います。

当時、英語のサイトを翻訳しながらここに載せた記憶があります。
書き出した時にY軸の方向が辺なのでそれを修正するプログラムを作った方がいました。
しかし
書き出しの前にそのスクリプトを適用→書き出し→また戻すスクリプトを適用
をするのが面倒なので関数を用意してやり内部で行おうとしたのだと思います。

しかしながら書き出す部分の間違い?をきっりち直してやるアプローチが正しいといえるため、この記事自体良くないものだと思っています。(当時の力量は覚えていませんが、出来なかったか面倒だったのだと思います)

Blenderを現在も触っているならきっちり作り直すのですが、現在はC4Dをメインに扱っているため至りません。
ご理解よろしくお願いいたします。

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。