2018年05月

2018年05月28日

Wacom Cintiq Pro 24 (マルチタッチ機能付き) 年内入手困難かも

そろそろ液タブが欲しいなと思って物色していると、ワコムから良さそうな新製品が出るのを知った。それはCintiq Pro 24(マルチタッチ機能付き)で、メーカー発表では5月発売となっている。

そこでそろそろ予約が始まっているかなと思ってヨドバシカメラに行って店員に聞いてみた。

現在マルチタッチ機能なしのCintiq Pro 24は発売中だけどその店員の話によれば注文が殺到して製造が全く間に合っていない模様だ。

そしてワコムはマルチタッチ機能なしの出荷が落ち着くまでマルチタッチ機能付きの方の製造は見送るらしいとの事だった。

そこで見通しを聞いてみたけど出荷が落ち着くのに半年くらいはかかるんじゃないかとの事だった。

そこからマルチタッチ機能付きの製造を始めたとして、出回るのにはさらにまた何ヶ月もかかるんだろうね。

当然の事ながらマルチタッチ機能付きの製品の予約注文は受け付けてなかった。

入手はしばらく諦めた方がいいみたいだ。

- 追記 -

やっとワコムから発表があったみたいだね。

Wacom Cintiq Pro 24 touch : 2018 年 7 月 26 日(木)より販売開始



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

今週は更新をお休みします

暑くなって来るとHDDが熱でクラッシュしがちなのでバックアップは小まめにとりましょう。

ではまた来週。



take_z_ultima at 11:30|この記事のURLComments(0)その他 

2018年05月24日

ビットマップペイントツールのチュートリアルをやってみた その146 3dsmax 2018

引き続きMAXScriptマニュアルに載っている「チュートリアル-ビットマップペイントツールを9つの簡単なステップで作成する」 の続きを考えて見たい。

前回出てきた塗り潰す多角形の一番上と一番下のエッジが水平になった時の間の頂点問題だけど、結局エッジを左右だけじゃなくて上下にも分けて、もしあれば一番上の水平エッジと一番下の水平エッジを記録する配列を作って対処する事にした。

また、vfaceの値はside配列にそのまま渡されるので、ここにエッジの不連続情報も付加してしまえばプログラムを単純化できる事に気付いた。

そこでまず「vface」配列を生成している「doPaint()」の部分を以下のように修正した。これで「vface」に記録される頂点座標の3番目の値が1か0かで連続・不連続が判定できる。そして「paintFace()」を呼び出す時に引数で「elist」を渡す必要は無くなった。

fn doPaint = (
  local theMesh = snapshotAsMesh theObj
  local theChannel = 1
  local maps = #()
  crossFaceMaps &maps theMesh theChannel brushtransform mt2b
  checkBitmap = #{}
  edgecheck = #{}
  edgeBitmap = bitmap bitmapX bitmapY color:white

  for map in maps do (
    vface = #()
    for i = 1 to map[1].count do (
      p = map[1][i]
      append vface [int(p.x * bitmapx), int(bitmapy - p.y * bitmapy),int(map[3][i])]
    )
    paintFace vface theBitmap map[2] brushtransform.pos
  )
),

続きはまた次回。

maxまとめページ



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

2018年05月23日

プロシージャルモデリングについて調べてみた その46 modo11.2v2

引き続き「Profile Sweep」の「Profile Sweep Mesh」アイテムを調べて行きたい。

「Curve Extrude」の「Tool Pipe」には「Path Generator」と「Path Segment Generator」がセットされていて、「Path Generator」の「カーブ」には「Profile Sweep Path」がセットされている。このパスが掃引のパスになるわけだ。

fig01

まず「Profile Sweep Path」→「Path Generator」でカーブ形状パスに変換する。パス化されるのは「Profile Sweep Path」の中の「カーブインデックス」で指定されたカーブだ。メッシュアイテムの中にカーブが何本もある場合にこのパラメータでカーブを切り替えられる。

fig02

パスはカーブに沿って「始点」「終点」「スライド」で開始位置と長さが決められる。パスはカーブ全長を100%として「始点」から「終点」までの長さになり、「スライド」で長さは変えないで始点の位置をカーブに沿ってずらすことが出来る。

次に「Path Segment Generator」でそのパスに沿って「パーティクル」を発生させる。

発生するパーティクルの数と位置はカーブの曲率から自動的に決まる方式と数を指定してパスに等間隔で並べる方式が「自動」オプションで選択できる。「自動」がOFFの時は「ステップ」オプションでパーティクルの数を指定する。ONの時は「スムージング角度」でカーブの曲率のしきい値を設定することによって、この角度を超えて曲がるとパーティクルが発生するようになる。

fig03

「パスに整列」がONならカーブに沿ってパーティクルも相対的(始点を基準にカーブの変化ぶんだけ回転する)に回転するようになり、さらに「法線に整列」がONになるとその回転が曲線の方向に沿うようになる。

「起点から開始」をONにするとパーティクルの位置が相対的に参照されるようになり、「スィープエフェクタ」で使用すれば、掃引形状の始点が掃引されるアイテムの位置になり、OFFにするとパスの始点になる。

「スィープエフェクタ」はこうして得られたパーティクルに「selection」で指定されたアイテムを移動させながら繋いでポリゴンメッシュを生成する。今回は「selection」には何も設定されていないので「Profile Bounds Merge」で取り込まれたアイテムが対象になる。ただし「Profile Sweep Bounds」は4つの頂点が入っているだけでエッジもポリゴンも無いので掃引出来る要素は無く、実際は「Profile Sweep Profile」に入っている「プロファイル」形状が対象になる。

続きはまた次回。

modo10-11ブログ目次



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

2018年05月22日

ビットマップペイントツールのチュートリアルをやってみた その145 3dsmax 2018

引き続きMAXScriptマニュアルに載っている「チュートリアル-ビットマップペイントツールを9つの簡単なステップで作成する」 の続きを考えて見たい。

今回は「paintFace()」を書き換える事を考えてみたい。「paintFace()」の手順を図で示すと下のようになる。まず塗り潰す多角形の輪郭をあらわす連続した頂点リストが引数「vface」で渡される。これを左と右の輪郭に分ける。そして2本に分けた輪郭を始点終点として水平線を引いて塗り潰す。

fig01

多角形の頂点と連続・不連続のデータは「vface」と「elist」に入っていて、例えば2番と3番の間のエッジであれば2番の「elist」を見れば連続・不連続がわかる。

fig02

つまりエッジの状態は頂点番号の小さい側の数値で「elist」を参照すればいい。

「paintFace()」では「vface」を左右のエッジに分けて「side」配列に追加している。それが下の「append」の部分だ。

fn paintFace vface theBitmap mb2w bpos elist = (
  maxy = miny = vface[1][2]
  top = bottom = 1
  for i = 2 to vface.count do
  (
    if vface[i][2] >= maxy then (
      maxy = vface[i][2]
      bottom = i
    )
    if vface[i][2] <= miny then (
      miny = vface[i][2]
      top = i
    )
  )
  side = #(#(),#())
    
-- side1 vertex list
  sptr = 1
  vptr = top
  nvptr =  int(mod (vptr) vface.count) + 1
  safty = 1
  while vface[vptr][2] == vface[nvptr][2] do
  (
    vptr = int(mod (vptr) vface.count) + 1
    nvptr =  int(mod (vptr) vface.count) + 1
    safty +=1
    if safty > vface.count then return()
  )
  append side[sptr] vface[vptr]
  safty = 1
  do (
    vptr = int(mod (vptr) vface.count) + 1
    append side[sptr] vface[vptr]
    safty +=1
    if safty > vface.count then return()
  )
  while vface[vptr][2] != maxy
  
-- side2 vertex list
  sptr = 2
  vptr = bottom
  nvptr =  int(mod (vptr) vface.count) + 1
  safty = 1
  while vface[vptr][2] == vface[nvptr][2] do
  (
    vptr = int(mod (vptr) vface.count) + 1
    nvptr =  int(mod (vptr) vface.count) + 1
    safty +=1
    if safty > vface.count then return()
  )
  
  append side[sptr] vface[vptr]
  safty = 1
  do (
    vptr = int(mod (vptr) vface.count) + 1
    append side[sptr] vface[vptr]
    safty +=1
    if safty > vface.count then return()
  )
  while vface[vptr][2] != miny
--line scan
  side2ptr = side[2].count
  ix1 = scanx side[1][1] side[1][2] miny
  ix2 = scanx side[2][side2ptr] side[2][side2ptr-1] miny

  drawline ix1 ix2  miny theBitmap mb2w bpos #top

  for i = 1 to ( side[1].count - 1) do
  (
    for iy = side[1][i][2]+1 to side[1][i+1][2] do
    (
      while iy > side[2][side2ptr - 1][2] do (
        side2ptr -= 1  
      )
      if side2ptr == 1 then side2ptr = 2
      ix1 = scanx side[1][i] side[1][i+1] iy
      ix2 = scanx side[2][side2ptr] side[2][side2ptr-1] iy
      if i==( side[1].count - 1) and iy ==side[1][i+1][2] then (
        drawline ix1 ix2 iy theBitmap mb2w bpos #bottom
      ) else (
        drawline ix1 ix2 iy theBitmap mb2w bpos #none
      )
    )
  )
),

だから基本的にこの「append」の部分で追加している頂点と同じ番号の「elist」の値を取り出して一緒に記録するようにすれば良さそうだ。

ただ、輪郭を左右に分ける時に輪郭の一番上と一番下の頂点で高さが同じであれば、水平線で塗り潰す時に不必要なので間にある頂点は削除していた。

fig03

でも間のエッジが部分的に不連続UVエッジだったり連続エッジだったりする事もあるわけで、対応する必要がありそうだ。

続きはまた次回。

maxまとめページ



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