POSER 11 SR6リリースと小ネタ



意外にもPOSER 11のSR6がリリースされていました。いつもならSR5ぐらいまでだったような気がしますがそれだけPOSER11に気合いを入れているということでしょうか。




ダウンロードしてインストールしてみると日本語とドイツ語のマニュアルが入ってました。しかし、POSER 11ではなくPOSER 10のマニュアルでした。でも、いずれはPOSER 11の日本語マニュアルを準備してくれる可能性もあるということでしょうかね。

毎度、リリースノートとか付いていないので何が改善されているのか分からないのですが、とりあえずFBXのインポートに関しては改善は見られないようでした。

しかし、とりあえず一つは自分にとっては嬉しい機能が使えるようになっていたことに気付きました。それは、「アニメーショングラフ」を簡単に複数展開出来るようになっていたことです。

マニュアルには「アニメーション編集パレット」でAltキーを押しながらエレメントをダブルクリックするとエレメントごとにウィンドウを複数展開することが出来ると書いてありました。

しかし、これまでは複数開くことは出来ても選択出来るエレメントはどういうわけか一種類だけでした。




これはPOSER10で「アニメーション編集パレット」上でライトの「x回転」、「y回転」、「z回転」エレメントをAltキーを押しながら「アニメーショングラフ」を順番に3つ開いたものですが、どういうわけか3つとも最後に選択した「z回転」エレメントの表示になってしまいます。

これはバグなのか自分の環境だけなのかわかりません。以前から3枚のウィンドウに「x回転」、「y回転」、「z回転」それぞれ別のエレメントを表示させて編集出来たらどんなに便利だろうかと思ってました。




こちらはPOSER PRO 11 SR6です。「アニメーション編集パレット」でフィギュアのChest部の「Twist」「Side-Side」「Bend」のエレメントをダブルクリックしただけで各エレメントを3枚別々に表示できるようになっていました。




これは「アニメーション編集パレット」だけではなくパラメーターのダイアルをダブルクリックして「パラメーターセッティング」ウィンドウの「Graph」ボタンを押してもエレメントを複数展開できます。これはありがたいですね。

せっかくなので、ついでにPOSER 11関連の小ネタでも書いておきたいと思います。

POSER 11の新機能でショートカットを自分で設定できるようになりました。しかし、当初はせっかく設定してもその設定が記録されていなくて心が折れ、それ以降使ってなかったのです。原因はPOSER側なのかWindows10側なのかわかりませんでした。

でも、SR3ぐらいから記録もされるようになったのですが、何か不安感が拭えない(^^;)。そのショートカットを設定したファイルの保存の管理を自分で出来たら安心して活用する気になれます。

ということで、忘備録としてそのやり方を書いておきたいと思います。

POSERの環境設定ファイルはPOSER PRO 11の場合、
C:\Users\ユーザー名\AppData\Roaming\Poser Pro\11
に入ってます。



POSERを起動する時にここにあるユーザー設定ファイルでデフォルトの設定を上書きしているようです。このフォルダーの「Accelerators.xml」というファイルにショートカットの設定が保存されています。




開いてみると、自分でショートカットを設定した分がここに記録されています。上のはデフォルトで1、2、3、4キーに設定されているものをF1、F2、F3、F4キーに移し替え、カメラの選択をテンキーにまとめたものです。デフォルトのカメラのショートカットはキーがバラバラ過ぎて使いにくいですからね。

ショートカットに関してはこのファイルをバックアップしておけば安心です。



あと、勝手に「POSERあるある」だと思っているのですが、コンテンツをインストールディスクではない別のドライブに入れておくとアプデ時に何かをしくじり、Cドライブにある空であるコンテンツフォルダーがデフォルトフォルダーに設定されてしまうことがあります。

この一旦デフォルトに設定されてしまったコンテンツフォルダーはアプリケーション上の「ライブラリ」からは削除できないようになっています。しかし、格好が悪いし必要ないので消したいところです。

じつは、ここの設定は「LibraryPrefs.xml」ファイルで変更することが出来ます。ファイルを開くとコンテンツフォルダーのパスが書いてあります。




上の赤いところを自分のデフォルトにしたいフォルダーへのパスに変更します。




そうすると、Cドライブのフォルダーが消え、自分が設定したコンテンツフォルダーがデフォルトになります。ちなみに、「Downloads」共々Dドライブです。

ライブラリに新たなコンテンツホルダーを追加していくと、このLibraryPrefs.xmlファイルのindex="2"以降に追記されていきます。このファイルをバックアップしておけばインストールするたび登録したフォルダーがリセットされてもすぐに復活させることが出来ます。あと、フォルダーの順番もindex番号を変えれば後から変更するということも出来ます。

ただ注意することは、この書き換え作業はPOSERを起動していない状態で行うということです。そうしないと、POSERを閉じるときにその時点でのフォルダーの状態で上書き保存されてしまい書き換え作業が無駄なことになってしまいます。

あと、「Poser.ini」は「General Preference(環境設定)」、「Poser UI Pref」はUI構成、Poser Pro\11\English\dots\PoseRoomの「uiDot_1_1920x1080.ui2」はメモリドッドの設定が記録されているようです。

とりあえずPOSERをアップデートやらでインストールし直すことになったら一応使いまわしたい設定はバックアップしておけば安心です。そうすれば、バージョンアップする時にすでにある環境設定ファイルを引き継ぐか、削除するかという時にいちいち迷わなくても良くなりますね。

とりあえず、FBXの件は何とか改善してもらいたいところですが、SR7とかあり得るんでしょうかね。(^^;)


テーマ: CG ジャンル: 日記
Blenderでテクスチャーペイント



さて、年も明け中断していたBlenderでフィギュア作りを再開しようと思いました。




