private void RenderBulkMesh(GNS_BulkMesh Mesh, int[] PatchIndexes, MaterialPropertyBlock Block, Material Material) { int[][] SplittedArray = GNS_Extensions.SplitArray <int> (ref PatchIndexes, GrassNStuff.MaxPatchDrawCount); for (int i = 0; i < SplittedArray.Length; i++) { Matrix4x4[] Matrices = new Matrix4x4[SplittedArray[i].Length]; // build matrices for (int x = 0; x < Matrices.Length; x++) { Matrices [x] = Patches[SplittedArray [i] [x]].TransformMatrix; } Graphics.DrawMeshInstanced(Mesh.BulkMesh, 0, Material, Matrices, SplittedArray[i].Length, Block, Manager.Shadows); } }
private MeshRenderer InitializeMeshRenderer(Vector3 RelativePosition, Vector3 ParentPosition, Vector2 PatchSize, GNS_BulkMesh Mesh, Material Material, UnityEngine.Rendering.ShadowCastingMode Shadows) { GameObject Obj = new GameObject("Patch", typeof(MeshRenderer), typeof(MeshFilter)); MeshRenderer Renderer = Obj.GetComponent <MeshRenderer> (); MeshFilter Filter = Obj.GetComponent <MeshFilter> (); Vector3 MeshSize = Mesh.BulkMesh.bounds.size; // Set settings Renderer.shadowCastingMode = Shadows; Obj.transform.position = ParentPosition + RelativePosition; Filter.sharedMesh = Mesh.BulkMesh; Renderer.sharedMaterial = Material; Obj.hideFlags = HideFlags.HideAndDontSave; // Set base property block MaterialPropertyBlock Block = new MaterialPropertyBlock(); Block.SetFloat("_CrossFade", 1f); Renderer.SetPropertyBlock(Block); return(Renderer); }