にゃんにゃんメッシュエディタ―紹介

はじめまして、株式会社PsychicVRLabでUnityエンジニアをしています、「ほたてねこまじん」と申します！
STYLYアドベントカレンダー3日目の記事になります。

この記事では、私が以前趣味で開発した「にゃんにゃんメッシュエディタ―」という、Unity完結で（超簡単な）3Dモデルの修正が可能なツールの紹介です。

https://hhotatea.booth.pm/items/3003506

# なぜ作ったか
あえて「メタバース」という言い方は避けますが、近年VRChatなどアバターを着用してユーザー同士のコミュニケーションを楽しむゲームのユーザー数がかなり増えています。数年前は考えられませんでしたが、Boothでも人型の3Dモデルがかなりの数販売されており需要の高さがうかがえます。

そして、そういったユーザーの中（特にVRChatユーザー）はアバターの個性を重視する傾向があり、テクスチャの配色を変更したり、市販品のアバターに+α の要素を足すことで「自分だけのアバター」というアイデンティティを求めています。
その証拠に、人型の3Dモデルに付随して衣装やアクセサリーの3Dモデルなど、組み合わせれば実質無限通りのアバターを作れるだけの市場が出来上がっています。

そんなアバターに+α の個性を加えるためには、Unityでアップロード作業をすることが必要であり、さらに3Dモデルのメッシュ自体に変更を加えたければBlender等のより専門的なツールを扱わなければいけませんでした。
しかし本来は扱うのに専門知識が必要な、そういったツールを学習するコストは高く、せめてUnityだけでメッシュの変形を完結できないかな？と思って作ったのが本ツールです。

# にゃんにゃんメッシュエディター(MeshModifyTool)

![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/fc5d2ee1-9b40-9116-4fcc-6caf553f72d7.png)
## 導入方法，使用手順
1. あらかじめアバターアップロード用プロジェクトのバックアップを取っておく．
2. [MeshModifyTool.unitypackage](https://hhotatea.booth.pm/items/3003506)をUnityProjectにインポートする．
3. Unityの上部メニュー，Window/HhotateA/にゃんにゃんメッシュエディター(MeshModifyTool)を開く.
4. アバターに合わせたい服のメッシュをドラッグ&ドロップして"Setup"をクリック．
5. 編集したいメッシュ名をクリック．
6. 編集ツールを選択する．
7. メッシュを編集する．（BlendShapeとして保存したい場合しておく）
8. Saveをクリックして保存．

## 機能説明

アバター編集画面は右クリック長押しで回転，左クリック長押しで移動

![001 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/64c5e113-c0df-c761-c40b-9088b9dd8dfc.png)
- Setup : root以下のMesh一覧を更新します．
- Mesh一覧 : 編集したいメッシュ名をクリックします．左のチェックボックスでオブジェクトを非表示にできます．

- SaveAsBlendShape : 左のテキストボックス名のBlendShapeとして，現在の編集を保存する

- Undo : 編集をやり直します
- Redo : Undoを取り消します

### 通常編集モード
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/143e2d20-7cc6-0e45-1ff3-31b3bb14f7ef.png)
 クリックした位置のメッシュを引っ張る,膨らませることができる．
 
- Power : 押し出し，引っ張りの強さ（-1 押し出し，+1 押し出し）
- Width : クリック点からの編集の影響範囲
- Strengh : 範囲内の変形の滑らかさ（1≧なめらか，1≦均一）

- Mirror(x,y,z) : x(y,z)軸対称に編集を行う設定
 
 ### 頂点編集モード
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/9da1f216-6021-eca0-8a8a-11bc6fcbc205.png)
  クリックした頂点を，青点から赤点に移動させる．
  
 - Width : クリック点からの編集の影響範囲
 - Strengh : 範囲内の変形の滑らかさ（1≧なめらか，1≦均一）

- Mirror(x,y,z) : x(y,z)軸対称に編集を行う設定

### メッシュ編集機能
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/8a845b4c-7bf3-4b79-ca6b-b4155cf53dc2.png)
 ポリゴンごとに移動,コピーなどの編集を行う
 
 - Land選択 : 繋がった頂点を一括選択する(ちょっと重いので注意)
 - ポリゴン選択 : 1ポリゴンごとに選択する
 
 - Transform : 選択中ポリゴンを移動する
 - Copy : 選択中ポリゴンを複製する(Can not undo) [参考](https://twitter.com/HhotateA_xR/status/1395655196781387778?s=20)
 - Deleate : 選択中ポリゴンを削除する(Can not undo)
 
 ### ActiveExperimental
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/44ffdc24-0266-e807-8104-9a39df933b28.png)
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/6ec6b126-67b4-86d6-8deb-723449cffc0c.png)
 - SelectVertexMode : 通常編集,頂点編集機能時に操作点が頂点に吸われる設定
 - RealtimeTransform : 頂点編集,メッシュ編集機能時にScene上のオブジェクトとして編集を行う [参考](https://twitter.com/HhotateA_xR/status/1396059845766172674?s=20)
 - SelectOverlapping : メッシュ編集機能時に重複頂点を一括選択する
 
 ### ActiveExperimentalBeta
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392903/863832a1-a7cb-fbaa-162d-74346f7008ec.png)
 - Delete : メッシュ編集時の"Delete"でポリゴンを同時削除する
 - MergeBones : ボーン削減機能(HumanBone:HumanoidBoneに含まれないボーンを参照から外す, ActiveBone:Sceneで非表示設定のボーンを参照から外す)
 - ChangeBone : ボーンの参照を別のHumanoidに移す(Merge:存在しない補助ボーンを追加する, Combine:存在しない補助ボーンをConstraintで追従する, Constraint:Constraintの設定のみ行う)
 - CombineMesh : メッシュの結合を行う(ActiveMesh:root以下のすべての表示中Meshを結合した1つのSkinnedMeshを作成する, Material:選択中メッシュのサブメッシュをShaderごとに結合する) [参考](https://twitter.com/HhotateA_xR/status/1398421460973064196?s=20) [参考](https://twitter.com/HhotateA_xR/status/1392077207061745664?s=20)
 - RandmizeVertex : アバターのリッピングを防止するためメッシュをランダムに変形する．(非推奨)
 - CopyBoneWeight : 他SkinedMeshからBoneWeightをコピーする(非推奨)
 - Decimate : ポリゴン数を目標値まで削減する(非推奨)
 - WeightCopy : メッシュ編集機能で選択中のポリゴンのウェイト値を，他頂点からコピーする． [参考](https://twitter.com/HhotateA_xR/status/1398421178432192513?s=20)
 - Decimate : クリックしたポリゴンを削減する．


# 宣伝
PsychicVRLabではUnityエンジニア・サーバーサイドエンジニアを募集しています！！ご応募お待ちしています！！

https://www.wantedly.com/projects/1360135

https://www.wantedly.com/projects/1360123