✨ Add water shader by Atlas and, flip some faces and experiment with animations
This commit is contained in:
parent
bf6da1e7c9
commit
c50e9258cf
1764 changed files with 303341 additions and 66722 deletions
207
Assets/Editor/x64/Bakery/scripts/ftSceneView.cs
Normal file
207
Assets/Editor/x64/Bakery/scripts/ftSceneView.cs
Normal file
|
@ -0,0 +1,207 @@
|
|||
#if UNITY_EDITOR
|
||||
//#if UNITY_2018_2_OR_NEWER
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Linq;
|
||||
|
||||
/*
|
||||
public class ftSceneView
|
||||
{
|
||||
public static void Init()
|
||||
{
|
||||
var mode = SceneView.AddCameraMode("Bakery lightmap checker", "Bakery");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
public class ftSceneView
|
||||
{
|
||||
static Shader checkerShader, projShader;
|
||||
public static bool enabled;
|
||||
static List<Texture2D> tempTextures;
|
||||
|
||||
static void Atlas()
|
||||
{
|
||||
var fgo = GameObject.Find("!ftraceLightmaps");
|
||||
if (fgo == null) {
|
||||
fgo = new GameObject();
|
||||
fgo.name = "!ftraceLightmaps";
|
||||
fgo.hideFlags = HideFlags.HideInHierarchy;
|
||||
}
|
||||
var store = fgo.GetComponent<ftLightmapsStorage>();
|
||||
if (store == null) {
|
||||
store = fgo.AddComponent<ftLightmapsStorage>();
|
||||
}
|
||||
ftRenderLightmap.LoadStaticAtlasingSettings();
|
||||
|
||||
Debug.Log("Atlasing...");
|
||||
ftBuildGraphics.modifyLightmapStorage = false;
|
||||
ftBuildGraphics.validateLightmapStorageImmutability = false;
|
||||
var exportSceneFunc = ftBuildGraphics.ExportScene(null, false, true);
|
||||
while(exportSceneFunc.MoveNext())
|
||||
{
|
||||
//progressBarText = ftBuildGraphics.progressBarText;
|
||||
//progressBarPercent = ftBuildGraphics.progressBarPercent;
|
||||
/*if (ftBuildGraphics.userCanceled)
|
||||
{
|
||||
ProgressBarEnd();
|
||||
DestroyImmediate(go);
|
||||
foreach(var d in dynamicObjects) d.enabled = true;
|
||||
yield break;
|
||||
}*/
|
||||
//yield return null;
|
||||
}
|
||||
Debug.Log("Atlasing done");
|
||||
//ftRenderLightmap.simpleProgressBarEnd();
|
||||
ftBuildGraphics.ProgressBarEnd(true);
|
||||
}
|
||||
|
||||
static void ApplyNewProperties()
|
||||
{
|
||||
var objs = ftBuildGraphics.atlasOnlyObj;
|
||||
if (objs == null) return;
|
||||
var scaleOffset = ftBuildGraphics.atlasOnlyScaleOffset;
|
||||
var size = ftBuildGraphics.atlasOnlySize;
|
||||
var ids = ftBuildGraphics.atlasOnlyID;
|
||||
var existingLmaps = LightmapSettings.lightmaps.ToList();
|
||||
tempTextures = new List<Texture2D>();
|
||||
var usedLMIDs = new HashSet<int>();
|
||||
for(int i=0; i<objs.Count; i++)
|
||||
{
|
||||
if (objs[i] == null) continue;
|
||||
objs[i].lightmapScaleOffset = scaleOffset[i];
|
||||
if (objs[i].lightmapIndex < 0 || objs[i].lightmapIndex >= existingLmaps.Count ||
|
||||
existingLmaps[objs[i].lightmapIndex] == null ||
|
||||
existingLmaps[objs[i].lightmapIndex].lightmapColor == null || existingLmaps[objs[i].lightmapIndex].lightmapColor.width != size[i])
|
||||
{
|
||||
int s = 1;//Math.Max(size[i],1);
|
||||
var tex = new Texture2D(s, s);
|
||||
tempTextures.Add(tex);
|
||||
tex.SetPixels32(new Color32[s*s]);
|
||||
tex.Apply();
|
||||
var ldata = new LightmapData();
|
||||
ldata.lightmapColor = tex;
|
||||
existingLmaps.Add(ldata);
|
||||
objs[i].lightmapIndex = existingLmaps.Count - 1;
|
||||
}
|
||||
|
||||
var prop = new MaterialPropertyBlock();
|
||||
objs[i].GetPropertyBlock(prop);
|
||||
prop.SetFloat("bakeryLightmapSize", size[i]);
|
||||
int lmid = ids[i];
|
||||
if (lmid < 1000)
|
||||
{
|
||||
usedLMIDs.Add(lmid);
|
||||
}
|
||||
UnityEngine.Random.InitState(lmid);
|
||||
prop.SetVector("bakeryLightmapID", UnityEngine.Random.ColorHSV(0, 1, 0.3f, 0.3f, 1, 1));
|
||||
objs[i].SetPropertyBlock(prop);
|
||||
}
|
||||
|
||||
Debug.Log("Lightmap count with current settings: " + usedLMIDs.Count);
|
||||
|
||||
LightmapSettings.lightmaps = existingLmaps.ToArray();
|
||||
}
|
||||
|
||||
//[MenuItem("Bakery/Checker/Toggle")]
|
||||
public static void ToggleChecker()
|
||||
{
|
||||
var sceneView = SceneView.lastActiveSceneView;
|
||||
if (sceneView == null)
|
||||
{
|
||||
Debug.LogError("Can't get SceneView");
|
||||
return;
|
||||
}
|
||||
if (enabled)
|
||||
{
|
||||
tempTextures = null;
|
||||
//var sceneCameras = SceneView.GetAllSceneCameras();
|
||||
//for(int i=0; i<sceneCameras.Length; i++) sceneCameras[i].renderingPath = RenderingPath.UsePlayerSettings;
|
||||
sceneView.SetSceneViewShaderReplace(null, null);
|
||||
ftLightmaps.RefreshFull();
|
||||
enabled = false;
|
||||
|
||||
var gstorage = ftLightmaps.GetGlobalStorage();
|
||||
gstorage.checkerPreviewOn = false;
|
||||
EditorUtility.SetDirty(gstorage);
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (checkerShader == null)
|
||||
{
|
||||
checkerShader = Shader.Find("Hidden/ftChecker");
|
||||
if (checkerShader == null)
|
||||
{
|
||||
Debug.LogError("Can't load checker shader");
|
||||
return;
|
||||
}
|
||||
}
|
||||
sceneView.SetSceneViewShaderReplace(checkerShader, null);
|
||||
//var sceneCameras = SceneView.GetAllSceneCameras();
|
||||
//for(int i=0; i<sceneCameras.Length; i++) sceneCameras[i].renderingPath = RenderingPath.Forward;
|
||||
enabled = true;
|
||||
|
||||
var gstorage = ftLightmaps.GetGlobalStorage();
|
||||
gstorage.checkerPreviewOn = true;
|
||||
EditorUtility.SetDirty(gstorage);
|
||||
|
||||
Atlas();
|
||||
ApplyNewProperties();
|
||||
}
|
||||
sceneView.Repaint();
|
||||
}
|
||||
|
||||
public static void ToggleProjMode()
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
ToggleChecker(); // same code for turning it off
|
||||
return;
|
||||
}
|
||||
|
||||
// Different code for turning it on
|
||||
|
||||
var sceneView = SceneView.lastActiveSceneView;
|
||||
if (sceneView == null)
|
||||
{
|
||||
Debug.LogError("Can't get SceneView");
|
||||
return;
|
||||
}
|
||||
|
||||
//if (projShader == null)
|
||||
{
|
||||
projShader = Shader.Find("Hidden/ftProjection");
|
||||
if (projShader == null)
|
||||
{
|
||||
Debug.LogError("Can't load projection shader");
|
||||
return;
|
||||
}
|
||||
}
|
||||
sceneView.SetSceneViewShaderReplace(projShader, null);
|
||||
enabled = true;
|
||||
|
||||
var gstorage = ftLightmaps.GetGlobalStorage();
|
||||
gstorage.checkerPreviewOn = true;
|
||||
EditorUtility.SetDirty(gstorage);
|
||||
|
||||
sceneView.Repaint();
|
||||
}
|
||||
|
||||
//[MenuItem("Bakery/Checker/Refresh")]
|
||||
public static void RefreshChecker()
|
||||
{
|
||||
if (!enabled) return;
|
||||
Atlas();
|
||||
ApplyNewProperties();
|
||||
}
|
||||
}
|
||||
|
||||
//#endif
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue