Esempio n. 1
0
 public void OnEnable()
 {
     this.cullingData = this.GetComponent <CullingData>();
     if (this.cullingData.ChunksInRange != null)
     {
         this.chunkAddress = this.cullingData.GetChunkAddress(this.cullingData.MapBehaviour.GetMapPosition(this.Camera.transform.position));
         this.UpdateChunks();
     }
 }
    protected virtual void UpdateVertexBuffer()
    {
        if (cullingData == null)
        {
            cullingData = new CullingData(particleNum);
        }

        //_SetCommonParameterForCS(cullingCS);
        cullingData.Update(cullingCS, targetCamera, particleNum, particleBuffer, activeIndexBuffer);
    }
Esempio n. 3
0
    protected override void UpdateVertexBuffer()
    {
        if (cullingData == null)
        {
            cullingData = new CullingData(particleNum);
            cullingData.SetVertexCount(meshIndicesNum);
        }

        //_SetCommonParameterForCS(cullingCS);
        cullingData.Update(cullingCS, targetCamera, particleNum, particleBuffer, activeIndexBuffer);
    }
    void UpdateVertexBuffer(Camera camera)
    {
        CullingData data = cameraDatas[camera];

        if (data == null)
        {
            data = cameraDatas[camera] = new CullingData(particleNum);
        }

        data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer);
    }
Esempio n. 5
0
 public void Initialize()
 {
     ModuleData.Current = this.ModuleData.Modules;
     this.Clear();
     this.Map = new InfiniteMap(this.MapHeight);
     if (this.ApplyBoundaryConstraints && this.BoundaryConstraints != null && this.BoundaryConstraints.Any())
     {
         this.Map.ApplyBoundaryConstraints(this.BoundaryConstraints);
     }
     this.cullingData = this.GetComponent <CullingData>();
     this.cullingData.Initialize();
 }
Esempio n. 6
0
    protected override void UpdateVertexBuffer(Camera camera)
    {
        CullingData data = cameraDatas[camera];

        if (data == null)
        {
            data = cameraDatas[camera] = new CullingData(particleNum);
            data.SetVertexCount(meshIndicesNum);
        }

        data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer);
    }
Esempio n. 7
0
    protected virtual void UpdateVertexBuffer(Camera camera)
    {
        CullingData data = cameraDatas[camera];

        if (data == null)
        {
            data = cameraDatas[camera] = new CullingData(particleNum);
        }

        //_SetCommonParameterForCS(cullingCS);
        data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer);
    }
Esempio n. 8
0
    protected virtual void UpdateVertexBuffer(Camera camera)
    {
        CullingData data = cameraDatas[camera];

        if (data == null)
        {
            data = cameraDatas[camera] = new CullingData(particleNum);
            data.SetVertexCount(1); // パーティクルなので頂点数は1
        }

        data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer);
    }
Esempio n. 9
0
    // Direction must be 0, 1 or 2
    public Portal(Vector3Int position, int direction, CullingData cullingData)
    {
        this.Position1 = position;
        this.Direction = direction;
        this.Position2 = this.Position1 + Orientations.Direction[direction];

        this.Room1 = cullingData.GetRoom(this.Position1);
        this.Room2 = cullingData.GetRoom(this.Position2);

        var dir = Orientations.Direction[this.Direction].ToVector3();

        this.Bounds = new Bounds(cullingData.MapBehaviour.GetWorldspacePosition(this.Position1) + dir, (Vector3.one - new Vector3(Mathf.Abs(dir.x), Mathf.Abs(dir.y), Mathf.Abs(dir.z)) * 0.8f) * AbstractMap.BLOCK_SIZE);
    }
Esempio n. 10
0
    // 描画処理
    private void OnRenderObjectInternal()
    {
        // カリングを行うか判定
        if (_isCulling)
        {
            // カメラを取得
            Camera cam = Camera.current;

            // カメラが存在するか判定
            if (!m_cameraDatas.ContainsKey(cam))
            {
                // このフレームは登録だけ
                m_cameraDatas[cam] = null;
            }
            else
            {
                // カメラのカリングデータを取得
                CullingData data = m_cameraDatas[cam];

                // カリングデータが存在するか判定
                if (data != null)
                {
                    // シェーダーの値の設定
                    SetMaterialParam();

                    // バッファを設定
                    _shaderMaterial.SetBuffer(ShaderDefines.GetBufferPropertyID(ShaderDefines.BufferID._inViewParticlesBuffer), data.GetInViewParticlesBuffer());

                    // キーワードを有効化
                    _shaderMaterial.EnableKeyword("GPUPARTICLE_CULLING_ON");

                    // 描画処理
                    Graphics.DrawProceduralIndirect(MeshTopology.Triangles, data.GetInViewCountsBuffer());
                }
            }
        }
        else
        {
            // シェーダーの値の設定
            SetMaterialParam();

            // バッファを設定
            _shaderMaterial.SetBuffer(ShaderDefines.GetBufferPropertyID(ShaderDefines.BufferID._activeParticlesBuffer), m_activeParticlesBuffer);

            // キーワードを無効化
            _shaderMaterial.DisableKeyword("GPUPARTICLE_CULLING_ON");

            // 描画処理
            Graphics.DrawProceduralIndirect(MeshTopology.Triangles, m_activeCountBuffer);
        }
    }
Esempio n. 11
0
 static void DrawGizmos(CullingData cullingData, GizmoType gizmoType)
 {
     if (!cullingData.DrawGizmo || cullingData.ChunksInRange == null)
     {
         return;
     }
     foreach (var chunk in cullingData.ChunksInRange)
     {
         foreach (var room in chunk.Rooms)
         {
             room.DrawGizmo(cullingData.MapBehaviour);
         }
     }
 }
Esempio n. 12
0
    // カメラごとのカリングデータの更新処理
    private void UpdateCullingDatas(Camera _camera)
    {
        // カメラのカリングデータを取得
        CullingData data = m_cameraDatas[_camera];

        // カリングデータが見つかったか判定する
        if (data == null)
        {
            // カリングデータを設定
            data = m_cameraDatas[_camera] = new CullingData(m_numParticles);
            data.SetVertexCount(m_numMeshIndices);
        }

        // カリングデータの更新処理
        data.Update(_cullingComputeShader, _camera, m_numParticles, m_particlesBuffer, m_activeParticlesBuffer);
    }
    void OnGUI()
    {
        if (isCulling)
        {
            int i = 0;
            cameraDatas.Keys
            .Where(cam => cam.isActiveAndEnabled)
            .ToList().ForEach(cam =>
            {
                CullingData data = cameraDatas[cam];
                if (data != null)
                {
                    data.inViewsCountBuffer.GetData(data.inViewsCounts);

                    GUI.Label(new Rect(10, 72 + i * 64, 240, 64), "InViews / Active " + data.GetInViewNum() + " / " + particle.GetActiveParticleNum());
                    i++;
                }
            });
        }
        else
        {
            GUI.Label(new Rect(10, 72, 480, 64), "[No Culling]Active / Pool " + particle.GetActiveParticleNum() + " / " + particle.GetPoolParticleNum());
        }
    }
 public void OnEnable()
 {
     this.cullingData = this.GetComponent <CullingData>();
 }