フィギュアの土台はほぼ完成させました。衣装はおぼろげにイメージがまとまりつつありますが、その前にBlenderの操作に慣れるためにしばらくこの姿のまま色々試しておこうかなと思います。




下描きの時から大きなリボンがトレードマークという構想でした。




プロポーションも変更。ボディと髪もテクスチャーを付けてみました。アンダーウェアはまだ仮です(とりあえず無いとまずいんでf^^;)。




後ろ髪はシンプルな太めの束にしてリボン共々バネのようにボヨンボヨン揺らせるようにしたら面白いかと思いました。

今回、ボディ部分のテクスチャーは初めてBlenderの3Dペイントで描いてみたのですが、なんて便利な機能なのでしょうか。(@o@;)

今までは3DソフトでUV展開してマップを描き出して、ペイントソフトで色を塗って保存して、3Dソフトに戻りテクスチャーを貼り直す、ズレていたり気に入らなかったらペイントソフトに戻りそれを何度も繰り返す作業となるわけです。

ところが、3Dペイントだとモデルに直接立体的に描けるわけです。鎖骨とか膝小僧とか一発で当てることが出来ますね。このボディ部のテクスチャーを描くのに30分もかかってないと思います。直感的な塗りには3Dペイントの方が断然便利でいいですね。

しかし、一定間隔とか緻密さが必要なところではやはりペイントソフトを使わないといけません。今回は髪のテクスチャーは髪の縁を輪郭線のように一定の太さで描きたかったのです。

それで、Blenderの「External Paint Autorefresh」というアドオンを使わせてもらいました。これは、BlenderとGIMPを連携させるものです(PhotoShopでも使えるようです)。

GIMPに読み込んだUVマップに描いたものがBlenderのテクスチャーに即座に反映させることができます。いちいちペイントソフトで保存して3Dソフトに読み込ませてテクスチャーを反映させるという手間が省けます。逆にBlender側で描いたものをGIMPの方に反映させることも出来ます。これもすごいアドオンですね、Blenderの便利なアドオンは他にも探せばまだまだあるんでしょうね。




とくに、髪の束と束の境目の線の抜きのところはこのアドオンのおかげで上手く出来ました。これを3Dソフトとペイントソフトを行ったり来たりするやり方だったらどれだけ手間と時間がかかったか計り知れません。(^^;)




この段階でMMDで表示させるとこんな感じになります。テクスチャーを付けると完成度がぐんと上る感じがしますね。ちなみに、pmxのエクスポートはアドオンの「Blender2Pmxe」 を使わせてもらっています。

次は、Blenderでボーン入れとウェイト付けをやってみることにします。



テーマ: CG ジャンル: 日記
ユニティちゃんでゲーム制作演習



今から一年半ぐらい前にUnityの勉強を始めようと思っていた時、本屋で見つけとりあえずやってみようと初めて買ったUnity本が日経BP社の「ユニティちゃんでゲームを作ろう」というムックでした。

本に書かれている「UnityChanDash」を見よう見まねで実践したら何とかうまくいって動いてくれて、Unityを使えば思っていたより簡単にゲームらしいものが作れるんだなと感心した半面、プログラミングなど無縁だった自分にとってまるで意味が分からないコードや記号が一杯で、こんなのどうやって使いこなせるようになるのだろうかと絶望感にも似た感情を抱いたのも今でも覚えています。(^^;)

それでもUnityを触り始めて一年以上経って、今ではC#もそれなりに理解できるようになりました。そこで、ここまで自分が学習してきたUnityの知識のまとめとして、「UnityChanDash」にいろいろ機能を追加して一連のゲームアプリとしての形式が成り立つようにアレンジしてみたいと思いました。

まず、追加したいことの確認、

・タイトル画面を設けて、スタートボタンを押すとゲームスタート
・プレーヤーが走り出す前にカメラが前方から後方に回り込む
・カメラが定位置に着てから走り出す
・障害物に当たった時、ゴールした時、カメラがプレーヤーの正面に回り、UI表示する
・障害物に3回ぶつかるとゲームオーバー。その都度UIでスペア数を表示する
・ゲームオーバー、ゴール後にリトライ、タイトル画面にもどる、ゲーム終了の選択メニューを出す
・BGMと効果音を付ける
・Escキーで強制終了、メニューから終了でユニティちゃんライセンスを表示して終了する

というような感じです。

それで完成したので公開したいと思います。



「UnityChanDash~arranged~」
Windows版
(19MB)
MacOS版
(22MB)
WebGL版

- WebGL版URL -
http://initmusic.web.fc2.com/games/UnityChanDash_arranged_WebGL/index.html



スタンドアロン版とWebGL版をビルドしてみました。もしよかったら、試してみてください。Win版とmac版はオンラインストレージからzipをダウンロードして解凍して実行してください。制作とビルドはUnity5.4.1でしています。

WebGL版はWeb上のリンクとなっています。WebGL版はFireFoxでしか動作しないようです。ご使用しているブラウザが違う場合はFireFoxを立ち上げてから下のURLをコピペでお願いします。WebGL版では終了したいときはウィンドウを閉じてください。なお、「Unity WebGL」はスマホ等のモバイル端末には対応しておりません。

いちおうお断りしておきますが、ゲーム自体が面白いかどうかではなく、ゲームアプリとして一連の形式を取らせるということが目的ということなのでその辺りはご了承ください。(わざとミスなどして処理を確認していただけたらと思います)







「↑」キーかマウスの「左クリック」でジャンプ、「↓」キーか「右クリック」でスライディングで障害物を避けます。障害物に3回ぶつかるとゲームオーバーです。ゲーム中にPキーを押すたびにBGMのオンオフを切り替えられます。

WebGL版では影の描写をしないようにしています。余興でユニティちゃんライセンス表示中にBキーを押すとユニティちゃんの「バイバイ」ボイスがなります。

