/// <summary>
        /// Enables or disables different GUI elements depending on the probe type.
        /// </summary>
        /// <param name="type">Probe type to show GUI elements for.</param>
        private void ToggleTypeSpecificFields(ReflectionProbeType type)
        {
            bool isBox = type == ReflectionProbeType.Box;

            radiusField.Active  = !isBox;
            extentsField.Active = isBox;
        }
        /// <inheritdoc/>
        protected internal override InspectableState Refresh()
        {
            ReflectionProbe probe = InspectedObject as ReflectionProbe;

            if (probe == null)
            {
                return(InspectableState.NotModified);
            }

            ReflectionProbeType probeType = probe.Type;

            if (probeTypeField.Value != (ulong)probeType)
            {
                ToggleTypeSpecificFields(probeType);
            }

            probeTypeField.Value     = (ulong)probeType;
            radiusField.Value        = probe.Radius;
            extentsField.Value       = probe.Extents;
            customTextureField.Value = probe.CustomTexture;

            InspectableState oldState = modifyState;

            if (modifyState.HasFlag(InspectableState.Modified))
            {
                modifyState = InspectableState.NotModified;
            }

            return(oldState);
        }
예제 #3
0
        public void RenderAllRealtimeProbesFor(ReflectionProbeType probeType, Camera viewerCamera)
        {
            if ((probeType & ReflectionProbeType.PlanarReflection) != 0)
            {
                var length = Mathf.Min(m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.CopyTo(m_PlanarReflectionProbe_RealtimeUpdate_WorkArray);

                // 1. Allocate if necessary target texture
                var renderCamera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe    = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    var hdCamera = HDCamera.Get(renderCamera, null, probe.frameSettings);
                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture, viewerCamera);
                }
            }
        }
예제 #4
0
        public void RenderAllRealtimeProbes(ReflectionProbeType probeTypes)
        {
            if ((probeTypes & ReflectionProbeType.PlanarReflection) != 0)
            {
                // Discard disabled probes in requested render probes
                m_PlanarReflectionProbe_RequestRealtimeRender.IntersectWith(m_PlanarReflectionProbes);
                // Include all realtime probe modes
                m_PlanarReflectionProbe_RequestRealtimeRender.UnionWith(m_PlanarReflectionProbe_RealtimeUpdate);
                var length = Mathf.Min(m_PlanarReflectionProbe_RequestRealtimeRender.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                m_PlanarReflectionProbe_RequestRealtimeRender.CopyTo(m_PlanarReflectionProbe_RealtimeUpdate_WorkArray);
                m_PlanarReflectionProbe_RequestRealtimeRender.Clear();

                // 1. Allocate if necessary target texture
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    if (!IsRealtimeTextureValid(probe.realtimeTexture))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture);
                }
            }
        }
        internal static CED.IDrawer InnerInspector(ReflectionProbeType type)
        {
            switch (type)
            {
            case ReflectionProbeType.PlanarReflection:
                return(CED.Group(
                           CED.Action(Drawer_InfluenceAdvancedSwitch),
                           CED.Action(Drawer_FieldShapeType),
                           CED.FadeGroup(
                               (s, d, o, i) => s.IsSectionExpanded_Shape((InfluenceShape)i),
                               FadeOption.None,
                               SectionShapeBoxPlanar,
                               SectionShapeSpherePlanar
                               )
                           ));

            case ReflectionProbeType.ReflectionProbe:
                return(CED.Group(
                           CED.Action(Drawer_InfluenceAdvancedSwitch),
                           CED.Action(Drawer_FieldShapeType),
                           CED.FadeGroup(
                               (s, d, o, i) => s.IsSectionExpanded_Shape((InfluenceShape)i),
                               FadeOption.None,
                               SectionShapeBox,
                               SectionShapeSphere
                               )
                           ));

            default:
                throw new System.ArgumentException("Unknown probe type");
            }
        }
