/// <inheritdoc/>
        protected internal override InspectableState Refresh(bool force = false)
        {
            LightProbeVolume lpv = InspectedObject as LightProbeVolume;

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

            InspectableState oldState = modifyState;

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

            // Don't update fields while modification in progress
            if (modifyState == InspectableState.NotModified)
            {
                AABox   gridVolume = lpv.GridVolume;
                Vector3 size       = gridVolume.Maximum - gridVolume.Minimum;
                Vector3 position   = gridVolume.Minimum + size * 0.5f;

                positionField.Value = position;
                sizeField.Value     = size;

                Vector3I cellCount = lpv.CellCount;
                densityField.Value = new Vector3(cellCount.x, cellCount.y, cellCount.z);
            }

            return(oldState);
        }
Пример #2
0
        /// <inheritdoc/>
        protected internal override InspectableState Refresh(bool force = false)
        {
            LightProbeVolume lpv = InspectedObject as LightProbeVolume;

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

            InspectableState oldState = modifyState;

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

            AABox   gridVolume = lpv.GridVolume;
            Vector3 size       = gridVolume.Maximum - gridVolume.Minimum;
            Vector3 position   = gridVolume.Minimum + size * 0.5f;

            if (!positionField.HasInputFocus || force)
            {
                positionField.Value = position;
            }

            if (!sizeField.HasInputFocus || force)
            {
                sizeField.Value = size;
            }

            if (!densityField.HasInputFocus || force)
            {
                Vector3I cellCount = lpv.CellCount;
                densityField.Value = new Vector3(cellCount.x, cellCount.y, cellCount.z);
            }

            return(oldState);
        }
Пример #3
0
    void Save()
    {
        shs  = LightmapSettings.lightProbes.bakedProbes;
        poss = LightmapSettings.lightProbes.positions;
        print(shs.Length + " " + poss.Length);

        SHStrorage[] storages = GameObject.FindObjectsOfType <SHStrorage>();
        for (int i = 0; i < poss.Length; i++)
        {
            foreach (var s in storages)
            {
                LightProbeVolume vol = s.GetComponentInChildren <LightProbeVolume>();
                if (vol != null)
                {
                    if (vol.GetBounds().Contains(poss[i]))
                    {
                        s.sh_Indexs.Add(i);
                        s.sh_datas.Add(shs[i]);
                        break;
                    }
                }
            }
        }
    }
        private static void DrawGizmoVolume(LightProbeVolume volume, GizmoType gizmoType)
        {
            var color = LightProbeVolume.EditorColor;

            Gizmos.color  = color;
            Gizmos.matrix = Matrix4x4.TRS(volume.transform.position, volume.transform.rotation, Vector3.one);
            Gizmos.DrawWireCube(volume.Origin, volume.Size);

            if (gizmoType != (GizmoType.Selected | GizmoType.InSelectionHierarchy | GizmoType.Active))
            {
                return;
            }

            color.a      = 0.25f;
            Gizmos.color = color;
            Gizmos.DrawCube(volume.Origin, volume.Size);

            var probes = volume.CreatePositions();

            for (int i = 0; i < probes.Count; i++)
            {
                Gizmos.DrawIcon(probes[i], "NONE", false);
            }
        }
Пример #5
0
    void Swap()
    {
        SHStrorage[] storages = GameObject.FindObjectsOfType <SHStrorage>();
        Vector3      temp     = storages[0].transform.position;

        storages[0].transform.position = storages[1].transform.position;
        storages[1].transform.position = temp;
        if (storages[0].sh_Indexs.Count != storages[1].sh_Indexs.Count)
        {
            Debug.LogError("sh count not equal");
            return;
        }

        int stepLength = storages[0].sh_datas.Count;
        List <SphericalHarmonicsL2> new_shs = new List <SphericalHarmonicsL2>(shs.Length);

        foreach (var s in storages)
        {
            s.Inserted = false;
        }

        for (int i = 0; i < poss.Length; i++)
        {
            foreach (var s in storages)
            {
                if (s.Inserted)
                {
                    continue;
                }

                LightProbeVolume vol = s.GetComponentInChildren <LightProbeVolume>();
                if (vol != null)
                {
                    if (vol.GetBounds().Contains(poss[i]))
                    {
                        int offset = Mathf.FloorToInt((float)i / (float)s.sh_Indexs.Count);
                        new_shs.InsertRange(offset * stepLength, s.sh_datas);
                        s.Inserted = true;
                    }
                }
            }
        }

        //if (storages[0].sh_Indexs.Count == storages[1].sh_Indexs.Count)
        //{
        //    for (int i = 0; i < storages[0].sh_Indexs.Count; i++)
        //    {
        //        var temp = shs[storages[0].sh_Indexs[i]];
        //        shs[storages[0].sh_Indexs[i]] = shs[storages[1].sh_Indexs[i]];
        //        shs[storages[1].sh_Indexs[i]] = temp;
        //    }
        //}
        //else
        //{
        //    Debug.LogError("sh count not equal");
        //}
        //for (int i = 0; i < 8; i++)
        //{
        //    var temp = shs[i];
        //    shs[i] = shs[i + 8];
        //    shs[i + 8] = temp;
        //}
        LightmapSettings.lightProbes.bakedProbes = new_shs.ToArray();
    }
