夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

BlenderでPythonスクリプトでNゴンを検知する

本日はBlender Python枠です。

〇Nゴンとは?

Nゴンはメッシュの形状を表す概念です。

通常ポリゴンモデルは3つの頂点から構成される面によって構成されます。

3つの頂点の場合はポリゴンと呼ばれますが、Blenderを含む一部のアプリケーションについては3つを超える頂点によって構成される面も使用されています。(広義にはポリゴン(polygon)=poly(多くの)-gon(角)という意味であり、ポリゴンという言葉自体は多角形全体を指します。)

N個の頂点であらわされるという意味でこのようなメッシュをNゴンと呼びます。

Blenderで通常機能でNゴンを検知する

まずはPythonで自作する前にBlender自体に組み込まれている機能がありますのでそちらを紹介します。

Blenderの場合は面の頂点数を基準に選択を行う機能があります。

これは編集モード選択特徴で全選択Faces by Sides(面の辺数)を選択します。

3Dビューポートに表示されるウィンドウで頂点数を3に設定してタイプを大きいに設定することでNゴンが選択されるようになります。

Pythonを使用してNゴンを検知する

まずはすべてのポリゴン数を検出するコードを書きます。

import bpy

# アクティブなオブジェクトを取得
obj = bpy.context.active_object

if obj is not None and obj.type == 'MESH':
    # メッシュデータを取得
    mesh = obj.data
    # ポリゴン数を出力
    print("ポリゴン数: ", len(mesh.polygons))
else:
    print("メッシュオブジェクトが選択されていません")

このコードを実行すると次のようにコンソールにポリゴン数が出力されます。

ここで使用しているbpy.context.active_object.data.polygonsによってそのオブジェクトのすべてのポリゴン数を出力できます。

次に3つ以上の頂点で構成されるNゴンの数を検知します。

import bpy

# アクティブなオブジェクトを取得
obj = bpy.context.active_object

if obj is not None and obj.type == 'MESH':
    # メッシュデータを取得
    mesh = obj.data
    # ポリゴン数を出力
    ngon_count = sum(1 for p in mesh.polygons if len(p.vertices) > 3)
    print("Nゴンの数: ", ngon_count)
else:
    print("メッシュオブジェクトが選択されていません")

このコードを実行することでNゴンの数を出力できます。

こちらのコードでは選択されたメッシュオブジェクトから3つ以上の頂点を持つポリゴンを検出しています。

if len(p.vertices) > 3は3つ以上の頂点を持つ場合に真となります。

pはすべてのポリゴンを示しており、最終的にsum()関数によって加算されてNゴンの数となります。

以上でNゴンの数を検知することができるようになりました。

本日は以上です。

〇参考

cgbox.jp