2016年08月

2016年08月31日

3ds Max 2017の新機能を調べてみた その24 3dsmax 2017

「UVWアンラップ」モディファイヤに新機能が追加された。

「選択方法」に新たに「対称ジオメトリ選択」が追加された。

fig01

これはエレメントの選択時に対称位置にあるエレメントを同時に選択するツール。対称軸は右のXYZのボタンで切り替えられる。また、対称となるエレメントの探索は単純な座標値の反転以外の事もやっているようで、多少アバウトな位置関係でも「しきい値」の値を増やすことで見つけられる可能性が増えるようだ。

fig07

「マテリアルID」ロールアウトは選択ポリゴンのマテリアルIDを設定したりIDで選択したりするツール。

fig02

ポリゴンを選択してから「IDを設定」に設定したいID番号を入力するとそのポリゴンが指定したID番号に設定される。

ポリゴンサブオブジェクトモードで「IDを選択」にID番号を入力するとそのIDが設定されているポリゴンが選択状態になる。

「UVエディタ」にも新しいツールが追加された。

fig05

「ブラシ」ロールアウトはブラシによるフォールオフ付きの移動とリラックスのツールになっている。

fig03

fig10ブラシの適用範囲と強度の分布は「フォールオフ」の切り替えと数値で決まる。アイコンは右側をブラシの中心、左端左をブラシ周縁として上下が強度のグラフを模したものだ。一番上の直線は中心から比例的に減衰するパターン。2番目は途中で急速に減衰するパターン。3番目は中心部はあまり減衰せず、周辺で急激に減衰するパターン(丸いペン先)。最後は中心から急減衰してそこから緩やかな減衰になるパターン(尖ったペン先)。

fig08移動ツールはそのフォールオフを使ってペン先の範囲を移動させるツール。

fig11

fig09この3つのボタンはリラックスツールだ。上から「ポリゴンの角度でリラックス」「エッジ角度からリラックス」「中心からリラックス」だ。

「ポリゴンの角度でリラックス」はジオメトリの方のポリゴンどうしの角度を基準にリラックスをかける。多少形状は犠牲になるけどポリゴンの位置関係はオリジナルジオメトリに近付き、ジオメトリとUVマップ間の歪みが減少する。例えば下の画像のようにジオメトリ形状がドーナツで、

fig12

その表面を2つのパートのUVマップにした場合、

fig13

「ポリゴンの角度でリラックス」を全体に一様にかけるとこのようにUVマップの形状がドーナツ形状に近付き、ポリゴンそれぞれがオリジナルの形状に近付く。

fig14

「エッジ角度からリラックス」はジオメトリのポリゴンのエッジ角度をUVマップで再現するように働く。うまく行けばポリゴンの形状はジオメトリの形状に近付くが、立体物を平面にする場合、エッジの角度を再現するのは無理な場合が多く、エッジを切り分けないとなかなか収束しない事になる。上記同様のことを「エッジ角度からリラックス」でやってみると、下のようにあちらを立てればこちらが立たないみたいな状態でUVマップがぐるぐる回り続けてしまった。

fig15

上記2つの例はブラシを使わないで一様にリラックスをかけたけどブラシを使った場合は強度のフォールオフがかかったブラシで部分的にリラックスさせて行くのでテクスチャの歪みを減らしたい部分をブラシでなぞることで歪みを他の部分に押し出す事が出来るかも。

「中心からリラックス」はポリゴンの重心から頂点への張力を使ってUVマップの皺を伸ばす方式のリラックスだ。皺が伸びれば皺で重なってしまっていたUVマップが解消される。

fig16

「Intel HD Graphics 4000」と「Quadro K2200」を組み合わせて使ってみたら「Nitrous Direct3D 11」ディスプレイドライバでは下のようにカーソルの処理がおかしな事になってしまった。「HD Graphics 4000」を無効にすれば問題なく動作する。

fig06

「ピール」ロールアウトに「オーバーラップを無効」オプションが追加された。

fig04

デフォルトではこのオプションはONになっていて、ピールツールで生成したUVメッシュが重ならないようにパックされる。OFFの場合はメッシュが重なってもそのままになる。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2016年08月30日

modo10のスクリプトについて調べてみた その11

前回まで調べたレイアウトを使わなくてもウィジェットを配置することは可能だ。ただその場合は自分でウィジェットのめんどうを見なくちゃならないので大変だ。

レイアウトを介さずに「QWidget」にウィジェットを追加する場合はウィジェットのコンストラクタに「parent」パラメータとして「QWidget」を与える。例えば「QPushButton」ならパラメータは以下のようになっている。

PySide.QtGui.QPushButton(text[, parent=None])

そしてウィジェットのサイズと位置は「setGeometry()」によって設定出来る。x,yパラメータが位置で、w,hがサイズ(幅と高さ)だ。「parent」の「QWidget」の左上を(0,0)として右がX軸正方向で下がY軸正方向になる。

 PySide.QtGui.QWidget.setGeometry(x, y, w, h)
    Parameters:	

        x – PySide.QtCore.int
        y – PySide.QtCore.int
        w – PySide.QtCore.int
        h – PySide.QtCore.int

下のコードはこれらを使って2つのボタンをレイアウトを使わずに並べてみたものだ。さらにボタンは「show()」メソッドで表示を有効にしないと表示されなかった。

import lx
import lxifc
import PySide
from PySide.QtGui import *

class MyLayoutTest(lxifc.CustomView):

    def customview_Init(self, pane):
        if pane is None:
            return False
        custPane = lx.object.CustomPane(pane)
        if not custPane.test():
            return False
        parent = custPane.GetParent()
        widget = lx.getQWidget(parent)
        if widget is not None:
            btn1 = QPushButton("Button1",widget)
            btn2 = QPushButton("Button2",widget)
            btn1.setGeometry(10,10,100,50)
            btn2.setGeometry(100,120,150,200)
            btn1.show()
            btn2.show()
            return True
        return False

lx.bless(MyLayoutTest, "My Layout Test")

これがその結果。ボタンのサイズと位置が指定通りに出ている。

fig01

しかしレイアウトなしではパレットのサイズが変わってもウィジェットのサイズも位置も調整されないのでこんな事になってしまう。

fig02

それではまた次回。

modo10ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2016年08月29日

3ds Max 2017の新機能を調べてみた その23 3dsmax 2017

前回に引き続き「ベベルプロファイル」モディファイヤだ。

キャップはベベルされたオブジェクトの端をポリゴンで塞ぐものだ。

fig02

キャップはベベルされるパスの両端に設定出来るので、設定は下のロールアウトのように「開始」と「終了」の2つある。

fig01

「キャップ」のタイプは4通りある。

fig03

「キャップなし」はパスを掃引しただけの形状に、「キャップ」はその形状の端をポリゴンで塞ぐ。「キャップなしのベベル」「キャップ有りのベベル」はベベルを施した上で端をポリゴンで閉じるかどうかの設定。

fig04

「コンストレイント」はプロファイルの曲線のどちらの端を基準に掃引するかを設定する。

fig06

「コンストレイント」がOFFの時はプロファイルの曲線の右上の端の点が基準になり、端面の形状が元の図形と同じになり、ONの時はプロファイルの曲線の左下の端の点が基準となってベベルの開始形状が元の図形と同じになる。

fig05

「キャップタイプ」はキャップの生成方法を「モーフ」と「グリッド」で切り替える。

fig09

「モーフ」はキャップする輪郭を構成する頂点を結ぶ三角ポリゴンで塞ぐので、キャップをしても頂点の数が増えない。

fig08

「グリッド」は細かいメッシュを生成してそれと輪郭を接続するかたちでキャップを生成するので輪郭の形状に左右されにくい。

fig07

「モーフ」は輪郭線の形状が違っても「ベベルプロファイル」の「セグメント」や「ステップ」などのパラメータが同じなら頂点数、ポリゴン数は同じになる。例えば下の2つのスプラインは頂点数が同じものだ。

