Shade3D ver.16へバージョンアップ
Shade 3D



数日前、Shade3D ver.17が7月14日に発売されるとのお知らせメールが着ていました。自分はver.15 Professionalを所有していますが、前回のver.16へのバージョンアップは見送っていました。

Blenderを使い始めたらフィギュア等のキャラクターものならBlenderの方が機能が充実していてるし、表情等もFBXにつけることも出来るし、フリーだし、これはもう完全にBlenderに乗り換えてしまおうかとも思いました。

しかし、建物や細かい部品を寸法通りに作ろうとすればこれはBlenderより断然Shade3Dの方が作りやすいのです。三面図表示を同時に拡大縮小などShadeで普通に出来ることですがBlenderではできません。

自分的には、「Shadeでもフィギュアを作ろうと思えば作ることが出来るが、Blenderでやった方が作業は捗る。」「Blenderでも建築物を作ろうと思えば作ることは出来るが、Shadeでやった方が作業は捗る。」という感じです。

モデリングの負担が少しでも減らせるのならケース・バイ・ケースで作業効率が良い方を選んで使い分ければいいだけと割り切りたいです。
(一つのソフトで全て済ませられればそれに越したことはありませんが、現実はそうもいきません- -;)

それで、やはりShade3Dは自分にとっては必要なアプリとしてver.17へのバージョンアップはしてみようかなと思いました。ver.17の新機能としてProfessionalにCADモードが追加されるという、どのようなものか気になりますね。

今月の15日から30日の期間中に予約すれば早期予約特典を受けられるとのこと。早期予約特典はver.17を予約すれば印刷マニュアルが貰えるというのと、期間中にver.16へバージョンアップすればver.17への無償アップグレード権が貰えるというもの。

自分的にはマニュアルは電子書籍の方が読みやすいのでとくに印刷マニュアルは無くても構いません。Shade3D ver.16では「寸法表示」や「切断面表示」、「ウォーク・ウォークスルーアシスタント」など建築物を作るには役立つ機能が追加されてます。

今、ver.16にバージョンアップしておいてver.17がリリースされるまでの1ヶ月、事前にver.16の新機能を色々試しておいた方がいいかなと思い、まずver.16にしてみることにしました。




Professional ver.17へのバージョンアップのお値段は、通常は¥25,056のところ早期予約特典で今なら¥22,572、って全然お買い得な気分はしませんね(^^;)。というか値下げどころか通常価格は値上げしちゃってますね。(- -;)

購入手続きをしてもすぐにはダウンロードできないのは2年半ぐらい前にShade3D社自社販売になってから変わってないんですね(汗)。待つこと約1時間半、Shade3D社から支払い完了のメールが着てようやくダウンロード出来るようになりました。
(ネットショッピング決済でこんなに待たされるということはまず他にはないので結構もやもやしてしまいますね(^^;)、もう少し消費者の心理を考慮してもらいたいものですとか思ってしまいます)




ver.16購入と同時にver.17が予約されたことになってます。あとは、ver.17の発売日にアップグレードすればいいだけですね。




Shade3D ver.16をダウンロードしてインストールしてみました。

さっそく、以前に公式フォーラムに要望を書いていたらver.16で叶って追加されていた機能を試してみることに。




まず、「スライドツール」。これは稜線や頂点を稜線に沿って移動させることが出来る機能です。面切断などで一度確定してしまった稜線を後からずらしたいなぁとか思うことが多々ありまして、是非ともShadeでも欲しかった機能ですね。




あと、「サブディブジョンサーフェスをレベル単位で分割」も叶いました。しかし、じつは元々Shadeでも「>」、「<」記号を使うと出来た機能で、私が出来ないとものだと勘違いしていただけでした(^^;)。でも、ver.16からは「形状情報ウィンドウ」から分かりやすく操作できるようになりました。

ver.16には、他にも新機能が色々ありますが追々試してみましょう。

結局、バージョンアップしてしまいました。なんだかんだ言ってShadeって不思議な愛着があるソフトなんですよね。今現在、体験版では一足先にver.17のフル機能が試せるようです。私は発売日まで待ちます。(^^;)


スポンサーサイト
表情をスクリプトで滑らかに遷移
Unity



前回、Unity上でスクリプトからBlendShapesを操作して中割り無しでキャラの表情を変えることをやってみましたが、今回はスクリプトから表情を滑らかに遷移させるということをやってみたいと思います。

Unityでは、ある値からある値へと徐々に近づかせる手段としてMathfクラスのLerp関数とMoveTowards関数を使う方法があると思います。とりあえず、Mathf.MoveTowardsとコルーチンを使ってそれっぽい動きになるようにしてみました。

動画にしてみました。

https://youtu.be/beKhRQ-W4-Q


このキャラは、Blenderのみで作っているオリキャラです。半年前にボーンとモーフを入れてあったのですが、なかなかそちらに時間が回せず衣装をまだ考えてなく放置したままでした。今回、表情テストモデルとして登場させてみました。

