[UnrealEngine] Export TGA by Python

import unreal

import codecs
import os
def my_makedirs(path):
    if not os.path.isdir(path):
        os.makedirs(path)

my_makedirs(SaveDir)
print("SaveDir= "+SaveDir)
print("FileName= "+FileName)
savePath=SaveDir+"/"+FileName+".tga"
print("savePath= "+savePath)



editorAssetLib = unreal.EditorAssetLibrary()
texture2d=editorAssetLib.load_asset(assetPath) 
#canvasRenderTarget2D=editorAssetLib.load_asset(assetPath) 
#texture2d=unreal.Texture2D(canvasRenderTarget2D)
print("texture2d= "+str(texture2d))

task = unreal.AssetExportTask()
task.set_editor_property('automated', True)
task.set_editor_property('filename', savePath)
task.set_editor_property('object', texture2d)
task.set_editor_property('prompt', False)
task.set_editor_property('exporter', unreal.TextureExporterTGA())

check = unreal.Exporter.run_asset_export_task(task)


if check==True:
    pass
else:
    print(u"tga イメージの生成に失敗しました")

[maya]「スムーズ スキン サーフェスから未使用のインフルエンスを除去する」だけで、すごくいろんな動作が軽くなる。

Maya の処理スピードを向上させスキン ウェイト ペイント ツール(Paint Skin Weights Tool)を使いやすくするために、全てのスキン ウェイトが 0 であるスムーズ スキンから、ジョイントとインフルエンス オブジェクトを接続解除することができます。これにより未使用のインフルエンスがスキンのインフルエンス(Influence)リストに表示されなくなり、スキン ウェイト ペイント ツール(Paint Skin Weights Tool)が使いやすくなります。

たとえば、既定のオプションを使って、人間のスケルトンにストッキングをはいた左足をスムーズ スキニングするとします。スケルトン内のすべてのジョイントがポテンシャル インフルエンスとしてストッキングに接続されますが、ウェイトが 0 以外の値になるのは左足のストッキングに最も近いジョイントだけです。

肘を選択して回転させると、Maya はストッキングのスキンを計算して 0 以外の値をもつウェイトがないかどうかを調べます。ストッキングを未使用のインフルエンスから接続解除すると、肘とウェイトが 0 のその他のジョイントの回転を処理する必要がなくなり、パフォーマンスが向上します。

未使用のインフルエンスを除去するには

  1. スキンを選択します。
  2. スキン > 影響を編集 > 使われていないインフルエンスの除去(Skin > Edit Influences > Remove Unused Influences)を選択します。

UNREAL ENGINE 4 のマーケットプレイスでコンテンツ出品者になる Epic Marketplaceに登録するまでの方法がなかなか大変な件 2020/3/11

まず、Epic Account をPaypalアカウントを持ったメールアドレスで作り直さないといけない
現在はこれnobolu.ootsuka.technicalartist@gmail.com

PayPal送金方法に使用する電子メールアドレスは、プロファイルの電子メールアドレスと同一でなければなりません。

PayPalアカウント作らされるハメになった。。。

Paypalはというと申し訳ありませんが、この銀行はすでにPayPalアカウントに登録済みで、登録可能な上限数に達しています。積んだ。

https://publish.unrealengine.com/v3/welcome

最初の画面は翻訳可能

つぎの画面も翻訳される

ここで出てくる面接とかいうのがめんどくさい。

はい長いページきたー

何を期待します

この短い税務面接では、必要な税務情報を提出するための段階的なプロセスをご案内します。始める前に、次の重要な注意事項を確認してください。

•ナビゲーションのヒント:ナビゲートするには、常に[続行]ボタンと[前へ]ボタンを使用してください

    インタビュー。また、面接を終える前に面接を終了すると、回答が失われます。



•ヘルプを取得する:質問への回答についてサポートが必要な場合は、左下のヘルプガイドを参照してください

    インタビューページの隅。さらに、マウス操作時にポップオーバーヘルプが利用できる場合があります

    フィールド上。



