Cinema4Dメモ

Cinema4Dという3DCGソフトに関するメモ書きです。

続・テイクシステムを活用してUnityのskybox用画像を楽に作る

2016-06-13 09:13:19 | Unity&Cinema4D

前回からの続き

今度はUnity側での作業になります。

まずマテリアルを作ります。Projectタブ内のCreate→Materialです。

名前を付けます。適当にMyFirstSkyとしました。

そのマテリアルのShaderのタイプをSkybox→6 Sidedに変更します。

Assetフォルダの中にMyFirstSkyboxという名前のフォルダを作って、そこに画像をコピーします。フォルダーごとコピーでもいいでしょう。

マテリアルのインスペクターのウィンドウ内で6sideの各面に対応する名前の画像を適用していきます。Front[+Z]にはMyFirstSkyboxZ+.jpgです。

WindowメニューのLighting(Unity5の場合)を開きます。

EnvironmentLightingのSkyboxの入力欄の右の○を押して開いたウインドウ内のMyFirstSkyを選択します。

ゲームを再生してみると、テクスチャの継ぎ目部分が筋状に見えてしまってます。

読み込んだ画像それぞれについて、インスペクターでWrapModeをRepertからClampに変更します。

白い筋が消えました。

次は複数のスカイボックスをスクリプトで切り替えたい・・・


テイクシステムを活用してUnityのskybox用画像を楽に作る

2016-06-10 10:38:58 | Unity&Cinema4D

Unityの3Dの背景であるところのskyboxはX+、X-、Y+、Y-、Z+、Z-と、全6方向の正方形の画像から作られるのですが、結構手間がかかるため、何種類も作ろうとすると大変です。そこでテイクシステムを活用して効率化を図りたいと思います。

まずCinema4Dでは、フィジカルスカイを使って空を作ります。

作り方としては、Cinema4D入門の6章(ここにあります)に全部書いてあります。

次に6方向をそれぞれ撮影するカメラを用意します。まずカメラを1つ出します。

レンダリング設定を開いて「出力」で画像の幅と高さを同じにします。幅1024、高さ1024ピクセルとかでいいです。

 

次にカメラの画角を水平FOV、垂直FOVを共に90°にします(というか片方90°にすると連動します)。カメラの向いている方向を確認しましょう。この状態でカメラはZ+方向を向いているのが分かります。このカメラをZ+方向を撮影するカメラとするのでこのままでOKです。このカメラの名前をオブジェクトマネージャで「Z+」に変更します。

向いている方向を分かりやすくするため、カメラの画角内に確認用の文字を表示したいので、「テキスト」と「押し出し」を使って文字オブジェクトを作りましょう。この場合前面ビューで作業すると素直にカメラに向いてくれます。Z軸関係なので青のマテリアルを作って適用してます。位置を合わせたらカメラの子にしておくとコピペの時手間が省けて良いです。

 

 

このカメラをコピペして、座標マネージャでHに180を入力して真後ろを向かせます。名前をZ-に変えます。

 

同じ要領でX+とX-も用意します。X+はHが-90°でX-はHが90°です。押し出しのテキストもそれぞれY+とかに変えましょう。

 

最後はY+とY-です。Z+を元に最小限の回転で済ませましょう。Pに90°です。Y-はPが-90°です。

次はテイクシステムを使っての作業になります。6個のカメラで1枚づつ作ったレンダリング画像に、シーンファイル名とカメラ名からなるファイル名を自動的に付ける事が出来ます。ワオ!便利だね(^o^)

テイクマネージャを開いて、「新規テイク」で6個作ります。それぞれに名前を付けます。

 

そしてカメラを関連付けます。6個のテイクにマークを付けてレンダリングされるようにしましょう。メインのテイクはマークしません。

「マークしたテイクを画像表示でレンダリング」でテストレンダリングしてみましょう。

次にレンダリング設定の「保存」を開き保存する場所と名前を決めましょう。

これはヘルプの「変数パスおよびファイル名」のところも合わせて読んで下さい。

http://help.maxon.net/jp/#54506 ←ここ

 

レンダリング設定で、ファイルの保存場所を決め、まず適当なファイル名を決め、保存ボタンを押します。

「Render」フォルダの中にシーンファイル名からなるフォルダを作り、そこに保存される画像には、シーンファイル名とカメラの向き(Z+とか)からなるファイル名を付けます。

