ビューポート頂点アルファ値へのアクセス

3ds Max では、マッピング座標の保存に使用できる 100 のマップ チャネルをサポートしています 。

従来のサポート状況は以下のとおりです。

3ds Max 1.0 では、現在のチャネル 1 にあたる 1 つのテクスチャ チャネルをサポートしていました。

3ds Max 2.0 では、テクスチャ座標または頂点カラーの保存に使用できる 2 つ目のチャネルのサポートが追加されました。現在、これはチャネル 0 として保存されます。

3ds Max 3.0 では、チャネル数が 100 まで増えました。1 から 99 までの番号が付いたチャネルと、前述の頂点カラー チャネル 0 です。

これらのチャネルはすべて、Unwrap_UVW や、マテリアル エディタのマップによってアクセスできます。チャネルは、これらに接続するマップ頂点と面をサポートしています。詳細は、「テクスチャ座標について」を参照してください。関連メソッドについては、「一般的な Meshop マッピング メソッド」を参照してください。

3ds Max 4.0 では、ビューポート内のアルファに対するサポートが追加されました。この新しい内部チャネルは、インデックス -2 で提供されています。

また、3ds Max 4.0 では、1 から 100 までのインデックスの付いた 100 のユーザ データ チャネルが導入されました。 これらのチャネルは、頂点ごとに任意の Point3 型データを保存するのに使用できます。たとえば、ゲーム エンジンにエクスポートできるゲーム モデルの特別なデータなどです。これらには面配列はなく、頂点データ配列だけがあります。関連メソッドについては、「Meshop 頂点データ メソッド」を参照してください。

警告: マッピング チャネルと頂点データ チャネルは同じものではありません。

ユーザ データ チャネル 3 はアルファ値専用ですが、インデックス -2 で指定された内部マップ チャネルであるビューポート頂点アルファ チャネルとは関係を持ちません。

次の例では、4 つのセグメント(頂点は 6 つだけ)で球を作成し、そのビューポート アルファ値にアクセスします。もっと多くの頂点を取得するために、いつでも球のセグメント数を増やしてみることができます。

例:

    s = sphere segs:4 -- create a sphere
    convertToMesh s -- collapse to Editable Mesh
    s.showVertexColors = true -- enable Vertex Colors in Viewport
    s.vertexColorType = #alpha -- set Vertex Color type to Alpha

    --Read the number of mesh vertices
    mesh_verts = s.numverts
    --Set the map vertices for the first and last mesh vertex to black
    --Note that this access will automatically enable channel -2 and
    --build its internal vertex and face arrays.
    meshop.setVertAlpha s -2 #(1, mesh_verts) 0.0

    --Read the number of map vertices in Channel -2
    --Since the channel -2 is now enabled, you will get a valid result.
    --Evaluating this line BEFORE the previous one would lead to
    --an error message telling you Channel -2 is not enabled...
    map_verts = meshop.getNumMapVerts s -2
    --Go through all map vertices except the first and last and change
    --their Alpha value to a non-greyscale color using direct access
    --to the Mapping Channel -2
    for i = 2 to map_verts-1 do
        meshop.setMapVert s -2 i [i*0.1,i*0.05,1.0-i*0.1]
    --Update the mesh:
    update s

    --Go through all map vertices and print their values by
    --reading directly from Channel -2
    for i = 1 to map_verts do format "Map Vertex % = %\n" i (meshop.getMapVert s -2 i)

結果

    $Sphere:Sphere01 @ [0.000000,0.000000,0.000000]
    $Editable_Mesh:Sphere01 @ [0.000000,0.000000,0.000000]
    true
    #Alpha
    6
    OK
    6
    OK
    OK
    Map Vertex 1 = [0,0,0]
    Map Vertex 2 = [0.2,0.1,0.8]
    Map Vertex 3 = [0.3,0.15,0.7]
    Map Vertex 4 = [0.4,0.2,0.6]
    Map Vertex 5 = [0.5,0.25,0.5]
    Map Vertex 6 = [0,0,0]
    OK
    OK
注: 配列 #(1, mesh_verts)で指定されるのは、メッシュ頂点インデックスであり、マップ頂点インデックスではありません。meshop.setVertAlpha は、チャネル内の対応するすべてのマップ頂点を探し出して、これらすべてに影響を与えます。 このとき検索の必要はありません。

一方、meshop.setMapVert に対して指定されるインデックスはマップ頂点インデックスで、meshop.setVertAlpha の場合のようなメッシュ インデックスではありません。単一のメッシュ頂点に対応するもっと多くのマップ頂点が存在する場合は、これらすべてを探し出し、各値を別々に読み込む必要があります。この単純な例では、6 つのメッシュ頂点と対応する 6 つのマップ頂点が存在するだけなので、インデックスは同じです。

meshop.getMapVert は、特定のマップ頂点から実際に保存されている値を読み込みます。

例に示したとおり、meshop.setMapVert を使用して、アルファ チャネル -2 のマップ頂点の値を、ビューポートで表示されるカラーに設定することができます。アルファ チャネル -2 は、頂点カラー チャネル 0 と同じ方法で使用される通常のマッピング チャネルにすぎません。

meshop.setVertAlpha によって、指定されたメッシュ頂点の配列に関連するすべてのマップ頂点について、すべての Point3 型のコンポーネントを一度に単一の値に設定することができます。これによって、アルファ チャネルに RGB 値ではなくグレースケール値が確実に格納され、ユーザは Point3 型の値を入力したり影響するマップ頂点を検索するための追加作業を行わなくてすむようになります。

meshop.getVertAlpha に対応するものが存在しない理由は、単一のメッシュ頂点が対応する任意の数のマップ頂点を持つことができるからです。 これらはすべて異なる値を持つ可能性があり、そのすべての値に 3 つのコンポーネントがあり、各コンポーネントが異なっている場合もあります。それぞれが複数の結果と複数の Point3 型コンポーネントを持つメッシュ頂点のグループに対して、意味のある値を返すことは困難です。

meshop.getMapVert を使用すると、ユーザは対象となる正確なマップ頂点の正確な Point3 型値を取得して、それを希望どおりの方法で使用できるようになります。