-
Notifications
You must be signed in to change notification settings - Fork 22
/
devnote.txt
348 lines (242 loc) · 13.1 KB
/
devnote.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
ーーーーーーー
Rigid Body Gen
ーーーーーーー
辺選択
骨生成
剛体・ジョイントA生成
ジョイントB(横)生成
ジョイントBの紐付け方法
1.Bmeshで辺情報を取得
2.生成した剛体のID情報から隣り合う頂点IDから関係性を取得→間が空いた場合難しい。
Create Bone to Curves
and Weight
and RIgidbody
and convert mesh
ーーーーーーー
Soft Engine
ーーーーーーー
使い方:
布のシミュレーション
服の一部でもを剛体設定できる
ジョイント設定のliner設定はZはゼロ固定、angleはいらない
機能:
選択辺に剛体とジョイント追加
選択カーブ頂点に剛体を追加 Hook版とメッシュ変換
剛体と剛体の間にジョイント追加
TODO:
●:パラメーター設定
剛体の大きさ
摩擦
曲げ角度
硬さ(スプリングのみ)
伸び
跳ね返り
重さ
済:パラメータープリセット
シルク
●:進捗バー
NG:Locationリセット
Locationが原点になると吹っ飛ぶ。
済:UI
●:剛体のシェイプ選択
●:loop animation
タイムラインが0になるとリセットされるのが難点。
0になるまえに剛体位置をリセットして継続的に動かせるようにしてみるか?
剛体をグループ設定して位置をApply visal Tranceform
初期位置にも戻せるようにリセットボタン
●:剛体グループの選択
●:剛体グループとジョイントをグループで削除する機能
●:オートウェイトペイントモードも必要。
メッシュが細かい場合に簡略化して実装する必要がある。
●:頂点ウェイトでパラメーター設定
●:選択に対して適当に間引いて剛体を設定してくれるモード
チェッカーセレクトとか
●:剛体ごとのアニメONOFF機能(UI)
アニメーション中に剛体を選択したらanimatedをON、選択外したらOFFにするようにすると自由に動かせる。イベント機能使う
●:剛体の摩擦を上げたりしたら重力で自然なシワシミュレーションに使えるんじゃないか
リアルタイムに剛体のポイントをトランスフォームできる
剛体のアニメーションベイク機能、リアルタイムの記録機能使う
●:ジョイントのangle,liner値のプレビュー
●:風などのForceもうけられるように
ーーーーーーー
Auto Human Ragdall
ーーーーーーー
・Base ボーンを選択したら自動で剛体とジョイントをセットしてくれる。
・まとめてON/OFFのキーチェックボタン
ーーーーーーー
0.88
アドオン更新方法
ソースをAtomで更新して、Blenderでインストール後はアドオンの場所のファイルを直接上書きして更新
アドオンの場所
MAC
/Users/micc/Library/Application Support/Blender/2.81/scripts/addons
2.8対応
・クラス名称ルール適用
・
rigidbody shapeが表示されないのはバグらしい
https://developer.blender.org/T70543
⇨もう治った
インストールできた
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 448, in execute
mat = add_mat(self, context)
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1416, in add_mat
mat.use_shadeless = True
AttributeError: 'Material' object has no attribute 'use_shadeless'
マテリアル設定昨日の見直し必要。internal renderなくなったので。
剛体の表示をどうするか
旧式は、オブジェクト自体は非表示にして、剛体のタイプを表示していた。
⇨Wire表示にして、shapeのを表示する
def add_mat(self, context):
.data.materials.append(mat)
をコメントアウト
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1124, in execute
acrive_layer = bpy.context.scene.active_layer
AttributeError: 'Scene' object has no attribute 'active_layer'
active_layer 関係を非表示に。19レイヤーとかなんでだったかわすれた。
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1155, in execute
bpy.ops.mesh.primitive_cube_add(radius=1, view_align=False, enter_editmode=False, location=selected_bones.head, layers=(False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True))
File "/Applications/Blender.app/Contents/Resources/2.81/scripts/modules/bpy/ops.py", line 201, in __call__
ret = op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "radius" unrecognized
primitive_cube_addの構文が変わったので差し替え
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1164, in execute
jc.show_x_ray = True
AttributeError: 'Object' object has no attribute 'show_x_ray'
下記で対応
rc.show_in_front = True
# rc.show_transparent = True
# rc.show_wire = True
# rc.data.materials.append(mat)
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1276, in execute
rc2.update_tag({'OBJECT'})
TypeError: Object.update_tag(): required parameter "refresh" to be a keyword argument!
構文の更新
update_tag(refresh={'OBJECT'})
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1277, in execute
bpy.context.scene.update()
AttributeError: 'Scene' object has no attribute 'update'
update_tagに置換で解決
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1371, in execute
bpy.context.scene.objects.active = ob
AttributeError: bpy_prop_collection: attribute "active" not found
アクティブオブジェクトの指定構文が変わった。
bpy.context.view_layer.objects.active = bpy.data.objects[0]
とりあえず動作するところまで動いた
動作後のオプション変更でエラー発生
Traceback (most recent call last):
File "/Users/micc/Library/Application Support/Blender/2.81/scripts/addons/rigid_bodys_gen/__init__.py", line 1049, in draw
col.label("Limits:")
TypeError: UILayout.label(): required parameter "text" to be a keyword argument!
col.label("Limits:")
↓
col.label(text="Limits:")
剛体の表示を設定
不要なコメントを削除
済:タブが表示されない。
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 50, in execute
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 70, in createArmatureFromData
AttributeError: 'Object' object has no attribute 'selected'
location: <unknown location>:-1
ob.select_set(state=True)
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 50, in execute
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 69, in createArmatureFromData
AttributeError: bpy_prop_collection: attribute "active" not found
location: <unknown location>:-1
bpy.context.view_layer.objects.active = ob
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 50, in execute
File "/Users/micc/Documents/blender/addon/bone_gen/bonegen_dev.blend/AddBones.py", line 68, in createArmatureFromData
AttributeError: 'bpy_prop_collection' object has no attribute 'link'
location: <unknown location>:-1
#sceneにLinkはなくなった
scn = bpy.context.collection
scn.objects.link(ob)
アーマチュアつくるとこまで、ループの中に入れたらだめだから
アーマチュアとボーンの機能を分離するところから
親子だったらつなぐというロジックから
頂点が一緒だったらつなぐというロジックにする
3頂点重なったらジョイントも3つ?
テストツール
・選択ボーン同士をジョイントするボタン
・
選択辺の頂点に剛体とボーンを置く(1頂点1剛体)
辺の真ん中にジョイントを設置する
剛体をつなぐ
頂点ウェイトで角度を調整できるようにする
softengine
選択頂点にボーンを生成
選択頂点またはボーン位置に剛体オブジェクト生成
選択辺の真ん中に剛体ジョイントオブジェクト生成
剛体とジョイントを設定
頂点情報と、辺の頂点情報のindexを照らし合わせてジョイントをつないでいく。
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/rigid_bodys_gen/rigid_bodys_gen_dev.blend/SoftEngine.py", line 68, in execute
TypeError: Element-wise multiplication: not supported between 'Vector' and 'Vector' types
location: <unknown location>:-1
python - TypeError: Element-wise multiplication: not supported between 'Matrix' and 'Vector' - Blender Stack Exchange
https://blender.stackexchange.com/questions/129473/typeerror-element-wise-multiplication-not-supported-between-matrix-and-vect
アダマール積は使えなくなった。
* じゃなくて @
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/rigid_bodys_gen/rigid_bodys_gen_dev.blend/SoftEngine.py", line 70, in execute
File "/Applications/Blender.app/Contents/Resources/2.81/scripts/modules/bpy/ops.py", line 201, in __call__
ret = op_call(self.idname_py(), None, kw)
ValueError: Converting py args to operator properties: sequence expected at dimension 1, not 'float'
location: <unknown location>:-1
ジョイント用オブジェクトの座標がずれちゃう問題。
world_matrixを@する
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/rigid_bodys_gen/rigid_bodys_gen_dev.blend/SoftEngine.py", line 65, in execute
KeyError: 'bpy_prop_collection[key]: key "softbone.306" not found'
location: <unknown location>:-1
obamt[0].pose.bones[bone.name].constraints.new("CHILD_OF")でエラー
python - Child Of's set inverse without using bpy.ops - Blender Stack Exchange
https://blender.stackexchange.com/questions/18562/child-ofs-set-inverse-without-using-bpy-ops
python 行列 配列 変換 2次元配列を1次元にして重複してない頂点IDだけ取り出す
NumPy配列ndarrayとPython標準のリストを相互に変換 | note.nkmk.me
https://note.nkmk.me/python-numpy-list/
済:あとはウェイト設定
済:ジョイント紐付け
親紐付けで頂点グループつくるのにエディットモードじゃだめってエラー
Traceback (most recent call last):
File "/Users/micc/Documents/blender/addon/rigid_bodys_gen/rigid_bodys_gen_dev.blend/SoftEngine.py", line 99, in execute
RuntimeError: Error: VertexGroup.add(): cannot be called while object is in edit mode
BMedgeの情報はどうやらエディットモード切り替えるとリセットされてしまうらしいので、
実施順番を入れ替えて対応。
ひととおり設定できたけどジョイントのlinerリミットが効かないし、passiveもすり抜ける。
→剛体が小さすぎたらしい。10倍にしたら大丈夫だった。
済:端っこの剛体にはstaticにしたい。
→選択辺の頂点を記録して重複がない頂点のindexリストを作る
→重複がない頂点はstaticを設定する。
済:端っこのシングル頂点をパッシブ設定にするロジックを追加
soft engineいったん休止。思うような挙動にならない。
-----
Rigid body genou 追加機能
●Rigid body の横コンストレイント実装
済:プロパティまわりのソースリファクタリング
済:ジョイントをEnptyに変更
●剛体・ジョイントのcollection追加機能
-collectionの選択
-collectionのの一括設定変更
-collectionの削除
-既存collectionへの追加(実行後)
●名前付けルール
●Root剛体の生成・設定
collectionの生成
scripting - What is the Python code related to collection actions for blender 2.8? - Blender Stack Exchange
https://blender.stackexchange.com/questions/126259/what-is-the-python-code-related-to-collection-actions-for-blender-2-8
Where to find collection_index for moving an object? - Other Topics / Python API - Blender Developer Talk
https://devtalk.blender.org/t/where-to-find-collection-index-for-moving-an-object/3289
Instead use collection.objects.link() and collection.objects.unlink() API functions.
y = bpy.data.collections.new('newcollection')
bpy.context.scene.collection.children.link(y)
bpy.data.collections['Collection 1'].objects.link(ob)