0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MayaAdvent Calendar 2022

Day 18

ワイヤーフレームが黒くなる

Last updated at Posted at 2022-12-17

アニメーターさんからの連絡

ワイヤーフレームが真っ黒になるんですが、なんとかなりませんか

との事。

まっさかぁー・・・・・

image.png

ほらー大丈夫じゃーん
開き直すと・・・・・
image.png

真っ黒くろすけかむひぁ

確認

現象としては

  • 同じファイルを2個以上リファレンスすると、ワイヤーフレームの太さ・RGBがリセットされてしまう。
  • 数値的にlineWidthが-1になっている
  • カラーは 0,0,0になっている
  • 結果黒い細い表示になる。

数値がリセットされてるというよりも、数値が入力されず結果デフォルト値になってしまっているという印象

対策

とりあえずのところ、該当のファイルをreload referenceすると正常な表示に戻る様子。
ただ、アセット数が多いとリロードするだけでも面倒よのぉ

  • アトリビュートをロックしてみる
  • 数値保存用のattrを用意してコネクトしておく

アトリビュートをロックしてみる

対象のアトリビュートをロックしてしまえば行けるかな?と
image.png

shapes = cmds.listRelatives(target,s =True) or []
for shape in shapes:
    cmds.setAttr(shape + '.wireColorRGB',l=True)

結果はー

image.png

ダークネス!
ロックだけ生かし!

image.png

数値保存用のattrを用意してコネクトしておく

アトリビュートをわざわざ作ってコネクトしておけば・・・・

def addWireSettingKeep(target,wireColor,lineWidth):
    shapes = cmds.listRelatives(target,s =True) or []

    if len(shapes) == 0:
        return

    if cmds.objExists(target + ".wireColorKeep") ==False:
        cmds.addAttr(target, ln = "wireColorKeep",at = "compound",numberOfChildren = 3)
        cmds.addAttr(target, ln = "wireColorKeepR",at = "float", p = "wireColorKeep",dv = wireColor[0], min = 0.0,max = 1.0)
        cmds.addAttr(target, ln = "wireColorKeepG",at = "float", p = "wireColorKeep",dv = wireColor[1], min = 0.0,max = 1.0)
        cmds.addAttr(target, ln = "wireColorKeepB",at = "float", p = "wireColorKeep",dv = wireColor[2], min = 0.0,max = 1.0)
        cmds.addAttr(target, ln = "lineWidthKeep",at = "long",dv = lineWidth)

    cmds.setAttr(target + ".wireColorKeep",*wireColor,type = "float3")
    cmds.setAttr(target + ".lineWidthKeep",lineWidth)

    for shape in shapes:	
        cmds.setAttr(shape + '.useObjectColor', 2)	    
        cmds.connectAttr(target + ".wireColorKeepR",shape + ".wireColorR",f=True)
        cmds.connectAttr(target + ".wireColorKeepG",shape + ".wireColorG",f=True)
        cmds.connectAttr(target + ".wireColorKeepB",shape + ".wireColorB",f=True)
    
        cmds.connectAttr(target + ".lineWidthKeep",shape + ".lineWidth",f=True)

target = "nurbsCircle1"
wireColor = [1,1,0]
lineWidth = 10
addWireSettingKeep(target,wireColor,lineWidth)

結果は・・・・
image.png

やったでk・・・・・細くね?

数値的には問題なさそう
image.png
というか選択したら太さ戻ったぞ。

再評価?

シェイプの何かを再評価すれば良いっぽいのだけども

とりあえず選択

for shape in cmds.ls(type = "nurbsCurve"):
    cmds.select(shape)

ダメー

cmds.refresh()

ダメー

アトリビュートエディタでシェイプのタブをアクティブにしないと復活しませんね・・・

個人的に信頼してる dgevalは・・・・

for shape in cmds.ls(type = "nurbsCurve"):
    cmds.dgeval(shape + ".lineWidth")

だm・・・・・
あー
dgeval後にtransformノード選択すればアトリビュートエディタ閉じてても復活しますね

まとめ

  • とりあえずアトリビュートつないでおく
  • 何らかの方法でシェイプをdgevalで評価する
  • 何らかの方法で親ノード選択させる

ってやっておけばリロードはしなくてもよさそう。
若干手間だけど、リロードするよりは・・・・・・ましですかね?

もっとスマートな解決方法ご存じの方はぜひ教えてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?