vvvvを学ぶにあたってつまづいた所

vvvvはじめました！そしてハマりました！

今回の投稿では、ここ3ヶ月あまりでのハマった事を忘れないうちに**初学者目線で**共有していきたいと思います！

こちら[vvvv Advent Calendar 2016](http://qiita.com/advent-calendar/2016/vvvv)の二日目の記事になっております。まだまだクソザコの身で間違っている所多々あると思います、、、気付いた点があればコメント頂けると嬉しいです。。

## **どっちがいいの?問題**

### **32bit or 64bit:**

今のところ64bit環境で使っていて得に問題が出ていないので**64bitでいいのではないかと思います。**

### **45beta or 50alpha:**

vvvvをダウンロードする所にあるbetaとかalphaとかのやつです。

両者の違いですが、50alphaでは**VLと呼ばれる新たなノードベースプログラミングの環境**が追加される予定になっており、主にそちらの有り無しであると理解しています。 → [VLについて詳しくはこのあたりを参照ください](http://qiita.com/AquaLamp/items/6148c5ba0eb862b8060b)

VLでは、今までC#でコードを書かないと難しかったことがノードベースのプログラミング環境で完結するのがメリットのようです。

解説の[チュートリアルビデオ](https://vimeo.com/154079779)を見て勉強していたのですが、その数週間後、**新しくリリースビルドを入れてみるとUIが変わりまくっていて勉強した内容が無になっていました。。。**

それぐらい活発に開発がされているという事で嬉しい事なのですが、いちユーザーからするとVLが安定してbetaに上がってくるまで我慢してもいいのではないかという結論になりました。

よって、**VLが安定するまで45betaを使うのが無難**かとおもいます

### **EX9 or DX11:**

現状vvvvでは、DirectX9系を使う**EX9**と、DirectX11系を扱う**DX11**の二種類のグラフィックスを扱うモジュール郡が同居しています。

どちらを使うかは、**積極的にシェーダー(HLSL)を使いたいか?**という所になるのではないかと思っています。僕の場合はできるだけシェーダーを使いたい派だったので、最初からEX9は捨ててDX11のみを学ぶ姿勢をとっていました。

vvvvをDX11ベースで使ってみての感想として、もはやグラフィックプログラミング言語というより、**シェーダーのパイプラインにテキストエディタとノードベースのGUIがついているもの**、ぐらいの印象を持っています。それぐらい細かい粒度でGPUの挙動をいじることができます。

一方でEX9のほうは、作りがシンプルで枯れており歴史もあるので、**DamperやSpreads系のノードを使ったよりvvvvらしいアニメーション**にとりくむのであればそちらを選択するのがよいのではないかと思います。

また、書籍、情報などはEX9のほうが多い印象です。ので、ここは両方触ってみて好みに応じて、でしょうか


## **基本操作**

### **起動したら最初にやったほうがいい事**

とりあえず何も考えずに `Ctrl+I` `Ctrl+T` を押すといいように思います。

内訳は、

`Ctrl+I`: インスペクタを表示
`Ctrl+T`: 現在選択中のウィンドウを最全面に表示し続ける設定にする

となっています。

### **マウスの挙動**

vvvv、マウスの操作が他のアプリと全然違うので、最初に触った時には**マウス操作のリアクションが予想と反しすぎていて、自分が何をしたのか理解できない**ことがよくありました、、、

一週間ほど使いつづけているとだんだん慣れるのですが、今ふと「これらの操作体系にはBlenderマウス操作のように何かの設計理念のようなものがあるのではないか…」と思って意識しながら触ってみたのですが、それらしいものは感じられませんでした。。(もしかすると同じような操作系の元ネタのソフトがあるとかなのかもしれません)

なのでこれは**手で覚えるしかないように思います。我慢しましょう。。**

基本操作が習得できるまでは、Junky_Incさんの [vvvv Newbiesのための13の基礎操作](http://qiita.com/Junky_Inc/items/1cb095d189b183a87d63) を常に開いておくといいです。


### **パッチコードが消えない**

![image](https://qiita-image-store.s3.amazonaws.com/0/38051/14acad87-4080-683b-544d-3909bd13f6a2.png)

あるあるな状況です。適当な灰色の所で右クリックしてください

### **ウィンドウを閉じようとしたらパッチが消えた…**

サブパッチのウィンドウは `Ctrl+W` ではなくて `Alt+3` で閉じる必要があります。。
これも上手く説明できる自身がないので**慣れてくれ**という話になりそうな気がしますが、、

Renderer、サブパッチなど**ウィンドウ要素が別で開くノード**は、

`Alt+1`: 外部ウィンドウモードで表示
`Alt+2`: 現在配置されているパッチ内にインラインで表示
`Alt+3`: ウィンドウを隠す
`Alt+Enter`: フルスクリーンモードで表示

の操作ができます。

また、シェーダーを書くためのテキストエディタのウィンドウを閉じるためには `Ctrl+W` をしないといけません。

サブパッチの場合、ウィンドウを消したいなと思って `Ctrl+W` を押すと、ウィンドウを閉じる → さらにノードを消す という挙動になるようで、コマンドが違う2つウィンドウの違いを意識していないと「よくわからいけどいつのまにかモジュールが消えてた問題」がたびたび起きます。。

結局の所 → **慣れてくれ**

### **サブパッチはどうやって作るのか**

左ドラッグでノードを複数選択した状態で `Ctrl+G`

そのまま保存してしまうと `オリジナルのファイル名-1.v4p` みたいなファイル名になってしまうので、`Ctrl+Shift+S` の別名で保存を併用して任意の場所に保存する

### **Maxで言うところのInlet / Outletはどうするのか**

IOBox系のノード (ナンバーボックス、トグル的なもの) にインスペクタから `Descriptive Name` を設定した物がサブパッチの上の階層から参照できるポートになるという挙動になっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/38051/3d726612-a658-7064-fae9-b5b4a7045f49.png)

また、**IOBox系のノードを真ん中クリック**すると適当に名前をつけてくれるので、今はポートだけ欲しいという時には、おめあてのIOBoxを真ん中クリックしておくとポートが簡単に作れて便利です

### **サブパッチがノードリストに出てこない**

サブパッチを自分で作るようになってくると、一生懸命作ったサブパッチがダブルクリックで出てくるリストの中に登場してくれなくて悲しい気持ちになると思います。。

ノードリストの中に出現させるためには、`MyNodeNameWithNoSpace (TAG0 TAG1 TAG3).v4p` という**一定の命名規則に従わなければなりません。**

丸括弧の前にスペースを置くのが重要っぽいです。それさえ守っていればメインのパッチの階層以下であれば、結構どこにモジュールを置いても柔軟に読み込んでくれます。

逆にそういう名前以外のノードがノードリストに出てこないのを利用して、プライベートに使うその場限りサブパッチは丸括弧無しの名前をつけてることで外部に公開しないようにする、のような、オブジェクト思考のアクセス制限的な運用もできます。

## **その他**

### **みんなが使っているカメラの操作方法が使いにくいんだけど…**

vvvvではSoftimage風なカメラ操作系統のオブジェクトがヘルプやサンプルなどでもよく使われています。(僕もSoftimageがそうだというのは最近知りました…)

個人的にはMaya系のカメラ移動の操作のほうが慣れているのでそっちがいいのですが、addonpackに入っている `Camera (Transform Orbit)` で、左ドラッグで回転、中ドラッグで平行移動、右ドラッグでズームといった操作系統を使うことができました！

ただ、デフォルトの状態だと動きがモッサリして気持ちが悪かったので、`FilterTime`の値を0にすることで慣れた感じの移動感にすることができました。

![image](https://qiita-image-store.s3.amazonaws.com/0/38051/8bc982aa-3deb-5e0b-c59a-5753c57e2ad1.png)


### **gitでプロジェクトを管理していたら壊れた**

`.v4p`ファイルはXML形式で記述されているので、gitが、「これはテキストファイルだから俺マージしとくわ！！！」 → vvvvが解釈できないXMLの構造になって壊れる みたいな事になっているのではないかと想像します。

なので、

```
*.v4p binary
```

と書いた `.gitattributes` ファイルをgitレポジトリのトップレベルに置いておくとバイナリ扱いの指定をすることになり、gitが勝手にマージするのを抑制できます。

ついでにこちら現在の僕の `.gitignore` です。

```
*~.xml
**/bin/Dynamic
```

### **girlpowerの語源が知りたいんだけど…**

vvvvではexampleをgirlpowerと呼ぶ習慣があるらしいです。
何故なのか僕も知らないのでどなたか。。。

## **まとめ**

色々とハマった所について書きましたが、vvvv、いいですよ…

明日書く人は決まっていないようなので、どなたか。。。