示例#1
0
	public void OnInitializeAgent()
    {
		Time.fixedDeltaTime = FixedDeltaTime;
		_waitingForAnimation = true;
		_decisionRequester = GetComponent<DecisionRequester>();

		BodyParts = new List<BodyPart002> ();
		BodyPart002 root = null;
		foreach (var t in GetComponentsInChildren<Transform>())
		{
			if (BodyConfig.GetBodyPartGroup(t.name) == BodyHelper002.BodyPartGroup.None)
				continue;
			
			var bodyPart = new BodyPart002{
				Rigidbody = t.GetComponent<Rigidbody>(),
				Transform = t,
				Name = t.name,
				Group = BodyConfig.GetBodyPartGroup(t.name), 
			};
			if (bodyPart.Group == BodyConfig.GetRootBodyPart())
				root = bodyPart;
			bodyPart.Root = root;
			bodyPart.Init();
			BodyParts.Add(bodyPart);
		}
		var partCount = BodyParts.Count;

		Muscles = new List<Muscle002> ();
		var muscles = GetComponentsInChildren<ConfigurableJoint>();
		ConfigurableJoint rootConfigurableJoint = null;
		var ragDoll = GetComponent<RagDoll002>();
		foreach (var m in muscles)
		{
			var maximumForce = ragDoll.MusclePowers.First(x=>x.Muscle == m.name).PowerVector;
			// maximumForce *= 2f;
			var muscle = new Muscle002{
				Rigidbody = m.GetComponent<Rigidbody>(),
				Transform = m.GetComponent<Transform>(),
				ConfigurableJoint = m,
				Name = m.name,
				Group = BodyConfig.GetMuscleGroup(m.name),
				MaximumForce = maximumForce
			};
			if (muscle.Group == BodyConfig.GetRootMuscle())
				rootConfigurableJoint = muscle.ConfigurableJoint;
			muscle.RootConfigurableJoint = rootConfigurableJoint;
			muscle.Init();

			Muscles.Add(muscle);			
		}
		var spawnableEnv = GetComponentInParent<SpawnableEnv>();
		_localStyleAnimator = spawnableEnv.gameObject.GetComponentInChildren<StyleTransfer002Animator>();
		_styleAnimator = _localStyleAnimator.GetFirstOfThisAnim();
		// _styleAnimator = _localStyleAnimator;
		_muscleAnimator = _styleAnimator;
		_agent = GetComponent<StyleTransfer002Agent>();
		// _trainerAgent = GetComponent<StyleTransfer002TrainerAgent>();
		// _brain = FindObjectsOfType<Brain>().First(x=>x.name=="LearnFromMocapBrain");
		IsInferenceMode = !Academy.Instance.IsCommunicatorOn;
	}
示例#2
0
    void SetupBody()
    {
        _agent              = GetComponent <Agent>();
        _decisionRequester  = GetComponent <DecisionRequester>();
        Time.fixedDeltaTime = FixedDeltaTime;

        BodyParts = new List <BodyPart002> ();
        BodyPart002 root = null;

        foreach (var t in GetComponentsInChildren <Transform>())
        {
            if (BodyConfig.GetBodyPartGroup(t.name) == BodyHelper002.BodyPartGroup.None)
            {
                continue;
            }

            var bodyPart = new BodyPart002 {
                Rigidbody = t.GetComponent <Rigidbody>(),
                Transform = t,
                Name      = t.name,
                Group     = BodyConfig.GetBodyPartGroup(t.name),
            };
            if (bodyPart.Group == BodyConfig.GetRootBodyPart())
            {
                root = bodyPart;
            }
            bodyPart.Root = root;
            bodyPart.Init();
            BodyParts.Add(bodyPart);
        }
        var partCount = BodyParts.Count;

        Muscles = new List <Muscle002> ();
        var muscles = GetComponentsInChildren <ConfigurableJoint>();
        ConfigurableJoint rootConfigurableJoint = null;
        var ragDoll = GetComponent <RagDoll002>();

        foreach (var m in muscles)
        {
            var maximumForce = ragDoll.MusclePowers.First(x => x.Muscle == m.name).PowerVector;
            maximumForce *= ragDoll.MotorScale;
            var muscle = new Muscle002 {
                Rigidbody         = m.GetComponent <Rigidbody>(),
                Transform         = m.GetComponent <Transform>(),
                ConfigurableJoint = m,
                Name         = m.name,
                Group        = BodyConfig.GetMuscleGroup(m.name),
                MaximumForce = maximumForce
            };
            if (muscle.Group == BodyConfig.GetRootMuscle())
            {
                rootConfigurableJoint = muscle.ConfigurableJoint;
            }
            muscle.RootConfigurableJoint = rootConfigurableJoint;
            muscle.Init();

            Muscles.Add(muscle);
        }
        _startCount++;
    }
