Exemple #1
0
        void OnDrawGizmos()
        {
            var c = camera;

            if (c == null)
            {
                return;
            }

            if (drawDebugGizmos)
            {
                GDOC_Utils.CalculateFrustumPlanes(c, frustumPlanes);

                Gizmos.color = massGizmoColor;

                foreach (var id in occludeeList)
                {
                    var e = occludees[id];

                    if (e == null)
                    {
                        continue;
                    }

                    if (!e.isActive)
                    {
                        continue;
                    }

                    if (e.currentState == 1 || e.currentState == 3)
                    {
                        continue;
                    }

                    // if (!GeometryUtility.TestPlanesAABB(frustumPlanes, e.bounds)) continue;

                    Gizmos.DrawWireCube(e.position, e.size * 2);
                }
            }

            Gizmos.matrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
            Gizmos.color  = Color.blue;
            Gizmos.DrawFrustum(Vector3.zero, c.fieldOfView, c.farClipPlane, c.nearClipPlane, c.aspect);
        }
Exemple #2
0
        void Kickstart()
        {
            GDOC_Utils.CalculateFrustumPlanes(camera, frustumPlanes);

            var pos = camera.transform.position;

            foreach (var e in FindObjectsOfType <GDOC_Occludee>())
            {
                if (e.mode == GDOC_OccludeeMode.Excluded)
                {
                    continue;
                }

                var d = (pos - e.position).sqrMagnitude;

                var rv = e.volumeSizeSqr / d;

                if (rv < 0.01 || (rv < 0.05 && !GeometryUtility.TestPlanesAABB(frustumPlanes, e.bounds)))
                {
                    e.SetVisibleState(0, false);
                }
            }
        }
Exemple #3
0
        void EnableFrustumObjects()
        {
            if (shouldLogInfo)
            {
                sw.Reset();
                sw.Start();
            }

            GDOC_Utils.CalculateFrustumPlanes(camera, frustumPlanes);

            var pos   = camera.transform.position;
            var count = 0;

            for (var i = occluders.Count - 1; i >= 0; i--)
            {
                var e = occluders[i];

                if (e == null)
                {
                    occluders.RemoveAt(i);
                    continue;
                }

                if (!e.isActive)
                {
                    continue;
                }

                if (e.currentState == 1 || e.currentState == 3)
                {
                    continue;
                }

                var d = (pos - e.position).sqrMagnitude;

                var rv = e.volumeSizeSqr / d;

                if (rv < teleportRV)
                {
                    continue;
                }

                if (!GeometryUtility.TestPlanesAABB(frustumPlanes, e.bounds))
                {
                    continue;
                }

                ChangeOccludeeState(e.runtimeId, 1);

                UpdateOccludeeState(e.runtimeId, 1);

                count++;
            }

            if (shouldLogInfo)
            {
                var t = (float)sw.ElapsedTicks / Stopwatch.Frequency * 1000f;

                UnityEngine.Debug.Log(string.Format("Enabled {0} of {1} objects in {2} ms", count, occluders.Count, t));
            }
        }