イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Blender アドオン 開発資料

++リンク

【Blender 2.8 アドオン開発】002 Blender API を調べて使ってみよう - めもてう

https://firemiller.net/2019/06/control-blender-camera/

 

++APIリファレンス

Blender 2.81a Python API Documentation — Blender Python API

 

++その他

f:id:arumogina:20200116025848p:plain

ここの情報ウィンドウで、実行したコマンドのAPIを確認出来る。

 

---

クラス名をXXX_OT_YYYみたいな形式にするのだが、このXXXが同じアドオンを複数入れても、どれか一つしか表示されない。

 

++++HowTo

++オブジェクト名、メッシュ名の変更

for obj in bpy.context.selected_objects:
  obj.name = "newName"
  obj.data.name = "kkk"

 

++FBXインポートしたメッシュで編集モードに移動出来ない場合

bpy.ops.import_scene.fbx(filepath=path)

でインポートした場合、そのままだとなぜか編集モードに移動出来ない。

bpy.ops.mesh.primitive_plane_add()
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.delete(type='VERT')

空のオブジェクトを作成

bpy.ops.object.select_by_type(type="MESH")
bpy.ops.object.join()

空のオブジェクトとインポートしたオブジェクトをジョイン

bpy.ops.object.mode_set(mode="EDIT")

これでEditモードに行ける

 

++++Error

RuntimeError: Operator bpy.ops.object.select_by_type.poll() failed, context is incorrect

 

=>select_by_typeはオブジェクトモードで実行されるがEditモードで実行した場合等に発生する。

bpy.ops.object.mode_set(mode="OBJECT")

でオブジェクトモードに切り替える。

 

イラストーメモ

++正確さより、良い感じに見えたらいい、を基準にする

 

++服の考え方

体の表面を伸ばす、たゆませる、膨らます、切る

体の造形から膨らませて考える

 

++練習法 完成のさせ方

まず書いてみる。

上手くかけなかったら、描きたいものと似た構図の絵を何枚か探してきて模写

もしくは、髪を上手くかけなかったら髪のみトレースとかでもいい。

もう一回書く。

これを繰り返す。

 

++ノウハウより経験

体の比率とか描き方のノウハウあるが、模写かトレースで感覚で覚えた方が早い気がする。

shader クリップ空間におけるBillboard

phiさんのfuwaパーティクルからビルボード以外の機能を除去したバッチングありでビルボードが可能なコードです。クリップ空間でビルボードをしている。

GitHub - phi16/VRC_storage: assets distribution

FuwaParticle 解説 - Imaginantia

 