ファイルのパス欄を書き換えます。E:\DATA\Cinema4D\Render\$prj\$prj$camera

$prj がプロジェクトファイル名で、$cameraがカメラ名になります。\とか¥はディレクトリなんで、

Renderディレクトリ(フォルダ)の下に「プロジェクトファイル名のディレクトリ」を作り、その中に「プロジェクトファイル名+カメラ名のファイル」を作ります。なので、$prjが2回出てきます。でも¥(\)で区切られてないからね(^o^)

では確認しましょう。ぽちっとな。

このプロジェクトファイルの名前はMyFirstSkyBox.c4dになってます。従って、Renderの下に「MyFirstSkybox」ディレクトリが作られます。

 

その中にプロジェクトファイル名+カメラ名からなる6つのレンダリング画像がありましたぁ

続く


FBXファイルからモーション移植(続き)

2015-03-14 22:04:02 | Unity&Cinema4D

続きです。

モーション用に読み込んだ階層のCharacter1_Headをエディターで表示せずレンダリングもしないようにします。モーフ用のポリゴンはこのジョイントの子なので。これで余計なものは出なくなりました。コンスタントシェーディングにすると、よりかわいい感じに表示されます。

4つのポーズモーフタグがありますので、それぞれ見ていきましょう。MTH_DEFのタグは口の動きです。

EYE_DEFのタグは目の動きです。スライドを動かすと、目の周りのポリゴンがすっ飛んで行ってしまいます。うわぁ・・・なんてこった。

そのタグを選択したまま、「基本」タブの方を開いて、「X優先順位」がデフォルトで「エクスプレッション」になってるところを「アニメーション」に変更します。するとこの問題は解決します。よかったね!Unitychan。

それで、読み込んだ方のFBXの方は、ちゃんとキーが付いているぽいですが・・・

モーション移植タグでモーションをもらった方はキーが付いてないです。なので、アニメーションを再生しても、体は動くけど、表情はそのままって状態になってます。

しかし、Animationレイアウトのタイムラインでモーションをもらったはずの方のポーズモーフタグのFカーブを見てみると・・・

なぜかキーを持ってる??

なんかもうよくわかんないし、この役に立たないカーブを使って新たにキーフレームを追加します。えーと、10Fと29Fと48Fが0%で、21Fと42Fが100%なのね・・・

キーフレームを追加すると、一番下の方新たなキーを格納したトラックが表示されてました。自動の補完でだいたい同じような感じになってます。つーか、なんでこんな場所に作るの?一番下だから??

気にせずに、他のスライダーの強度にもキーを打っていきます。

全部のモーフに対して同じようにキーフレームを作り直していきます。疲れそうだと思ったけど、たった9本だし、たいした手間じゃなかったです。

おしまい

 

追加

白目の色が緑なのはおかしいので、テクスチャを修正しました。

わぁお!ますますかわいいね♪


FBXファイルからモーション移植

2015-03-14 01:02:02 | Unity&Cinema4D

そういうわけで、Cinema4Dに読み込んだUnitychanのデータには、モーションのデータは入ってなかったわけでして、モーションのデータは動きごとに別のFBXファイルに分けられて用意されているのですね。

ですので、Cinema4DでFBXのデータで動かしたかったら、好きな動きの情報を格納しているFBXファイルをインポートしてモーションをモデルのジョイントの角度情報に移植してやる必要があるようです。Unityのmecanimもこれと同じことをやってるンでしょう。

まず、unitychanのデータ群の中から、好きなモーションの格納されているFBXファイルをCinema4Dで開きます。自分の場合はUnity側で、結構開いてみていたので、すんなり選べましたが・・・

 

 UnityにUnitychanを読み込んでる場合は、そのプロジェクトの中のAsset→UnityChan→Animationsの中にモーションのデータがたくさんあります。unitychan_WIN00.fbxを選んでみました。

「開く」を押すと、インポート設定のウィンドウが開きます。「ジオメトリ」と「トラック」と「ポーズ」にチェックを入れておけば大丈夫です。多分・・・なぜモーションデータなのにジオメトリがいるのかというと、目や口や眉毛の動きはモーフでやってるからですね。

「OK]をおすと、テイクの選択とかいうのが開くので、「Take001」とかいうのを選びます。4秒分のアニメーション情報が入ってるみたいな事が書いてありますね。「Default」の方を選ぶとダメだった気がします。

そうすると、別のファイルとしてインポートされます。

