USD-20.05 の Windows ビルドメモ。
Visual Studio 2017 以降じゃないとビルドできなかった。
Maya 用に 2015 ビルドが欲しいんだけど、どうしたもんかな。。
- ビルド
- Visual Studio起動
- コード修正
- プロジェクトプロパティ
- テストコード
PySide でエクスプローラー系モジュールを実装してみた。
この記事の続編みたいなもの。
graphics.hatenablog.com
Substance Designer の動的な構成管理。
ざっくり触ってみてこりゃ無理だなと思ったので。
なお、Substance Designer は Maya なんかと比べると色々な箇所が速く変わっていくソフトウェアなので、ここで書いてあることが数カ月後には通用しなくなっている可能性もある。その場合はご了承を。*1
- ヒューマンエラーに対する考え方
- 設定の階層化
- 相対パスによるファイル指定
- 相対パスが展開されることの弊害
- 相対パスが展開されないために
- 運用でカバー
- フェールセーフな構成管理フローの設計
- Substance Designer の動的な構成管理
- SBSCFG の自動生成
- SBSPRJ の自動生成
- 自動生成した SBSCFG で SD を起動する
- 余談
*1:現時点ではまだ個人的な検証結果にすぎないのでこうしてブログに書いているのだけど、逆にいえば今回のエントリーの内容は実戦投入されているものでもないので、その点もご了承を。
QImage の読み書きあれこれ
たしかに GUI 関係に限らずサムネ画像とか直で DB にいれたりするのってたまに便利よね。
QImage でやったことはなかったので軽く試してみた。
既に見られてるかもですが公式に一応ドキュメントがhttps://t.co/eheIYcJK4C
— トモハラ (@tm8r) 2020年3月6日
- 前提知識
- Qt/PySide における「画像」の種類と使い分け
- QImage/QPixmap の相互変換
- QImage で生ピクセル値を読み書き
- QByteArray → QImage.loadFromData
- QImage.constBits() → QImage.__init__()
- 余談: Implicit Data Sharing
- 余談: QImage が読み込んだ画像バイナリのサイズ
.Net Framework から .Net Core 3.1 への Assembly Loading/Unloading 移植メモ。
自作のツールを .Net 4.6 から .Net Core 3.1 に移植したので、メモがてら記事化しておく。
GitHub - hal1932/csi: CSharp pseudo Interpreter
→ C# をランタイムコンパイルしてPythonとかRubyの代わりに使う - graphics.hatenablog.com
GitHub - hal1932/Csi3
- AppDomain → AssemblyLoadContext
- AssemblyLoadContext のカスタム
- アセンブリのアンロード
- Assembly.ReflectionOnlyLoad → MetadataLoadContext.Load
- 型情報だけをロードする仕組み
- .Net Standard 2.0 以降でのコアライブラリ参照
- Visual Studio デバッガ(Version 16.4.2 時点)との相性問題?
今度こそ from import を reload する。
この記事は Maya Advent Calendar 2019 - Qiita の 22 日目の記事になります。
前日の記事は @lie_871221 さんの mayaコマンドを使ったGUIの書き方 - Qiita でした。
Python API 2.0 についてなにか書こうと思ってたんだけど、ネタに詰まったので、過去に書いた Python コードをリファインしたときの話を書いてみる。
Python で from import を reload する。 - graphics.hatenablog.com
Maya というよりほぼ 100% Python の話なんだけど、まぁなんていうか、reload 自体おおよそ Maya Python 固有の話なので。。
- 以前の方法の問題点
- reload 済みモジュールの考慮が甘かった
- 相対 import への対応が不十分だった
- 改善策
- コード解析処理の変更
- ast.alias の考慮
Maya負荷テスト用シーン作成メモ
テクスチャ用画像作成
@echo off setlocal enabledelayedexpansion set PATH=%PATH%;C:\Program Files\ImageMagick-7.0.9-Q16 for /l %%i in (0, 1, 9999) do ( set N=0000%%i set N=!N:~-4! magick convert -background lightblue -fill blue -size 100x100 -pointsize 32 -gravity center label:!N! indices\index_!N!.png )
キューブ生成
import maya.cmds as cmds cmds.file(new=True, force=True) def test(count): index = 0 z_root = cmds.createNode('transform') for z in xrange(count): y_root = cmds.createNode('transform') for y in xrange(count): x_root = cmds.createNode('transform') for x in xrange(count): cube, _ = cmds.polyCube() cmds.setAttr('{}.t'.format(cube), -count/2+x, -count/2+y, -count/2+z, type='double3') cmds.setAttr('{}.s'.format(cube), 0.5, 0.5, 0.5, type='double3') material = cmds.shadingNode('lambert', asShader=True) sg = cmds.sets(renderable=True, noSurfaceShader=True, empty=True) cmds.sets(cube, forceElement=sg) cmds.connectAttr('{}.outColor'.format(material), '{}.surfaceShader'.format(sg)) file = cmds.createNode('file') cmds.setAttr('{}.fileTextureName'.format(file), 'indices/index_{:04}.png'.format(index), type='string') cmds.connectAttr('{}.outColor'.format(file), '{}.color'.format(material)) cmds.select('{}.f[*]'.format(cube), replace=True) cmds.polyEditUV(pu=0.5, pv=0.5, su=2.3, sv=2.3) cmds.polyEditUV(u=0, v=0.3); cmds.parent(cube, x_root) index += 1 cmds.parent(x_root, y_root) cmds.parent(y_root, z_root) test(20)