2018年10月30日

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

前回「doPaint()」から「paintFace()」を呼び出す時点で「vface」に格納されている多角形のデータで、不連続UVマップのデータが消えてしまうところまで確認した。「vface」には多角形の頂点座標のデータが順に入ってるんだけど、その座標値は2次元で、3つ目のデータが0か1かで次の頂点との間のエッジが不連続UVエッジなのかどうかを現すようになっている。そこで「doPaint()」のプログラムなんだけど、よく見ると「map」データから頂点データを取得して、1個ずつ処理していく時にその頂点よりひとつ前の頂点との間の距離を調べて1より大きい時に「vface」に頂点を登録している。そして最後の点と最初の点の距離を最後に調べて1未満だったら最後の点を削除するようにしている。この場合、最後の点とひとつ前の点の距離が1未満で、最後の点と最初の点の間のエッジが不連続UVだった場合に、最後の点が登録されないから不連続エッジのデータが消えてしまう事になる。

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

  for map in maps do (
    vface = #()
    bbp = undefined
    for i = 1 to map[1].count do (
      p = map[1][i]
      bp = [p.x * bitmapx,bitmapy - p.y * bitmapy,int(map[3][i])]
      if (bbp == undefined ) or ((bp[1]-bbp[1])^2 + (bp[2]-bbp[2])^2) >= 1 then append vface bp
      bbp = bp
    )
    
    dse = (vface[1].x - vface[vface.count].x)^2 + (vface[1].y - vface[vface.count].y)^2
    if dse < 1.0 then deleteItem vface vface.count
    if vface.count >2 then paintFace vface map[2] 
  )
),

解決は簡単で長さを調べるエッジを不連続UVのデータが示すエッジと一致させればいいだけだ。

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

  for map in maps do (
    vface = #()
    for i = 1 to map[1].count do (
      ni = int(mod i map[1].count) + 1
      ap = map[1][i]
      np = map[1][ni]
      bp = [ap.x * bitmapx,bitmapy - ap.y * bitmapy,int(map[3][i])]
      nbp = [np.x * bitmapx,bitmapy - np.y * bitmapy]
      if  ((nbp[1]-bp[1])^2 + (nbp[2]-bp[2])^2) >= 1 then append vface bp
    )
    if vface.count >2 then paintFace vface map[2]
  )
),

これが実行結果。不連続UV境界のエラーは解消された。

fig01

fig02

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30│Comments(0)3ds Max | CG

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives