本日は Blender の技術調査枠です。
Blender2.8で利用可能なpythonスクリプトを作ります。
ポリゴン数を指定してリダクションする
対象オブジェクトを指定のポリゴン数以下に削減します。
リダクション前に「三角面化」モディファイアを適用します。
・apply_decimate_meshcount.py
# bpyインポート import bpy # 対象オブジェクトを指定のポリゴン数まで削減する # モディファイア追加の種類とマニュアル # (https://docs.blender.org/api/current/bpy.ops.object.html#bpy.ops.object.gpencil_modifier_add) def apply_decimate_meshcount(arg_objectname="Default", arg_targetmeshcount=10000) -> bool: """対象オブジェクトを指定のポリゴン数まで削減する Keyword Arguments: arg_objectname {str} -- 対象オブジェクト名 (default: {"Default"}) arg_targetmeshcount {int} -- 削減後の指定ポリゴン数 (default: {10000}) Returns: Bool -- 実行正否 """ # 指定オブジェクトを取得する # (get関数は対象が存在しない場合 None が返る) selectob = bpy.data.objects.get(arg_objectname) # 指定オブジェクトが存在するか確認する if selectob == None: # 指定オブジェクトが存在しない場合は処理しない return False # 変更オブジェクトをアクティブに変更する bpy.context.view_layer.objects.active = selectob # 「三角面化」モディファイアを追加する # 三角面化モディファイアのインタフェース # (https://docs.blender.org/api/current/bpy.types.TriangulateModifier.html) bpy.ops.object.modifier_add(type='TRIANGULATE') # 追加されたモディファイアを取得する trian_modifier = selectob.modifiers[-1] # 「三角面化」モディファイアを適用する bpy.ops.object.modifier_apply(apply_as='DATA',modifier=trian_modifier.name) # 「ポリゴン数削減」モディファイアを追加する # ポリゴン数削減モディファイアのインタフェース # (https://docs.blender.org/api/current/bpy.types.DecimateModifier.html) bpy.ops.object.modifier_add(type='DECIMATE') # 追加されたモディファイアを取得する decimate_modifier = selectob.modifiers[-1] # 現在のポリゴン数を取得する current_meshcount = decimate_modifier.face_count # 指定のポリゴン数より現在のポリゴン数が多いか確認する if current_meshcount > arg_targetmeshcount: # 指定のポリゴン数まで削減するための比率を計算する target_ratio = arg_targetmeshcount / current_meshcount # 削減の比率を設定する decimate_modifier.ratio = target_ratio # 「ポリゴン数削減」モディファイアを適用する bpy.ops.object.modifier_apply(apply_as='DATA',modifier=decimate_modifier.name) return True # 関数の実行例 apply_decimate_meshcount(arg_objectname="Sphere", arg_targetmeshcount=10000)