MRが楽しい

MRやVRについて学習したことを書き残す

Blenderで利用可能なpythonスクリプトを作る その9(法線の再計算)

本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com

法線の再計算を実行

指定オブジェクトに法線の再計算を実行します。

・cleanup_mesh_object.py

# bpyインポート
import bpy

# オブジェクトに法線の再計算を実行する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def normals_make_consistent(arg_objectname='Default'):
   # 他のオブジェクトに操作を適用しないよう全てのオブジェクトを走査する
   for ob in bpy.context.scene.objects:

     # 非選択状態に設定する
     ob.select=False

   # 指定オブジェクトを取得する
   selectob = bpy.data.objects[arg_objectname]

   # 変更オブジェクトをアクティブに変更する
   bpy.context.scene.objects.active = selectob

   # 編集モードに移行する
   bpy.ops.object.mode_set(mode='EDIT', toggle=False)

   # 頂点を全選択した状態とする
   bpy.ops.mesh.select_all(action='SELECT')

   # 面と頂点の法線をメッシュの外側(inside=False)に向ける
   bpy.ops.mesh.normals_make_consistent(inside=False)

   # オブジェクトモードに移行する
   bpy.ops.object.mode_set(mode='OBJECT', toggle=False)

   return

# 関数の実行例
normals_make_consistent('Sphere')

f:id:bluebirdofoz:20190518225810j:plain

法線の再計算は閉じられたメッシュの外側に法線を向けます。
正しく法線を設定する場合は、重複頂点の結合や面の穴埋めを予め実施する必要があります。
前回記事のクリーンアップ操作の関数を組み合わせると、これらの操作を一括で実行できます。
bluebirdofoz.hatenablog.com