Esempio n. 1
0
        public static Mesh Convert(Mesh mesh, BakingMode bakingMode, Channel channel,
                                   float thresholdAngle = 0, float sceneScale = 1, float importScale = 1)
        {
            WireframeBaker.channel        = channel;
            WireframeBaker.thresholdAngle = thresholdAngle * Mathf.Deg2Rad;

            #if UNITY_EDITOR
            CheckTopology(mesh);
            #endif

            // Threshold
            if (bakingMode == BakingMode.AngleThreshold)
            {
                return(ConvertThresh(mesh));
            }

            // Barycentric
            if (bakingMode == BakingMode.Barycentric || bakingMode == BakingMode.ScreenSpace)
            {
                return(ConvertBary(mesh));
            }

            // Distance
            if (bakingMode == BakingMode.WorldSpace)
            {
                return(ConvertDist(mesh, isWorldSpace: true,
                                   scale: sceneScale / importScale));
            }
            else
            {
                return(ConvertDist(mesh, isWorldSpace: false));
            }
        }
Esempio n. 2
0
        public void BeginBake(ProbeBox[] probeBoxes, BakingMode bakingMode, string identifier = default(string),
                              Sphere sphere = default(Sphere))
        {
            oneBakeActive        = true;
            bakeStatus           = BakeStatus.InProgress;
            duringBakeProbeBoxes = probeBoxes;
            duringBakeMode       = bakingMode;
            duringBakeIdentifier = identifier;
            duringBakeSphere     = sphere;

#if UNITY_EDITOR
            totalProbeBoxes = duringBakeProbeBoxes.Length;
#endif

            if (probeBoxes.Length == 0)
            {
                Debug.LogError("Probe Box component not attached or no probe boxes selected for baking.");
            }

            // Initialize environment
            try
            {
                duringBakePhononManager = GameObject.FindObjectOfType <PhononManager>();
                if (duringBakePhononManager == null)
                {
                    throw new Exception("Phonon Manager Settings object not found in the scene! Click Window > Phonon");
                }

                bool initializeRenderer = false;
                duringBakePhononManager.Initialize(initializeRenderer);
                duringBakePhononContainer = duringBakePhononManager.PhononManagerContainer();
                duringBakePhononContainer.Initialize(initializeRenderer, duringBakePhononManager);

                if (duringBakePhononContainer.Scene().GetScene() == IntPtr.Zero)
                {
                    throw new Exception("Make sure to pre-export the scene before baking.");
                }
            }
            catch (Exception e)
            {
                bakeStatus = BakeStatus.Complete;
                Debug.LogError(e.Message);
                return;
            }

            bakeCallback = new PhononCore.BakeProgressCallback(AdvanceProgress);

#if (UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN)
            bakeCallbackPointer = Marshal.GetFunctionPointerForDelegate(bakeCallback);
            bakeCallbackHandle  = GCHandle.Alloc(bakeCallbackPointer);
            GC.Collect();
#endif

            bakeThread = new Thread(new ThreadStart(BakeEffectThread));
            bakeThread.Start();
        }