せっかくなので、自分の備忘録としてこのゲームで使った自分が追加した部分のスクリプトの解説を書いておきたいと思います。全部は長くなりすぎるので部分的ということで。

・走り出す処理

public class PlayerAnimationController : MonoBehaviour {

    bool RunStartCheck = false;

    void Update() {
        if (RunStartCheck) {
        GetComponent<Rigidbody>().MovePosition(transform.position + 
       transform.forward * Time.deltaTime * 3);
        }
    }

    public void RunStart() {
        RunStartCheck = true;
    }
以下略

まず、走り出すところですが、初めはインクリメント計算処理で一定時間待機にしてみましたが、そうすると初回とリロード後では微妙にタイミングが変わってしまいました。また、この方法では自分のPCでうまく合わせられても違うPCではタイミングが変わってしまう可能性もあります。ここは厳密に同じタイミングでスタートさせたいところです。

それで、bool型のRunStartCheck変数を用意してfalseにしておいてAnimationの方からユニティちゃんが待機状態からRun状態に移るタイミングで仕込んでいるイベントでRunStart()を実行してRunStartCheckをtrueにすることで前に動き出すようにしました。これだとタイミングはバッチリですね。




・スペア数で分岐等の処理


using UnityEngine;
using UnityEngine.UI;//UnityUIを使うための名前空間
using UnityEngine.SceneManagement;//SceneManagerを使うための名前空間
using System.Collections;

public class GameManagement : MonoBehaviour {

    public GameObject Branch;
    public Text mistakeText;
    public Text gameoverText;
    public Text spareText;
    public static int spare = 2;

    void Start() {
        spareText.text = spare.ToString(); //スペア数の表示、更新
    }

    //障害物にぶつかったらSendMessageを受信、スペアの数で処理の分岐
    void spareNum() {
        if(spare >= 1) {
            Invoke("mistake", 0.5f);
        }
        else if (spare == 0) {
            Invoke("gameover", 0.5f);
        }
    }
    //ミスしたとき、テキスト「MISTAKE」を表示させる処理
    void mistake() {
        mistakeText.gameObject.SetActive(true);
        Invoke("OnLoad", 6);
    }
    //ゲームオーバー時、テキスト「GAME OVER」を表示させる処理
    void gameover() {
        gameoverText.gameObject.SetActive(true);
        Invoke("TimeLag", 4);
    }
    //呼び出されたら、4秒後にReGameBranch()を実行
    void TimeLag() {
        Invoke("ReGameBranch", 4);
    }
    //ゲーム後に3つの選択肢を表示させる
    void ReGameBranch() {
        Branch.gameObject.SetActive(true);
    }
    //ミスしたらスペアを一人減らす、シーンを読み直す
    void OnLoad() {
        spare -= 1;
        SceneManager.LoadScene("UnityChanDash2016");
    }
    //選択肢1が押されたら、スペアを2に戻す、ゲームを始めからやり直す
    public void PushTryAgain() {
        spare = 2;
        SceneManager.LoadScene("UnityChanDash2016");
    }
    //選択肢2が押されたら、スペアを2に戻す、BGMを廃棄、タイトルに戻る
    public void PushReTitle() {
        spare = 2;
        bgmloop.DestroyOn();
        SceneManager.LoadScene("UCD_Title");
    }
    //選択肢3が押されたら、ゲームを終了、ライセンス表示シーンに移行
    public void GameQuit() {
        SceneManager.LoadScene("LicenseLogo");
    }
}

スペアの数のspare変数はシーンを読み直しても維持されるようにpublic staticで宣言しておきます。時間差が欲しいとき便利なInvoke()メソッドを多用しましたが、今思えばAnimationのイベントを使えばもう少しスッキリ出来たかもしれません。もう直す気はありませんが。(^^;)

・BGMをシーンをまたいでループで流す

単にBGMを付けたいとき、一曲であればAudioSourceコンポーネントを追加してAudioClipに指定して「Play On Awake」をオンにしておけばノンコーディングでシーン開始時から流すことが出来ます。しかし、この場合はシーンを読み直すと始めから再生されます。



今回の場合、ゲームプレイ中はリプレイしても途切れないでずっとループさせた方が良いと考えました。そうすると、シーンをまたいで再生し続ける必要があります。色々試してみてうまくいった方法を書いておきたいと思います。

まず、空のゲームオブジェクト(名前はMusicBox)にBGM用のAudioSourceコンポーネントを追加して、DontDestroyOnLoadを使ってシーンをまたいでもこのゲームオブジェクトが破棄されないようにしてみました。でも、これだけだとシーンが呼び出されるたびにBGMが重なっていってしまいます。

それで、このMusicBoxをインスタンス化してprefabとしてスクリプトからResources.Loadを使って呼び出せるようにして、BGMを初回のみ再生させ次回以降は再生させないようにして、タイトルに戻るときはDestroy()でゲームオブジェクトを破棄するという方法を取ることでうまくいくことができました。

public class GameManagement : MonoBehaviour {

    private GameObject BGMobj;
    private BGM_Loop bgmloop;
    public static bool musicOn = true;

    void Start() {
        Instantiate(Resources.Load("Prefabs/MusicBox"), new Vector3(0, 0, 0),
        Quaternion.identity);

        BGMobj = GameObject.Find("MusicBox(Clone)");
        bgmloop = BGMobj.GetComponent<BGM_Loop>();
    }
以下略

GameManagementクラスのBGM関連の部分です。Start()で
"Resources/Prefabs/"フォルダに入れておいたMusicBoxを取り出します。そして、GameObject.Find()でBGMobj変数に格納します。ちなみに、このとき呼び出したMusicBoxには(Clone)が付いているのでそれを含めて名前にしておかないと見つけてくれません。

これは、MusicBoxにアタッチしているBGM_Loopスクリプトです。

public class BGM_Loop : MonoBehaviour {