fig10

そして「キャップタイプ」を「モーフ」にして生成されたオブジェクトのポリゴン数は共に212で、頂点数も共に108になった。

fig11

これを「グリッド」にすると、左のオブジェクトのポリゴン数は1560で右が1064、頂点数は左が782で右が534になった。

各パートは「マテリアルID」を個別に設定できる。

fig12

「マルチ/サブオブジェクト」マテリアルを割り当てれば、

fig13

個別にマテリアルを割り当てる事ができる。

fig14

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2016年08月26日

modo10のスクリプトについて調べてみた その10

前回は「QBoxLayout」とそこから派生した「QHBoxLayout」「QVBoxLayout」を使ってみたけど、その他にもレイアウトはいろいろあるようだ。レイアウトは「QLayout」クラスから派生しているようで、マニュアルでその派生先を見ると以下の種類が見つかった。

レイアウト 特 徴
QBoxLayout 縦または横に配置
QFormLayout 入力フォーム用にラベル付きでウィジェットを配置出来る
QGridLayout 表計算ソフトのように格子を使って配置出来る
QStackedLayout ページ切り替えが出来る

QFormLayout

下のコードは「QFormLayout」に「QLineEdit」と「QComboBox」を配置してみたものだ。見てわかる通りウィジェットを追加する「addRow()」メソッドはウィジェットと一緒にラベルも引数にとっている。

import lx
import lxifc
import PySide
from PySide.QtGui import *

class MyLayoutTest(lxifc.CustomView):

    def customview_Init(self, pane):
        if pane is None:
            return False
        custPane = lx.object.CustomPane(pane)
        if not custPane.test():
            return False
        parent = custPane.GetParent()
        widget = lx.getQWidget(parent)
        if widget is not None:
            layoutFrm = QFormLayout()
            lineedit1 = QLineEdit("")
            combobox1 = QComboBox()
            combobox1.addItem("item1")
            combobox1.addItem("item2")
            combobox1.addItem("item3")
            layoutFrm.addRow("name:",lineedit1)
            layoutFrm.addRow("item:",combobox1)
            widget.setLayout(layoutFrm)
            return True
        return False

lx.bless(MyLayoutTest, "My Layout Test")

これがその実行したもの。追加したウィジェットの横に入力したラベルが表示されている。

fig01

QGridLayout

下のコードは「QGridLayout」を使ってボタン4つとライン入力1つを配置してみたものだ。

import lx
import lxifc
import PySide
from PySide.QtGui import *

class MyLayoutTest(lxifc.CustomView):

    def customview_Init(self, pane):
        if pane is None:
            return False
        custPane = lx.object.CustomPane(pane)
        if not custPane.test():
            return False
        parent = custPane.GetParent()
        widget = lx.getQWidget(parent)
        if widget is not None:
            layout = QGridLayout()
            btn1 = QPushButton("Button1")
            btn2 = QPushButton("Button2")
            btn3 = QPushButton("Button3")
            btn4 = QPushButton("Button4")
            edit1 = QLineEdit("")
            layout.addWidget(btn1,0,0)
            layout.addWidget(btn2,0,1)
            layout.addWidget(btn3,1,0,1,2)
            layout.addWidget(btn4,2,0)
            layout.addWidget(edit1,2,1)
            widget.setLayout(layout)
            return True
        return False

lx.bless(MyLayoutTest, "My Layout Test")
ウィジェットを追加する「addWidget()」メソッドの引数が3つのものと5つのものがあるけど、定義は以下のようになっていて、ウィジェットを配置する矩形領域を表計算ソフトのセルのようなイメージで扱って、左上から縦にrow番目、横にcolumn番目のセルから縦にrowSpan個、横にcolumnSpan個連結したセルにarg__1のウィジェットを配置するような指定方法で、引数が3つのものはその簡略版で、1つのセルに配置するものだ。
  • def addWidget (arg__1, row, column, rowSpan, columnSpan[, alignment=0])
  • def addWidget (arg__1, row, column[, alignment=0])

