Announcement

Collapse
No announcement yet.

Notes on adding custom characters to UT4 (build 3525360)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    [TUTORIAL] Notes on adding custom characters to UT4 (build 3525360)

    (version 1)
    Here are some notes on getting a custom character into UT4.

    We assume that:
    -There is a character mesh already rigged with the UT4 skeleton and exported.
    -The character's textures and materials are already setup for Unreal Engine 4.

    Notes - Adding custom character:

    -Start up the UT4 editor.
    Main class for defining a character is UTCharacterContent.
    For an example, see:
    Blueprint'/Game/RestrictedAssets/Character/Malcom_New/Malcolm_New.Malcolm_New'

    -Import the third person mesh (FBX format)
    -Set PhysicsAsset to base_3p_PhysicsAsset
    -Set skeleton to base_3p_Skeleton

    -Import the first person mesh (FBX format), set skeleton to base_1p_Skeleton
    Click image for larger version

Name:	ut4_custom_character_import.png
Views:	1
Size:	135.5 KB
ID:	397946


    -Navigate to '/Game/RestrictedAssets/Character/', and right click 'Duplicate' on one of the *Base files:
    HumanFemaleBase
    HumanMaleBase
    NecrisFemaleBase
    NecrisMaleBase
    RobotCharBase
    SkaarjMaleBase

    It does not matter which one is duplicated, as they are just presets and can be modified later.

    -Duplicate Blueprint'/Game/RestrictedAssets/Character/HumanMaleBase.HumanMaleBase' and rename it,
    for example to TESTCHAR, then double click on it to edit properties.

    Properties of interest(all skeleton):
    Transform
    Rotation - set this if the 3rd person mesh is not aligned correctly.
    Scale - set this if 3rd person mesh is too large/small. (note: does not scale weapon size)
    Mesh
    Skeletal Mesh - set this to our 3rd person mesh
    UTCharacterContent
    Display Name - name of the character in the menu
    Hide in UI - set to false(unchecked)
    Requires Online Item - leave unchecked
    Requires Offline Achievement - leave as 'None'
    Entitlement - leave blank
    Skeleton Mesh - this is the mesh when gibbed by the Link Gun
    Gibs - these meshes are spawned when gibbed

    DMSkin Type - if set to 'EDMSkin Base' team materials will not be applied in DM;
    otherwise, red team materials are applied(even for 'EDMSkin Blue')
    Team Materials - overrides the materials used by 3rd person 'Skeletal Mesh' parameter above
    Team Materials 1p - avoid adding materials here; this seems to be unused by the official meshes
    in the current UT(build 3525360), and has some issues(see Team Materials below).
    Character Voice - defines various spoken lines
    1p Skeleton Mesh
    Skeleton Mesh 1p - set this to our 1st person mesh(arms)
    Relative Scale 1p - seems to have no effect
    Relative Rotation 1p - seems to have no effect

    -Once the properties have been set up make sure to save the UTCharacterContent, or else it might not load.
    (may need to close and restart the editor to get it to load)

    -For the next step, press 'Play' to start a session.
    Press ` to open the console
    Type 'behindview 1' for third person view
    Type 'setchar TESTCHAR' (or the custom character name)
    Type 'behindview 0' to switch back to first person view

    -At this point the character should be working in both first and third person. Press ESC to return to the editor.

    -To package the character, go to:
    Share -> Share A Character
    and select the UTCharacterContent that was created.

    Notes - Adding bot
    -Bots are defined by UTBotCharacter
    -Examples can be found in '/Game/RestrictedAssets/Character/Bots/'
    -Avoid using UTBotCharacter in '/Game/RestrictedAssets/Character/Bots/Proto/' as reference;
    these have non-standard configuration (for example they might move faster than the default UT Character)

    -Name of the bot ingame is the same as the name of the asset
    -Make sure that 'Requires online item' and 'Proto Bot' are unchecked

    -Packaging a bot with UTCharacterContent:
    -This method probably unintended/unsupported, but it seems to work.
    -Open a UTCharacterContent and click on 'Open Full Blueprint Editor', if it is not already in the Blueprint window.
    -Create blueprint variable in UTCharacterContent - type: Object Reference, compile,
    and set default value to the custom UTBotCharacter.
    -To check if the UTBotCharacter is properly packaged, run in Windows command line:
    UnrealTournamentEditor\Engine\Binaries\Win64\UnrealPak.exe [pakname].pak -test

    -Bot testing console commands, only seems to work in the client (not editor):
    KillBots - removes all bots from current match
    ForceAddNamedBot [botname] [team]
    -There is a bug with this command; it does not increment the number of players
    which makes the bot leave the match so we instead use:
    ForceAddNamedBot botname 0 | SetBotCount 1


    Notes - Setup 1st person character mesh:
    --The 1st person skeleton, base_1p_Skeleton is the same as the base_3p_Skeleton except
    that there is an additional bone fp_camera. fp_camera has root as parent and is located roughly
    on the nose and behind the ears. Not sure if it is used for anything.
    --As a result, we can get the 1st person mesh from the 3rd person mesh by just deleting everything but the arms.
    --The first person meshes are also slightly smaller than third person meshes, so some scaling is needed.
    To convert 1p to 3p scale by ~1.15
    To convert 3p to 1p scale by ~0.87
    --The transforms of the skeleton bones are important; moving the head or tail of a bone will
    cause animations to become misaligned.
    --Note that 1p meshes must use materials with Panini projection in order to appear correct;
    otherwise the hands will appear to be moved forward, out of alignment with the weapon handles
    (see materials setup below).

    Example of 1p mesh without Panini projection enabled:
    Click image for larger version

Name:	ut4_custom_character_material_panini.png
Views:	1
Size:	537.8 KB
ID:	397947



    Comparison of default UT4 meshes:
    Click image for larger version

Name:	ut4_custom_character_ut4_base_meshes.png
Views:	1
Size:	76.5 KB
ID:	397948

    Notes - Materials setup:
    Materials should use these MaterialFunctions:
    MF_GameplayCharacterFX - for various gameplay effects such as spawning or hit highlight
    MF_1stPersonVertexShader - for the Panini Projection option
    To setup materials for teams:
    -Create a Static Bool Parameter
    Parameter Name - "Use Team Colors"
    Group - None
    --Not sure if this is actually used yet(build 3525360), also the spacing in the name might be important
    -Create a ScalarParameter
    Parameter Name - "TeamSelect"
    Group - TeamColors
    --TeamSelect is 0 for red, 1 for blue, and 255 for FFA with third person meshes
    --Potential bug(build 3525360): TeamSelect is set to 0 for blue, 1 for red for first person meshes
    --Since this value is set by the game, the 'default value' in the material editor is ignored

    Example of a basic material setup for UT4 with teams:
    Click image for larger version

Name:	ut4_custom_character_material1.png
Views:	1
Size:	183.4 KB
ID:	397945


    Panini projection setup:
    Click image for larger version

Name:	ut4_custom_character_material2.png
Views:	1
Size:	200.5 KB
ID:	397949

    Assets of note:
    Skeleton'/Game/RestrictedAssets/Character/Base/Mesh/base_1p_Skeleton.base_1p_Skeleton'
    Skeleton'/Game/RestrictedAssets/Character/Base/Mesh/base_3p_Skeleton.base_3p_Skeleton'
    AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/base_1p_AnimBP.Base_1p_AnimBP'
    AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/Base_3p_AnimBP.Base_3p_AnimBP'
    PhysicsAsset'/Game/RestrictedAssets/Character/Base/Mesh/base_3p_PhysicsAsset.base_3p_PhysicsAsset'

    SkeletalMesh'/Game/RestrictedAssets/Character/Base/Mesh/base_1p.base_1p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Base/Mesh/base_3p.base_3p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Skaarji/Meshes/skaarj_1p.skaarj_1p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Skaarji/Meshes/skaarj_3p.skaarj_3p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Robot/Mesh/robot_1p.robot_1p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Robot/Mesh/robot_3p.robot_3p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Female/Meshes/necris_female_1p.necris_female_1p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Female/Meshes/necris_female_3p.necris_female_3p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Male/Mesh/necris_male_1p.necris_male_1p'
    SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Male/Mesh/necris_male_3p.necris_male_3p'
    -Use one of the meshes as reference to create a custom character; they can be exported as FBX and imported into Blender, Maya, etc.
    -Avoid using meshes with ut4_base_Skeleton; it is mostly the same as base_3p_Skeleton but is missing some bones,
    which could cause problems with animations. Additionally, the scaling might be off.

    1st/3rd person material example:
    Material'/Game/RestrictedAssets/Character/Malcom_New/Materials/M_Malcom_Body.M_Malcom_Body'
    1st person material example:
    MaterialInstanceConstant'/Game/RestrictedAssets/Character/Malcom_New/Materials/M_Malcom_Body_Panini.M_Malcom_Body_Panini'
    Team material example:
    MaterialInstanceConstant'/Game/RestrictedAssets/Character/Malcom_New/Materials/MI_TC01_Body01_Team.MI_TC01_Body01_Team'



    #2
    (version 1)

    Notes - Adding a custom character with anim retargeting (third person only):
    -A somewhat recently added feature to UE4 is animation retargeting. This feature is available in UT4 and we can use it for
    custom 3rd person character meshes. This approach is useful if one does not want to use the UT4 skeleton for some reason.
    However, it can only be used effectively for 3rd person meshes; to see why it does not work with 1st person meshes see other section below.

    -First off, it should be emphasized that this is a fairly complicated and fragile method that is prone to breaking.
    Character modelers will want to avoid this approach unless absolutely necessary;
    it is possible that a future update could break it permanently.


    -In order to make it work we run a mutator, MultiSkeletonSupport, which performs 2 functions:
    -Whenever a player is spawned we update the 3rd person animBP
    -Whenever a player takes damage we call the hit reaction event
    See the end of this post for a link to the mutator.

    -For the end user this just involves running a mutator, but from a developer's side there
    is a lot of overhead involving debugging Blueprints and Animation Blueprints.

    Advantages:
    -Use any skeleton, so:
    -If there is a humanoid (non-UT4) character already set up and rigged, it can be used.
    -We can use a mesh generator such as ManuelLab(CC Attribution license, anime or realistic character)
    or MakeHuman(CC0 license, realistic character).
    -In theory, it should also be possible to port meshes from UT2k4/UT3, etc.(have not tested this).
    -The default UT4 skeleton is not set up for Blender(bone envelopes), so rigging/skinning is a bit more easy
    (need to realign bones to use UT4 skeleton with Blender).
    -Allows characters with different proportions and fully custom animation.

    Disadvantages:
    -Requires running a mutator to set the AnimBP when a player is spawned.
    -Liable to break if code, Blueprints or AnimBPs are changed in the future.
    -Needs to be rebuilt/recooked every time any animations are changed.
    -Retargeted animations add about 6MB (49MB uncooked) to package size per skeleton.
    -Retargeted animations do not perfectly line up (for example the fingers might not be on the trigger).
    -It is still necessary to make a 1st person mesh using the UT4 skeleton(base_1p_Skeleton).
    -Default taunts will not work unless they are duplicated, and animations retargeted

    Known issues:
    -Switching meshes ingame will cause the character to be stuck in the default pose until they are respawned
    -Third person hit reaction relies on UTMutator::ModifyDamage, but this is called before LastTakeHitInfo is
    updated so the character's animation will react to the last hit instead
    -We could modify UTCharacter but it could create compatibility issues with other mods
    -UTCharacter casts the anim instance to base_3p_AnimBP in order to trigger hit reaction animation events.

    Implementing a character with this approach involves 4 items:
    -Setting up our custom skeleton for UT4 by adding bones, sockets, and a PhysicsAsset
    -Retargeting the 3p animations/animBP for our custom skeleton
    -AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/base_3p_AnimBP.Base_3p_AnimBP'
    -Setting up the UTCharacterContent, as detailed previously

    -Running the MultiSkeletonSupport mutator (for non-offline games this needs to be done by the server admin)

    If there is a mesh with custom rig already setup, here is what needs to be done to make it work with UT4:
    -Before importing into UT4, we need to add IK bones to our custom skeleton - base_3p_AnimBP needs these to work correctly.
    -IK bones
    -*_root bones positioned at origin(0,0,0)
    -other bones positioned at corresponding bone (see base_3p_Skeleton for reference)
    -ikalt_ bones are unused as of build 3525360, so they do not need to be added but it might be useful just in case

    ik_foot_root
    ik_foot_l - foot_l
    ik_foot_r - foot_r
    ik_hand_root
    ik_hand_gun - hand_r
    ik_hand_l - hand_l
    ik_hand_r - hand_r
    ikalt_foot_root
    ikalt_foot_l - foot_l
    ikalt_foot_r - foot_r
    ikalt_hand_root
    ikalt_hand_l - hand_r
    ikalt_hand_r - hand_r

    -After importing into UT4, we need to setup a PhysicsAsset for ragdolls and add sockets to the skeleton
    Weapon sockets:
    hand_r -> weapon_r -> WeaponAttach_R
    hand_l -> weapon_l -> WeaponAttach_L
    CTF flag socket:
    spine_02 -> FlagAttach
    Cosmetic sockets:
    head -> HatSocket
    head -> GlassesSocket
    1st person weapon position sockets:
    root -> prop_A -> prop_A_Attach
    root -> prop_B -> prop_B_Attach
    Todo: figure out how the redeemer is attached

    Retargeting animations and animBP third person:
    --First off we should copy the existing animations so that we do not accidentally mess up the default anims.

    -Navigate to '/Game/RestrictedAssets/Character/Base/Mesh/'
    -Copy base_3p mesh and base_3p_Skeleton to another folder
    -Rename to RT_base_3p and RT_base_3p_Skeleton (or any other name)
    -Right click on RT_base_3p, click on Skeleton->Assign Skeleton, use RT_base_3p_Skeleton
    -Make another folder RT_AnimBP_3p

    -Navigate to '/Game/RestrictedAssets/Character/Base/Blueprints/'
    -Right click on Base_3p_AnimBP, click on 'Retarget Anim Blueprints'->'Duplicate Anim Blueprints and Retarget'Click image for larger version

Name:	cctutorial_retarget1warning2.png
Views:	1
Size:	254.8 KB
ID:	397952

    -Uncheck 'Show Only Compatible Skeletons'
    -Type in 'rt base'
    -Click on RT_Base_3p_Skeleton
    -Click 'Change', set folder to RT_AnimBP_3p
    -Click 'Retarget'
    Click image for larger version

Name:	cctutorial_retarget1.png
Views:	1
Size:	210.7 KB
ID:	397953

    -There should now be a bunch of anims in the target folder
    Click image for larger version

Name:	cctutorial_retarget2.png
Views:	1
Size:	428.3 KB
ID:	397954

    -In the Content Browser, click 'Save All', make sure to uncheck any items that are not in the folder RT_AnimBP_3p
    Click image for larger version

Name:	cctutorial_retarget3.png
Views:	1
Size:	274.2 KB
ID:	397956

    -Rename RT_AnimBP_3p/Base_3p_AnimBP to 0RT_Base_3p_AnimBP, 0 so that it is the first item in the folder(for convenience)
    -Right click on RT_base_3p_Skeleton -> Create -> Create Rig
    Click image for larger version

Name:	cctutorial_retarget4.png
Views:	1
Size:	108.4 KB
ID:	397955

    -In 'Merge Bones' window, click 'Select All', then 'OK'
    -Double left click on RT_Base_3p_Skeleton, navigate to 'Retarget Manager' and set 'Select Rig' to RT_base_3p_SkeletonRig, save the skeleton

    --So now we have a set of duplicate anims that we can retarget to our custom skeleton.

    -We setup a rig for our custom skeleton, and also set up retargeting options for the skeleton.

    Here is an example of a rig for ManuelLab 1.6.1:
    Click image for larger version

Name:	cctutorial_retarget6_rig_manuellab.png
Views:	1
Size:	166.3 KB
ID:	397957

    Here is an example of a retargeting configuration:
    Click image for larger version

Name:	cctutorial_retarget7_skeleton_setup.png
Views:	1
Size:	181.4 KB
ID:	397958

    Click image for larger version

Name:	cctutorial_retarget8_skeleton_setup2.png
Views:	1
Size:	476.8 KB
ID:	397959

    -Adjust the pose of our skeleton to match the RT_Base_3p_Skeleton

    -Next, retarget the animBP; it might take a few iterations of modifying the base pose to get something that looks correct
    Click image for larger version

Name:	cctutorial_retarget9_final.png
Views:	1
Size:	200.7 KB
ID:	397960

    -If the animBP is run at this point it will not look right - the arms will be in a T-pose;
    -This is since 'Layered blend per bone' nodes in AnimBPs need to be updated; there are about 27 instances, search for 'spine_01', and replace it with the corresponding bone on the custom skeleton
    Click image for larger version

Name:	cctutorial_retarget10_final.png
Views:	1
Size:	146.8 KB
ID:	397961

    -There is one final change to make it work - setup the hit reaction in the animBP. We add an additional node
    so that the mutator can notify the animBP when a character has been hit.
    Click image for larger version

Name:	cctutorial_retarget11_hitreact.png
Views:	1
Size:	376.5 KB
ID:	397962

    When setting up UTCharacterContent, here are some additional properties that need to be set:
    Animation
    Animation Mode - set to 'Use Animation Blueprint'
    Anim Class - set to retargeted AnimBP;
    -These values are unused by the stock UT code, and only applied if the MultiSkeletonSupport mutator is running.
    -Note: Transform->Scale scales weapon size when custom AnimBP is used




    Notes - Adding a custom character with anim retargeting (first person only):
    --After much investigation: it is not feasible to efficiently retarget 1st person anims since the fingers do not line up,
    in addition to many other problems. The best approach is to modify the existing 1p meshes so that the animations line up correctly.
    These notes are provided for reference.


    --In order to use retargeted 1p anims we need to derive a class from UTCharacterContent, and also replace the default UTCharacter.
    -UTCharacterContent is modified since there is no way to define a first person AnimBP.
    -UTCharacter is modified since it casts the anim instance to base_1p_AnimBP in order to trigger certain animation events, such as reaction to shock combo and floor sliding.
    -A mutator is setup to set 1st/3rd person animBP every time a player is spawned(EventModifyPlayer).
    -UTWeapon also needs to be modified dynamically by the mutator. Since each weapon has a separate set of 1st person anims, they need to be updated whenever a player picks up a weapon(EventModifyInventory).

    For first person, we need to retarget:
    -First person AnimBP AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/base_1p_AnimBP.Base_1p_AnimBP'
    -A set of ~50-70 animations for each weapon in /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Base_Pistol/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Base_Pistol_Dual/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Base_Rifle/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Bio_Rifle/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Enforcer/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Enforcer_Dual/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Flak_Cannon/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/GrenadeLauncher/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Impact_Hammer/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Lightning_Gun/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Link_Gun/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/MiniGun/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Redeemer/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Rocket_Launcher/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Shock_Rifle/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Sniper_Rifle/
    /Game/RestrictedAssets/Character/Base/Animation/1p/Combat/Translocator/
    -Weapon specific animations for any custom weapons
    -This adds ~100MB in animations for UT stock weapons.

    Retargeting animations first person:
    --We use a similar process as for 3rd person to retarget the 1st person animations.

    -Need to add these bones in order for weapons to be positioned in first person view
    root -> prop_A
    root -> prop_B
    -Also these sockets
    root -> prop_A -> prop_A_Attach
    root -> prop_B -> prop_B_Attach

    --After retargeting:
    -Update montages -- they are cleared by retargeting
    -Update AimOffset(AO) and BlendSpace(BS) -- these are cleared by retargeting
    -Fix additive animations(use right click 'Asset Actions' -> 'Bulk Edit via Property Matrix':
    Set 'Additive Settings' -> 'Base Pose Animation' to Idle_Pose
    -Below 3 items are obsolete after fixing additive anims as above
    -'Apply Mesh Space Additive' alpha in 'runForward_L' and 'runForward_R' needs to be scaled by 0.01
    -'Apply Additive' alpha for dodging and wallrun need to be reduced from 1.0 to 0.01
    -'Two Bone IK' causes the hands to be misaligned, this may be caused by lack of constraints in the PhysicsAsset
    -May also need to modify 'Layered blend per bone' nodes in retargeted base_1p_AnimBP


    Dropbox is a free service that lets you bring your photos, docs, and videos anywhere and share them easily. Never email yourself a file again!

    Comment


      #3
      (This can be ignored if using the default UT4 skeleton, base_3p_skeleton.)
      Third person anim retarget update: arm/leg IK in the AnimBP might cause some issues with retargeted animations; here is how to disable it:

      Click image for larger version  Name:	retarget_update_disable_armIK.png Views:	1 Size:	112.8 KB ID:	398869

      Click image for larger version  Name:	retarget_update_disable_legIK.png Views:	1 Size:	131.5 KB ID:	398871

      Here is an example of what retargeted anims look like:
      Last edited by Sereau; 04-02-2018, 10:39 PM. Reason: remove blender image

      Comment


        #4
        Notes - Blender to UT4:
        (Blender 2.79, UT4 build 3525360)

        -By default base_3p_skeleton is not aligned for Blender; so it needs to be realigned in order to skin the mesh.
        However, exporting a mesh with the bones aligned for Blender will mess up the animations when imported into UT4, so we use 2 skeletons:
        -1 skeleton to skin the mesh(assign vertex weights)
        -1 skeleton to export
        Click image for larger version  Name:	blender_aligned_unaligned_skeleton.png Views:	1 Size:	81.0 KB ID:	398873
        -Things to consider when exporting from Blender to UT4:
        -UT4 Editor seems to behave better with FBX 7.4 export. Also: Blender cannot re-import the exported mesh if using FBX 6.1 ASCII.
        -Scale of the object in Blender containing the armature/mesh should be 0.01; using another value
        generally does not lead to good results - the mesh will be too large or small. Avoid setting scale both when exporting from
        Blender as well as importing into UT4. Having to type in numbers every import/export is error prone.

        Example configuration for FBX exporter in Blender:
        Click image for larger version  Name:	blender_279_to_ut4_skelmesh_fbx74binary.png Views:	1 Size:	71.3 KB ID:	398874

        Example of how the mesh setup in Blender appears when imported into UT4:
        Click image for larger version  Name:	blender_279_to_ut4_skelmesh_mesh.png Views:	1 Size:	428.3 KB ID:	398875

        Here is a Python script to align most of the bones:

        Code:
        #ut4_base_to_blender.py
        #Aligns a ut4 skeleton (base_3p_skeleton) with Blender so that it can be used for skinning.
        #
        ARMATURE_NAME = 'root1'        #Replace 'root1' with the name of the armature
        #
        #These bone tails must be placed manually since they are not connected to another bone:
        #
        #    head
        #    spine_03
        #    
        #    thumb_03_l
        #    index_03_l
        #    middle_03_l
        #    ring_03_l
        #    pinky_03_l
        #    ball_l
        #    
        #    thumb_03_r
        #    index_03_r
        #    middle_03_r
        #    ring_03_r
        #    pinky_03_r
        #    ball_r
        #
        import bpy
        #
        #for A in bpy.data.armatures:
        #
        A = bpy.data.armatures[ARMATURE_NAME]
        B = A.edit_bones
        #
        #Center
        #B['head'].tail = B['head'].head
        B['neck_02'].tail = B['head'].head
        B['neck_01'].tail = B['neck_02'].head
        #
        B['pelvis'].tail = B['spine_01'].head
        B['spine_01'].tail = B['spine_02'].head
        B['spine_02'].tail = B['spine_03'].head
        ##B['spine_03'].tail = (B['clavicle_l'].head + B['clavicle_r'].head) * 0.5
        #
        B['tail_01'].tail = B['tail_02'].head
        #B['tail_02'].tail = B['tail_03'].head
        #B['tail_03'].tail = B['tail_04'].head
        #B['tail_04'].tail = B['tail_05'].head
        ##B['tail_05'].tail = B['tail_05'].head
        #
        #
        #Left side
        B['thumb_01_l'].tail = B['thumb_02_l'].head
        B['thumb_02_l'].tail = B['thumb_03_l'].head
        ##B['thumb_03_l'].tail = B['thumb_03_l'].head
        B['index_metacarpal_l'].tail = B['index_01_l'].head
        B['index_01_l'].tail = B['index_02_l'].head
        B['index_02_l'].tail = B['index_03_l'].head
        ##B['index_03_l'].tail = B['index_03_l'].head
        B['middle_metacarpal_l'].tail = B['middle_01_l'].head
        B['middle_01_l'].tail = B['middle_02_l'].head
        B['middle_02_l'].tail = B['middle_03_l'].head
        ##B['middle_03_l'].tail = B['middle_03_l'].head
        B['ring_metacarpal_l'].tail = B['ring_01_l'].head
        B['ring_01_l'].tail = B['ring_02_l'].head
        B['ring_02_l'].tail = B['ring_03_l'].head
        ##B['ring_03_l'].tail = B['ring_03_l'].head
        B['pinky_metacarpal_l'].tail = B['pinky_01_l'].head
        B['pinky_01_l'].tail = B['pinky_02_l'].head
        B['pinky_02_l'].tail = B['pinky_03_l'].head
        ##B['pinky_03_l'].tail = B['pinky_03_l'].head
        #
        B['clavicle_l'].tail = B['upperarm_l'].head
        B['upperarm_l'].tail = B['lowerarm_l'].head
        B['lowerarm_l'].tail = B['hand_l'].head
        B['hand_l'].tail = (B['middle_metacarpal_l'].head + B['ring_metacarpal_l'].head) * 0.5
        #
        B['thigh_l'].tail = B['calf_l'].head
        B['calf_l'].tail = B['foot_l'].head
        B['foot_l'].tail = B['ball_l'].head
        ##B['ball_l'].tail = B['ball_l'].head
        #
        B['upperarm_twist_01_l'].tail = B['upperarm_l'].head + (B['upperarm_l'].tail - B['upperarm_l'].head) * 0.125
        B['lowerarm_twist_01_l'].head = (B['lowerarm_l'].tail + B['lowerarm_l'].head) * 0.5
        B['lowerarm_twist_01_l'].tail = B['hand_l'].head
        B['thigh_twist_01_l'].tail = B['thigh_l'].head + (B['thigh_l'].tail - B['thigh_l'].head) * 0.25
        #
        #
        #Right side
        B['thumb_01_r'].tail = B['thumb_02_r'].head
        B['thumb_02_r'].tail = B['thumb_03_r'].head
        ##B['thumb_03_r'].tail = B['thumb_03_r'].head
        B['index_metacarpal_r'].tail = B['index_01_r'].head
        B['index_01_r'].tail = B['index_02_r'].head
        B['index_02_r'].tail = B['index_03_r'].head
        ##B['index_03_r'].tail = B['index_03_r'].head
        B['middle_metacarpal_r'].tail = B['middle_01_r'].head
        B['middle_01_r'].tail = B['middle_02_r'].head
        B['middle_02_r'].tail = B['middle_03_r'].head
        ##B['middle_03_r'].tail = B['middle_03_r'].head
        B['ring_metacarpal_r'].tail = B['ring_01_r'].head
        B['ring_01_r'].tail = B['ring_02_r'].head
        B['ring_02_r'].tail = B['ring_03_r'].head
        ##B['ring_03_r'].tail = B['ring_03_r'].head
        B['pinky_metacarpal_r'].tail = B['pinky_01_r'].head
        B['pinky_01_r'].tail = B['pinky_02_r'].head
        B['pinky_02_r'].tail = B['pinky_03_r'].head
        ##B['pinky_03_r'].tail = B['pinky_03_r'].head
        #
        B['clavicle_r'].tail = B['upperarm_r'].head
        B['upperarm_r'].tail = B['lowerarm_r'].head
        B['lowerarm_r'].tail = B['hand_r'].head
        B['hand_r'].tail = (B['middle_metacarpal_r'].head + B['ring_metacarpal_r'].head) * 0.5
        #
        B['thigh_r'].tail = B['calf_r'].head
        B['calf_r'].tail = B['foot_r'].head
        B['foot_r'].tail = B['ball_r'].head
        ##B['ball_r'].tail = B['ball_r'].head
        #
        B['upperarm_twist_01_r'].tail = B['upperarm_r'].head + (B['upperarm_r'].tail - B['upperarm_r'].head) * 0.125
        B['lowerarm_twist_01_r'].head = (B['lowerarm_r'].tail + B['lowerarm_r'].head) * 0.5
        B['lowerarm_twist_01_r'].tail = B['hand_r'].head
        B['thigh_twist_01_r'].tail = B['thigh_r'].head + (B['thigh_r'].tail - B['thigh_r'].head) * 0.25
        #
        Here is a Python script to set bone envelopes in Blender(to help weigh the vertices):

        Code:
          #ut4_base_to_blender_envelope.py
        #Sets ut4 skeleton (base_3p_skeleton) envelopes so that it can be used for skinning.
        #
        ARMATURE_NAME = 'root1'        #Replace 'root1' with the name of the armature
        #
        import bpy
        #
        def set_envelope_head(bone):
            bone.envelope_distance = 10
            bone.envelope_weight = 1
            bone.head_radius = 8
            bone.tail_radius = 8
        def set_envelope_neck(bone):
            bone.envelope_distance = 3
            bone.envelope_weight = 1
            bone.head_radius = 4
            bone.tail_radius = 4
        def set_envelope_spine(bone):
            bone.envelope_distance = 10
            bone.envelope_weight = 1
            bone.head_radius = 10
            bone.tail_radius = 10
        def set_envelope_leg(bone):
            bone.envelope_distance = 9
            bone.envelope_weight = 1
            bone.head_radius = 8
            bone.tail_radius = 8
        def set_envelope_twist_leg(bone):
            bone.envelope_distance = 9
            bone.envelope_weight = 1
            bone.head_radius = 8
            bone.tail_radius = 8
        def set_envelope_arm(bone):
            bone.envelope_distance = 2.5
            bone.envelope_weight = 1
            bone.head_radius = 4
            bone.tail_radius = 4
        def set_envelope_twist_arm(bone):
            bone.envelope_distance = 2.5
            bone.envelope_weight = 1
            bone.head_radius = 4
            bone.tail_radius = 4
        def set_envelope_tail(bone):
            bone.envelope_distance = 2.5
            bone.envelope_weight = 0.8
            bone.head_radius = 2
            bone.tail_radius = 2
        def set_envelope_finger(bone):
            bone.envelope_distance = 2.5
            bone.envelope_weight = 1
            bone.head_radius = 1
            bone.tail_radius = 1
        
        A = bpy.data.armatures[ARMATURE_NAME]
        B = A.bones
        #
        #Center
        set_envelope_head(B['head'])
        set_envelope_neck(B['neck_02'])
        set_envelope_neck(B['neck_01'])
        #
        set_envelope_spine(B['pelvis'])
        set_envelope_spine(B['spine_01'])
        set_envelope_spine(B['spine_02'])
        set_envelope_spine(B['spine_03'])
        #
        set_envelope_tail(B['tail_01'])
        set_envelope_tail(B['tail_02'])
        set_envelope_tail(B['tail_03'])
        set_envelope_tail(B['tail_04'])
        set_envelope_tail(B['tail_05'])
        #
        #
        #Left side
        set_envelope_finger(B['thumb_01_l'])
        set_envelope_finger(B['thumb_02_l'])
        set_envelope_finger(B['thumb_03_l'])
        set_envelope_finger(B['index_metacarpal_l'])
        set_envelope_finger(B['index_01_l'])
        set_envelope_finger(B['index_02_l'])
        set_envelope_finger(B['index_03_l'])
        set_envelope_finger(B['middle_metacarpal_l'])
        set_envelope_finger(B['middle_01_l'])
        set_envelope_finger(B['middle_02_l'])
        set_envelope_finger(B['middle_03_l'])
        set_envelope_finger(B['ring_metacarpal_l'])
        set_envelope_finger(B['ring_01_l'])
        set_envelope_finger(B['ring_02_l'])
        set_envelope_finger(B['ring_03_l'])
        set_envelope_finger(B['pinky_metacarpal_l'])
        set_envelope_finger(B['pinky_01_l'])
        set_envelope_finger(B['pinky_02_l'])
        set_envelope_finger(B['pinky_03_l'])
        #
        set_envelope_arm(B['clavicle_l'])
        set_envelope_arm(B['upperarm_l'])
        set_envelope_arm(B['lowerarm_l'])
        set_envelope_arm(B['hand_l'])
        #
        set_envelope_leg(B['thigh_l'])
        set_envelope_leg(B['calf_l'])
        set_envelope_leg(B['foot_l'])
        set_envelope_leg(B['ball_l'])
        #
        set_envelope_twist_arm(B['upperarm_twist_01_l'])
        set_envelope_twist_arm(B['lowerarm_twist_01_l'])
        set_envelope_twist_leg(B['thigh_twist_01_l'])
        #
        #
        #Right side
        set_envelope_finger(B['thumb_01_r'])
        set_envelope_finger(B['thumb_02_r'])
        set_envelope_finger(B['thumb_03_r'])
        set_envelope_finger(B['index_metacarpal_r'])
        set_envelope_finger(B['index_01_r'])
        set_envelope_finger(B['index_02_r'])
        set_envelope_finger(B['index_03_r'])
        set_envelope_finger(B['middle_metacarpal_r'])
        set_envelope_finger(B['middle_01_r'])
        set_envelope_finger(B['middle_02_r'])
        set_envelope_finger(B['middle_03_r'])
        set_envelope_finger(B['ring_metacarpal_r'])
        set_envelope_finger(B['ring_01_r'])
        set_envelope_finger(B['ring_02_r'])
        set_envelope_finger(B['ring_03_r'])
        set_envelope_finger(B['pinky_metacarpal_r'])
        set_envelope_finger(B['pinky_01_r'])
        set_envelope_finger(B['pinky_02_r'])
        set_envelope_finger(B['pinky_03_r'])
        #
        set_envelope_arm(B['clavicle_r'])
        set_envelope_arm(B['upperarm_r'])
        set_envelope_arm(B['lowerarm_r'])
        set_envelope_arm(B['hand_r'])
        #
        set_envelope_leg(B['thigh_r'])
        set_envelope_leg(B['calf_r'])
        set_envelope_leg(B['foot_r'])
        set_envelope_leg(B['ball_r'])
        #
        set_envelope_twist_arm(B['upperarm_twist_01_r'])
        set_envelope_twist_arm(B['lowerarm_twist_01_r'])
        set_envelope_twist_leg(B['thigh_twist_01_r'])
        #
        #
        Notes - Adding cloth/hair with Blender:
        -PhysicsAssetToolkit does not work very well for simulating hair/cloth, so we use APEX instead.
        -We can add APEX cloth to character meshes or cosmetic meshes(hats); however, if cloth/hair is added to a hat it might not be able to collide with the character mesh.

        -The cloth mesh is defined by assigning faces to a separate material in Blender.
        -In order to use APEX cloth, the mesh must be skinned such that there are at most 4 weights per vertex for vertices assigned to the cloth material.
        -It is best to keep the cloth as simple as possible (or, even better, avoid using it at all) as it is not GPU accelerated. The code is multithreaded, however the work distribution occurs across meshes - in other words many simple cloth meshes will benefit from parallelism while a single complex cloth will not.
        -Best approach for hair seems to be to use 2d ribbon meshes with backstop for collision

        Click image for larger version  Name:	cloth0_materials.png Views:	1 Size:	248.6 KB ID:	398876Click image for larger version  Name:	cloth1_volume.png Views:	1 Size:	84.6 KB ID:	398877
        -Newer versions of UE4 have a built in cloth editor. However, this has not been integrated into UT (UE4.15) so we need to download tools from NVIDIA (developer.nvidia.com).
        -APEX has plugins for Maya but not for Blender, so we use the clothing tool included in the APEX SDK instead. Most recent version seems to be:
        APEXSDK-1.3.2-Build6-CL18960576-PhysX_3.3.2-WIN-VC10-BIN.exe

        -Run the installer and extract the .zip, the clothing tool is located at:
        ...\APEXSDK-1.3.2-Build6-CL18960576-PhysX_3.3.2-WIN-VC10-BIN\bin\vc10win32-PhysX_3.3\ClothingToolPROFILE.exe
        -There is also some documentation at:
        ...\APEXSDK-1.3.2-Build6-CL18960576-PhysX_3.3.2-WIN-VC10-BIN\docs\apexdoc.chm

        Clothing Tool workflow overview:
        -Controls when not painting:
        Rotate - Mouse Left
        Zoom - Mouse Right
        Pan - Mouse Middle
        -Controls when painting:
        Paint value - Mouse Left
        Disable - Mouse Right (right click with 'max distance' stops the vertex from moving, right click with 'backstop' disables backstop)
        Rotate - Alt + Mouse Left
        Zoom - Alt + Mouse Right
        Pan - Alt + Mouse Middle
        -ClothingToolPROFILE.exe crashes extremely easily, so it is recommended to save often
        -Disable GPU cloth simulation in the clothing tool; it crashes otherwise even on NVIDIA GPU.
        Click image for larger version  Name:	cloth2_start_disable_gpu.png Views:	1 Size:	76.9 KB ID:	398878
        -Start by loading the mesh exported as FBX
        Click image for larger version  Name:	cloth3_start.png Views:	1 Size:	79.4 KB ID:	398879
        -Select the materials that are simulated with cloth, then click 'Generate Tangent Space';
        UT4 editor might throw some errors otherwise when assigning the cloth to a material.
        -Optional: Click 'Generate Collision Volumes' to setup collisions with convex/capsule shapes.
        This should be avoided if possible as it is expensive performance wise (use backstop instead).
        Click image for larger version  Name:	cloth4_start.png Views:	1 Size:	94.5 KB ID:	398880
        -With the materials selected, there are generally 2 values to paint:
        'max distance' - determines how far each vertex in the mesh can move
        'backstop' - setting to 0 prevents the vertex from moving against the normal 'inwards' into the mesh
        backstop > 0 allows vertices to sink into the mesh, while
        backstop < 0 push vertices outwards
        -By default the max distance is 0 and backstop is disabled
        -Values that seem to work well for hair:
        -Set max distance to 0.0 at the top center of the head, increasing to 0.04-0.09 at the tip of the hair
        -Set backstop to 0 for all vertices
        -Use volumetric brush with radius 3 to paint the very top of the mesh; radius 12 for all other areas
        Click image for larger version  Name:	cloth5_distance.png Views:	1 Size:	109.1 KB ID:	398881
        Click image for larger version  Name:	cloth6_backstop.png Views:	1 Size:	71.1 KB ID:	398882
        -After painting we can test the cloth by clicking on:
        Single Layered Cloth -> Generate, and then
        Single Layered Cloth -> Start Simulation (make sure 'GPU Cloth Sim' under 'simulation' is disabled before clicking this)
        -When the cloth mesh has been generated, export it by clicking:
        Single Layered Cloth -> Save Asset
        or
        Simulation -> Save Selected
        -File format (.apx/.apb) does not seem to make any difference in the simulation, but .apb is smaller since it is binary.
        -Different sections (e.g. hair, shirt, skirt, etc.) can be exported as a single file or as separate files.
        Separating them might allow customizing the cloth simulation parameters, so that each section behaves differently.
        Click image for larger version  Name:	cloth7_generate.png Views:	2 Size:	69.7 KB ID:	398884
        -After exporting the .apx/.apb APEX file from the clothing tool, we load it into UT4 by opening the skeletal mesh in the editor.
        -Finally, when the cloth asset has been loaded, 'Clothing' section appears for each material in each LOD.
        Select the .apx/.apb to enable cloth simulation.
        Click image for larger version  Name:	cloth9_load_ue4.png Views:	1 Size:	391.3 KB ID:	398885




        Last edited by Sereau; 04-02-2018, 11:11 PM. Reason: remove duplicate image

        Comment


          #5
          Sereau how can I setup fbx imported skeletal meshes should I export just skeletal meshes in unreal tournament editor first?

          Comment


            #6
            Originally posted by Sereau View Post
            (version 1)
            Here are some notes on getting a custom character into UT4.

            We assume that:
            -There is a character mesh already rigged with the UT4 skeleton and exported.
            -The character's textures and materials are already setup for Unreal Engine 4.

            Notes - Adding custom character:

            -Start up the UT4 editor.
            Main class for defining a character is UTCharacterContent.
            For an example, see:
            Blueprint'/Game/RestrictedAssets/Character/Malcom_New/Malcolm_New.Malcolm_New'

            -Import the third person mesh (FBX format)
            -Set PhysicsAsset to base_3p_PhysicsAsset
            -Set skeleton to base_3p_Skeleton

            -Import the first person mesh (FBX format), set skeleton to base_1p_Skeleton
            Click image for larger version

Name:	ut4_custom_character_import.png
Views:	1
Size:	135.5 KB
ID:	397946


            -Navigate to '/Game/RestrictedAssets/Character/', and right click 'Duplicate' on one of the *Base files:
            HumanFemaleBase
            HumanMaleBase
            NecrisFemaleBase
            NecrisMaleBase
            RobotCharBase
            SkaarjMaleBase

            It does not matter which one is duplicated, as they are just presets and can be modified later.

            -Duplicate Blueprint'/Game/RestrictedAssets/Character/HumanMaleBase.HumanMaleBase' and rename it,
            for example to TESTCHAR, then double click on it to edit properties.

            Properties of interest(all skeleton):
            Transform
            Rotation - set this if the 3rd person mesh is not aligned correctly.
            Scale - set this if 3rd person mesh is too large/small. (note: does not scale weapon size)
            Mesh
            Skeletal Mesh - set this to our 3rd person mesh
            UTCharacterContent
            Display Name - name of the character in the menu
            Hide in UI - set to false(unchecked)
            Requires Online Item - leave unchecked
            Requires Offline Achievement - leave as 'None'
            Entitlement - leave blank
            Skeleton Mesh - this is the mesh when gibbed by the Link Gun
            Gibs - these meshes are spawned when gibbed

            DMSkin Type - if set to 'EDMSkin Base' team materials will not be applied in DM;
            otherwise, red team materials are applied(even for 'EDMSkin Blue')
            Team Materials - overrides the materials used by 3rd person 'Skeletal Mesh' parameter above
            Team Materials 1p - avoid adding materials here; this seems to be unused by the official meshes
            in the current UT(build 3525360), and has some issues(see Team Materials below).
            Character Voice - defines various spoken lines
            1p Skeleton Mesh
            Skeleton Mesh 1p - set this to our 1st person mesh(arms)
            Relative Scale 1p - seems to have no effect
            Relative Rotation 1p - seems to have no effect

            -Once the properties have been set up make sure to save the UTCharacterContent, or else it might not load.
            (may need to close and restart the editor to get it to load)

            -For the next step, press 'Play' to start a session.
            Press ` to open the console
            Type 'behindview 1' for third person view
            Type 'setchar TESTCHAR' (or the custom character name)
            Type 'behindview 0' to switch back to first person view

            -At this point the character should be working in both first and third person. Press ESC to return to the editor.

            -To package the character, go to:
            Share -> Share A Character
            and select the UTCharacterContent that was created.

            Notes - Adding bot
            -Bots are defined by UTBotCharacter
            -Examples can be found in '/Game/RestrictedAssets/Character/Bots/'
            -Avoid using UTBotCharacter in '/Game/RestrictedAssets/Character/Bots/Proto/' as reference;
            these have non-standard configuration (for example they might move faster than the default UT Character)

            -Name of the bot ingame is the same as the name of the asset
            -Make sure that 'Requires online item' and 'Proto Bot' are unchecked

            -Packaging a bot with UTCharacterContent:
            -This method probably unintended/unsupported, but it seems to work.
            -Open a UTCharacterContent and click on 'Open Full Blueprint Editor', if it is not already in the Blueprint window.
            -Create blueprint variable in UTCharacterContent - type: Object Reference, compile,
            and set default value to the custom UTBotCharacter.
            -To check if the UTBotCharacter is properly packaged, run in Windows command line:
            UnrealTournamentEditor\Engine\Binaries\Win64\UnrealPak.exe [pakname].pak -test

            -Bot testing console commands, only seems to work in the client (not editor):
            KillBots - removes all bots from current match
            ForceAddNamedBot [botname] [team]
            -There is a bug with this command; it does not increment the number of players
            which makes the bot leave the match so we instead use:
            ForceAddNamedBot botname 0 | SetBotCount 1


            Notes - Setup 1st person character mesh:
            --The 1st person skeleton, base_1p_Skeleton is the same as the base_3p_Skeleton except
            that there is an additional bone fp_camera. fp_camera has root as parent and is located roughly
            on the nose and behind the ears. Not sure if it is used for anything.
            --As a result, we can get the 1st person mesh from the 3rd person mesh by just deleting everything but the arms.
            --The first person meshes are also slightly smaller than third person meshes, so some scaling is needed.
            To convert 1p to 3p scale by ~1.15
            To convert 3p to 1p scale by ~0.87
            --The transforms of the skeleton bones are important; moving the head or tail of a bone will
            cause animations to become misaligned.
            --Note that 1p meshes must use materials with Panini projection in order to appear correct;
            otherwise the hands will appear to be moved forward, out of alignment with the weapon handles
            (see materials setup below).

            Example of 1p mesh without Panini projection enabled:
            Click image for larger version

