private void OnDisable() { if (_blackHoleBuffer != null) { _blackHoleBuffer.Release(); } /*if (_textureGravity != null) * _textureGravity.Release();*/ _transformsToWatch.Clear(); RayTracingMeshRenderer.dispose(); MeshDataPack.reset(); }
public MeshDataPack(Mesh m, SkinnedMeshRenderer ms, int InstanceID, bool dynamicMesh) { if (treesSetCache.Count == 0) { MeshDataPack.loadTreesSet(); } meshToTables(m, ms, out V, out N, out UV, out T, out SUB, out MAT);//5ms SUB2 = loadTextures(MAT, SUB); var Ttag = ""; try { Ttag = ms.material.mainTexture.name; } catch { } meshCheckSum = getMeshChecksum(m);//8ms id = getId(meshCheckSum, InstanceID, dynamicMesh, Ttag); init(); }
public static void pushTextures(ComputeShader RayTracingShader) { var texs = MeshDataPack.getTextures(); List <Color> cs = new List <Color>(); List <Vector3Int> indexes = new List <Vector3Int>(); foreach (var tex in texs) { var tmp = (Texture2D)tex; var carr = tmp.GetPixels(); indexes.Add(new Vector3Int(cs.Count, tmp.width, tmp.height)); cs.AddRange(carr); } _static_Textures = new ComputeBuffer(cs.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Color))); _static_Textures_IND = new ComputeBuffer(indexes.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3Int))); _static_Textures.SetData(cs); _static_Textures_IND.SetData(indexes); RayTracingShader.SetBuffer(0, "_static_Textures", _static_Textures); //_static_Textures.Release(); RayTracingShader.SetBuffer(0, "_static_Textures_IND", _static_Textures_IND); //_static_Textures_IND.Release(); }
// Use this for initialization void Awake() { try { var mf = GetComponent <MeshFilter>(); mr = GetComponent <MeshRenderer>(); if (mr == null) { ms = GetComponent <SkinnedMeshRenderer>(); m = ms.sharedMesh; data = new MeshDataPack(m, ms, this.GetInstanceID(), dynamicMesh); } else { m = mf.mesh; data = new MeshDataPack(m, mr, this.GetInstanceID(), dynamicMesh); } } catch (Exception e) { UnityEngine.Debug.Log("RayTracingMeshRenderer Awake error: " + e); } }
public static void pushStaticMeshes(ComputeShader RayTracingShader) { //To robiłem 15.04.2019 Dictionary <int, MeshDataPack> stat = RayTracingMeshRenderer.getStaticMeshes();// var INDlist = new List <int>(); var Vlist = new List <Vector3>(); var Nlist = new List <Vector3>(); var UVlist = new List <Vector2>(); var Tlist = new List <Vector3Int>(); var Blist = new List <Vector3>(); var BVHlist = new List <Vector3Int>(); var SUB2list = new List <subMeshMaterial>(); foreach (var pair in stat) { MeshDataPack MDP = pair.Value; INDlist.Add(MDP.id); INDlist.Add(BVHlist.Count); INDlist.Add(Blist.Count); INDlist.Add(Tlist.Count); INDlist.Add(Vlist.Count); INDlist.Add(SUB2list.Count); Vlist.AddRange(MDP.V); Nlist.AddRange(MDP.N); UVlist.AddRange(MDP.UV); Tlist.AddRange(MDP.T); Blist.AddRange(MDP.B); BVHlist.AddRange(MDP.bvh); SUB2list.AddRange(MDP.SUB2); } _static_V = new ComputeBuffer(Vlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3))); _static_N = new ComputeBuffer(Nlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3))); _static_UV = new ComputeBuffer(UVlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector2))); _static_T = new ComputeBuffer(Tlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3Int))); _static_B = new ComputeBuffer(Blist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3))); _static_bvh = new ComputeBuffer(BVHlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3Int))); int s = System.Runtime.InteropServices.Marshal.SizeOf(typeof(subMeshMaterial)); _static_SUB2 = new ComputeBuffer(SUB2list.Count, s); _static_IND = new ComputeBuffer(INDlist.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(int))); _static_V.SetData(Vlist); _static_N.SetData(Nlist); _static_UV.SetData(UVlist); _static_T.SetData(Tlist); _static_B.SetData(Blist); _static_bvh.SetData(BVHlist); _static_SUB2.SetData(SUB2list); _static_IND.SetData(INDlist); RayTracingShader.SetBuffer(0, "_static_V", _static_V); //_static_V.Release(); RayTracingShader.SetBuffer(0, "_static_N", _static_N); //_static_N.Release(); RayTracingShader.SetBuffer(0, "_static_UV", _static_UV); //_static_UV.Release(); RayTracingShader.SetBuffer(0, "_static_T", _static_T); //_static_T.Release(); RayTracingShader.SetBuffer(0, "_static_B", _static_B); //_static_B.Release(); RayTracingShader.SetBuffer(0, "_static_bvh", _static_bvh); //_static_bvh.Release(); RayTracingShader.SetBuffer(0, "_static_SUB2", _static_SUB2); //_static_SUB2.Release(); RayTracingShader.SetBuffer(0, "_static_IND", _static_IND); //_static_IND.Release(); }