    public AudioSource audioSource;
    public static bool shokaiCheck = true;

    void Start() {

        if (shokaiCheck) {
        shokaiCheck = false;
        DontDestroyOnLoad(gameObject);

        audioSource = GetComponent<AudioSource>();
        audioSource.Play();
        }
    }

    public void DestroyOn() {
        shokaiCheck = true;
        Destroy(gameObject);
    }
    public void BGM_Play() {
        audioSource.Play();
    }
    public void BGM_Stop() {
        audioSource.Stop();
    }
}

bool型で初回チェック用のshokaiCheck変数をpublic staticで宣言しておきます。こうすることによってその状態はシーンをまたいでも保たれます。「Play On Awake」はオフにしておきます。

shokaiCheckは始めはtrueなのでif文の中に入ります。そこでshokaiCheckをfalseに変えておき、"MusicBox(clone)"をDontDestroyOnLoadにします。そして、ここでBGMを再生させます。

これでシーンが呼び直されても次回からはshokaiCheckはfalseなのでBGMは重ねて再生されることはなくなります。タイトルに戻るときはDestroyOn()でオブジェクトを破棄するとBGMは止まります。破棄する前にshokaiCheckはtrueに戻しておきます。こうしておくことで、タイトルに戻って再びスタートボタンを押したときにBGMがまた始めに再生される処理に入ります。BGM_Play()、BGM_Stop()はPキーを押した時用です。

ユニティちゃんの掛け声ですが、同時に再生することはないので一つのAudioSourceに各音声をAudioClip型の配列にそれぞれ格納しておいて、各Animationのイベントからその都度入れ替えて再生させています。



public class PlayerAnimationController : MonoBehaviour {

    public AudioClip[] voice;
    private AudioSource audiosource;

    void Start() {
        audiosource = GetComponent<AudioSource>();
    }

    void slideVoice() {
        audiosource.clip = voice[0];
        audiosource.Play();
    }
    void jumpVoice() {
        audiosource.clip = voice[1];
        audiosource.Play();
    }
    void damageVoice() {
        audiosource.clip = voice[2];
        audiosource.Play();
    }
    void loseVoice() {
        audiosource.clip = voice[3];
        audiosource.Play();
    }
    void goalVoice() {
        audiosource.clip = voice[4];
        audiosource.Play();
    }
    void ufufuVoice() {
        audiosource.clip = voice[5];
        audiosource.Play();
    }

ちなみに、BGMからユニティちゃんボイスもすべてwav形式だったのでmp3に変換して7MBほど軽量化したのですが、ビルドした総サイズを比べると1MBぐらいしか差がありませんでした。それでも、mp3の方が少しは軽くなりますね。

これは最後のライセンス表示シーンで使っているスクリプトです。

using UnityEngine;
using System.Collections;

public class LicenseLogo : MonoBehaviour {

    public AudioSource audioSource;
    private GameObject BGMobj;
    private BGM_Loop bgmloop;
    public static bool musicOn2;

    void Start() {
        musicOn2 = GameManagement.musicOn;
        BGMobj = GameObject.Find("MusicBox(Clone)");
        bgmloop = BGMobj.GetComponent<BGM_Loop>();
        audioSource = GetComponent<AudioSource>();
        audioSource.Play(); //ユニティちゃん「バイバイ」音声の再生
    }