예제 #6
0
        public void RenderAllRealtimeProbesFor(ReflectionProbeType probeType, Camera viewerCamera)
        {
            if ((probeType & ReflectionProbeType.PlanarReflection) != 0)
            {
                var length = Mathf.Min(m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                var index  = 0;
                foreach (var p in m_PlanarReflectionProbe_PerCamera_RealtimeUpdate)
                {
                    m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[index] = p;
                    if (++index >= length)
                    {
                        break;
                    }
                }
#if DEBUG
                var discarded = m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count - length;
                if (discarded > 0)
                {
                    Debug.LogWarningFormat("There are more planar probe than supported in a single rendering, {0} probes discardeds", discarded);
                }
#endif

                // 1. Allocate if necessary target texture
                var renderCamera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    var hdCamera = HDCamera.Get(renderCamera);

                    if (hdCamera == null)
                    {
                        // Warning: this is a bad design pattern.
                        // An individual system should not create an HDCamera (which is a shared resource).
                        hdCamera = HDCamera.Create(renderCamera, null);
                    }

                    hdCamera.Update(probe.frameSettings, null, null);

                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture, viewerCamera);
                }
            }
        }
예제 #7
0
        public void RenderAllRealtimeProbes(ReflectionProbeType probeTypes)
        {
            if ((probeTypes & ReflectionProbeType.PlanarReflection) != 0)
            {
                // Discard disabled probes in requested render probes
                m_PlanarReflectionProbe_RequestRealtimeRender.IntersectWith(m_PlanarReflectionProbes);
                // Include all realtime probe modes
                m_PlanarReflectionProbe_RequestRealtimeRender.UnionWith(m_PlanarReflectionProbe_RealtimeUpdate);
                var length = Mathf.Min(m_PlanarReflectionProbe_RequestRealtimeRender.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                m_PlanarReflectionProbe_RequestRealtimeRender.CopyTo(m_PlanarReflectionProbe_RealtimeUpdate_WorkArray);
                m_PlanarReflectionProbe_RequestRealtimeRender.Clear();

                // 1. Allocate if necessary target texture
                var camera = GetRenderCamera();
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    var hdCamera = HDCamera.Get(camera);

                    if (hdCamera == null)
                    {
                        // Warning: this is a bad design pattern.
                        // An individual system should not create an HDCamera (which is a shared resource).
                        hdCamera = HDCamera.Create(camera, null);
                    }

                    hdCamera.Update(probe.frameSettings, null, null);

                    if (!IsRealtimeTextureValid(probe.realtimeTexture, hdCamera))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture);
                }
            }
        }
예제 #8
0
        public void RenderAllRealtimeProbesFor(ReflectionProbeType probeType, Camera viewerCamera)
        {
            if ((probeType & ReflectionProbeType.PlanarReflection) != 0)
            {
                var length = Mathf.Min(m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count, m_PlanarReflectionProbe_RealtimeUpdate_WorkArray.Length);
                var index  = 0;
                foreach (var p in m_PlanarReflectionProbe_PerCamera_RealtimeUpdate)
                {
                    m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[index] = p;
                    if (++index >= length)
                    {
                        break;
                    }
                }
#if DEBUG
                var discarded = m_PlanarReflectionProbe_PerCamera_RealtimeUpdate.Count - length;
                if (discarded > 0)
                {
                    Debug.LogWarningFormat("There are more planar probe than supported in a single rendering, {0} probes discardeds", discarded);
                }
#endif

                // 1. Allocate if necessary target texture
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];

                    if (!IsRealtimeTextureValid(probe.realtimeTexture, true))
                    {
                        if (probe.realtimeTexture != null)
                        {
                            probe.realtimeTexture.Release();
                        }
                        probe.realtimeTexture = NewRenderTarget(probe);
                    }
                }

                // 2. Render
                for (var i = 0; i < length; i++)
                {
                    var probe = m_PlanarReflectionProbe_RealtimeUpdate_WorkArray[i];
                    Render(probe, probe.realtimeTexture, viewerCamera);
                }
            }
        }
예제 #9
0
 public static void RenderAllRealtimeViewerDependentProbesFor(ReflectionProbeType probeType, Camera camera)
 {
     s_Instance.RenderAllRealtimeProbesFor(probeType, camera);
 }
 public static void RenderAllRealtimeProbes(ReflectionProbeType probeTypes)
 {
     s_Instance.RenderAllRealtimeProbes(probeTypes);
 }
예제 #11
0
 private static extern void Internal_setType(IntPtr thisPtr, ReflectionProbeType type);