•正確である:赤いアスタリスクが付いたアイテムを含む、すべての必須フィールドに入力します。

    は必須であり、入力された情報が正確であることを確認してください。一部のフィールドは

    以前に入力した情報が入力されます。



•電子同意の提供:電子署名の同意を求めます。もし、あんたが

    それを提供しないでください、あなたは私たちにあなたのフォームで印刷して郵送する必要があります。



•記録のコピーを印刷する:面接の最後に、印刷するオプションがあります

    IRSフォームのコピー。



•アンチウイルスまたはインメモリアプリケーション:特定のアンチウイルスまたはインメモリアプリケーションは、

    Webブラウザーに干渉し、税務インタビュー内で表示の問題を引き起こします。もし、あんたが

    空白のページやフォームが表示された場合は、ソフトウェアを無効にして、

    もう一度インタビューします。


ヘルプ


•プライバシー/データ保持ポリシー:あなたが提供する情報は、以下に従ってのみ使用されます

   https://www.epicgames.com/privacypolicyにあるEpicGames、Inc.のプライバシーポリシー


まず、税務情報を収集します。


およびTaxIdentitySolutionsLLCのプライバシーポリシー

了解すればいい系

簡単な入力

赤字のところはYes

米国IRSの税法に準拠するための情報を収集するために、お客様の同意が必要です。これには、サードパーティを使用したお客様の個人情報の処理が含まれる場合があります。 選んでください:

また同じような情報入力

本籍地

これは、税務通知、公益事業口座、運転免許証、パスポートなどのサービスに通常提供する住所です。P.O。を入力しないでください。 ボックスまたは気付アドレス。

・アドレス入力が無効であるというエラーメッセージを受け取りました。
ただし、アドレスが有効であることを確認します
・郵送先住所は本籍地とは異なります

・アドレス入力が無効であるというエラーメッセージを受け取りました。
ただし、アドレスが有効であることを確認します

つぎチェックするだけなやつ

つぎ税金情報

税務ステータス

税務上、あなたは米国市民、米国居住者、米国パートナーシップ、または米国企業ですか? *

一般に、(1)暦年中いつでも、米国移民法の合法的な永住者であり、このステータスが取り消されていないか、行政上または司法上放棄されたと判断されていない場合、または( 2)あなたは、現在の年の少なくとも31日間、および現在の年と直前の2年間を含む3年間の間に183日間、米国に物理的に滞在しています。

ちがいます米国のひとじゃないですNO

次変更不能の無駄なフォーム

Beneficial Owner?
Type of Beneficial Owner

Individual

受益者?
受益者のタイプ

個人

Individual 個人

サービス収入/パフォーマンスの場所

あなたはサービスの提供から収入を得ましたか、それは米国でのビジネスや貿易に効果的に関連する収入ではありませんか? サービスを実行している間、物理的にどこにいるかを示す以下の選択を行う必要があります。 注:コンテンツを米国で利用できるようにすることは、これらのサービスを実行している間、米国に物理的に存在しない限り、米国内でサービスを実行していることを意味するものではありません。

サービス収入の例には、広告料、契約のための仕事、取引手数料、クリックスルー紹介料が含まれます。

私たちに提供するサービスが実行される場所を確認してください:

・すべてのサービスは米国外で実施されます。

・すべてのサービスは米国内で実行されます。

・サービスの一部は米国内で実行されます。 これにした。

米国の税法では、米国の税務上のステータスを米国以外の人から米国人に変更する可能性のある次の条件のいずれかが適用されるかどうかをテストすることが義務付けられています。

該当するすべての項目を選択してください。

該当するすべての項目を選択してください。

     私は米国のパスポートを持っています


     私はアメリカで生まれましたが、出生権を放棄していません


     私の両親の一方または両方は米国で生まれました。


     私は現在グリーンカードを持っているか持っています


     私は過去3年間に米国で過ごしました


     一時的な非移民ビザタイプ「F」、「J」、「M」または「Q」を開催しましたか?

上記のいずれも当てはまりません
条約上のメリット


お住まいの国が米国との租税条約を締結しており、租税条約に記載されている特定の要件を満たしている場合は、源泉徴収税率の引き下げを請求できる場合があります。



正式な住所を提供する際に、所得税の目的で日本の居住者であることを以前に示しました。


居住国が所得税の目的で上記と異なり、米国とあなたの国との間の二重課税防止条約の第4条に記載されているテストを確認した場合は、ドロップダウンリストから適切な国を選択してください。




日米租税条約の事業利益条項を請求する場合は、チェックボックスを選択してください。

納税者番号はありますか?

条約の特典を請求するには、納税者番号(TIN)を提供する必要があります。 これは、社会保障番号(SSN)、雇用者識別番号(EIN)、または個人納税者番号(ITIN)などの米国のTINである可能性があります。 米国のTINをお持ちでない場合は、お住まいの国(「外国」と呼ばれる)のTINを提供できます。

お住まいの国でTINを使用していない場合は、次のことができます。


*IRSまたはオンラインでEINを申請する


*ITINを申請します。

追加情報もここにあります。

米国の所得税の目的で、あなたが米国人であるか非米国人であるかを判断するためにTINを持っている必要はありません。 ただし、条約の下で利用できる可能性のある標準源泉徴収税率(30%)の引き下げは、外国または米国のTINを提供できるようになるまで適用されません。

TINはありますか? NO

効果的に接続された収入

米国に恒久的施設があり、収入を生み出す不動産がこの恒久的施設と効果的に関連している場合、租税条約が実施される場合の標準源泉徴収税率の免除または減額は適用されません。

あなたは、サービス、製品、または商品を販売する米国で事業を所有および/または運営していますか? *NO

一般に、米国に従業員がいる場合、または収益を生み出すために使用する機器やその他の資産を所有、リース、または管理している場合は、米国の事業活動があります。

なにかが発行された

上記のW-8BENを確認してください。 フォームに問題がなければ、続行ボタンを選択します。

電子署名の提供に同意しなかった場合は、W-8BENを印刷する必要があります。

W-8BEN認定

偽証罪の罰則の下で、私はこのフォームの情報を調査し、私の知識と信念の限りにおいて、それが真実であり、正しく、完全であることを宣言します。 私はさらに、偽証罪の罰則の下で次のことを証明します。

私は、このフォームが関連するすべての収入の受益者である
(または受益者である個人に署名する権限を与えられている)
個人であるか、
このフォームを使用して、所有者またはアカウントである個人として
自分自身を文書化します外国金融機関の保有者、


 このフォームの1行目に記載されている人物は、米国人ではありません。


 このフォームに関連する収入は次のとおりです。(a)

 米国での貿易またはビジネス、(b)効果的に接続されているが、以下の税の対象ではない

 所得税条約、または(c)パートナーシップの効果的に関連する収入のパートナーのシェア、


 このフォームの1行目に記載されている人物は、米国とその国との間の租税条約の意味の範囲内で、フォームの9行目に記載されている条約国の居住者です(存在する場合)。


 ブローカー取引または物々交換の場合、受益者は定義されているように免除された外国人です

 指示で、そして


 このフォームで認証が行われた場合、30日以内に新しいフォームを送信することに同意します

 正しくなくなります。

全部チェック系のフォーム

税務面接を完了しました。 あなたのデータは受信されており、さらなる検証の対象となる可能性があります。

[インタビューの終了]ボタンを選択して、インタビューを終了するか、ブラウザウィンドウを閉じます。

ここでなんか おかしなシステム待ち。全部のボタンが押せない

HYPERWALLETアカウントをアクティブ化する