    void Update() {
    //Pキーが押されるたびにBGMの再生と停止を交互させる
        if (Input.GetKeyDown(KeyCode.P)) {
           if (musicOn2) {
               bgmloop.audioSource.Stop();
               musicOn2 = false;
               return;
            }
            if (!musicOn2) {
               bgmloop.audioSource.Play();
               musicOn2 = true;
               return;
            }
        }
    //Bキーが押されたらユニティちゃん「バイバイ」音声の再生
        if (Input.GetKeyDown(KeyCode.B)) {
            audioSource.Play();
        }
    }
    //アプリケーションを閉じる
    void QuitLogo() {
        Application.Quit();
    }
}

ゲーム中のBGMをオンオフ出来るようにしてしまったため、このアプリを終了するだけのシーンのためにスクリプトをこれだけ書く事になってしまいました。本来ならば最後のQuitLogo()だけあればいいところなのですが(^^;)。ちなみに、ロゴがフェイドアウトしていくタイミングでAnimationのイベントからQuitLogo()を実行するようにしています(WebGLでは機能はしません)。

musicOnはGameManagementクラスでpublic staticのbool型で宣言してある変数でBGMの再生状態を格納してあります。それをこのクラスでも引き継がせないと都合が悪いことが分かったのでmusicOn2に代入しておきました。public staticの変数はシーンをまたいで他のクラスに値を渡せるのですね。

という感じで、部分的な解説なのですが、これでもものすごく長くなってしまいましたね(^^;)。しかし、解るようになるとプログラミングは面白いですね。もし、Unityを始めてなかったら自分がプログラミングなど理解できるようになることはなかったと思います。プログラミングの面白さを知ることが出来たのもUnityのおかげです。

来年こそはオリジナルキャラを使ってなにか作品をつくれたらいいなぁと考えています。しかし、そのためにはやることがいっぱいで時間がいくらあっても足りないぐらいですが、めげずに来年こそは!(笑)





テーマ: CG ジャンル: 日記
Blenderでフィギュアを作る



私がメインで使っている3DCG制作ソフトはShade 3Dです。初めて手にした3DCGソフトということもあり、今のところ使い慣れているので一番使いやすいと思っています。が、有料ソフトなので新バージョンが出ると料金を払ってバージョンアップをしないといけません。

イーフロント社が販売代理店の頃はShadeのバージョンアップは早期割引があってProfessionalで1万7千円ぐらいでした。しかし、販売がShade3D社に移管されてから割引が無くなり2万3千円と実質値上がりと言う感じになってしまいました。毎回2万円以上となるとかなりためらいますね。それでまだver.15のままです。

このまま自分が今後もShade 3DのProfessionalを維持するのは少し困難な感じはしています。UnityやUE4など速くて綺麗な外部レンダラが手ごろに使えるようになり、作品作りはそちらの方でと考えつつある今の自分には機能的にはもうStandardで十分と思えます。もっと言えば、Standardからレンダリング機能を制限させたShade 3D for Unityぐらいでもいいとも思えます。最新バージョンをBasicとStandardの間ぐらいの価格設定でラインナップに加えてくれたらいいと思うのですけどね。

2万円ともなれば新しいソフトが買えるぐらいですからねぇ。例えば、最近だとスカルプトツールとして不動の地位を築いているZBrushの廉価版「ZBrush Core」がバンドルされている「ワコム ペンタブレット Intuos 3D」も興味があります。ペンタブも新しいのが欲しいところ。でも、今のところスカルプトが必要なぐらいなリアルなキャラクターを作りたい欲求も無いし、ポリゴンモデリングに慣れてしまえば今すぐスカルプトが欲しいとは思わないのですよねぇ。(でも、興味はあります)

モデリングソフトとして評判の高いMODOの廉価版の「MODO indie」というものがsteamでお安く提供されているのも興味あります。サブスクリプションで一ヵ月ごとなら1,480円、六ヵ月ごとなら6,200円で実質月々1,033円だとのこと。しかし、「MODO indie」についての情報は少ないし、サブスクリプションというものには抵抗あるので乗り気になれないのです。(一括だと3万円ぐらいです)

そうなると、白羽の矢が立つのはフリー最強の3DCGソフトのBlenderです。Blenderの開発進歩は目覚ましいものがあり、しかも今後いくらバージョンが進んでもフリーであることが約束されています。

Blenderについては機能をさらりと把握している程度で、今までBlenderだけでガッツリとモデリングはしたことはありませんでした。

Blenderを初めて触った時、独特の操作性で目の前にある立方体を選択して動かすことすら出来なかった衝撃を今でも覚えています(^^;)。ただ、慣れてしまえばそんなに違和感なく操作できるのですよね。

とりあえず、今後はBlenderを使いこなせるように勉強を兼ねて積極的に使っていこうかなと思います。とりあえず、練習がてらにBlenderのみで新キャラのMMDモデルでも作ってみることにしました。




こちらが自分にとってBlenderで作る初めてのフィギュアとなります。とりあえず、ベースは出来た感じです。ここまで時間的に4日ぐらいでしょうか。

何せ、「Shadeで使っていたあの機能はどうやってやれば??」という感じで右往左往でした。ショートカットなど慣れればもっとスムーズにはかどると思います。しかし、使い方などネットで検索すればほぼ解決しますね。やっぱり、Blenderのユーザー層は厚いからゆえですね。助かります。




顔と目にはUV展開してテクスチャーをつけてみました。こうやって一つ一つ覚えていくことにしましょう。










今のところポリ頂点数は7,500ぐらい。でも、まだミラーリング状態なので実質1,5000ほどですね。

Blenderでフィギュアのモデリングをする際、一番戸惑ったのは髪の部分ですね。Shadeの場合、ペジェ曲線で形を作る自由曲面というのを使っていました。そういえば、今まで髪を始めからポリゴンで作ったことがありませんでした。

Blenderのペジェ曲線はShadeの線形状とは操作性が全く違って自分ではとても扱えそうに感じませんでした。髪だけはShadeで作ろうかとも思ったのですが、やはりここはBlenderだけでやらないと意味が無いと思い解決策を探しました。




そうしたところ、「Mira tools」というアドオンの存在を知りました。このツールの中にメッシュの頂点をペジェ曲線に沿って動かせる機能がありまして、これにより手縫いの短冊型のメッシュをキレイに配置出来るようになりました。このアドオンは髪だけではなくあらゆる部分でポリゴンを滑らかに移動させることができるので重宝しそうです。




現状でミラーを実体化してMMDに持ってくるとこんな感じです。まだ、ボーンは入ってません。アドオンのお陰でBlenderもMMDとの風通しが良いですね。

Blenderのみでも自分なりのフィギュアのモデリングは出来そうです。しかし、まだBlenderでのリギングとかモーフとか未知の領域です。やってみるしかないですね。

作ってはみたのですが、そういえばまだこのキャラの設定を考えていませんでした。衣装とかどちらの方面にしようかも考えないと。


テーマ: CG ジャンル: 日記
VR HTC Viveの導入



今年に入り「Oculus Rift」が製品化、「HTC Vive」、「PlayStation VR」の発売と2016年はまさにVR元年といってもいいでしょう。

Unityであれば自分の作った3Dシーンや3DモデルをVRで見ることはかなり簡単に実現出来そうです。それは、いつものディスプレイ上で見るのとは違う何か大きな刺激を受けるのではと自分もそれなりに興味がありました。

最近話題なのは「PlayStation VR」ですね。販売後すぐに売り切れ店続出で現在まだまだ多くの人が入荷待ち状態みたいです。でも、私はPlayStation4を持ってないので選択肢にはありません。

やはり、「Oculus Rift」と「HTC Vive」のどちらかとなります。VRというと長らく開発者用の「Oculus Rift Kit」という単語に馴染みがあってVRならOculusというイメージがありました。

2つを比べると大きな差といえば「Oculus Rift」は基本的に正面を見回すような感じ、「HTC Vive」は立ったり座ったり対象物に自分自身が移動して近づいたり回り込んだり出来るという感じでしょうか。

購入費は送料・税込で「Oculus Rift」が94,600円、「HTC Vive」が107,784円とViveの方がお高め。(しかし、Oculusの方は近々発売される別売りの「Oculus Touch」を含めるとこちらの方がお高くなりそうです)

設置の方はOculusの方は机の上にセンサーを一つ置くだけとお手軽。Viveはベースステーションを2つ壁に固定設置推奨、動き回りたいのなら障害物のない2㎡ぐらいのスペースが必要。設定等少し複雑そう。

価格と設置の簡単さと知名度からOculusでいいかなと思ったのですが、こちらは注文は海外サイトでおこない、現地からの発送となります。空間を歩いて移動できるという面白さと日本のPCショップで注文すれば翌日に届く手軽さが決め手となって若干お高めでも「HTC Vive」を購入してみることにしました。




ドスパラで注文したら本当に関東から東北の地に注文した翌日に届きました。思っていたよりでかいですね。(iPhoneとの比較)







ダンボールの中に本体の箱が入ってます。




箱の中に入っている本体と付属品。何やらいっぱいあります。




まず、やることは部屋に2㎡ぐらいのスペースを確保すること。久々に大掛かりな掃除をして筋肉痛です(笑)。




次に、壁に「ベースステーション」を取り付けます。高さは2mちょいぐらい、互いの距離は5m以内で。それぞれコンセントからの電源供給が必要です。何か、監視されてる気になりますね。(^^;)




Viveに付属の釘(右)は柱にねじ込むには太すぎて3分の1しか入りませんでした。細いもので代用しました(左)。

さて、ここまできたらセットアップも終わりも当然と思いけりゃ、何とインストールを完了させることができないというトラブルが発生しました・・・

すでに解決したのですが、もしかして今後Viveを購入してインストールしようとする際に自分と同じ状態に陥り頓挫してしまう方もいるかもしれないのでそのことについて書いておきたいと思います。


・ヘッドセットをデバイスとして認識しない 1



ヘッドセットとPCを繋ぐための「Link Box」というのがあるのですが、これには向きがあります。上に小さく「PC」「VR」と書いてあります。最初間違えて繋いでしまってうんともすんとも言いませんでした。

VRの接続は橙色同士なんですね。セットアップの動画は止めながら確認しながら見た方がいいですね。


・ヘッドセットをデバイスとして認識しない 2

「Link Box」の繋ぎ方を直したら色々デバイスのドライバのインストールが始まったのですが、ヘッドセット本体が認識されていないようでした。

まぁ、これは前にも経験があったのですがPCケースに付いているフロントのUSBに繋ぐとHUB経由できないデバイスは認識されない場合があるのです。LINE6のPOD LiveもフロントUSBに繋ぐと認識されませんでした。

この場合、PCの後ろ側、要するにマザーボードに直指しすると改善されます。これで、ヘッドセットのドライバもインストールされました。

しかし、最大のトラブルの山場は次でした。


・トラッキングを確立できない

デバイスのドライバもインストール完了してあとは「ルームセットアップ」で部屋の広さを認識させて、「素晴らしきVRの世界へようこそ!」となるばかりと思っていました。

しかし、どういう訳か「トラッキングを確立する。」というところで止まってしまうのです・・・




デバイスはオールグリーンで認識されているはずで、本来ならこんなところで止まらずスパっと次に進むはずなのですがどうにもならない。ネットで検索しても具体的な解決法が見つかりませんでした。これは非常に稀なケースなのか?PC自体が原因なのか?

とりあえず、もう一度Vive関連のファイルをアンインストールしてインストールしてみようと思ったら今度はサーバー通信エラーで「ルームセットアップ」すら始められない状態に。




気分はもう完全にどん底状態です。もしかしたら、新しいPCを買えば問題なく動くのか?しかし、4年前のPCとはいえ新しいPCに買い換えるほどスペックが足りていないとも思えない。こんなことならOculusにしておけば良かったとも思ったりしました。

しかし、金額が金額なだけに割り切って諦めることもできない。という訳で最後の切り札、Viveのサポートに上の2つの状況とキャプチャー画像へのリンクを付け加え連絡を入れてみました。

それで、返答がメールで着ました。

一度コンピュータOSのUser Nameが英語以外の文字になっているかご確認いただけますでしょうか。 英語以外の文字になっております場合、 誠にお手数ではございますが、 Steam & Steam VRをアンインストールいただきました後、 コンピュータOSのUser Nameを英語に変更いただき、その後、Steam & Steam VRを 再インストールいただくことで 現象に改善が見られるか ご確認いただけますよう お願い申し上げます。

また、OSの再インストール(クリーンインストール)を 行っていただきますことで 現象に改善が見られるかどうかご確認いただけますようお願い申し上げます。~以下略

う~ん、どちらも分かりましたと言って簡単に割り切って出来ることでもありません。どちらにしても慣れ親しんだPCの環境をリセットすることに変わりありません。

しかし、OSのユーザー名が漢字なのは間違いないです。海外製のアプリではパスに全角日本語(マルチバイト)が含まれるとインストールや保存ができなかったりするのは珍しいことではありません。

OSのユーザー名が漢字なのは自分の意志ではありません。マルチバイトが良くないことは知っていてWindows7までは半角英数のユーザー名でした。Win8のインストール時にこういうことになりました。まさか、登録した漢字の本名でユーザーフォルダーを作られてしまうとは思いもよりませんでした。しかも、一度登録されたら後から直すこともできないという。(Win7から直接Win10にアップグレードしたノートPCは半角英数のユーザー名をそのまま引き継いでました)

しかし、今までは漢字ユーザー名のままでも不具合もなかったのでそのままにしていました。仕方ありません、とりあえずこのPCに半角英数の別のローカルアカウントを作って管理者権限を与えて、新たに作られた半角英数のユーザーフォルダに元の環境(ドキュメント、AppData等)をコピペで移し替えることにしてみました。

それで、ようやく引越し作業を終え、再びViveアプリをインストールすると通信エラーは出ずすんなり進み、「トラッキングを確立する。」も何事もなかったよう認識され次へと進み足元の高さ、部屋の広さの計測も終えViveのインストールがようやく完了しました。

今回のViveインストールでのトラブルの原因はOSのユーザー名が漢字だったという結論に至りました。全角日本語など欧米圏の人たちは考えない方が普通でしょうからユーザー名は半角英数の方が無難です。Microsoftはそういうことも考えなかったのでしょうか、疑問です。

今回はインストールはできてもセットアップができないという初めての事例でした。こんなこともあるのですね。でも、困難を乗り越えたどり着いたVRの世界はとても素晴らしく可能性を感じさせてくれるものでした。これは11万円出した価値は十分あると思えました。久々にワクワクものです。

ちなみに現在のPCスペックです。これでもViveは使えてます。

OS: Windows 10 Pro 64-bit
CPU: Intel Core i7-3770
マザーボード: ASRockH77 Pro4/MVP
グラフィックカード: GeForce GTX 660 OC
メモリ: 16GB

このマザーボードは16GBまでしか載せられないんですよね。それよりグラカはさすがにもうキビしいですかね。しかしながら、PC新調はもう少し粘りたいところです。





テーマ: パソコンな日々 ジャンル: コンピュータ
Unityでのトゥーンセットアップ



今回はUnity用のオリキャラ「カレン」をUnityのトゥーンシェーダーを使ってセットアップしてみたいと思います。




今回使用するこのキャラのFBXはShade 3Dから直接エクスポートしたものです。




まず、メニューバーの[Assets >> Import Package >> Effects]にある「ToonShading」をインポートしておきます。これでシェーダーに「Toon」が追加されます。




トゥーン調にしたいマテリアルに「ToonBasicOutline」を割り当てます。目の影は半透明で表現していますが「ToonBasicOutline」では透明度が反映されないので「Standard」のままです。このトゥーンシェーダーだと法線マップも反映されないのでテクスチャーは描き直しました。




Unityでは共通なプロパティーであれば複数選択しておくことで一括で変更できるので便利ですね。




う~ん、何か残念な感じです。このままではちょっと使えませんね。少しスクリプトを弄る必要があるようです。近づけば輪郭線の太さも良さ気に思える時もありますが、離れると線が太くなっていくように見えてしまいます。キャラクターに近づけば太くなり、遠ざかれば細くなるようにしたいです。

そこで、まず「ToonBasicOutline.shader」をエディタで開いてみると、38行目にある
o.pos.xy += offset * o.pos.z * _Outline;
のo.pos.zがカメラからの距離によらず輪郭線の太さを一定にしているところなので、それを消して
o.pos.xy += offset * _Outline;
と書き換えます。

これで、カメラからの距離(Z値)によって輪郭線の太さが変わるようになります。




輪郭線の色と太さはインスペクター上でマテリアルごとに変更ができます。しかし、輪郭線の太さを一番細くしてもまだ太く見えます。これは、スクリプトで最小値が0.002より小さく出来ないように制限されているからのようです。

5行目にある、
_Outline ("Outline width", Range (.002, 0.03)) = .005
という部分がその制限範囲のようです。ですので、Range (.002, 0.03)はRange (0.0, 0.03)と書き直して最小値を0にしてみます。




これで輪郭線の太さをちょうどいい具合の0.0015まで値を小さく出来ました。しかし、輪郭線がギザギザしていて綺麗に見えないのが気になります。

これはアンチエイリアスをもっと強めにかければ解決しそうです。メニューバーから[Edit >> Project Settings >> Quality]と辿って行くと「Anti Aliasing」の設定項目があります。



ここを「4x Multi Sampling」以上にすると綺麗な感じになります。







これは、「Anti Aliasing」を「8x Multi Sampling」にした図です。これで、自然なトゥーン調になりました。あと、白目と口内の輪郭線は無い方が良いので太さを0にしてあります。

MMD用モデルを編集するときに使うPMXEでは輪郭線の設定等はサーフェスグループごとに細かく設定できるのですが、Unityの場合はマスターサーフェスごととなるようです。

白目と口内は当初は顔のパーツのマスターサーフェス(同一テクスチャー)に入れていたので、そのままでは輪郭線を消せませんでした。なので白目と口内は独立したマテリアルにして個々に輪郭線の設定が出来るようにしました。(ちなみに、目の影部もそういう理由で独立してあります)

Unityの標準シェーダーのカリング設定では片面ポリゴンの場合裏面が表示されません、両面表示にしたいときはスクリプトを書き直す必要があります。このキャラの腰巻きなどは片面ポリゴンなのでその作業をする必要があるのかと思ったら、トゥーンシェーダーでは両面表示が標準のようですね。

このキャラクターのボーンとスキンの設定はすでに終えていて、記念にUnity上でアニメーションでもと思っていたのですが、さらに長くなりそうなので、ここで区切りとして次回に持ち越したいと思います。


テーマ: CG ジャンル: 日記
「カレン」のテクスチャー完成



オリキャラ「カレン」をポリゴン化して細部を作りこみ色々調整してからテクスチャーを付けてみました。ゲームエンジン用なのでサブディビジョンサーフェス無しのローポリ仕様です。ポリゴン頂点数は剣を含めて今のところ14,395です。




このキャラクターはUnityでのトゥーンシェーダーを前提で作りましたが、今回のレンダリングは敢えてShade 3Dのパストレーシングです。




自由曲面でモデリングすると最小限のポリゴンで綺麗な形状が作りやすいです。これは、ローポリモデル作りにかなり有利かもしれませんね。




以前はUVの展開にはだいぶ苦労しましたが、今では自分なりに色を塗るのに適したように展開できるようになりました。UVの展開次第でその後の色塗りの作業がスムーズになるかどうかが掛かってきます。






これは髪のUV展開したマップですが塗りやすいようになるべく高さなど揃えています。あと、左右対称なところはピッタリ重ねています。こうすることで色塗りの作業が半分で済むことになります。特に顔とかこの方法だと簡単に綺麗に左右対称に描けますね。

今まで参考のため色んなMMDモデルを拝見させてもらっていたのですが、中にはテクスチャーが半分しか描かれていないのにちゃんと左右描写されているモデルも結構ありました。始めは不思議だったんですが、自分もやってみたらこれは便利と大変関心しましたね。




鎧(?)の部分は法線マップで凹凸を付けてみました。この鎧に関しては左右対称にすると紐の部分がおかしくなるのでアジの開きです。




上が拡散反射用、下が凹凸付けのための法線マップです。この法線マップはGIMPのプラグイン「GIMP normalmap plugin」で作ってあります。

Shadeにもテクスチャーから法線マップを生成する機能はあるのですが、どちらも出っ張らせたいのに片方が凹んでしまうということがあります(Shadeの不具合ではありません)。今回は鎧の縁は出っ張るのに紐の部分が減っこんでしまって不自然になってしまいました。

GIMPではレイヤー毎や選択範囲で細かく指定できます。上のマップでは紐部だけ裏にして法線マップ化しています。剣の鞘もテクスチャーで描いて法線マップで立体的にしています。

ベルトのバックルは平面上にテクスチャーでトリックアート的に陰影を付けて立体的に見せています。



ブーツの凹凸はメッシュです。テクスチャーでアンビエントオクルージョン風に陰影を付けてあります。

今回はテクスチャーを拘ってみたかったので3Dモデリング以上にテクスチャーを描く方が時間が掛かったかもしれません(汗)。やはり、3Dフィギュア作りとはいえ絵を描くことは避けられませんねぇ。

今回のテクスチャーは、鎧部はGIMP、それ以外の殆どはCLIP STUDIO PAINTで描きました。どちらか一つだけで済めばいいとは思うのですがGIMPもSTUDIO PAINTもそれぞれ違ったメリットと使いやすさがあり、やっぱりお絵かきソフトの一本化は出来ないですね。(ArtRageも含めて)




せっかくなので、360度回転する「うごイラ」にしてみました。


テーマ: CG ジャンル: 日記
衣装の(仮)完成

魔法剣士「カレン」の衣装を3D化してみました。
レンダリングはShade 3Dのレイトレーシングです。




まだ、自由曲面の状態です。大まかにはイメージ通りでしょうか。




剣は今のところボールジョイントに入れて角度つけてます。そうしておくとどこか直したい時にジョイント値をリセットすればすぐに直立水平状態に簡単に戻せるからです。




剣の全長は日本刀と同じ約95cmとしてみました。サヤの中の刃も作ってあります。




次は、ポリゴン化してから細かい修正をしてUV展開してテクスチャーを描いて張る作業ですね。


テーマ: CG ジャンル: 日記
Unity用F系新オリキャラの制作



ようやく、UnityとC#プログラミングの学習を一通り終えたので新しいキャラクターのモデリングをすることにしました。

最近、Unityのパーティクルシステムの「Shuriken」を触ってみたんですが、これが綺麗で面白いんですよ。こういうのはリアルタイムレンダリングならではですねぇ。なんか、「Shuriken」を使ったファンタジー系で魔法などを使うようなキャラクターを作ってみたくなったのでした。

ラフ画でも3Dモデルを作ることは出来ますが、あまりラフすぎると後々困ることも出てきてしまうので(前回はちょっと反省)、今回はバランスから衣装までちゃんと考えてキャラクターの原案をきっちり描き込むことにしました。




黒髪ロングでパッツン、ツリ目で見た目はクールな女魔法剣士という感じにしてみました。ちなみに、この絵はArtRage4.5で描いています。ArtRage4の新機能に「対称ペイント」というものがあり、左右対称なものをお手軽に描きたい時はとても便利です。

じつは、このキャラはバーチャルバンドのキーボード担当として考えていたのですが、まずはUnityで動かすためのファンタジー系キャラとして作ってみたいと思います。

名前は「カレン」としておきます。




早速、原案を下絵にモデリングしてこのような感じになりました。全身像です。まだ、衣装までは作ってません。(この画像はShadeの作業平面透視図のスクショです)




結構、お顔はイメージ通りに作れたと思います。




漫画系のキャラクターって頬骨ではなく、ほっぺたの方が出っ張っている方が自然に見えるのですよね(いや、頬骨がリアル人物より下がっているだけなのか?)。今回はその辺も考えて試してみました。




このキャラも顔はポリゴンからですが、髪や体は自由曲面で作ってます。ラインは見ての通りとてもシンプルです。自由曲面は後から簡単にバランスを変えやすくていいですね。ざっくり、自由曲面で形を整えて、細かいところはポリゴン化してから修正という流れが定着しています。

次は衣装に取りかかりたいと思います。

テーマ: CG ジャンル: 日記
POSER 11 SR5 リリース



POSER PRO 11のSR5がリリースされていました。POSERには起動するときにアップデートがあったら通知する機能があるのですが、何故かPOSER11ではその機能が働いたことはありません。

ですので、月に2、3回「Smith Micro Download Manager」を起動して更新があるか確認するようにしています。

昨日、SR5が出ていることを知り、今日インストールしてみました。取りあえず、FBX問題の改善は確認できませんでした・・・



テーマ: CG ジャンル: 日記
カテゴリ
ini-T MUSIC SKY
プロフィール