Пример #6
0
 /// <summary>
 /// Creates a new instance of the object.
 /// </summary>
 public LightProbeVolumeNodeHandles(LightProbeVolume volume)
 {
     this.volume  = volume;
     selectedNode = uint.MaxValue;
 }
Пример #7
0
 private static void DrawIcon(LightProbeVolume volume)
 {
     Gizmos.DrawIcon(volume.SceneObject.Position,
                     EditorBuiltin.GetSceneViewIcon(SceneViewIcon.LightProbes), false);
 }
Пример #8
0
        /// <inheritdoc/>
        protected internal override void Initialize()
        {
            Layout.Clear();

            LightProbeVolume lpv = InspectedObject as LightProbeVolume;

            if (lpv == null)
            {
                return;
            }

            // Set up callbacks
            addProbeButton.OnClick += () =>
            {
                StartUndo();
                lpv.AddProbe(Vector3.Zero);
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            removeProbeButton.OnClick += () =>
            {
                if (LightProbeVolumeNodeHandles.SelectedNode != uint.MaxValue)
                {
                    StartUndo();
                    lpv.RemoveProbe((int)LightProbeVolumeNodeHandles.SelectedNode);
                    EndUndo();

                    MarkAsModified();
                    ConfirmModify();
                }
            };

            positionField.OnConfirm += x =>
            {
                AABox   gridVolume = lpv.GridVolume;
                Vector3 extents    = (gridVolume.Maximum - gridVolume.Minimum) * 0.5f;

                Vector3 min = positionField.Value - extents;
                Vector3 max = positionField.Value + extents;

                Vector3I cellCount = lpv.CellCount;

                gridVolume = new AABox(min, max);

                StartUndo();
                lpv.Resize(gridVolume, cellCount);
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            sizeField.OnConfirm += x =>
            {
                AABox gridVolume = lpv.GridVolume;

                Vector3 min = gridVolume.Minimum;
                Vector3 max = min + sizeField.Value;

                Vector3I cellCount = lpv.CellCount;

                gridVolume = new AABox(min, max);

                StartUndo();
                lpv.Resize(gridVolume, cellCount);
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            densityField.OnConfirm += x =>
            {
                AABox gridVolume = lpv.GridVolume;

                Vector3  density   = densityField.Value;
                Vector3I cellCount = new Vector3I((int)density.x, (int)density.y, (int)density.y);

                StartUndo();
                lpv.Resize(gridVolume, cellCount);
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            resetToGridButton.OnClick += () =>
            {
                StartUndo();
                lpv.Reset();
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            clipOuterButton.OnClick += () =>
            {
                StartUndo();
                lpv.Clip();
                EndUndo();

                MarkAsModified();
                ConfirmModify();
            };

            renderButton.OnClick += () =>
            {
                lpv.RenderProbes();

                MarkAsModified();
                ConfirmModify();
            };

            // Set up layout
            Layout.AddElement(manualLabel);
            GUILayout manualLayout = Layout.AddLayoutX();

            manualLayout.AddElement(addProbeButton);
            manualLayout.AddElement(removeProbeButton);

            Layout.AddSpace(10);

            Layout.AddElement(uniformLabel);
            Layout.AddElement(positionField);
            Layout.AddElement(sizeField);
            Layout.AddElement(densityField);

            Layout.AddSpace(5);

            GUILayout uniformLayout = Layout.AddLayoutX();

            uniformLayout.AddElement(resetToGridButton);
            uniformLayout.AddElement(clipOuterButton);

            Layout.AddSpace(10);

            Layout.AddElement(renderButton);
        }