AmbitionEarlyHourSky

#アンリアルクエスト に出したゲームのクオリティをアップした。

キャラクターの作り直しを何度もやった。

ハイヒールのカラーをルブタンみたいにして

ニーアみたいなマスクをつけて
kawaiiphysicsでスカートをひらひらさせた。
kawaiiphysicsで胸も揺らした
kawaiiphysicsで髪をなびくようにジョイントを入れ

レベルデザインも少しちゃんとした。

#kawaiiphysics #UE4 #Unrealお兄さん と#塩谷さん と #おかず さん の おかげです。

ダウンロードはこちら

https://drive.google.com/file/d/1q6O0NIBkd-oH1zD50XCDv74sUi6QfIai/view?usp=sharing

最近開いてみたらこんなエラーが出た

This Project requires the ‘ShallowWater’ plugin whitch could not be found.Would you like to desable it continue?If you do you will no longer be able to open any assets created with it. if not the application will close.

このプロジェクトには、見つからなかった「ShallowWater」プラグインが必要です。引き続き無効にしますか?そうすると、それで作成されたアセットを開くことができなくなります。 そうでない場合、アプリケーションは終了します。

ビルドの必要がありそうなので

A案

cd C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles
Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket

B案

cd C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\DotNET\UnrealBuildTool
UnrealBuildTool.exe AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket

ERROR: Unable to find plugin ‘ShallowWater’ (referenced via AmbitionEarlyHourSky.uproject). Install it and try again, or remove it from the required plugin list.

と言われるので。

AmbitionEarlyHourSky.uprojectの Plugin から ShallowWaterを消す。

{
	"FileVersion": 3,
	"EngineAssociation": "5.0",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "AmbitionEarlyHourSky",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		}
	],
	"Plugins": [
		{
			"Name": "ShallowWater",
			"Enabled": true
		},
		{
			"Name": "Water",
			"Enabled": true
		},
		{
			"Name": "PythonScriptPlugin",
			"Enabled": true
		},
		{
			"Name": "EditorScriptingUtilities",
			"Enabled": true
		},
		{
			"Name": "Bridge",
			"Enabled": true,
			"SupportedTargetPlatforms": [
				"Win64",
				"Mac",
				"Linux"
			]
		}
	]
}

Build.batできたっぽい


C:\Users\furcr>cd C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\

C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64>cd ../../

C:\Program Files\Epic Games\UE_5.0\Engine>cd C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket
Using bundled DotNet SDK
Log file: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log.txt
Creating makefile for AmbitionEarlyHourSky (Build.version is newer)
ERROR: Unable to find plugin 'ShallowWater' (referenced via AmbitionEarlyHourSky.uproject). Install it and try again, or remove it from the required plugin list.

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket
Using bundled DotNet SDK
Log file: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log.txt
Creating makefile for AmbitionEarlyHourSky (Build.version is newer)
Parsing headers for AmbitionEarlyHourSky
  Running UnrealHeaderTool "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Intermediate\Build\Win64\AmbitionEarlyHourSky\Development\AmbitionEarlyHourSky.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -WarningsAsErrors -abslog="C:\Users\furcr\AppData\Local\UnrealBuildTool\Log_UHT.txt" -installed
Reflection code generated for AmbitionEarlyHourSky in 6.3933034 seconds
Building AmbitionEarlyHourSky...
Using Visual Studio 2019 14.29.30141 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
[Adaptive Build] Excluded from AmbitionEarlyHourSky unity file: MyBlueprintFunctionLibrary.cpp, SaveToText.cpp, TextFileToString.cpp, AmbitionEarlyHourSky.cpp, AmbitionEarlyHourSkyCharacter.cpp, AmbitionEarlyHourSkyGameMode.cpp
Distributing 23 actions to XGE
--------------------Build System Warning---------------------------------------
License is invalid:
    License information is invalid. Please try reloading your license file using the Coordinator Monitor application on the Coordinator machine, or reinstall IncrediBuild.
    This build will run in standalone mode.

-------------------------------------------------------------------------------

Build ID: {5E64F7BF-47B0-4AF8-8F9B-4464A50705EC}