ジョイントの階層を開いていきます。背骨(Spine)をどんどん開いて、首、頭のジョイントの子として顔関係のジオメトリと、そのモーフデータ(Cinema4Dのモーフタグとして作り直されてます)がありますね。再生すると、モーフターゲットに設定された値がアニメーションしてるのがわかります。

 そしたら、このデータを階層全部コピーして、さっきのデータの方に持っていきます。

元からあったUnitychanの階層を選んで、右クリックし、開いたメニューの「キャラクタタグ」→「モーション移植」を選びます。

モーション移植タグの「オリジナル」の方に動きのついている方(インポートしてコピペした方)を入れて、「ターゲット」のほうに元のデータ(動きついてない方)を入れます。

すると、いきなりUnitychanがひっくり返ります。

いきなりでビビりますが、落ち着いて「名前の替わりに階層構造を参照」のチェックを外します。

やったね!ちょっと顔面が変なことになってますが、これは読み込んだ方のFBXファイルの顔のポリゴンが表示されてるので、後でレンダリングされないようにしますので、大丈夫です(削除しないように)。再生すると動きます。

顔の表情関係は続きに書きます。


mecanimでunitychanを動かした

2015-03-13 16:49:21 | Unity&Cinema4D

そういうわけで、googleで「unity mecanim」で検索すると、いろいろ教えてくれるページが表示されるので、ちょっとやってみました。

まぁ、とっても可愛らしいこと。

右側のロボにも全く同じモーションを割り当ててます。

待機状態のステート(Stateって「状態」って理解すればいいんかな)(ここではIdle_01とかIdle_02)からJumpなどのキーボードのキーを割り当てたステートに行く方の線を選択して青くなってる状態で、インスペクタの「Has Exit Time」のチェックを外す必要がありました。Idleのステートに戻る方の線は「Has Exit Time」はチェックされたまま(デフォルト)でOKみたいです。


unitychan

2015-03-12 11:08:08 | Unity&Cinema4D

そういうわけで、UnrealEngine4がスゲーのはもう十分わかったので、Unityに戻りました。っつーか、UE4って重いってのは知ってたんですが、実際触ってみると想像を超える重さで、特にノートPCだとすぐにファンがフオオオオオー!!キィーーーンって轟音をたてはじめるので精神衛生上よろしくないです。離陸でもする気かよ。

そういうわけで、UE4の無料化に驚いたのか、Unity5が早速登場したので、いじってるんだけど、やっぱ自分はUnityの方がいいや。今のところ。

そんなこんなで、Unityのメカニムのことを調べていて、モーションのサンプルとしてUnitychanを使ってたので、ついでにCinema4Dに読み込んでレンダリングしてみたけど、かわいい!マジ天使かよって感じ。

服のマテリアルのタイプはIrawanってのを使ってみました。ハイライトが布っぽくなってる気がします。

尚、顔色や肌の色が悪い感じがしたので、発光チャンネルでピンク色を設定して多少発光させて血色良い感じにしました。

うわぁぁぁぁぁぁ!かわいい!!表情も変えられるンだね!

そういうわけで、Unitychanに会いに行くために、Oculus Rift DK2とかいうのを買おうとしたところ、クレカの決済がエラー出まくりでまだ購入できてません。

-------------------

追記

クレカで決済できないのでクレカの会社に問い合わせたところ、時間をおいて、もう一度やってみて!と言われたんで時間を置いたけど、やっぱダメなんでPayPalでアカウント作って試したらOKでした!

 

追記

白目の色が黄緑色だったのを修正しました


nVIDIA Normal Map Filterの設定

2015-03-07 00:33:40 | Unity&Cinema4D

http://docs.unity3d.com/ja/current/Manual/HOWTO-bumpmap.html

↑こういうノーマルマップ用の画像を用意するには?Unityで変換せずに?

ノーマルマップの画像を作るにはどうすんの?って調べていたところ、NVIDIAのPhotoShop用のフィルタってのを発見したのでメモ。

NVIDIA Normal Map FilterってのをインストールしてPhotoShopのフィルターのところから適用します。

Invert Y (Yを反転)にチェックを入れて、Scaleの値をでっかくします。

すると上のリンク先の画像と同じような感じになります

Cinema4Dでもちゃんと表示できました


リアルドライビングシミュレーター・うんてんくん

2014-07-03 10:34:27 | Unity&Cinema4D

