public static void pushGameObjects(ComputeShader RayTracingShader) { var renders = RayTracingMeshRenderer.getObjectsToRender(); var packs = new List <transformPack>(); foreach (var obj in renders) { transformPack pack = new transformPack(obj.data.id, obj.transform.position, obj.transform.rotation, obj.transform.localScale); packs.Add(pack); } int s = System.Runtime.InteropServices.Marshal.SizeOf(typeof(transformPack)); if (_static_transforms != null) { _static_transforms.Release(); } //_static_transforms = new ComputeBuffer(0, s); if (packs.Count > 0) { _static_transforms = new ComputeBuffer(packs.Count, s); _static_transforms.SetData(packs); RayTracingShader.SetBuffer(0, "_static_transforms", _static_transforms); } }
//ComputeBuffer _V; void test() { /*var stat = RayTracingMeshRenderer.getStaticMeshes();// * _V = new ComputeBuffer(stat[0].V.Count, System.Runtime.InteropServices.Marshal.SizeOf(typeof(Vector3))); * _V.SetData(stat[0].V.ToArray()); * RayTracingShader.SetBuffer(0, "_test_V", _V);*/ RayTracingMeshRenderer.pushStaticMeshes(RayTracingShader); RayTracingMeshRenderer.pushTextures(RayTracingShader); }
private void OnDisable() { if (_blackHoleBuffer != null) { _blackHoleBuffer.Release(); } /*if (_textureGravity != null) * _textureGravity.Release();*/ _transformsToWatch.Clear(); RayTracingMeshRenderer.dispose(); MeshDataPack.reset(); }
// Start is called before the first frame update void Start() { RayTracingMeshRenderer.pushStaticMeshes(RayTracingShader); RayTracingMeshRenderer.pushTextures(RayTracingShader); var obs_ = RayTracingMeshRenderer.getObjectsToRender(); foreach (var ele in obs_) { _transformsToWatch.Add(ele.transform); } var m = FindObjectsOfType <Mass>(); bh_t.Clear(); foreach (var ele in m) { bh_t.Add(ele.gameObject); _transformsToWatch.Add(ele.transform); } }
/*private void setupMeshBuffer() * { * MeshRenderer[] allObjects = UnityEngine.Object.FindObjectsOfType<MeshRenderer>(); * * * foreach (var meshR in allObjects) * { * Mesh mesh = meshR.gameObject.GetComponent<MeshFilter>().mesh; * List<Material> materials = new List<Material>(); * meshR.GetMaterials(materials); * * List<Vector3> v = new List<Vector3>(); * List<Vector3> n = new List<Vector3>(); * List<int> t; * List<Vector2> uv0 = new List<Vector2>(); * * mesh.GetVertices(v); * mesh.GetNormals(n); * mesh.GetUVs(0, uv0); * t = new List<int>(mesh.triangles); * * * } * * //_vertexBuffer = new ComputeBuffer(blackHoles.Count, size); * //_triangleBuffer = new ComputeBuffer(blackHoles.Count, size); * //_normalsBuffer = new ComputeBuffer(blackHoles.Count, size); * //_uvBuffer = new ComputeBuffer(blackHoles.Count, size); * }*/ private void SetShaderParameters() { //RayTracingShader.SetTexture(0, "_SkyboxTexture", SkyboxTexture); RayTracingShader.SetMatrix("_CameraToWorld", _camera.cameraToWorldMatrix); RayTracingShader.SetMatrix("_CameraInverseProjection", _camera.projectionMatrix.inverse); RayTracingShader.SetVector("_PixelOffset", new Vector2(Random.value, Random.value)); RayTracingShader.SetFloat("_Seed", Random.value); Vector3 l = DirectionalLight.transform.forward; RayTracingShader.SetVector("_DirectionalLight", new Vector4(l.x, l.y, l.z, DirectionalLight.intensity)); if (_sphereBuffer != null) { RayTracingShader.SetBuffer(0, "_Spheres", _sphereBuffer); } if (_blackHoleBuffer != null) { RayTracingShader.SetBuffer(0, "_BlackHoles", _blackHoleBuffer); } RayTracingMeshRenderer.pushGameObjects(RayTracingShader); }
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(); }
private void SetShaderParameters() { //RayTracingShader.SetTexture(0, "_SkyboxTexture", SkyboxTexture); RayTracingShader.SetMatrix("_CameraToWorld", _camera.cameraToWorldMatrix); RayTracingShader.SetMatrix("_CameraInverseProjection", _camera.projectionMatrix.inverse); RayTracingShader.SetVector("_PixelOffset", new Vector2(Random.value, Random.value)); RayTracingShader.SetFloat("_Seed", Random.value); outBuffer = new ComputeBuffer(1, 4 * 3); RayTracingShader.SetBuffer(0, "DEBoutput", outBuffer); var objects = UnityEngine.Object.FindObjectsOfType <Mass>(); RayTracingShader.SetInt("_bhCount", objects.Length); if (objects.Length > 0) { List <sBlackHole> blackHoles = new List <sBlackHole>(); for (int i = 0; i < objects.Length; ++i) { var comp = objects[i]; sBlackHole bhx = new sBlackHole(); //var comp = b.GetComponent<BlackHole>(); bhx.rs = comp.rs; bhx.position = comp.transform.position; blackHoles.Add(bhx); } if (_blackHoleBuffer != null) { _blackHoleBuffer.Release(); } if (blackHoles.Count > 0) { int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(sBlackHole)); _blackHoleBuffer = new ComputeBuffer(blackHoles.Count, size); _blackHoleBuffer.SetData(blackHoles); } if (_blackHoleBuffer != null) { RayTracingShader.SetBuffer(0, "_BlackHoles", _blackHoleBuffer); } } else { if (_blackHoleBuffer != null) { _blackHoleBuffer.Release(); } List <sBlackHole> blackHoles = new List <sBlackHole>(); sBlackHole bhx = new sBlackHole(); bhx.position = new Vector3(0, 0, 0); bhx.rs = 0; blackHoles.Add(bhx); int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(sBlackHole)); _blackHoleBuffer = new ComputeBuffer(blackHoles.Count, size); _blackHoleBuffer.SetData(blackHoles); RayTracingShader.SetBuffer(0, "_BlackHoles", _blackHoleBuffer); } RayTracingMeshRenderer.pushGameObjects(RayTracingShader); }