支払いは、Epicから支払い処理業者を通じて行われます。支払いを受け取るには、Epicが選択した支払い処理業者にアカウントを設定し、Epicが合理的に要求する利用規約およびその他のサードパーティの規約に同意する必要があります。このプロセスを開始するには、以下のリンクをたどってください。その後、手動でページを更新してください。

税金や支払いの情報を入力する必要がない場合は、Marketplaceサポートに連絡してサポートを受けてください。

税プロファイルが確認されます。現在、システムはHyperwalletアカウントを準備しています。しばらくしてからもう一度確認してください。

押せるようになった

おせるので

今すぐ確認するとかおして

確認して

免許アップする画面になった。

めんきょアップして送信した。

Your account is successfully activated!!!!!!

しばらくして。。。。

総預金残高 の画面

PayPal送金方法に使用する電子メールアドレスは、プロファイルの電子メールアドレスと同一でなければなりません。

PayPalアカウント作らされるハメになった。。。

申し訳ありませんが、この銀行はすでにPayPalアカウントに登録済みで、登録可能な上限数に達しています。

とかいわれる始末

銀行口座を直接登録した。

入れた。

[maya] pymel.tools.mel2py の python3版 変換できない問題がある20220926現在

簡単な解決策はmaya2022 以前の2020,2019バージョンを起動して そこでmel2pyを使うことだ。

A simple solution is to launch a maya2020 or maya2019 version prior to maya2022 and use mel2py there.

githubで解決していると思いダウンロードして試したが無理だった

https://github.com/LumaPictures/pymel/blob/master/pymel/tools/mel2py/melparse.py

import pymel_master.tools.mel2py as mel2py
mel_command = 'setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateX";setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateY";setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateZ";'
pythonCode = mel2py.mel2pyStr(mel_command, pymelNamespace='pm')
print(pythonCode)



import pymel_master.tools.mel2py as mel2py
mel_command = '$currentNodes = `ls -sl -l`;'
pythonCode = mel2py.mel2pyStr(mel_command, pymelNamespace='pm')
print(pythonCode)

python3 Error: AttributeError: file C:\Program Files\Autodesk\Maya2023\Python\lib\site-packages\pymel\tools\mel2py\melparse.py line 438: ‘str’ object has no attribute ‘lineno

StackOverFlowのように

https://stackoverflow.com/questions/73656852/maya-2023-pymel-i-cant-access-mel2py-with-python3/73839888#73839888

上記エラーがでて無理だった。

1行ならどうにかなるが、関数などの複数行だとこのlinenoが取得できないようでバグるものしか作れなかった

        # cycle through our kwargs and format them
        for flag, value in kwargs.items():
            print("melparse.py  - format_command() - "+" flag= "+str(flag)+" ,value= "+str(value))
            if value is None:
                value = '1'

            # multi-use flag
            #    mel:     ls -type "transform" -type "camera"
            #    python:    ls( type=["transform", "camera"] )
            if isinstance(value, list):
                #sep = ', '
                # if len(value) > t.lexer.format_options['kwargs_newline_threshhold']:
                #    sep = ',\n\t'
                #pargs.append( '%s=[%s]' % ( flag, sep.join(value) )  )
                value = assemble(t, 'multiuse_flag', ', ', value, matchFormatting=True)
                #pargs.append(Token('%s=[%s]' % (flag, value), None, flag.lineno))
                pargs.append(Token('%s=[%s]' % (flag, value), None, 0))#mycode
            else:
                print("melparse.py  - format_command() -  flag= "+str(flag))
                #pargs.append(Token('%s=%s' % (flag, value), None, flag.lineno))
                pargs.append(Token('%s=%s' % (flag, value), None, 0))#mycode

本体の更新に期待する。

[maya] python prefixHierarchy remove suffix