示例#3
0
    // Use this for initialization
    void Start()
    {
        _master            = GetComponent <StyleTransfer002Master>();
        _decisionRequester = GetComponent <DecisionRequester>();
        var spawnableEnv = GetComponentInParent <SpawnableEnv>();

        _localStyleAnimator = spawnableEnv.gameObject.GetComponentInChildren <StyleTransfer002Animator>();
        _styleAnimator      = _localStyleAnimator.GetFirstOfThisAnim();
        _startCount++;
    }
示例#4
0
    public void Start()
    {
        List <Transform> transforms = FindRecursive(root);

        for (int i = 0; i < transforms.Count; i++)
        {
            Transform transform = transforms[i];
            if (transform.gameObject.name.Contains("Tongue") || transform.gameObject.name.Contains("Teeth"))
            {
                continue;
            }

            BehaviorParameters bp = transform.GetComponent <BehaviorParameters>();
            if (bp == null)
            {
                bp = transform.gameObject.AddComponent <BehaviorParameters>();
            }

            bp.BehaviorName = "SnapperController";
            bp.BrainParameters.VectorObservationSize = 55;
            // bp.BrainParameters.NumStackedVectorObservations = 4;
            bp.BrainParameters.VectorActionSpaceType = SpaceType.Continuous;
            bp.BrainParameters.VectorActionSize      = new int[] { 3, 3, 3 };
            bp.Model = nnModel;

            RigTransformAgent rta = transform.GetComponent <RigTransformAgent>();
            if (rta == null)
            {
                rta = transform.gameObject.AddComponent <RigTransformAgent>();
            }

            rta.Index      = i;
            rta.IndexRange = transforms.Count;
            rta.MaxStep    = MaxStep;

            DecisionRequester dr = transform.GetComponent <DecisionRequester>();
            if (dr == null)
            {
                dr = transform.gameObject.AddComponent <DecisionRequester>();
            }

            dr.DecisionPeriod = 2;
            dr.TakeActionsBetweenDecisions = true;

            RenderTextureSensorComponent rts = transform.GetComponent <RenderTextureSensorComponent>();
            if (rts == null)
            {
                rts = transform.gameObject.AddComponent <RenderTextureSensorComponent>();
            }

            rts.RenderTexture = camTexture;
            rts.Grayscale     = true;
        }
    }
