アストラルプリズム

PC、スマホ、ゲームなどの備忘録と日記

blender

Blender pythonでメッシュから立方体を作る。

3Dビュー→追加→メッシュ→立方体で作られるメッシュと同じものを作りたい。この立方体実はBlenderを起動したときに出てくる立方体とは面の向きが違うのでちょっと注意が必要なのである。 bpy.ops系の場合 一行で済む bpy.ops.mesh.primitive_cube_add(enter_…

Blender python マトリックスワールドで回転させる

図の通り、回転する軸を指定して回転させたい 手動の場合 編集モードで回転させたい軸を選択して メッシュ→スナップ→カーソル→選択物 にして トランスフォームピポットポイントを3Dカーソルにして 後はrを押して回転させればいい。 pythonスクリプトの場合 …

Blender pythonマトリックスワールドの使い方の解説が分かりやすいリンク

マトリックスワールドの定義は分かったものの使い方がよく分からなかった。 以下のリンクを読んだらよく分かった。大抵自分が悩んでる事は先人がQ&Aしてるので感謝。 とりあえずめもめも。 余談だけどグーグル翻訳が優秀で解説サイトを読むのがホントに楽に…

Blender python マトリックスワールドとは

座標軸を表すマトリックスワールドを理解しとけば三角関数やら複雑な式を使わなくてもメッシュの移動や変形が楽になるハズ。定義 マトリックスワールドとはある座標軸の傾きと原点からの距離を表したもの解説 図のように任意の座標軸をエンプティとすると分…

blender python コマンドのメモ

pythonコンソールでオートコンプリート機能を使うとインフォメーションウィンドウより詳しい事が分かる。 上の緑色がpythonコンソールでbpy.ops.transform.resize(と入力した後ctrl+スペースキー 青色が3Dビューで拡大縮小を使用したもの ちゃんとドキュメ…

Blender python mesh について

メモメモ・・・ obj = bpy.context.object msh = bpy.data.meshes[obj.data.name] #面に含まれる頂点のidをまとめて出力 msh.polygons[0].vertices[0:] #ループでidを使いたい時 p = msh.polygons[0] for i , id in enumerate(p.vertices): ... print(id) ..…

Blender python 指定したベクトルの方向に頂点を移動

指定したベクトル(ここではノーマル)の方向に頂点を移動する。 new_locのところまでは頂点の値はグローバル座標なので、マトリックスワールドを逆さ(invert)させたものを掛けてローカル座標に直している obj=bpy.data.objects['立方体.003'] mw=obj.matr…

Blender python なるべくbpy.opsを使わない方法

bpy.ops系は遅いのですよ・・・。 あとどれがアクティブでセレクトなのかとか後で改造するときに調べるの大変なのでなるべくbpy.data系を使っていきたい今日この頃・・・ 拡大縮小 import bpy #bpy.ops系(ローカル座標基準の場合のみ) bpy.ops.transform.res…

Blender python コンソールでは動くのにテキストエディタからだと動かない場合

分からん具合が高まって死にそうになる テキストエディタから実行した時とpythonコンソールで結果が違う場合も同じ 原因 ・前のデータが残ってる ・importするものが足りない ・bmeshにbm.faces.ensure_lookup_table()が必要 ・変更が更新されてない 前のデ…

Blender python 平面に垂直かつ外向きにオブジェクトを置く

毎度毎度座標系のスクリプトを作ろうとして、ド忘れしてひどい目に合うので、分からないなりに考え方と手順を書く。 それぞれの辺の中心に面に垂直かつ面の外側に向かってモンキーを置きたい 図にするとこんな感じ。 手順 1、面の垂直方向を調べる 2、辺の外…

Blender python mesh・bmeshで取得した値がおかしい

毎回ドはまりして死ぬのでしっかりメモをとっていきたい。 原因 ・コマンドが違う(一度消したデータが残ってる) ・トランスフォームされてる ・matrix_worldを掛ける順番が違う ・ベクトルの掛け算の記号がBlender2.8から@に変わった コマンドが違う mesh…

Blender python用にVisualStudioCodeを使う(注意点)

Blenderのテキストエディタは日本語入力ができないので(外部からコピペは可能)スクリプト作ってて頭おかしくなりそうなのでいい加減何とかしたい 2019.12.22に書いてるので変わるかも。 とりあえずメモ帳でもなんでもいい~ blender側で実は簡単な方法が用…

python メモ

忘れそうなアレコレ 配列で偶数個目の時だけ実行 num=[0,1,2,3,4,5] a=[] for v in num[0::2]: a.append(v) aの中身は[0,2,4]になる 配列を交互に実行 二つの配列をまとめてループさせる ただし少ない方の配列が無くなれば終わり verts=[1,5,8] time=[5,7,3]…

Blender python bmeshとindexについて

毎回忘れるの何とかしたいorz index番号は頂点や辺につく固有の名前?みたいな感じ。 aaa=bpy.context.object bpy.ops.object.mode_set(mode='EDIT') bm = bmesh.from_edit_mesh(aaa.data) した後のbmeshとindexの関係(例:下図) bm.faces[0].edges[0]のin…

Blender python メモ

忘れるのでどんどん追加していく予定 エディットモードで現在アクティブなものを取得(bmesh使用) >>> bm.select_history.active<BMEdge(0x0000019A368F74A0), index=2, verts=(0x0000019A22750120/2, 0x0000019A22750158/3)> bmeshのedgesの選択される順はindexの逆の数になってるっぽい? BMEdgeとindexが2になってることからアクティブなのは bm.fac</bmedge(0x0000019a368f74a0),>…

Blender  テクスチャの位置をランダムにする

一枚のテクスチャをそれぞれランダムな位置に貼りたい。 木やブロックや石をたくさん作るときに便利。 やり方 普通にテクスチャを貼るノードを作った後にマッピングの位置にオブジェクト情報とベクトル演算(乗算)を繋ぐ。 そうするとランダムな位置にテク…

Blender  bmeshを使った時に出る「run ensure_lookup_table() first」の解決方法

bmesh使って頂点の座標を取得しようとした ############################ a = bpy.context.object bpy.ops.object.mode_set(mode='EDIT') bm = bmesh.from_edit_mesh(a.data) v=bm.edges[0] hxyz=(v.verts[0].co+v].verts[1].co)/2 ########################…

Blender2.8系 pythonで3dビューのプロパティ・シェルフを操作する

Blender2.8系でツールシェルフの操作がいくつか簡単になった様子。 2.7系用は以下のリンクへ katsumi3.hatenablog.com 2.8系では3Dビューのプロパティシェルフ(Nキー)や上のところにある情報ウィンドウに出てくる命令文をそのまま使えばいい所が増えたっ…

Blender アドオンを2.7系から2.8系に治す方法

方法1 怪しい命令文を「bpy.context.scene.objects.active 2.8 bpy」などで検索する。 メジャーな命令文なら先人がすでに引っかかって海外サイトのQ&Aに書き込んでたりする。ありがたく読ませてもらう。 方法2 blender公式のBlender Change Logを検索する do…

Blender2.7系 pythonで3dビューのプロパティ・シェルフを操作する

3dビューのプロパティシェルフ(Nキーを押すと右にでてくるやつ)の中身を操作するのがちょっと面倒なのでメモ。 画面は残念ながらBlender2.79なのだけど、まあ2.8も特に変わってないと思いたい。 結構変わってましたorz 2.8系用の説明はこっち。 katsumi3…

辺の選択順序を辺に沿って順番にする方法

辺の選択順(index)を辺に沿って順にしたいが「要素をソート」で出来ない場合。 頑張ればbmeshで並び替えれなくもなさそうな気もするけど面倒。 解決するには メッシュからカーブに変換して、またカーブからメッシュに変換し直すと辺に沿ってループ状に選択順…

bpyでのメッシュデータの取り方

毎回忘れるエディットモードからのデータ取得方法 bmeshを使用し基本的に面のデータに辺のデータが含まれ、さらに辺のデータに頂点のデータが含まれるという構造になっている。 手順 import bmeshする #オブジェクトモードで選択中の物体のデータを取得 a= b…