シェーダーには「ユニティちゃんトゥーンシェーダー2.0」を使ってみました。しかし、Youtubeにアップした動画をImgurでgifにして貼ってみたのですが驚くほど画質がよくありませんねぇ(汗)。一応、表情がなめらかに変化しているのは伝わりますでしょうか。(リンク先は大きくてキレイな画質ですので)

スクリプトはこのような感じです。

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class FacialMorphingScript : MonoBehaviour {

    SkinnedMeshRenderer SKMR_head;
    Transform head;
    public Text eye, mouth;
    float we, wm = 0;

    void Awake() {
        head = transform.FindChild("Head");
    }

    void Start () {
        SKMR_head = head.GetComponent<SkinnedMeshRenderer>();
    }

    public void OnEyesButton() {
        if (we == 0) {
            StartCoroutine(EyeClose());
        } else
        if (we == 100) {
            StartCoroutine(EyeOpen());
        }
    }
    public void OnMouthButton() {
        if (wm == 0) {
            StartCoroutine(MouthOpen());
        } else
        if (wm == 100) {
            StartCoroutine(MouthClose());
        }
    }

    IEnumerator EyeClose() {
        for (int i = 0; i <= 100; i += 10) {
            we = Mathf.MoveTowards(0, 100, i);
            SKMR_head.SetBlendShapeWeight(3, we);//目「笑顔」閉じる
            eye.text = we.ToString();
            yield return new WaitForSeconds(0.02f);
        }
    }
    IEnumerator EyeOpen() {
        for (int i = 100; i >= 0; i -= 10) {
            we = Mathf.MoveTowards(0, 100, i);
            SKMR_head.SetBlendShapeWeight(3, we);//目「笑顔」開く
            eye.text = we.ToString();
            yield return new WaitForSeconds(0.02f);
        }
    }
    IEnumerator MouthOpen() {
        for (int i = 0; i <= 100; i += 10) {
            wm = Mathf.MoveTowards(0, 100, i);
            SKMR_head.SetBlendShapeWeight(10, wm);//口「あ」開く
            mouth.text = wm.ToString();
            yield return new WaitForSeconds(0.02f);
        }
    }
    IEnumerator MouthClose() {
        for (int i = 100; i >= 0; i -= 10) {
            wm = Mathf.MoveTowards(0, 100, i);
            SKMR_head.SetBlendShapeWeight(10, wm);//口「あ」閉じる
            mouth.text = wm.ToString();
            yield return new WaitForSeconds(0.02f);
        }
    }
}


目が完全に開いている時に「目ボタン」を押すと目を閉じ、完全に閉じている時に「目ボタン」を押すと開く。口が完全に閉じている時に「口ボタン」を押すと開いて、完全に開いている時に「口ボタン」を押すと閉じる。「両方ボタン」を押すと両方同時に押すのと同じ、という風にしてみました。

コルーチンを使うとアニメーションクリップを扱うような感覚でわかりやすく扱いやすくなりますね。アニメーションのスピードも調整しやすくなります。BlendShapeの値は0から100までの値を10づつで増減させています。手描きのアニメーションでは目の中割りは通常は1~3枚ぐらいだと思うので8フレームもあれば十分ですね。

(ちなみに、コルーチンを使わない関数にすると、for文の処理が終わるまでしばらく待った後で表情が中割り無しでいきなり変わる事になります。)

はじめはMathf.Lerpを使ってみたのですが、目的値に近づいていってもきっちりその値にならなかったり、たどり着く時間も不明瞭な感じで、きっちり正確な数字で管理するのには向いていない気がしました。

Mathf.Lerpは目的値にだんだんゆっくりたどり着くカーブ的な動きをするのなら、Mathf.MoveTowardsは一定速度で目的値に近づけさせる直線的な動きで、今回のやり方に都合が良かったです。

(線形補間はQuaternion.Slerpなどのようにオブジェクトをゆっくりこっちの方に向かせたいような使い方をしたい(厳密な値でなくても良い)時にはいい感じで動いてくれるのですが)

スクリプトからBlendShapesを操作する方法は、会話や歌うときなどリアルタイムで正確に口パクさせたいときなど結構使えるのかもしれないと前回とは違う感想を持ちました。

今回使ってみた「ユニティちゃんトゥーンシェーダー2.0」は映像用向けとして輪郭線や影の扱いが色々細かく設定が出来るようです。やっぱり、標準のトゥーンシェーダーよりクオリティーが上がる気がします。これは使いこなしたいところですね。




せっかくなので、本来のキレイな画質の静止画も載せておきます。

ところで、ユニティちゃんアセット利用でのキャラクターではなくスクリプトやシェーダーのデータのみの使用についてですが、自分的に曖昧だったので確認してみました。

トゥーンシェーダー版のユニティちゃんはUCL2.0で、キャラクターデータを含まない「ユニティちゃんトゥーンシェーダー」のシェーダーコード自体は「アセットストア利用規約およびエンドユーザーライセンス契約」で利用可能です!
’http://unity-chan.com/contents/news/unity-chan-toonshader/’より

とのことです。ユニティちゃんシェーダーのみならライセンス表示はしなくても良いみたいですね。

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