ついに公開します。→ここをクリック

作成に11ヶ月もかかったらしい(笑)

設定している操舵輪の最大切れ角が高速走行時にもそのまま適用されてしまうので転倒しまくっていたのですが、車速に応じて切れ角を制限することで解決しました。ハンドルを同じ角度で切ったままで、車速を上げていくと、だんだん切れ角が少なくなり、アンダーステアのようになっていくのがわかります。


ニトロモードの実装

2014-06-18 11:06:16 | Unity&Cinema4D

そういうわけで、なんらかのパワーアップアイテムが欲しいってことで、ニトロモードを実装しました。

紫色のボンベを拾って、Pキーを押しながら前進すると、凄まじいパワーで超絶加速しまくりです。

ニトロは10秒間しか持ちません。使用中はトルクが2倍になります。スゲー加速で転倒しまくりング。

ついでに前輪駆動だったのを、後輪駆動に変えたら、ウィリーしてます。

ついでにエンジン回転計であるところのタコメーターのバーグラフも実装しました。

そして、シフトインジケーターも実装しました。これはいつもの切り文字方式では、うまく実装できなかったので、ついにオリジナルフォントまで作ってしまいました。と言っても、1,2,3,4,5,Rの6文字だけですが。

3速オートマになります(笑)。シフトダウン時のブリッピング音も実装したいのぅ。

ニトロモードは、「むずかしいモード」でブンブンハンマーをクリアするのがめちゃむずかしいため、救済措置的に付けてみたんですが、加速はいいんだけど、止まらないのでかなりの確率でそのまま海に落ちます。どうすりゃいいんだよおってことで、ブレーキも作らないとな・・・それと、スピードに対してハンドルの切れ角が多すぎる状態になってしまうので、ハンドルの切れ角も調整しないとな・・・


カメラの切り替え

2014-06-12 11:22:03 | Unity&Cinema4D

いままでは、メインのビューが監視カメラ風のターゲットカメラで、右側に車上の主観ビューと上空から見下ろすビューだったわけですが、キーボードのVキーでこれらのレイアウトを切り替えられるようにしました。

Vキーを一回押すと、車上の主観ビューがメインになります。

もう一回押すと、上空から見たビューがメインになります。

Vキーをもう一回押すと、最初のレイアウトに戻ります。

スクリプトはこんな感じDeath。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

using UnityEngine;
using System.Collections;

public class ChangeCamera : MonoBehaviour {

    public int viewPattern = 0;
    GameObject TargetCam;
    GameObject CarCam;
    GameObject TopCam;

    void Awake(){
        TargetCam = GameObject.Find("TargetCamera");
        CarCam = GameObject.Find("CarCamera");
        TopCam = GameObject.Find("TopCamera");
    }

    void Update(){
        //GetKeyUp Vキーでビューを変更
        if(Input.GetKeyUp("v")){
            if(viewPattern < 2){
                viewPattern +=1;
            }
            else if(viewPattern == 2){
                viewPattern = 0;
            }
        }
        //viewChange関数に処理を渡す
        viewChange();
    }

    //viewChange関数
    void viewChange(){
        //Pattern 0(Default)
        if(viewPattern == 0){ 

            TargetCam.GetComponent<Camera>().rect = new Rect(0.0f ,0.0f ,0.7f ,1.0f);
            CarCam.GetComponent<Camera>().rect = new Rect(0.7f , 0.7f , 0.3f , 0.3f);
            TopCam.GetComponent<Camera>().rect = new Rect(0.7f ,0.4f ,0.3f ,0.3f);
        }
        else if(viewPattern == 1){

            TargetCam.GetComponent<Camera>().rect = new Rect(0.7f ,0.4f ,0.3f ,0.3f);
            CarCam.GetComponent<Camera>().rect = new Rect(0.0f ,0.0f ,0.7f ,1.0f);
            TopCam.GetComponent<Camera>().rect = new Rect(0.7f , 0.7f , 0.3f , 0.3f);
        }
        else if(viewPattern ==2){

            TargetCam.GetComponent<Camera>().rect = new Rect(0.7f , 0.7f , 0.3f , 0.3f);
            CarCam.GetComponent<Camera>().rect = new Rect(0.7f ,0.4f ,0.3f ,0.3f);
            TopCam.GetComponent<Camera>().rect = new Rect(0.0f ,0.0f ,0.7f ,1.0f);
        }
    }
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー