前言

  在使用 Maya2017 的时候,偶尔会遇到 材质面板 完全空白并且报错的情况。
  过去一般的解决方案就是删除我的文档的 maya 目录,让个人设置回到默认就不会有问题了。 官方链接参考

alt

  只不过这个问题我遇到很多遍了,每次都要清理 个人设置 还是太麻烦了。
  于是我就想搞清楚是什么原因导致这个报错的,刚好最近有遇到了这个问题。
  于是我将有问题的个人设置保存下来,然后和默认的个人设置进行比对,看看问题再哪里。

文件定位

  我之前的文章里面有详细介绍 Maya 我的文档 里面各个文件夹分别存放的东西。
  其实仔细定位可以发现,个人设置都存在 prefs 文件夹里面,删除这个文件夹也可以修复问题。
  因此可以进一步定位到底是这个文件夹里面的什么文件导致出错。


  我首先将和文件夹意外的文件用错误的设置文件全部覆盖了一遍。

alt

  结果复现了报错。
  因此可以将问题文件锁定在 外部这些零碎的文件上。
  这些文件中 userPrefs.mel 文件最大,而且大小差异也很大。
  于是也走了一遍替换测试的流程,结果发现就是这个文件导致问题。
  于是我打开 userPrefs.mel 查看里面的代码。

  我发现里面全部是 optionVar 的 mel 语言全局变量。
  很多设置都直接和首选项里面的设置挂钩。
  于是我用 vscode 对比文件差异

alt

  但是两个文件差异实在太多了。
  一行一行对比显然是不现实的。
  于是我从窗口打开的报错开始进一步的追踪。

报错追踪

1
// Error: file: C:/Program Files/Autodesk/Maya2017/scripts/others/hyperShadePanel.mel line 10082: windowPref: Object 'hypershadeBrowserPanel' not found. // 

  打开报错的文件,可以找到报错的语句

alt

1
windowPref -q -h hypershadeBrowserPanel

  这个是记录窗口设定的命令,于是我也在 prefs 文件夹下搜这个命令。
  发现这个命令全部记录在 windowPrefs.mel 文件里面,而且缺失的 hypershadeBrowserPanel 也是有 mel 语句的。

  这就让我懵逼了,于是我在错误的 Maya 下查询这个变量是否存在。

1
2
windowPref -topLeftCorner 250 200 -widthHeight 750 215 -maximized false -parentMain true hypershadeBrowserPanel;
windowPref -q -ex hypershadeBrowserPanel

  奇怪的情况发生了。
  在错误的 Maya 中,即便运行上面的代码也依然返回 hypershadeBrowserPanel 不存在。
  但是明明上一行就已经配置了相关的属性了。

  于是到了这里思路就断了,只好再去研究是什么属性导致 windowPref 不起作用了。

userPrefs.mel 追踪

  最开始我是搜索 hypershade 关键字。
  逐一排查,发现代码里面有一大段和 hypershade 相关。
  于是我将运行正常的代码复制进去运行,然而并没有解决问题。

  然后我又去找 window 关键字(windowPref 找不到东西)
  逐一追踪看看语句是否有差别。
  然后就追踪到了 saveWindowPos 属性 是有差别的 , 错误的文件没有开启
  这个属性就是首选项中的 记录窗口位置选项。
  于是我就将这个选项勾上,奇迹就发生了, hypershade 正常打开了。

alt

  默认情况下这个选项是勾选的,如果不勾选在 Maya2017 就无法打开 材质编辑器 了。

总结

  后续我去测试了 Maya2018 ,发现官方已经将这个 BUG 修复了。