示例#5
0
    public void Reset()
    {
        if (this.terrain == null)
        {
            var parent = gameObject.transform.parent;
            terrain = parent.GetComponentInChildren <Terrain>();
            var sharedTerrainData = terrain.terrainData;
            terrain.terrainData = new TerrainData();
            terrain.terrainData.heightmapResolution = sharedTerrainData.heightmapResolution;
            terrain.terrainData.baseMapResolution   = sharedTerrainData.baseMapResolution;
            terrain.terrainData.SetDetailResolution(sharedTerrainData.detailResolution, sharedTerrainData.detailResolutionPerPatch);
            terrain.terrainData.size      = sharedTerrainData.size;
            terrain.terrainData.thickness = sharedTerrainData.thickness;
            // terrain.terrainData.splatPrototypes = sharedTerrainData.splatPrototypes;
            terrain.terrainData.terrainLayers = sharedTerrainData.terrainLayers;
            var collider = terrain.GetComponent <TerrainCollider>();
            collider.terrainData = terrain.terrainData;
            _rowHeight           = new float[terrain.terrainData.heightmapResolution, 1];
        }
        if (this._agent == null)
        {
            _agent             = GetComponent <Agent>();
            _decisionRequester = GetComponent <DecisionRequester>();
        }
        //print($"HeightMap {this.terrain.terrainData.heightmapWidth}, {this.terrain.terrainData.heightmapHeight}.
        // Scale {this.terrain.terrainData.heightmapScale}. Resolution {this.terrain.terrainData.heightmapResolution}");
        _mapScaleY = this.terrain.terrainData.heightmapScale.y;
        // get the normalized position of this game object relative to the terrain
        Vector3 tempCoord = (transform.position - terrain.gameObject.transform.position);
        Vector3 coord;

        tempCoord.x = Mathf.Clamp(tempCoord.x, 0f, terrain.terrainData.size.x - 0.000001f);
        tempCoord.z = Mathf.Clamp(tempCoord.z, 0f, terrain.terrainData.size.z - 0.000001f);
        coord.x     = (tempCoord.x - 1) / terrain.terrainData.size.x;
        coord.y     = tempCoord.y / terrain.terrainData.size.y;
        coord.z     = tempCoord.z / terrain.terrainData.size.z;
        // get the position of the terrain heightmap where this game object is
        posXInTerrain = (int)(coord.x * terrain.terrainData.heightmapResolution);
        posYInTerrain = (int)(coord.z * terrain.terrainData.heightmapResolution);
        // we set an offset so that all the raising terrain is under this game object
        int offset = 0 / 2;

        // get the heights of the terrain under this game object
        _heights     = terrain.terrainData.GetHeights(posXInTerrain - offset, posYInTerrain - offset, 100, 1);
        curHeight    = _midHeight;
        heightIndex  = posXInTerrain;
        actionReward = 0f;

        ResetHeights();
    }
    // Use this for initialization
    public void OnInitializeAgent()
    {
        _decisionRequester = GameObject.Find("MarathonMan").GetComponent <DecisionRequester>();

        anim = GetComponent <Animator>();
        anim.Play("Record", 0, NormalizedTime);
        anim.Update(0f);
        AnimationSteps = new List <AnimationStep>();

        if (_rigidbodies == null || _transforms == null)
        {
            _rigidbodies = GetComponentsInChildren <Rigidbody>().ToList();
            _transforms  = GetComponentsInChildren <Transform>().ToList();
        }

        SetupSensors();
    }
示例#7
0
    // Resets the agent. Initialize the style animator and master if not initialized.
    public override void AgentReset()
    {
        if (!_hasLazyInitialized)
        {
            _master            = GetComponent <StyleTransfer002Master>();
            _master.BodyConfig = MarathonManAgent.BodyConfig;
            _decisionRequester = GetComponent <DecisionRequester>();
            var spawnableEnv = GetComponentInParent <SpawnableEnv>();
            _localStyleAnimator       = spawnableEnv.gameObject.GetComponentInChildren <StyleTransfer002Animator>();
            _styleAnimator            = _localStyleAnimator.GetFirstOfThisAnim();
            _styleAnimator.BodyConfig = MarathonManAgent.BodyConfig;

            _styleAnimator.OnInitializeAgent();
            _master.OnInitializeAgent();

            _hasLazyInitialized = true;
            _localStyleAnimator.DestoryIfNotFirstAnim();
        }
        _isDone = true;
        _ignorScoreForThisFrame = true;
        _master.ResetPhase();
        _sensors = GetComponentsInChildren <SensorBehavior>()
                   .Select(x => x.gameObject)
                   .ToList();
        SensorIsInTouch = Enumerable.Range(0, _sensors.Count).Select(x => 0f).ToList();
        if (_scoreHistogramData != null)
        {
            var column = _master.StartAnimationIndex;
            if (_decisionRequester?.DecisionPeriod > 1)
            {
                column /= _decisionRequester.DecisionPeriod;
            }
            if (_ignorScoreForThisFrame)
            {
                _ignorScoreForThisFrame = false;
            }
            else
            {
                _scoreHistogramData.SetItem(column, AverageReward);
            }
        }
    }
示例#8
0
    // Initialize
    public void Init()
    {
        _decisionRequester = GameObject.Find("MarathonMan").GetComponent <DecisionRequester>();

        _firstRunComplete = false;
        if (Rigidbody != null)
        {
            Rigidbody.angularVelocity = Vector3.zero;
            Rigidbody.velocity        = Vector3.zero;
        }

        if (!_hasRanVeryFirstInit)
        {
            InitialRootRotation = Root.Transform.transform.rotation;
            InitialRootPosition = Root.Transform.transform.position;
            BaseRotation        = Root.Transform.transform.rotation;
            BasePosition        = Root.Transform.transform.position;

            DefaultLocalRotation = LocalRotation;
            Vector3    forward      = this.Transform.forward;
            Vector3    up           = this.Transform.up;
            Quaternion toJointSpace = Quaternion.LookRotation(forward, up);

            ToJointSpaceInverse = Quaternion.Inverse(toJointSpace);
            ToJointSpaceDefault = DefaultLocalRotation * toJointSpace;

            // set body part direction
            Vector3 focalOffset = new Vector3(10, 0, 0);
            if (Rigidbody != null)
            {
                var focalPoint = Rigidbody.position + focalOffset;
                ToFocalRoation = Rigidbody.rotation;
                ToFocalRoation.SetLookRotation(focalPoint - Rigidbody.position);
            }

            _hasRanVeryFirstInit = true;
        }
    }
示例#9
0
    public override void AgentReset()
    {
        if (!_hasLazyInitialized)
        {
            _decisionRequester  = GetComponent <DecisionRequester>();
            _debugController    = FindObjectOfType <MarathonTestBedController>();
            Time.fixedDeltaTime = FixedDeltaTime;
            _spawnableEnv       = GetComponentInParent <SpawnableEnv>();
            _mocapController    = _spawnableEnv.GetComponentInChildren <MocapController>();
            _mocapBodyParts     = _mocapController.GetComponentsInChildren <Rigidbody>().ToList();
            _bodyParts          = GetComponentsInChildren <ArticulationBody>().ToList();
            _dReConObservations = GetComponent <DReConObservations>();
            _dReConRewards      = GetComponent <DReConRewards>();
            var mocapController = _spawnableEnv.GetComponentInChildren <MocapController>();
            _trackBodyStatesInWorldSpace = mocapController.GetComponent <TrackBodyStatesInWorldSpace>();
            _ragDollSettings             = GetComponent <RagDoll003>();
            _inputController             = _spawnableEnv.GetComponentInChildren <InputController>();
            _sensorObservations          = GetComponent <SensorObservations>();

            foreach (var body in GetComponentsInChildren <ArticulationBody>())
            {
                body.solverIterations         = 255;
                body.solverVelocityIterations = 255;
            }

            _motors = GetComponentsInChildren <ArticulationBody>()
                      .Where(x => x.jointType == ArticulationJointType.SphericalJoint)
                      .Where(x => !x.isRoot)
                      .Distinct()
                      .ToList();
            var individualMotors = new List <float>();
            foreach (var m in _motors)
            {
                if (m.twistLock == ArticulationDofLock.LimitedMotion)
                {
                    individualMotors.Add(0f);
                }
                if (m.swingYLock == ArticulationDofLock.LimitedMotion)
                {
                    individualMotors.Add(0f);
                }
                if (m.swingZLock == ArticulationDofLock.LimitedMotion)
                {
                    individualMotors.Add(0f);
                }
            }
            _dReConObservations.PreviousActions = individualMotors.ToArray();
            _hasLazyInitialized = true;
        }
        _smoothedActions = null;
        debugCopyMocap   = false;
        _inputController.OnReset();
        _mocapController.GetComponentInChildren <MocapAnimatorController>().OnReset();
        var angle    = Vector3.SignedAngle(Vector3.forward, _inputController.HorizontalDirection, Vector3.up);
        var rotation = Quaternion.Euler(0f, angle, 0f);

        _mocapController.OnReset(rotation);
        _mocapController.CopyStatesTo(this.gameObject);
        // _trackBodyStatesInWorldSpace.CopyStatesTo(this.gameObject);
        float timeDelta = float.MinValue;

        _dReConObservations.OnReset();
        _dReConRewards.OnReset();
        _dReConObservations.OnStep(timeDelta);
        _dReConRewards.OnStep(timeDelta);
        _skipRewardAfterTeleport = false;
#if UNITY_EDITOR
        if (DebugPauseOnReset)
        {
            UnityEditor.EditorApplication.isPaused = true;
        }
#endif
    }