--------------------Project: Default-------------------------------------------
[1/23] SharedPCH.Engine.ShadowErrors.cpp (0:51.37 at +0:00)
[2/23] OpenImageDenoise.dll (0:00.64 at +0:51)
[3/23] tbb.dll (0:00.26 at +0:52)
[4/23] d3d12SDKLayers.dll (0:00.31 at +0:52)
[5/23] D3D12Core.dll (0:00.28 at +0:52)
[6/23] tbb12.dll (0:00.31 at +0:52)
[7/23] AmbitionEarlyHourSkyCharacter.cpp (0:01.64 at +0:53)
[8/23] AmbitionEarlyHourSkyGameMode.cpp (0:01.01 at +0:54)
[9/23] SaveToText.cpp (0:00.60 at +0:55)
[10/23] MyBlueprintFunctionLibrary.gen.cpp (0:00.62 at +0:56)
[11/23] AmbitionEarlyHourSkyCharacter.gen.cpp (0:00.92 at +0:57)
[12/23] MyBlueprintFunctionLibrary.cpp (0:00.57 at +0:58)
[13/23] TextFileToString.gen.cpp (0:00.62 at +0:58)
[14/23] AmbitionEarlyHourSky.cpp (0:00.70 at +0:59)
[15/23] AmbitionEarlyHourSky.init.gen.cpp (0:00.64 at +1:00)
[16/23] TextFileToString.cpp (0:15.11 at +1:00)
[17/23] AmbitionEarlyHourSkyGameMode.gen.cpp (0:01.00 at +1:15)
[18/23] Default.rc2 (0:00.48 at +1:16)
[19/23] Module.KawaiiPhysics.cpp (0:03.53 at +1:17)
[20/23] Module.KawaiiPhysics.gen.cpp (0:03.40 at +1:20)
[21/23] SaveToText.gen.cpp (0:00.65 at +1:24)
[22/23] AmbitionEarlyHourSky.exe (0:26.03 at +1:24)
   Creating library F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Binaries\Win64\AmbitionEarlyHourSky.lib and object F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Binaries\Win64\AmbitionEarlyHourSky.exp
[23/23] AmbitionEarlyHourSky.target (0:00.34 at +1:50)
---------------------- Done ----------------------

    Rebuild All: 1 succeeded, 0 failed, 0 skipped

1 build system warning(s):
   - License is invalid

Total time in XGE executor: 111.50 seconds
Total execution time: 128.20 seconds

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>

リビルドするか聞かれる。リビルドで、30秒後ぐらいに起動した!

スカートのリグなどを頑張ったオリジナル作品のAmbitionSkyWaterをUE5でビルドしなおして、ポスプロなどブラッシュアップして動画を取り直した #UE5 #UnrealEngine5 #スカート #リグ #Rig #skirts

[maya]AnimCurveへの掛け算、足し算

掛け算は scaleKey の valueScale を使う

from maya import cmds 
import pymel.core as pm 

# translate
obj="sphere1"
trans1=".tx"
                    pm.scaleKey([str(obj) + trans1],
                     valuePivot=0, timeScale=1, 
                     hierarchy='none', 
                     float=(min,max), 
                     floatPivot=0, valueScale=-1, 
                     timePivot=0, scaleSpecifiedKeys=1, 
                     shape=1, time=(min,max), 
                     floatScale=1, controlPoints=0)

#rotation
pm.scaleKey([str(obj) + rot2], 
                        valuePivot=0, 
                        timeScale=1, 
                        hierarchy='none', 
                        float=(min,max), 
                        floatPivot=0, valueScale=-1, 
                        timePivot=0, scaleSpecifiedKeys=1, 
                        shape=1, 
                        time=(min,max), 
                        floatScale=1, controlPoints=0)

足し算は pm.pasteKey の valueOffset を使う

#min max
    animCurve_Arr = cmds.ls( type="animCurve" );
    print("animCurve_Arr= "+str(animCurve_Arr))
    min=0
    max=0
    for animCurve in animCurve_Arr:
        newMin = cmds.findKeyframe(animCurve,which="first")
        newMax = cmds.findKeyframe(animCurve,which="last")
        #print("newMin= "+str(newMin))
        #print("newMax= "+str(newMax))
        if(newMin<min):    
            min=newMin
            
        if(newMax>max):
            max=newMax
                
    print("min= "+str(min))
    print("max= "+str(max))

