コード例 #1
0
    private void OnDisable()
    {
        if (_blackHoleBuffer != null)
        {
            _blackHoleBuffer.Release();
        }

        /*if (_textureGravity != null)
         *  _textureGravity.Release();*/
        _transformsToWatch.Clear();
        RayTracingMeshRenderer.dispose();
        MeshDataPack.reset();
    }
コード例 #2
0
    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();
    }
コード例 #3
0
    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();
    }
コード例 #4
0
    // 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);
        }
    }
コード例 #5
0
    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();
    }