Python

    def delete_suffixHierarchy_remove_suffix(self,suffix):
        print("-----------prefixHierarchy_remove_suffix-----------start")
        #suffix="fat:"
        # Get the prefix the user entered
        #
        # Get a list of all descendents (The nodes are ordered from
        # leaf to root
        #    
        currentNodes=pm.mel.eval("listRelatives -pa -ad `ls -sl -l`")
        print("currentNodes 1= "+str(currentNodes))
        # add the prefix to each descendent node
        #
        if len(currentNodes)>0:
            for i in range(0,len(currentNodes)):
                #pm.mel.prefixNode(prefix, currentNodes[i])
                newName=currentNodes[i].replace(suffix,"")
                print("newName= "+newName)
                cmds.rename(currentNodes[i], newName)

            
        currentNodes=cmds.ls(l=1, sl=1)
        print("currentNodes 2= "+str(currentNodes))
        # get a list of nodes on the list
        # add the prefix to each node on the active list
        #
        if len(currentNodes)>0:
            for i in range(0,len(currentNodes)):
                #pm.mel.prefixNode(prefix, currentNodes[i])
                newName=currentNodes[i].replace(suffix,"")
                print("newName= "+newName)
                cmds.rename(currentNodes[i], newName)
        print("-----------prefixHierarchy_remove_suffix-----------end")

mel

global proc prefixHierarchy( )
{
	string $ok		= (uiRes("m_prefixHierarchy.kOK"));
	string $cancel	= (uiRes("m_prefixHierarchy.kCancel"));
	string $result = `promptDialog
		-title (uiRes("m_prefixHierarchy.kPrefixHierarchy")) 
		-message (uiRes("m_prefixHierarchy.kEnterPrefix")) 
		-text "prefix_"
		-button $ok  
		-button $cancel 
		-defaultButton $ok  
		-cancelButton $cancel 
		-dismissString $cancel `;

	// If the result was "OK", then proceed
	//
	if ( $result == $ok ) {

		// Get the prefix the user entered
		//
		string $prefix = `promptDialog -q`;

		// Get a list of all descendents (The nodes are ordered from
		// leaf to root
		//	
		string $currentNodes[] = eval("listRelatives -pa -ad `ls -sl -l`");
	
		// add the prefix to each descendent node
		//
		if ( size( $currentNodes ) > 0 ) {
			for( $i=0; $i < size( $currentNodes ); $i++ ) {
				prefixNode( $prefix, $currentNodes[$i] );
			}
		}

		// get a list of nodes on the list
		$currentNodes = `ls -sl -l`;
	
		// add the prefix to each node on the active list
		//
		if ( size( $currentNodes ) > 0 ) {
			for( $i=0; $i < size( $currentNodes ); $i++ ) {
				prefixNode( $prefix, $currentNodes[$i] );
			}
		}
	}
}

[JSX] Photoshop JSX Alart の回避方法

ファイル “.jsx” に含まれるスクリプトを実行しようとしています。
実行してもよろしいですか?
今後、この警告が表示されないようにするには、Photoshop の設定フォルダーにある PSUserConfig.txt ファイルに
WarnRunningScripts 0
を追加して、Photoshopを再起動してください。

と言われる警告だ。

簡単にはこれだ、

C:/Users/ootsuka.n/AppData/Roaming/Adobe/Adobe Photoshop 2022/Adobe Photoshop 2022 Settings/PSUserConfig.txt

WarnRunningScripts 0
を書いたテキストを用意するだけなんだが、効かないことがある。

このJSXをVSCodeで走らせたら効いた。

/*
Warn running scripts config - universal.jsx
v1.1 updated 12th January 2022
https://community.adobe.com/t5/photoshop-ecosystem-discussions/start-photoshop-amp-run-script-without-user-interaction/td-p/12645933
*/

/* https://helpx.adobe.com/photoshop/kb/enable-optional-extensions-photoshop-cc.html */

#target photoshop