Name:	ut4_custom_character_material_panini.png
Views:	1
Size:	537.8 KB
ID:	397947



            Comparison of default UT4 meshes:
            Click image for larger version

Name:	ut4_custom_character_ut4_base_meshes.png
Views:	1
Size:	76.5 KB
ID:	397948

            Notes - Materials setup:
            Materials should use these MaterialFunctions:
            MF_GameplayCharacterFX - for various gameplay effects such as spawning or hit highlight
            MF_1stPersonVertexShader - for the Panini Projection option
            To setup materials for teams:
            -Create a Static Bool Parameter
            Parameter Name - "Use Team Colors"
            Group - None
            --Not sure if this is actually used yet(build 3525360), also the spacing in the name might be important
            -Create a ScalarParameter
            Parameter Name - "TeamSelect"
            Group - TeamColors
            --TeamSelect is 0 for red, 1 for blue, and 255 for FFA with third person meshes
            --Potential bug(build 3525360): TeamSelect is set to 0 for blue, 1 for red for first person meshes
            --Since this value is set by the game, the 'default value' in the material editor is ignored

            Example of a basic material setup for UT4 with teams:
            Click image for larger version

Name:	ut4_custom_character_material1.png
Views:	1
Size:	183.4 KB
ID:	397945


            Panini projection setup:
            Click image for larger version

Name:	ut4_custom_character_material2.png
Views:	1
Size:	200.5 KB
ID:	397949

            Assets of note:
            Skeleton'/Game/RestrictedAssets/Character/Base/Mesh/base_1p_Skeleton.base_1p_Skeleton'
            Skeleton'/Game/RestrictedAssets/Character/Base/Mesh/base_3p_Skeleton.base_3p_Skeleton'
            AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/base_1p_AnimBP.Base_1p_AnimBP'
            AnimBlueprint'/Game/RestrictedAssets/Character/Base/Blueprints/Base_3p_AnimBP.Base_3p_AnimBP'
            PhysicsAsset'/Game/RestrictedAssets/Character/Base/Mesh/base_3p_PhysicsAsset.base_3p_PhysicsAsset'

            SkeletalMesh'/Game/RestrictedAssets/Character/Base/Mesh/base_1p.base_1p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Base/Mesh/base_3p.base_3p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Skaarji/Meshes/skaarj_1p.skaarj_1p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Skaarji/Meshes/skaarj_3p.skaarj_3p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Robot/Mesh/robot_1p.robot_1p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Robot/Mesh/robot_3p.robot_3p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Female/Meshes/necris_female_1p.necris_female_1p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Female/Meshes/necris_female_3p.necris_female_3p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Male/Mesh/necris_male_1p.necris_male_1p'
            SkeletalMesh'/Game/RestrictedAssets/Character/Necris_Male/Mesh/necris_male_3p.necris_male_3p'
            -Use one of the meshes as reference to create a custom character; they can be exported as FBX and imported into Blender, Maya, etc.
            -Avoid using meshes with ut4_base_Skeleton; it is mostly the same as base_3p_Skeleton but is missing some bones,
            which could cause problems with animations. Additionally, the scaling might be off.

            1st/3rd person material example:
            Material'/Game/RestrictedAssets/Character/Malcom_New/Materials/M_Malcom_Body.M_Malcom_Body'
            1st person material example:
            MaterialInstanceConstant'/Game/RestrictedAssets/Character/Malcom_New/Materials/M_Malcom_Body_Panini.M_Malcom_Body_Panini'
            Team material example:
            MaterialInstanceConstant'/Game/RestrictedAssets/Character/Malcom_New/Materials/MI_TC01_Body01_Team.MI_TC01_Body01_Team'

            Why when I'm trying to import my character model some errors are occuring when there no 1p,3p models and animations of these characters?
            HumanFemaleBase
            HumanMaleBase
            NecrisFemaleBase
            NecrisMaleBase
            RobotCharBase
            SkaarjMaleBase
            Things could be little bit more simple if you could make video version of this tutorial,please?To make it less complicated.

            Comment

            Working...
            X