Mayaの解像度変えたら変になって困った話

あー解像度違ったわー　余白分必要だったわー
ちょっと変えるかー

となったんですよ。

元のシーンはこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/e88fb8bb-48cb-1f86-46b7-651ed3f07c1f.png)


ちょっと大きくする必要があったので、こんな感じで解像度を変更してみました。
```python
cmds.setAttr("defaultResolution.width", 1900)
cmds.setAttr("defaultResolution.height", 1200)    
```

あ、変わってますねー・・・・・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/d8faae51-6b27-4730-adfb-41731e4ceea2.png)

変わってますか？

HUDの表記上は変わっているのですが
**元は 1600x900 なので 16:9**
**変更後は 1900ｘ1200なので 19:12**
縦横比が異なるはずなんですが、同じに見えますね。

renderSettingsを確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/e9760305-3bc3-8613-1245-4446971053e3.png)

解像度自体は意図したものになっていますがー
pixcel比がおかしなことになってますね。

試しにこれを1にしてみると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/4ae2b8f4-bbf9-5cdb-6d37-0397d28d8ae1.png)

ちょっと縦が長くなりました。


**OKじゃぁ解像度変えつつ、pixcel比を指定すればいいんじゃぁないか？**

```python
cmds.setAttr("defaultResolution.width", 1900)
cmds.setAttr("defaultResolution.height", 1200)    
cmds.setAttr("defaultResolution.pixelAspect",1)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/0a742572-7e17-35dd-fd04-65b51d525ef8.png)

16:9だなぁー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/e783ec16-eef6-1bd6-44c7-cb76955460b4.png)

あれ？ pixcel比が反映されてませんね・・・

ちょっと吐かせてみます。
```python
cmds.setAttr("defaultResolution.width", 1900)
cmds.setAttr("defaultResolution.height", 1200)    
cmds.setAttr("defaultResolution.pixelAspect",1)
print(cmds.getAttr("defaultResolution.pixelAspect"))

## 1.0
```
1.0だな？？
renderSettingsを開かないで、再確認すると

```python
print(cmds.getAttr("defaultResolution.pixelAspect"))
## 1.1230000257492065
```

お、ずれましたね。

考察
--

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/317f8c4b-c8ea-a907-bec9-f11caf8d680a.png)

原因はこれかなぁ・・・？

pixelAspect　の方にチェックを入れて、解像度を変えるとpixelAspectは固定になりますね。

**maintai ratio = deviceAspectRatio**
- 解像度を設定する。  
- deviceAspectRatio を維持する為にpixelAspectが設定される。  
- その為pixelAspectを指定しても、上書きされる。  

**maintai ratio = pixelAspect**
- 解像度を設定する。  
- pixelAspectを維持する為にdeviceAspectRatioが設定される。  
- その為deviceAspectRatioを指定しても、上書きされる。  

ではこのアトリビュートはー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/cbf892e2-f1d2-e3fb-3957-e59c9e3e74af.png)

こいつかなぁ？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/e75afbbe-af51-5491-f50e-53d5875628d2.png)

```python
cmds.setAttr("defaultResolution.lockDeviceAspectRatio",1)
```

あー・・・・（嫌な予感

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/37a7d29e-1e9f-ee56-1db6-74125e443c82.png)

えい
```python
cmds.setAttr("defaultResolution.width", 1900)
cmds.setAttr("defaultResolution.height", 1200)   
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/b9018b37-4166-5a6d-d45f-6f1b77c0f99d.png)

お、renderSettingsの方も変わりましたね。
attr的には設定されているので、GUIよりもそっちを優先する感じですかね。

※このGUIで設定すると、裏で色々関連attrを良い感じに設定してくれるのはいいのですが
GUIの挙動を把握してないとスクリプト化した際に意図した挙動をしてくれないことがありますね。
カメラとかrenderSettingsでこの手の項目が多いように思えます。

となると？
--

今回はpixelAspectを維持して欲しいので、lockDeviceAspectRatioを0にしてあげればー

```python
resolutionW = 1900
resolutionH = 1200
cmds.setAttr("defaultResolution.lockDeviceAspectRatio",0)
cmds.setAttr("defaultResolution.width", resolutionW)
cmds.setAttr("defaultResolution.height", resolutionH)      
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/9f58389d-05ed-8724-482c-ff04d4e3f1ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/af2209d4-293b-aa7a-7cc7-65947faff19f.png)

意図したとおりの数字になりました。

↓ 2024/12/22追記 ↓

何か違和感がある
--

起動時の設定はこう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/97030a62-9ad3-530b-44fc-0f1429fdf8b8.png)

UIから設定するとまぁ問題ないように思える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/385ffbc3-028e-93b3-db03-1dc74843f3d8.png)

再起動して renderSettingsのUIを呼び出さずに解像度を変えてみると

before
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/4911bf16-29e8-94f0-1d66-f73fc995f0af.png)

after
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/bb556a0c-26f9-fbf8-db24-065c0d9ce81a.png)


・・・・・あー　嫌な予感がー　あたったようなー
これ renderSettingsWindowを立ち上げたときに何か裏で行われてますね。
なのでrenderSettingsWindowを立ち上げ済みか否かで結果が変わりますね。

これ mayaBatchだと結構まずいきもするな。

なので、

**解像度変更したいときは解像度だけじゃなくて、lockDeviceAspectRatio　pixelAspect　deviceAspect　も一緒に設定したほうがいい**

という結果がでました。