Announcement

Collapse
No announcement yet.

SkelController not updating offscreen (SkelControlSingleBone vs SkelControlLookAt)

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

    SkelController not updating offscreen (SkelControlSingleBone vs SkelControlLookAt)

    Hi,

    i have 2 custom skeletal controllers, both are in the same actor with "bIgnoreControllersWhenNotRendered=false" set and both also have "bIgnoreWhenNotRendered=false" set, but while the SkelControlSingleBone just interpolates its bone animations just fine offscreen, the SkelControlLookAt either simply don't update at all or depending on the set targetspace just jumps from target-position to target-position instantly. If the SkelControlLookAt actor becomes visible it interpolates correctly?

    So whats the catch here? Just some bug or "intended" behavior and if so why is there a general "bIgnoreWhenNotRendered" if it gets ignored by some implementations.

    Thx Andy

    #2
    You might want to try
    Code:
    		bUpdateSkelWhenNotRendered=true
    as well? It helped me in a similar situation...

    SkelControlBase.uc
    Code:
    /**
     *	whether this control should be ignored if the SkeletalMeshComponent being composed hasn't been rendered recently
     *
     *	@note this can be forced by the SkeletalMeshComponent's bIgnoreControllersWhenNotRendered flag
     */
    var(Performance)			bool			bIgnoreWhenNotRendered;
    SkeletalMeshComponent.uc
    Code:
    /** If true, update skeleton/attachments even when our Owner has not been rendered recently
     * @note if this is false, bone information may not be accurate, so be careful setting this to false if bone info is relevant to gameplay
     * @note you can use ForceSkelUpdate() to force an update
     * @note: In the output from SHOWSKELCOMPTICKTIME you want UpdatePoseTotal to be 0 when this is FALSE for a specific component
     */
    var() bool bUpdateSkelWhenNotRendered;
    
    /** If true, do not apply any SkelControls when owner has not been rendered recently. */
    var bool bIgnoreControllersWhenNotRendered;

    Comment


      #3
      Thx, but this did not resolve the problem. The SkelControlLookAt wont interpolate TargetLocation if the actor is offscreen, in contrast to the SkelControlSingleBone.

      I will just fill in a bug report and see what epic says.

      Comment


        #4
        SkelControlLookAt + PhysAsset = not working code

        I've got the same error. It happens when I set PhysAsset. And everything works without PhysAsset.

        So here's not working code.

        Code:
        class LadderComplexCyls extends Actor placeable;
        
        var SkeletalMeshComponent MyMesh;                               
        
        simulated event PostBeginPlay()
        {
        	super.PostBeginPlay();
        	MyMesh.WakeRigidBody();
        }
        
        DefaultProperties
        {
        	begin object class=SkeletalMeshComponent name=FE_LadderCyls
        		SkeletalMesh=SkeletalMesh'ComplexCyls.Meshes.complex_cyls_2'
        		PhysicsAsset=PhysicsAsset'ComplexCyls.Physics.complex_cyls_2_Physics'
        		AnimTreeTemplate=AnimTree'ComplexCyls.Animations.complex_cyls_2_AnimTree'
        		PhysicsWeight=1.0
        		RBChannel=RBCC_Pawn
        		RBCollideWithChannels=(Default=TRUE,Pawn=false, Vehicle=false, Untitled3=false, BlockingVolume=true)
        		bHasPhysicsAssetInstance=true
        		BlockRigidBody=true
        		bUpdateSkelWhenNotRendered=true
        		bIgnoreControllersWhenNotRendered=false
        	end object
        
        	CollisionComponent=FE_LadderCyls
        	MyMesh=FE_LadderCyls
        	Components.Add(FE_LadderCyls)
        
        	CollisionType = COLLIDE_BlockAll
        	Physics=PHYS_RigidBody
        	bStatic=false
        
        	bCollideActors=true
        	bCollideWorld=true
        	bBlockActors=true
        	bWorldGeometry=false    
        	bNetInitialRotation=true
        	TickGroup=TG_PostAsyncWork
        }
        And here's the working code.
        Code:
        class LadderComplexCyls extends Actor placeable;
        
        var SkeletalMeshComponent MyMesh;                               
        
        simulated event PostBeginPlay()
        {
        	super.PostBeginPlay();
        	// MyMesh.WakeRigidBody();
        }
        
        DefaultProperties
        {
        	begin object class=SkeletalMeshComponent name=FE_LadderCyls
        		SkeletalMesh=SkeletalMesh'ComplexCyls.Meshes.complex_cyls_2'
        		// PhysicsAsset=PhysicsAsset'ComplexCyls.Physics.complex_cyls_2_Physics'
        		AnimTreeTemplate=AnimTree'ComplexCyls.Animations.complex_cyls_2_AnimTree'
        		// PhysicsWeight=1.0
        		// RBChannel=RBCC_Pawn
        		// RBCollideWithChannels=(Default=TRUE,Pawn=false, Vehicle=false, Untitled3=false, BlockingVolume=true)
        		// bHasPhysicsAssetInstance=true
        		// BlockRigidBody=true
        		bUpdateSkelWhenNotRendered=true
        		bIgnoreControllersWhenNotRendered=false
        	end object
        
        	CollisionComponent=FE_LadderCyls
        	MyMesh=FE_LadderCyls
        	Components.Add(FE_LadderCyls)
        
        	CollisionType = COLLIDE_BlockAll
        	// Physics=PHYS_RigidBody
        	bStatic=false
        
        	bCollideActors=true
        	bCollideWorld=true
        	bBlockActors=true
        	bWorldGeometry=false    
        	bNetInitialRotation=true
        	TickGroup=TG_PostAsyncWork
        }

        Comment


          #5
          Possibly the 'PhysicsWeight=1.0'

          Comment


            #6
            Originally posted by Jetfire View Post
            Possibly the 'PhysicsWeight=1.0'
            No. I've set 'PhysicsWeight=0.5' but nothing changed.

            Comment


              #7
              I used SkelControlLookAt.DesiredTargetLocation in Actor.TickSkelControl and it worked. I refused to set SkelControlLookAt data in AnimTree editor and handled everything in the UnrealScript code.

              Comment

              Working...
              X