//original-code
//https://github.com/phi16/VRC_storage#fuwaparticle
Shader "Arumogina-Phi16/BillboardOnClip"{
	Properties{
		_Size ("Particle Size", Float) = 1.0
	}
	SubShader{
		Tags { "RenderType"="Transparent" "Queue"="Transparent" }
		LOD 100
		Cull Off
		Blend SrcAlpha One
		ZWrite Off

		Pass{
			CGPROGRAM
			#pragma vertex vert
			#pragma geometry geom
			#pragma fragment frag

			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2g {
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct g2f
			{
				float4 vertex : SV_POSITION;
				float2 uv : TEXCOORD0;
			};

			float _Size;

			v2g vert (appdata v){
				v2g o;
				o.vertex = v.vertex;
				o.uv = v.uv.xy;
				return o;
			}

			[maxvertexcount(4)]
			void geom (triangle v2g vg[3], inout TriangleStream<g2f> stream) {
				g2f o;
				float size = 1.0;
				float3 p = 0, v = 0;
				//quadの中心点
				float3 quad_center = (vg[0].vertex.xyz + vg[1].vertex.xyz)/2;
				p = quad_center;
				float4 vp1 = UnityObjectToClipPos(float4(p, 1));
				//height/width
				float aspectRatio = - UNITY_MATRIX_P[0][0] / UNITY_MATRIX_P[1][1];
				float2 vd = float2(1,0);
				float2 vn = float2(0,1);

				float sz = _Size;
				vd *= sz, vn *= sz;
				vd.x *= aspectRatio, vn.x *= aspectRatio;

				/*
				基本的な原理:
				メッシュがクリップ空間に変換された場合の中心点を取得=>vp1
				その中心点から4方向に伸ばした頂点をappendすることでquadになる。
				この点はクリップ空間、つまり2dの画面上伸ばしてるのでBillboardと同様になる
				*/

				o.uv = float2(-1,-1);
				o.vertex = vp1+float4(vd+vn,0,0);
				stream.Append(o);

				o.uv = float2(-1,1);
				o.vertex = vp1+float4(vd-vn,0,0);
				stream.Append(o);

				o.uv = float2(1,-1);
				o.vertex = vp1+float4(-vd+vn,0,0);
				stream.Append(o);

				o.uv = float2(1,1);
				o.vertex = vp1+float4(-vd-vn,0,0);
				stream.Append(o);

				stream.RestartStrip();
			}

			fixed4 frag (g2f i) : SV_Target{
				return 1;
			}
			ENDCG
		}
	}
}

vrchat ワールド作成 メモ

++基本

UnityのUの字もわからないレベルから始めるVRChatのワールド作り(基本編) - Qiita

UnityのUの字もわからないレベルから始めるVRChatのワールド作り(応用編) - Qiita

 

++video prefab

GitHub - ziritsu/SyncVideoPlayer_iws

サイズを変更する場合、トップだけでなく、SpawnVideo,SpawnStreamも同一スケールにする必要がある。

VRCWORLDへの登録も忘れずに 

 

++同期するスライダー

必要なやつ

Dropbox - VRCPrefabToyboxV2.1.unitypackage - Simplify your life

Synced slidersに自作の機能を加える - Qiita

 

++bloom

Confluence

 

Intensity=3,

Threshold=1.3

ぐらいで良い感じになった.

他はデフォルト値。

パラメタを変更するには、パラメタの左端のチェックボックスにチェックを入れる。

 

f:id:arumogina:20200105125314p:plain

よくわからんのだが、Bloomのファイルは導入に失敗する場合があるっぽい。このようなカラフルなアイコンになってなければ再度入れなおしたらBloomが動くようになるかもしれない。

 

Post Processing Stack - VRChat 技術メモ帳 - VRChat tech notes

++その他便利prefab

その他ワールド系プレハブ - VRChat 技術メモ帳 - VRChat tech notes

 

++

メッシュの数が多いと、VRCSDKのBuildの項目に移動すると激重になる。非アクティブ状態にしアニメーションで自動的にアクティブ化すると軽快に出来る。

 

++++++トラブル

++Build&Testをしてもワールドに飛ばすホーム画面が飛ばされる

そのビルド時に何らかのエラーが起きている。

コンソールを見よう。

アセットストアからc#スクリプト付きのアセットをDLしてそれに起因するエラーが起きていたりすることが多い

VRCSDK Could not load avatar avtr_36f7730a-3b12-4d4f-8f34-e9c82d0f9835とか出た場合の対処

他でエラーが起きてるのが原因。

例えば別にc#スクリプトを書いたりしてると、通常の実行は問題なくともVRCSDKでアップロード実行のときは問題が起きるときがある。そのようなときはc#スクリプト

 

#if UNITY_EDITOR

#endif

で囲む。

 

VRChat-ジェネリックなアバターにLipSyncを仕込む

アバターのリップシンクの作成 - VRchat 日本wiki

基本的なやり方はこれ。

 

ジェネリックアバターに仕込むとか言ってるが、LipSyncが機能するにはHumanoidである必要があるため、ウェイトを塗ってないリグをメッシュにしこむ。 

 

++リグをモデルに入れる

https://booth.pm/ja/items/1145897

からリグのアドオンを落としてきて生成。

このとき、リグとメッシュを関連づける必要はない。ただ生成して一緒にエクスポートするだけでよい。

 

++シェイプキーを作成する

f:id:arumogina:20191227033008p:plain

ここの青く光ってるボタンが光ってると編集できない。クリックしてオフにしてシェイプキーを作成する。

 

++メッシュ・アームチュアをエクスポート

 

++Unityに取り込み、Humanoidの設定を行う。

is not T-Poseみたいなエラーが出てる場合、Unityのボーンの設定画面でPose=>EnForce-T-Poseを押せば解決する。

 

++これでDesctipterにwikiの通りにシェイプキーを設定すればOK

シェイプキーが見当たらない場合、シェイプキーを仕込んだメッシュでSkinedMeshRendererを追加すれば出てくると思う。

 

++CustomOverRideで移動アニメーションに空のアニメーションを仕込む。仕込まないとアバターが上下に揺れたりしてしまう

 

++アップロードしてテスト

リップシンクは声が小さいと少ししか動かず分かりずらかったりする。いー、と発音するのが一番わかりやすい。

blender2.8 シェイプキー

f:id:arumogina:20191227033008p:plain

この青く光ってるボタンが光ってると編集できないので注意