Exemple #1
0
 void Start()
 {
     gsc        = GetComponent <GPUSkinningController>();
     _transform = GetComponent <Transform>();
     setDTSData_Direct();
     fduObserverInit();
 }
Exemple #2
0
    public override void OnInspectorGUI()
    {
        GPUSkinningController controller = target as GPUSkinningController;

        if (controller == null)
        {
            return;
        }

        EditorGUI.BeginChangeCheck();
        EditorGUILayout.PropertyField(serializedObject.FindProperty("anim"));
        if (EditorGUI.EndChangeCheck())
        {
            serializedObject.ApplyModifiedProperties();
        }
        GPUSkinningAnimation anim = serializedObject.FindProperty("anim").objectReferenceValue as GPUSkinningAnimation;

        serializedObject.ApplyModifiedProperties();
    }
Exemple #3
0
    protected override void SetupScenario()
    {
        Simulator.Instance.setTimeStep(timeStep);
        //agentCount = 13000;

        agentCount = SettingData.instance.data.humanCount;

        Simulator.Instance.setAgentDefaults(
            neighborDist,
            maxNeighbors,
            timeHorizon,
            timeHorizonObst,
            agentRadius,
            agentMaxSpeed,
            new Vector2(0.0f, 0.0f));

        gpuSkinningControllers = new GPUSkinningController[agentCount];

        Vector3               tempVector1, tempVector2;
        Vector3               goal;
        GameObject            go;
        GPUSkinningController gpuSkinningController;

        int group1000Count = agentCount / 1000;

        group1000Count = 0;
        int group100Count = (agentCount - 1000 * group1000Count) / 100;
        int group10Count  = (agentCount - 1000 * group1000Count - 100 * group100Count) / 10;
        int group1Count   = agentCount - 1000 * group1000Count - 100 * group100Count - 10 * group10Count;

        int group200Count = agentCount / 200;


        Debug.Log("100:" + group100Count + " 10:" + group10Count + " 1:" + group1Count);

        GPUSkinningController[] gscArr = new GPUSkinningController[agentCount];
        int index = 0;

        //for (int i = 0; i < group200Count; ++i)
        //{
        //    var ingo = GameObject.Instantiate(Group200, agentsContainer);
        //    var gpus = ingo.GetComponentsInChildren<GPUSkinningController>();
        //    foreach (GPUSkinningController ins in gpus)
        //    {
        //        gscArr[index++] = ins;
        //    }
        //}

        for (int i = 0; i < group1000Count; ++i)
        {
            var ingo = GameObject.Instantiate(Group1000, agentsContainer);
            var gpus = ingo.GetComponentsInChildren <GPUSkinningController>();
            foreach (GPUSkinningController ins in gpus)
            {
                ins.GetComponent <CharacterObserver>().index = index;
                gscArr[index++] = ins;
            }
            if (i % 2 == 0)
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = false;
            }
            else
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = true;
            }
        }
        for (int i = 0; i < group100Count; ++i)
        {
            var ingo = GameObject.Instantiate(Group100, agentsContainer);
            var gpus = ingo.GetComponentsInChildren <GPUSkinningController>();
            foreach (GPUSkinningController ins in gpus)
            {
                ins.GetComponent <CharacterObserver>().index = index;
                gscArr[index++] = ins;
            }


            if (i % 2 == 0)
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = false;
            }
            else
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = true;
            }
        }
        for (int i = 0; i < group10Count; ++i)
        {
            var ingo = GameObject.Instantiate(Group10, agentsContainer);
            var gpus = ingo.GetComponentsInChildren <GPUSkinningController>();
            foreach (GPUSkinningController ins in gpus)
            {
                ins.GetComponent <CharacterObserver>().index = index;
                gscArr[index++] = ins;
            }

            if (i % 2 == 0)
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = false;
            }
            else
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = true;
            }
        }
        for (int i = 0; i < group1Count; ++i)
        {
            var ingo = GameObject.Instantiate(Group1, agentsContainer);
            var gpus = ingo.GetComponentsInChildren <GPUSkinningController>();
            foreach (GPUSkinningController ins in gpus)
            {
                ins.GetComponent <CharacterObserver>().index = index;
                gscArr[index++] = ins;
            }

            if (i % 2 == 0)
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = false;
            }
            else
            {
                ingo.GetClusterView().IsImmediatelyDeserialize = true;
            }
        }

        if (index != agentCount)
        {
            Debug.LogError("AIYOWOCAO");
        }

        index = 0;
        try
        {
            //------------Circle 6000----------------
            // 150x10x2x2 = 6000
            // 250x10x2x2 = 10000
            Vector3 benchMarkCircle = new Vector3(400.0f, 0.0f, 0.0f);
            //int row = 10, column = 150;
            int row = 12, column = 250;
            for (int j = 0; j < row; j++)
            {
                for (int i = 0; i < column; ++i)
                {
                    tempVector1 = (130f + j * 4.5f) * new Vector3(Mathf.Cos(i * 2.0f * Mathf.PI / column), objectPositionY,
                                                                  (float)Mathf.Sin(i * 2.0f * Mathf.PI / column)) + benchMarkCircle;
                    tempVector2 = (50f + j * 5f) * new Vector3(Mathf.Cos(i * 2.0f * Mathf.PI / column), objectPositionY,
                                                               (float)Mathf.Sin(i * 2.0f * Mathf.PI / column)) + benchMarkCircle;


                    goal = tempVector2;
                    goals.Add(goal);

                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector1, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();

                    Simulator.Instance.addAgent(tempVector1, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;

                    goal = tempVector1;
                    goals.Add(goal);


                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector2, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();

                    Simulator.Instance.addAgent(tempVector2, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;

                    //------------------------------------------------------------------------------------

                    tempVector1 = (150f + j * 4.5f) * new Vector3(Mathf.Cos(i * 2.0f * Mathf.PI / column), objectPositionY,
                                                                  (float)Mathf.Sin(i * 2.0f * Mathf.PI / column)) - benchMarkCircle - new Vector3(20.0f, 0.0f, 0.0f);
                    tempVector2 = (50f + j * 5f) * new Vector3(Mathf.Cos(i * 2.0f * Mathf.PI / column), objectPositionY,
                                                               (float)Mathf.Sin(i * 2.0f * Mathf.PI / column)) - benchMarkCircle - new Vector3(20.0f, 0.0f, 0.0f);


                    goal = tempVector2;
                    goals.Add(goal);

                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector1, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();

                    Simulator.Instance.addAgent(tempVector1, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;

                    goal = tempVector1;
                    goals.Add(goal);

                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector2, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();

                    Simulator.Instance.addAgent(tempVector2, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;
                }
            }

            //------------phalanx 4000----------------
            // 100x20x2 = 4000
            float benchmarkX = -198f, benchmarkZ = 90f;
            row = 100; column = 40; float interval = 4.0f;
            for (int j = 0; j < row; ++j)
            {
                for (int i = 0; i < column; ++i)
                {
                    tempVector1 = new Vector3(benchmarkX + j * interval, objectPositionY, benchmarkZ - i * interval);
                    tempVector2 = new Vector3(benchmarkX + j * interval, objectPositionY, -benchmarkZ + (column - 1 - i) * interval);

                    goal = tempVector2;
                    goals.Add(goal);

                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector1, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();
                    Simulator.Instance.addAgent(tempVector1, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;

                    goal = tempVector1;
                    goals.Add(goal);

                    //Debug.Log("方阵:" + index);
                    go = gscArr[index++].gameObject;
                    go.transform.SetPositionAndRotation(tempVector2, Quaternion.identity);
                    gpuSkinningController = go.GetComponent <GPUSkinningController>();
                    Simulator.Instance.addAgent(tempVector2, goal, objectPositionY, gpuSkinningController, true);
                    agents.Add(go.transform);
                    gpuSkinningControllers[num++] = gpuSkinningController;

                    //-----------------------------------------------------------------

                    /*
                     * tempVector1 = new Vector3(-(benchmarkX + j * interval), objectPositionY, benchmarkZ - i * interval);
                     * tempVector2 = new Vector3(-(benchmarkX + j * interval), objectPositionY, -benchmarkZ + (column - 1 - i) * interval);
                     *
                     * goal = tempVector2;
                     * goals.Add(goal);
                     *
                     * go = gscArr[index++].gameObject;
                     * go.transform.SetPositionAndRotation(tempVector1, Quaternion.identity);
                     * gpuSkinningController = go.GetComponent<GPUSkinningController>();
                     * Simulator.Instance.addAgent(tempVector1, goal, objectPositionY, gpuSkinningController, true);
                     * agents.Add(go.transform);
                     * gpuSkinningControllers[num++] = gpuSkinningController;
                     *
                     * goal = tempVector1;
                     * goals.Add(goal);
                     *
                     * go = gscArr[index++].gameObject;
                     * go.transform.SetPositionAndRotation(tempVector2, Quaternion.identity);
                     * gpuSkinningController = go.GetComponent<GPUSkinningController>();
                     * Simulator.Instance.addAgent(tempVector2, goal, objectPositionY, gpuSkinningController, true);
                     * agents.Add(go.transform);
                     * gpuSkinningControllers[num++] = gpuSkinningController;*/
                }
            }

            //int circleRange = 250;
            //int circleCount = agentCount / circleRange;

            //int _circlePart = (int)(circleRange * 0.611f);
            //int _rectPart = circleRange - _circlePart;

            //for (int i = 0; i < circleCount; ++i)
            //{
            //    float maxZvalueIn = float.MinValue;
            //    float minZvalueIn = float.MaxValue;

            //    float maxZvalueOut = float.MinValue;
            //    float minZvalueOut = float.MaxValue;

            //    float innerRadius = (50f + i * 5.0f);
            //    float outerRadius = (200f + i * 4.5f);

            //    for (int j = 0; j < _circlePart; ++j)
            //    {
            //        tempVector1 = outerRadius * new Vector3(Mathf.Cos(j * 2.0f * Mathf.PI / _circlePart), objectPositionY,
            //                 (float)Mathf.Sin(j * 2.0f * Mathf.PI / _circlePart));
            //        tempVector2 = innerRadius * new Vector3(Mathf.Cos(j * 2.0f * Mathf.PI / _circlePart), objectPositionY,
            //                (float)Mathf.Sin(j * 2.0f * Mathf.PI / _circlePart));

            //        if (tempVector1.x > 0)
            //            tempVector1.x += outerRadius;
            //        else
            //            tempVector1.x -= outerRadius;

            //        if (tempVector2.x > 0)
            //            tempVector2.x += innerRadius;
            //        else
            //            tempVector2.x -= innerRadius;

            //        maxZvalueOut = tempVector1.z > maxZvalueOut ? tempVector1.z : maxZvalueOut;
            //        minZvalueOut = tempVector1.z < minZvalueOut ? tempVector1.z : minZvalueOut;

            //        maxZvalueIn = tempVector2.z > maxZvalueIn ? tempVector2.z : maxZvalueIn;
            //        minZvalueIn = tempVector2.z < minZvalueIn ? tempVector2.z : minZvalueIn;

            //    }
            //    for (int j = 0; j < _rectPart; ++j)
            //    {

            //    }
            //}
        }

        catch (System.Exception e)
        {
            Debug.LogError("MTF:" + e.Message);
        }
        finally
        {
            Simulator.Instance.kdTree_.buildAgentTree();
        }
    }