#rotaion
pm.copyKey((obj + rot1), hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
pm.cutKey((obj + rot1), f=(min,max), t=(min,max), cl=1)
pm.pasteKey((obj + rot1), floatOffset=0, option='replace', copies=1, valueOffset=180, connect=1, timeOffset=0)
         
               

以下は Maya2022 >Bonus Tools >Animation >Mirror Animation のmelを

をPythonに変換したもの

例 モーションのアニムカーブのミラーのサンプル


def bt_applyMirrorAnim(axis, method, xforms, ignore, custom):
    
    trans = ""
    rot1 = ""
    rot2 = ""
    connection = []
    lockCheck1 = []
    lockCheck2 = []
    attrListOrig = []
    attrListFinal = []
    objList=cmds.ls(allPaths=1,long=1, selection=1)
    print("objList= "+str(objList))
    attrCount=0
    if xforms[0]==1:
        #attrListOrig[attrCount]=".tx"
        attrListOrig.append(".tx")
        attrCount+=1
        #attrListOrig[attrCount]=".ty"
        attrListOrig.append(".ty")
        attrCount+=1
        #attrListOrig[attrCount]=".tz"
        attrListOrig.append(".tz")
        attrCount+=1
        
    if xforms[1]==1:
        #attrListOrig[attrCount]=".rx"
        attrListOrig.append(".rx")
        attrCount+=1
        #attrListOrig[attrCount]=".ry"
        attrListOrig.append(".ry")
        attrCount+=1
        #attrListOrig[attrCount]=".rz"
        attrListOrig.append(".rz")
        attrCount+=1
        
    if xforms[2]==1:
        #attrListOrig[attrCount]=".sx"
        attrListOrig.append(".sx")
        attrCount+=1
        #attrListOrig[attrCount]=".sy"
        attrListOrig.append(".sy")
        attrCount+=1
        #attrListOrig[attrCount]=".sz"
        attrListOrig.append(".sz")
        attrCount+=1
        
    if (custom == 1) and (len(objList) == 2):
        userAttrList=pm.listAttr(objList[0], userDefined=1)
        #Look for custom attrs on first object
        for uAttr in userAttrList:
            if pm.mel.attributeExists(uAttr, objList[1]):
                #attrListOrig[attrCount]=("." + str(uAttr))
                attrListOrig.append("." + str(uAttr))
                #Check for same attr on second
                attrCount+=1

            
        
    if axis == 1:
        trans=".tx"
        rot1=".ry"
        rot2=".rz"
        
    
    elif axis == 2:
        trans=".ty"
        rot1=".rx"
        rot2=".rz"
        
    
    elif axis == 3:
        trans=".tz"
        rot1=".rx"
        rot2=".ry"
        
    elif axis == 4:
        trans=".ty"
        rot1=".ry"
        rot2=".rz"

    elif axis == 5:
        trans1=".tx"
        trans2=".ty"
        trans3=".tz"
        rot3=".rz"

    elif axis == 6:
        trans=".tx"
        trans1=".tx"
        trans2=".ty"
        trans3=".tz"
        rot1=".rx"
        rot2=".ry"
        rot3=".rz"

    animCurve_Arr = cmds.ls( type="animCurve" );
    print("animCurve_Arr= "+str(animCurve_Arr))
    min=0
    max=0
    for animCurve in animCurve_Arr:
        newMin = cmds.findKeyframe(animCurve,which="first")
        newMax = cmds.findKeyframe(animCurve,which="last")
        #print("newMin= "+str(newMin))
        #print("newMax= "+str(newMax))
        if(newMin<min):    
            min=newMin
            
        if(newMax>max):
            max=newMax
                
    print("min= "+str(min))
    print("max= "+str(max))

    """
    if (custom == 1) and (method == 5):
        # 接続を解除
        for obj in objList:
            deleteConnection(obj+".tx")
            deleteConnection(obj+".ty")
            deleteConnection(obj+".tz")
            deleteConnection(obj+".rx")
            deleteConnection(obj+".ry")
            deleteConnection(obj+".rz")
    """       
    if method == 4:
        print("method= 4   minus Mode...")
        if len(objList) != 2:
            print("Not 2 selected")
        
        """
        elif axis == 4:
        trans=".ty"
        rot1=".ry"
        rot2=".rz"

        """
        for obj in objList:
            print("obj= "+str(obj))
            if xforms[0]:
                lockCheck1=pm.listAttr((str(obj) + trans), l=1)
                
                # invert appropriate attrs and/or curves for objects
                #Translate
                if len(lockCheck1) == 0:
                    print("trans= "+str(trans))
                    #print(u"Inverting static value and/or animation for " + str(obj) + trans + "")
                    AttValue=pm.getAttr(str(obj) + trans)
                    print("AttValue= "+str(AttValue))
                    pm.setAttr((str(obj) + trans), (AttValue * -1))
                    #pm.setAttr((str(obj) + trans), (AttValue ))
                    pm.scaleKey([str(obj) + trans],
                     valuePivot=0, timeScale=1, 
                     hierarchy='none', 
                     float=(min,max), 
                     floatPivot=0, valueScale=-1, 
                     timePivot=0, scaleSpecifiedKeys=1, 
                     shape=1, time=(min,max), 
                     floatScale=1, controlPoints=0)
                    
                  
            if xforms[1]:
                animCurve_rot1=cmds.listConnections((str(obj) + rot1), t="animCurve")
                print("animCurve_rot1="+str(animCurve_rot1))
                lockCheck1=pm.listAttr((str(obj) + rot1), l=1)
                #Rotate
                if len(lockCheck1) == 0:
                    print("rot1= "+str(rot1))
                    print(u"Inverting static values and/or animation for " + str(obj) + rot1 + "")
                    
                    #pm.setAttr((str(obj) + rot1), (pm.getAttr(str(obj) + rot1) ))
                    #cmds.keyframe((str(obj) + rot1),e=True, time=(), r=True, vc=180)
                    """
                    pm.scaleKey([str(obj) + rot1], 
                        valuePivot=0, 
                        timeScale=1, 
                        hierarchy='none', 
                        float=(min,max), 
                        floatPivot=0, valueScale=+180, 
                        timePivot=0, scaleSpecifiedKeys=1, 
                        shape=1, 
                        time=(min,max), 
                        floatScale=1, controlPoints=0)
                    """
                    
                connection=pm.listConnections((obj + rot1), s=True, d=False)
                if(len(connection)>0):
                    if pm.mel.isAnimCurve(connection[0]):
                        print("obj= "+obj + " rot1= "+rot1)
                        pm.copyKey((obj + rot1), 
                            hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                        pm.cutKey((obj + rot1), 
                            f=(min,max), t=(min,max), cl=1)
                        pm.pasteKey((obj + rot1), 
                            floatOffset=0, option='replace', copies=1, valueOffset=180, connect=1, timeOffset=0)
                        
                   
                    else:
                        val=pm.getAttr(obj + rot3)
                        pm.setAttr((obj + rot3),  val+180)
                    
                    
                    
                animCurve_rot2=cmds.listConnections((str(obj) + rot2), t="animCurve")
                print("animCurve_rot2="+str(animCurve_rot2))     
                lockCheck1=pm.listAttr((str(obj) + rot2), l=1)
                if len(lockCheck1) == 0:
                    print("rot2= "+str(rot2))
                    print(u"Inverting static values and/or animation for " + str(obj) + rot2 + "")
                    pm.setAttr((str(obj) + rot2), (pm.getAttr(str(obj) + rot2) * -1))
                    pm.scaleKey([str(obj) + rot2], 
                        valuePivot=0, 
                        timeScale=1, 
                        hierarchy='none', 
                        float=(min,max), 
                        floatPivot=0, valueScale=-1, 
                        timePivot=0, scaleSpecifiedKeys=1, 
                        shape=1, 
                        time=(min,max), 
                        floatScale=1, controlPoints=0)
                    
                    
    elif method == 2:
        print("method=2   minus Mode...")
        if len(objList) != 2:
            print("Not 2 selected ")
        

        for obj in objList:
            print("obj= "+str(obj))
            if xforms[0]:
                lockCheck1=pm.listAttr((str(obj) + trans), l=1)
                
                # invert appropriate attrs and/or curves for objects
                #Translate
                if len(lockCheck1) == 0:
                    print("trans")
                    #print(u"Inverting static value and/or animation for " + str(obj) + trans + "")
                    AttValue=pm.getAttr(str(obj) + trans)
                    print("AttValue= "+str(AttValue))
                    pm.setAttr((str(obj) + trans), (AttValue * -1))
                    pm.scaleKey([str(obj) + trans], 
                    valuePivot=0, timeScale=1, 
                    hierarchy='none', float=(min,max), 
                    floatPivot=0, valueScale=-1, timePivot=0, 
                    scaleSpecifiedKeys=1, shape=1, 
                    time=(min,max), floatScale=1, 
                    controlPoints=0)
                    
                  
            if xforms[1]:
                lockCheck1=pm.listAttr((str(obj) + rot1), l=1)
                #Rotate
                if len(lockCheck1) == 0:
                    print("rot1")
                    print(u"Inverting static values and/or animation for " + str(obj) + rot1 + "")
                    pm.setAttr((str(obj) + rot1), (pm.getAttr(str(obj) + rot1) * -1))
                    pm.scaleKey([str(obj) + rot1], 
                        valuePivot=0, 
                        timeScale=1, 
                        hierarchy='none', 
                        float=(min,max), 
                        floatPivot=0, valueScale=-1, 
                        timePivot=0, scaleSpecifiedKeys=1, 
                        shape=1, 
                        time=(min,max), 
                        floatScale=1, controlPoints=0)
                     
                lockCheck1=pm.listAttr((str(obj) + rot2), l=1)
                if len(lockCheck1) == 0:
                    print("rot2")
                    print(u"Inverting static values and/or animation for " + str(obj) + rot2 + "")
                    pm.setAttr((str(obj) + rot2), (pm.getAttr(str(obj) + rot2) * -1))
                    pm.scaleKey([str(obj) + rot2], 
                        valuePivot=0, 
                        timeScale=1, 
                        hierarchy='none', 
                        float=(min,max), 
                        floatPivot=0, valueScale=-1, 
                        timePivot=0, scaleSpecifiedKeys=1, 
                        shape=1, 
                        time=(min,max), 
                        floatScale=1, controlPoints=0)
                    
                
            

    elif (method == 1) and (len(objList) == 2):
        print("method 1  base  No minus Mode...")
        print("elif (method == 1) and (len(objList) == 2)")
        
        first=objList[0]
        second=objList[1]
        print("first= "+str(first))
        print("second= "+str(second))
        print(u"Mirroring static values and animation for " + trans + ", " + rot1 + " and " + rot2 + " animation for " + str(first) + " and " + str(second) + "")
        #Check attrs for editability
        count=0
        for attr in attrListOrig:
            lockCheck1=pm.listAttr((first + attr), 
                l=1)
            lockCheck2=pm.listAttr((second + attr), 
                l=1)
            if (len(lockCheck1) != 0) and (ignore == 1):
                print("Ignoring " + str(first) + str(attr) + " because it is locked.")
                continue
                
            
            elif (len(lockCheck1) != 0) and (ignore == 0):
                print("Aborting : " + str(first) + str(attr) + " is locked.  Either unlock attributes or turn on IgnoreLockedAttributs in mirror options")
                
            
            elif (len(lockCheck2) != 0) and (ignore == 1):
                print("Ignoring " + str(second) + str(attr) + " because it is locked.")
                continue
                
            
            elif (len(lockCheck2) != 0) and (ignore == 0):
                print("Aborting : " + str(second) + str(attr) + " is locked.  Either unlock attributes or turn on IgnoreLockedAttributs in mirror options")
                
            
            else:
                #attrListFinal[count]=str(attr)
                attrListFinal.append(str(attr))
                count+=1
                
           
        cmds.select(first, r=1)
        #pm.mel.duplicatePreset(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1)
        cmds.duplicate(returnRootsOnly=1)
        dup=cmds.ls(sl=True)
        tmpObj=cmds.rename(dup[0], 'tmp_transfer_obj')
        for attr in attrListFinal:
            connection=pm.listConnections((first + attr), s=True, d=False)
            #print("connection= "+str(connection) )
            
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    #animCurve_Arr = cmds.ls( type="animCurve" );
                    #print("connection[0]= "+str(connection[0]) )
                    #newMin = cmds.findKeyframe(connection[0],which="first")
                    #newMax = cmds.findKeyframe(connection[0],which="last")
                    print("first= "+first + " attr= "+attr)
                    pm.copyKey((first + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
             
                        
                    pm.cutKey((tmpObj + attr),f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((tmpObj + attr),floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                      
                
                else:
                    val=pm.getAttr(first + attr)
                    pm.setAttr((tmpObj + attr),  val)
        
            
        for attr in attrListFinal:
            connection=pm.listConnections((second + attr), s=True, d=False)
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    print("second= "+second + " attr= "+attr)
                    pm.copyKey((second + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                    pm.cutKey((first + attr), 
                        f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((first + attr), 
                        floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                    
               
                else:
                    val=pm.getAttr(second + attr)
                    pm.setAttr((first + attr),  val)
                
       
        for attr in attrListFinal:
            connection=pm.listConnections((tmpObj + attr), s=True, d=False)
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    print("tmpObj= "+tmpObj + " attr= "+attr)
                    pm.copyKey((tmpObj + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                    pm.cutKey((second + attr), 
                        f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((second + attr), 
                        floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                    
                
                else:
                    val=pm.getAttr(tmpObj + attr)
                    pm.setAttr((second + attr),  val)
                
    
        if xforms[0]:
            lockCheck1=pm.listAttr((str(first) + trans), 
                l=1)
            #if translate is on
            if len(lockCheck1) == 0:
                print("first= "+first + " trans= "+trans)
                #pm.setAttr((str(first) + trans), (pm.getAttr(str(first) + trans) * -1))
                pm.setAttr((str(first) + trans), (pm.getAttr(str(first) + trans) ))
                pm.scaleKey([str(first) + trans], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            lockCheck1=pm.listAttr((str(second) + trans), 
                l=1)
            if len(lockCheck1) == 0:
                print("second= "+second + " trans= "+trans)
                #pm.setAttr((str(second) + trans), (pm.getAttr(str(second) + trans) * -1))
                pm.setAttr((str(second) + trans), (pm.getAttr(str(second) + trans) ))
                pm.scaleKey([str(second) + trans], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            
        if xforms[1]:
            lockCheck1=pm.listAttr((str(first) + rot1), 
                l=1)
            #if rotate is on
            if len(lockCheck1) == 0:
                print("first= "+first + " rot1= "+rot1)
                #pm.setAttr((str(first) + rot1), (pm.getAttr(str(first) + rot1) * -1))
                pm.setAttr((str(first) + rot1), (pm.getAttr(str(first) + rot1) ))
                pm.scaleKey([str(first) + rot1], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            lockCheck1=pm.listAttr((str(first) + rot2), 
                l=1)
            if len(lockCheck1) == 0:
                print("first= "+first + " rot2= "+rot2)
                #pm.setAttr((str(first) + rot2), (pm.getAttr(str(first) + rot2) * -1))
                pm.setAttr((str(first) + rot2), (pm.getAttr(str(first) + rot2) ))
                pm.scaleKey([str(first) + rot2], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            lockCheck1=pm.listAttr((str(second) + rot1), 
                l=1)
            if len(lockCheck1) == 0:
                print("second= "+second + " rot1= "+rot1)
                #pm.setAttr((str(second) + rot1), (pm.getAttr(str(second) + rot1) * -1))
                pm.setAttr((str(second) + rot1), (pm.getAttr(str(second) + rot1) ))
                pm.scaleKey([str(second) + rot1], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            lockCheck1=pm.listAttr((str(second) + rot2), 
                l=1)
            if len(lockCheck1) == 0:
                print("second= "+second + " rot2= "+rot2)
                #pm.setAttr((str(second) + rot2), (pm.getAttr(str(second) + rot2) * -1))
                pm.setAttr((str(second) + rot2), (pm.getAttr(str(second) + rot2) ))
                pm.scaleKey([str(second) + rot2], 
                    scaleSpecifiedKeys=1, valuePivot=0, valueScale=1)
                
            
        pm.delete(tmpObj)
        cmds.select(objList, r=1)
        # Reset frame to current time so that changes are visually updated
        t=cmds.currentTime(query=1)
        cmds.currentTime(t, e=1)

    elif (method == 3) and (len(objList) == 2):
        print("equip_LR_mode------------------------------------------------")
        print("elif (method == 3)")
        
        first=objList[0]
        second=objList[1]
        print("first= "+str(first))
        print("second= "+str(second))
        print(u"Mirroring static values and animation for " + trans + ", " + rot1 + " and " + rot2 + " animation for " + str(first) + " and " + str(second) + "")
        #Check attrs for editability
        count=0
        for attr in attrListOrig:
            print("first= "+str(first)+" attr1= " +str(attr))
            lockCheck1=pm.listAttr((first + attr), 
                l=1)
            lockCheck2=pm.listAttr((second + attr), 
                l=1)
            if (len(lockCheck1) != 0) and (ignore == 1):
                print("Ignoring " + str(first) + str(attr) + " because it is locked.")
                continue
                
            
            elif (len(lockCheck1) != 0) and (ignore == 0):
                print("Aborting : " + str(first) + str(attr) + " is locked.  Either unlock attributes or turn on IgnoreLockedAttributs in mirror options")
                
            
            elif (len(lockCheck2) != 0) and (ignore == 1):
                print("Ignoring " + str(second) + str(attr) + " because it is locked.")
                continue
                
            
            elif (len(lockCheck2) != 0) and (ignore == 0):
                print("Aborting : " + str(second) + str(attr) + " is locked.  Either unlock attributes or turn on IgnoreLockedAttributs in mirror options")
                
            
            else:
                #attrListFinal[count]=str(attr)
                attrListFinal.append(str(attr))
                count+=1
                
           
        cmds.select(first, r=1)
        #pm.mel.duplicatePreset(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1)
        cmds.duplicate(returnRootsOnly=1)
        dup=cmds.ls(sl=True)
        tmpObj=cmds.rename(dup[0], 'tmp_transfer_obj')
        for attr in attrListFinal:
            connection=pm.listConnections((first + attr), s=True, d=False)
            #print("connection= "+str(connection) )
            
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    #animCurve_Arr = cmds.ls( type="animCurve" );
                    #print("connection[0]= "+str(connection[0]) )
                    #newMin = cmds.findKeyframe(connection[0],which="first")
                    #newMax = cmds.findKeyframe(connection[0],which="last")
                    print("tmp_transfer_obj  pasteKey first= "+str(first)+" attr1= " +str(attr))
                    pm.copyKey((first + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
             
                        
                    pm.cutKey((tmpObj + attr), 
                        f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((tmpObj + attr), 
                        floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                      
                
                else:
                    val=pm.getAttr(first + attr)
                    pm.setAttr((tmpObj + attr),  val)
        
            
        for attr in attrListFinal:
            connection=pm.listConnections((second + attr), s=True, d=False)
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    print("tmp_transfer_obj  pasteKey attr2= " +str(attr))
                    pm.copyKey((second + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                    pm.cutKey((first + attr), 
                        f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((first + attr), 
                        floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                    
               
                else:
                    val=pm.getAttr(second + attr)
                    pm.setAttr((first + attr),  val)
                
       
        for attr in attrListFinal:
            connection=pm.listConnections((tmpObj + attr), s=True, d=False)
            if(len(connection)>0):
                if pm.mel.isAnimCurve(connection[0]):
                    print("tmp_transfer_obj  pasteKey attr3= " +str(attr))
                    pm.copyKey((tmpObj + attr), 
                        hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                    pm.cutKey((second + attr), 
                        f=(min,max), t=(min,max), cl=1)
                    pm.pasteKey((second + attr), 
                        floatOffset=0, option='replace', copies=1, valueOffset=0, connect=1, timeOffset=0)
                    
                
                else:
                    val=pm.getAttr(tmpObj + attr)
                    pm.setAttr((second + attr),  val)
                
    
        if xforms[0]:
            lockCheck1=pm.listAttr((str(first) + trans), l=1)
            #if translate is on
            if len(lockCheck1) == 0:
                print("else tx   first"+str(first)+" trans1= " +str(trans1))
                pm.setAttr((str(first) + trans1), (pm.getAttr(str(first) + trans1) * -1))
                pm.scaleKey([str(first) + trans1],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
                print("else ty   first"+str(first)+" trans2= " +str(trans2))
                pm.setAttr((str(first) + trans2), (pm.getAttr(str(first) + trans2) * -1))
                pm.scaleKey([str(first) + trans2],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
                print("else tz   first"+str(first)+" trans3= " +str(trans3))
                pm.setAttr((str(first) + trans3), (pm.getAttr(str(first) + trans3) * -1))
                pm.scaleKey([str(first) + trans3],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
                
                print("else tx   second"+str(second)+" trans1= " +str(trans1))
                pm.setAttr((str(second) + trans1), (pm.getAttr(str(second) + trans1) * -1))
                pm.scaleKey([str(second) + trans1],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
                print("else ty   second"+str(second)+" trans2= " +str(trans2))
                pm.setAttr((str(second) + trans2), (pm.getAttr(str(second) + trans2) * -1))
                pm.scaleKey([str(second) + trans2],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
                print("else tz   second"+str(second)+" trans3= " +str(trans3))
                pm.setAttr((str(second) + trans3), (pm.getAttr(str(second) + trans3) * -1))
                pm.scaleKey([str(second) + trans3],scaleSpecifiedKeys=1, valuePivot=0, valueScale=-1)
    
        """    
        if xforms[1]:
            lockCheck1=pm.listAttr((str(first) + rot3), 
            if len(lockCheck1) == 0:
                print("------")
                connection=pm.listConnections((obj + rot1), s=True, d=False)
                if(len(connection)>0):
                    if pm.mel.isAnimCurve(connection[0]):
                        print("obj= "+obj + " rot1= "+rot1)
                        pm.copyKey((obj + rot1), 
                            hierarchy='none', shape=1, float=(min,max), controlPoints=0, time=(min,max))
                        pm.cutKey((obj + rot1), 
                            f=(min,max), t=(min,max), cl=1)
                        pm.pasteKey((obj + rot1), 
                            floatOffset=0, option='replace', copies=1, valueOffset=180, connect=1, timeOffset=0)
                        
                   
                    else:
                        val=pm.getAttr(obj + rot3)
                        pm.setAttr((obj + rot3),  val+180)
                print("------")
        """
        pm.delete(tmpObj)
        cmds.select(objList, r=1)
        # Reset frame to current time so that changes are visually updated
        t=cmds.currentTime(query=1)
        cmds.currentTime(t, e=1)

        

        
    elif (method == 1) and (len(objList) != 2):
        print("Wrong number of objects.  Select 2 transfroms to mirror between")
        
#example
bt_applyMirrorAnim(2, 2, [1,1,0], 1, 1) 
bt_applyMirrorAnim(4, 4, [1,1,0], 1, 1)
bt_applyMirrorAnim(5, 3, [1,1,0], 1, 1)
bt_applyMirrorAnim(2, 2, [1,1,0], 1, 1) 

参考

Maya AnimCurve のデータを Pythonで取得するメモ

https://qiita.com/syoyo/items/376541f60e7cdb346399

[UnrealEngine,Niagara]パーティクルなんてプレイヤーが遠くなったらDeactivateしてしまえば軽量化なんてしなくても大体の場合、負荷のボトルネックにはならないみたい

パーティクルなんてプレイヤーが遠くなったらDeactivateしてしまえば軽量化なんてしなくても大体の場合、負荷のボトルネックにはならないみたい

BluePrint でActor選んで

ビューポートでNaiagaraを配置

SphereColiderを追加して半径を1250から1800に指定

コリジョン設定をOverlapAll

Begin OverlapでNaiagaraのVisibleとActivateしてついでにSet Relative Location 0,0,0

End OverlapでNaiagaraのVisibleとDeactivate

してしまえばNaiagaraがボトルネックになることは避けられる。

Particle Stateの

Kill Particles When Lifetime Has Elapsed
Loop Particles Life Time
Let Infinity Lived Particles Die When Emitter Deactives

ライフタイムが経過したときにパーティクルを殺す <あとからするとうまくいかない
ループ パーティクルの寿命 <意味不明
エミッタが非アクティブになったときに無限に生きたパーティクルを消滅させる <うまくいった。

音楽のランダムの歴史から言って

途切れなくランダムにする方法は理論から行くと長ければ長いほど途切れたと錯覚しやすいので長くする。

エミッタの更新の
Life Cycleは

loop Duration 60

パーティクルのスポーンのInitialize Particleの
lifetimeは

Random Rageにして

5から60の値の設定

関係ないが

Scale Mesh SIzeはパーティクルのスポーン時にMesh AttributeがUniformで1.0になってないと表示されなくなる。

完成したもの

HangingParticulatesで

[work, communication]頻繁なコミュニケーションによる早期退職の法則

リモートワークの職場で毎日毎日、

不要なコミュニケーションをとることは人を嫌いになるチャンスや、

上司との関係ができの悪いタスクによって人間関係が悪くなる事が増える。

未整理の状態のタスクや、

複雑化し、毎日追加されるタスクで煩雑になったコードや

何重にも重なり合うパラメータの状態によるもはや言語化の難しいステータスを

毎日無理に説明させられる事で、

上司は、まだあれはできないのか?

あいつはまだあんな事も説明できないのかと、

毎日部下は言われている気分になるので、

部下は自身の承認欲求をみたせないし、

上司からの評価も下がる事で早期退職の原因になる。。

そもそもこんな状態になるような

ムダなミーティングを増やす人間は

まったくタスク評価が人間関係に影響をあたえる

負の影響を言語化できないどころか想定できていない。

毎日無駄に管理する事による

負の影響がどれだけ人間関係を悪くするかを考えられていない、

上司としてコミュニケーションや、

人間関係に対する管理怠慢である。

コミュニケーションは、

必要以上に頻繁にする事で破綻する事実を知らない。

有名な小説家、村上春樹の家庭ように

それは別居した方が客観性があって結婚生活がうまくいく

夫婦生活の対策のようなモノだという事に

今さら気がついて良かった。

#リモートワークコミュニケーション #テレワークコミュニケーション #夫婦生活 #円満 #人間関係のコツ

[UnrealEngine] Surface Translusent Material

これは自分の中でかなりおおきな発見だった。

Shading Modelを変更しなくても、透明で、ベースカラー、Metalic スペキュラ、ラフネス、エミッシブ、Normal、タンジェント、ワールド位置オフセット、ワールドディスプレースメント、テッセレーション乗数、アンビエントオクルージョン、屈折が使える

詳細は以下

https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/HowTo/Transparency/

【UnrealEngine】水っぽいマテリアルを作ったときのメモ(屈折率)

https://qiita.com/nchhujimiyama/items/8d2c820f2a1367864569

他にも

[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 以前の2019,2018バージョンを起動して そこでmel2pyを使うことだ。

A simple solution is to launch a maya2019 or maya2018 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] );
			}
		}
	}
}