これが実行結果。1列目はウィジェットの幅にあわせてレイアウトされているけど2列目はレイアウトされるビューポートにあわせてウィジェットの方がストレッチされている。これはラインエディットがストレッチされやすいウィジェットだったために他のウィジェットに影響が出たようだ。ラインエディットが無ければボタンはビューポートの幅にあわせて均等にストレッチされるようだ。

fig02

QStackedLayout

下のコードは「QStackedLayout」を使ってボタン2つとライン入力1つを切り替えるようにしてみたものだ。

import lx
import lxifc
import PySide
from PySide.QtGui import *

class MyLayoutTest(lxifc.CustomView):

    def customview_Init(self, pane):
        if pane is None:
            return False
        custPane = lx.object.CustomPane(pane)
        if not custPane.test():
            return False
        parent = custPane.GetParent()
        widget = lx.getQWidget(parent)
        if widget is not None:
            layout = QStackedLayout()
            btn1 = QPushButton("Button1")
            btn2 = QPushButton("Button2")
            edit1 = QLineEdit("")
            layout.addWidget(btn1)
            layout.addWidget(btn2)
            layout.addWidget(edit1)
            layoutV = QVBoxLayout()
            combo = QComboBox()
            combo.addItem('Page A')
            combo.addItem('Page B')
            combo.addItem('Page C')
            combo.currentIndexChanged.connect(layout.setCurrentIndex)
            layoutV.addWidget(combo)
            layoutV.addLayout(layout)
            widget.setLayout(layoutV)
            return True
        return False

lx.bless(MyLayoutTest, "My Layout Test")

「QStackedLayout」では「addWidget()」で追加したウィジェットが1つのページとなり、「setCurrentIndex()」メソッドで表示するページを切り替える事が出来る。下のGIFアニメが実行結果だ。

fig03

続きはまた来週。

modo10ブログ目次



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2016年08月25日

3ds Max 2017の新機能を調べてみた その22 3dsmax 2017

前回に引き続き「ベベルプロファイル」モディファイヤだ。

ベベルプロファイルのプリセットとして「(カスタム)」を選ぶか、「べべルプロファイルエディタ」ボタンをクリックすると、

fig01

下の画像のような「ベベルプロファイルエディタ」が表示され、プロファイル形状を作成したり編集したする事ができる。

fig02

起動時の「ベベルプロファイルエディタ」は現在設定されている形状が読み込まれる。プロファイルを作成する開始地点として登録済みプロファイルを使いたい場合はエディタ下にあるプロファイルのプルダウンから選択することで読み込む事が出来る。

fig03

エディタではプロファイルの線をクリックすれば頂点が追加され、ドラッグすれば移動する。「自動更新」ボタンがONの時はエディタ上でのプロファイルの操作がただちにモデルに反映される。

fig05

fig04

追加したポイントは「選択した頂点を削除」ツールで削除でき、

fig06

「カーブをリセット」で「線形」プロファイルに戻す事が出来る。

fig07

「ミラーカーブ」「曲線を反転」ルーツはクリックするたびに対角線でカーブを反転する。

fig08

fig09

fig10

「コーナー」「ベジェコーナー」「ベジェスムーズ」ツールは選択ポイントを切り替える。

fig11

fig12

選択頂点は数値を入力して正確な位置に設定する事が出来る。複数の頂点を選択して、同じ高さを入力することで高さを揃えたりするような使い方も出来る。

fig13

表示範囲や位置はおなじみのツールで移動、フィット、ズーム、範囲ズームなどが出来る。

fig14

作成したプロファイルは「カスタム」というプロファイルになるけどこれは一時的なもので他のプロファイルに切り替えると消えてしまう。残して他でも使いたい場合は「名前を付けて保存」でpリセットとして保存することが出来る。

fig15

プリセットは「マイドキュメント/3dsMax/BevelPresets」フォルダ内に拡張子「bevelpreset」で作成される。プリセットを削除する場合はこのファイルを削除して3dsmaxを再起動すればいいようだ。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG
Archives