private TreeFunctionAsset ToTrunkFunction(TreeFunctionAsset parent)
        {
            TrunkFunction function = ScriptableObject.CreateInstance <TrunkFunction>();

            function.Init(parent);
            function.number               = Tnumber;
            function.displacementSize     = TdisplacementSize;
            function.displacementStrength = TdisplacementStrength;
            function.seed             = seed;
            function.flareNumber      = TflareNumber;
            function.heightOffset     = TheightOffset;
            function.length           = Tlength;
            function.originAttraction = ToriginAttraction;
            function.radius           = Tradius;
            function.radiusMultiplier = TradiusMultiplier;
            function.randomness       = Trandomness;
            function.resolution       = Tresolution;
            function.rootHeight       = TrootHeight;
            function.rootInnerRadius  = TrootInnerRadius;
            function.rootRadius       = TrootRadius;
            function.rootResolution   = TrootResolution;
            function.rootShape        = TrootShape;
            function.spinAmount       = TspinAmount;

            return(function);
        }
Ejemplo n.º 2
0
        public void GenerateMeshData(TrunkFunction trunk, float simplifyLeafs, float radialResolution, float VColBarkModifier, float VColLeafModifier)
        {
            Stack <Queue <TreePoint> > treePoints = new Stack <Queue <TreePoint> >();

            foreach (Node stem in stems)
            {
                Stack <Queue <TreePoint> > newPoints = stem.ToSplines();
                while (newPoints.Count > 0)
                {
                    treePoints.Push(newPoints.Pop());
                }
            }
            Splines splines = new Splines(treePoints);

            splines.GenerateMeshData(7 * radialResolution, 3, trunk.rootShape, trunk.radiusMultiplier, trunk.rootRadius, trunk.rootInnerRadius, trunk.rootHeight, trunk.rootResolution
                                     , trunk.flareNumber, trunk.displacementStrength, trunk.displacementSize, trunk.spinAmount, VColBarkModifier);


            Queue <int> leafTriangles = new Queue <int>();

            GenerateLeafData(splines.verts, splines.normals, splines.uvs, leafTriangles, splines.verts.Count, splines.colors, simplifyLeafs, VColBarkModifier, VColLeafModifier);
            verts              = splines.verts.ToArray();
            normals            = splines.normals.ToArray();
            uvs                = splines.uvs.ToArray();
            triangles          = splines.triangles.ToArray();
            colors             = splines.colors.ToArray();
            this.leafTriangles = leafTriangles.ToArray();
        }
        void UpdateBranch(bool normalShader = false)
        {
            switch (texSize)
            {
            case EnumTextureSize._512:
                textureSize = 512;
                break;

            case EnumTextureSize._1024:
                textureSize = 1024;
                break;

            case EnumTextureSize._2048:
                textureSize = 2048;
                break;

            case EnumTextureSize._4096:
                textureSize = 4096;
                break;
            }

            if (branchObject == null)
            {
                CreateBranchObject(normalShader);
            }
            if (!deadLeafsRendering)
            {
                CreateLeafMesh();
            }
            MTree         branch        = new MTree(branchObject.transform);
            TrunkFunction trunkFunction = ScriptableObject.CreateInstance <TrunkFunction>();

            trunkFunction.Init(null);

            float resolution = 20;

            Random.InitState(seed);


            branch.AddTrunk(Vector3.up, Vector3.forward, stemLength, AnimationCurve.Linear(0, 1, 1, .3f), radius, resolution, randomness / 3, 0, AnimationCurve.Linear(0, 1, 0, 0), 0, .01f, 1, 0);
            branch.TwigSplit(branchNumber, angle * 90f, .9f, 0f);
            branch.Grow(length, AnimationCurve.Linear(0, 1, 1, 1), resolution, splitProba, AnimationCurve.Linear(0, 1, 1, 1), angle, 2, 1, 1, randomness, AnimationCurve.Linear(0, 1, 1, .4f), .9f, 0f, 0f, 1f, 0.00001f);
            if (!deadLeafsRendering)
            {
                branch.AddLeafs(leafCovering, leafNumber, new Mesh[] { leafMesh }, leafSize, false, 0, 0, 1, leafAngle, false, 0, 0, 0, 0);
            }
            Mesh mesh = CreateBranchMesh(branch, trunkFunction);

            branchObject.GetComponent <MeshFilter>().mesh = mesh;

            if (cameraObject == null)
            {
                CreateCameraObject();
            }
            RenderCamera();

            DestoyObjects();
        }
        Mesh CreateBranchMesh(MTree branch, TrunkFunction trunkFunction)
        {
            Mesh mesh = new Mesh();

            branch.GenerateMeshData(trunkFunction, 0, 1, 1, 1);
            mesh.vertices = branch.verts;
            mesh.normals  = branch.normals;
            mesh.uv       = branch.uvs;
            Color[] colors = branch.colors;
            mesh.triangles = branch.triangles;
            if (branch.leafTriangles.Length > 0)
            {
                mesh.subMeshCount = 2;
                mesh.SetTriangles(branch.leafTriangles, 1);
            }
            mesh.colors = colors;
            return(mesh);
        }