var os = $.os.toLowerCase().indexOf('mac') >= 0 ? "mac" : "windows";
if (os === 'mac') {
    var appNameMac = app.path.fsName.replace(/^\/.+\//, '');
    var userConfigFile = new File("~/Library/Preferences/" + appNameMac + " Settings/PSUserConfig.txt");
    //var userConfigFile = new File(app.preferencesFolder + "/PSUserConfig.txt");
    //alert(userConfigFile.fsName);
    if (userConfigFile.exists)
        userConfigFile.remove();
    userConfigFile.open("w");
    userConfigFile.encoding = "UTF-8";
    userConfigFile.lineFeed = "Unix";
    userConfigFile.writeln("WarnRunningScripts 0");
    userConfigFile.close();
    /*
    var userConfigFile = Folder("~/Library/Preferences/" + appNameMac + " Settings/");
    //var userConfigFileDir = Folder(app.preferencesFolder);
    //alert(userConfigFileDir.fsName);
    userConfigFileDir.execute();
    userConfigFile.execute();   
    */

} else {
    var appNameWin = app.path.fsName.replace(/^.+\\/, '');
    var userConfigFile = new File("~/appData/Roaming/Adobe/" + appNameWin + "/" + appNameWin + " Settings/PSUserConfig.txt");
    //C:/Users/ootsuka.n/AppData/Roaming/Adobe/Adobe%20Photoshop%202022/Adobe%20Photoshop%202022%20Settings/
    //C:/Users/ootsuka.n/AppData/Roaming/Adobe/Adobe Photoshop 2022/Adobe Photoshop 2022 Settings/
    //var userConfigFile = new File(app.preferencesFolder + "/PSUserConfig.txt");
    //alert(userConfigFile.fsName);
    if (userConfigFile.exists)
        userConfigFile.remove();
    userConfigFile.open("w");
    userConfigFile.encoding = "UTF-8";
    userConfigFile.lineFeed = "Windows";
    userConfigFile.writeln("WarnRunningScripts 0");
    userConfigFile.close();
    userConfigFile.execute();
    /*
    var userConfigFileDir = Folder("~/appData/Roaming/Adobe/" + appNameWin + "/" + appNameWin + " Settings/");
    //var userConfigFileDir = Folder(app.preferencesFolder);
    //alert(userConfigFileDir.fsName);
    userConfigFileDir.execute();
    userConfigFile.execute();
    */
}

参考URL

https://community.adobe.com/t5/photoshop-ecosystem-discussions/start-photoshop-amp-run-script-without-user-interaction/m-p/12645933

https://photoshopbook.com/2021/06/09/wacompressure/

[UnrealEngine] UE Python で TGAを書き出す方法

task = unreal.AssetExportTask()
task.set_editor_property('automated', True)
task.set_editor_property('filename', outfilepath)
task.set_editor_property('object', texture2d)
task.set_editor_property('prompt', False)
task.set_editor_property('exporter', unreal.TextureExporterTGA())

check = unreal.Exporter.run_asset_export_task(task)
      
if check==True:
    pass
else:
    alert(u"tga イメージの生成に失敗しました")

参考

https://zhuanlan.zhihu.com/p/240826602

[JSX] Adobe JSX で自分のスクリプトの実行されているディレクトリの絶対パスを取る方法

script_file_object =new File([“.”])

script_file_object =new File(["."])
$.writeln("script_file_object is");
$.writeln(script_file_object);

script_file_object is
/d/作業フォルダ/
がとれる。

参考
adobe jsx 絶対パス 取得  -React -Node.js

https://qiita.com/103ma2/items/26ea325bbaae65303d85

ドキュメントの保存パスを調べる

http://www.openspc2.org/book/PhotoshopCC/easy/document/006/index.html

Adobe Javascript リファレンス
parent

https://extendscript.docsforadobe.dev/file-system-access/file-object.html

【Photoshop JavaScript】ファイルやフォルダを取り扱う
https://note.com/yucco72/n/nb997627b001b

PhotoshopドキュメントをJavaScriptで別名保存する