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);
 }
Esempio n. 3
0
    private void OnDisable()
    {
        if (_blackHoleBuffer != null)
        {
            _blackHoleBuffer.Release();
        }

        /*if (_textureGravity != null)
         *  _textureGravity.Release();*/
        _transformsToWatch.Clear();
        RayTracingMeshRenderer.dispose();
        MeshDataPack.reset();
    }
Esempio n. 4
0
    // 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();
    }
Esempio n. 7
0
    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);
    }