/// <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); }
/// <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); }
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); } }
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(); }
/// <summary> /// Creates a new instance of the object. /// </summary> public LightProbeVolumeNodeHandles(LightProbeVolume volume) { this.volume = volume; selectedNode = uint.MaxValue; }
private static void DrawIcon(LightProbeVolume volume) { Gizmos.DrawIcon(volume.SceneObject.Position, EditorBuiltin.GetSceneViewIcon(SceneViewIcon.LightProbes), false); }
/// <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); }