Собирает ли юнити лайтмапу в бандл?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Собирает ли юнити лайтмапу в бандл?

Сообщение ikhtd 19 июл 2016, 00:10

Господа, так в бандл бейкнутую лайтмапу зацепит 5 ая юнити? И вообще цепляла когда нибудь в ранних версиях? Че то я запутался. Вроде говорят, что в 5 ке нет шансов что она сама соберет лайтмапу в бандл.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Собирает ли юнити лайтмапу в бандл?

Сообщение Shekn 19 июл 2016, 14:48

Если в бандл оправлять всю сцену целиком, то вся информацию о GI (лайтмапы там, лайтпробы и прочее) сохраняется.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: Собирает ли юнити лайтмапу в бандл?

Сообщение ikhtd 30 июл 2016, 19:14

Собрал лайтмапу в бандль. Это билд на WebGL.
Начинал все с этой темы viewtopic.php?f=105&t=39470

ИзображениеИзображение

В справке скриптов есть тема как собрать в бандл целую сцену, но я этим скриптом не пользовался, а собираю сцену используя стандартный скрипт сборки бандлов, только как бандл задаю файл сцены https://docs.unity3d.com/Manual/Buildin ... ndles.html

скрипт сборки - в папку Editor
Синтаксис:
Используется csharp
using UnityEditor;

public class CreateAssetBundles
{
        [MenuItem ("Assets/Build AssetBundles")]
        static void BuildAllAssetBundles ()
        {
                //BuildPipeline.BuildAssetBundles ("Assets/mybundle");
                BuildPipeline.BuildAssetBundles( "Assets/mybundle", BuildAssetBundleOptions.None, BuildTarget.WebGL );

        }
}

 





Но загружаю на сцену бандл скриптом из темы про сборку в бандл целой сцены, а не стандартным скриптом загрузки бандлов.
Используя эту тему https://docs.unity3d.com/ScriptReferenc ... undle.html

скрипт загрузки бандла с сервера - в любую папку
Синтаксис:
Используется csharp
using System;
using UnityEngine;
using System.Collections;

public class CachingLoadExample2 : MonoBehaviour {
        public string BURL = "https://7days.com/mybundle/mshop.jpg";
        private WWW www;
        public Texture aTexture2;
        public GUISkin st;


       

        IEnumerator Start () {
                // Download compressed scene. If version 5 of the file named "Streamed-Level1.unity3d" was previously downloaded and cached.
                // Then Unity will completely skip the download and load the decompressed scene directly from disk.
                www = http://WWW.LoadFromCacheOrDownload (BURL , 5);
                yield return www;

                // Handle error
                if (http://www.error != null)
                {
                        Debug.LogError(http://www.error);
                        yield break;
                }

                // In order to make the scene available from LoadLevel, we have to load the asset bundle.
                // The AssetBundle class also lets you force unload all assets and file storage once it is no longer needed.
               
                 var bundle = http://www.assetBundle;

                // Load the level we have just downloaded
               
               //имя сцены которая експортировалась в бандл, а не та с которой вы запускаете этот скрипт
                Application.LoadLevelAdditive ("shopscene1_2");  
               

                //bundle.Unload(false);


                this.enabled = false;


        }


        void OnGUI () {
                //GUI.skin = st;

               // иметь камеру на сцене для работы гуи

                GUI.Label(new Rect(10,135,400,50), "ggg  ");  
               

                if (!www.isDone) {
                        float a;
                        a = http://www.progress * 100.0f;
                        GUI.color = Color.red;


                        GUI.Label (new Rect (Screen.width / 2 - 150, Screen.height / 2 - 30, 400, 30), "Please wait, level is loading  " + a.ToString ("0.00") + " %");    
                       
                        GUI.color = Color.white;
                        GUI.Box (new Rect (Screen.width / 2 - 200, Screen.height / 2, a * 4, 20), aTexture2);
       
                }




        }

}

 

Тут только в одной строчке Application.LoadLevelAdditive ("shopscene1_2"); поменяно на Additive. Потому что легче подгрузить бандл на существующую сцену, а не переходить на новую с потерей объектов. Тут получается по аналогии с подгрузкой обычного бандла на сцену и лайтмапы добавляются.




Еще одна неприятная вещь, в браузере почти нереально вычистить из кеша прошлый бандл - стандартными средствами браузера не выгружается
В юнити едиторе тоже в кеше постоянно висит старый бандл. В едиторе с этой проблемой справится легко, советуют вот такой скрипт для очистки кеша в едиторе. Он появится в меню вверху в тулсах


Синтаксис:
Используется csharp

using UnityEngine;
using UnityEditor;
using System.Collections;

///

/// An editor script which deletes cache info.
///
/// NOTE:
/// Delete all AssetBundle content that has been cached by the current application.
/// This function is not available to WebPlayer applications that use the shared cache.
///
/// See Also:
/// http://docs.unity3d.com/Documentation/S ... Cache.html
///
///

public class CacheTools : ScriptableObject
{

        [MenuItem ("Tools/Cache/Clean")]
        public static void CleanCache ()
        {
                if (Caching.CleanCache ())
                {
                        Debug.LogWarning ("Successfully cleaned all caches.");
                }
                else
                {
                        Debug.LogWarning ("Cache was in use.");
                }
        }
}

 
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Собирает ли юнити лайтмапу в бандл?

Сообщение ikhtd 01 апр 2017, 13:41

Начал работать на версии u 5.5.1 Видимо юнити подработали какие то баги с бандлами в части лайтмапов.
Наверное для упаковки целой сцены в бандл лучше использовать скрипт из документации к целой сцене.

Скрипт для упаковки целой сцены в бандл (запускать из меню Build) (еще вроде условие чтоб в момент создания бандла эта сцена была открыта в редакторе)
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;
using System.Collections;

public class StreamedSceneLoaderExample : MonoBehaviour
{
    // Build a streamed unity3d file. This contain one scene that can be downloaded
    // on demand and loaded once its asset bundle has been loaded.

    [MenuItem("Build/BuildWlayerStreamed")]
    public static void MyBuild()
    {
        string[] levels = new string[] {"Assets/Level1.unity"};    //здест поставить правильный путь к вашей сцене в проекте и имя сцены (тупо не копировать)
        BuildPipeline.BuildStreamedSceneAssetBundle(levels, "Streamed-Level1.unity3d", BuildTarget.StandaloneWindows);   //здесь "Streamed-Level1.unity3d" это название бандла, которое вы назначили сцене в редакторе
    }
}
 

БАндл вы должны получить в папке root проекта, в самой корневой.
Интересно что при этом создастся только один файл, без всяких файлов манифестов, как в случае префаба. И это очень похоже на старые бандлы в юнити.
Доработка бандлов которая велась, наверное выражается в этом на картинке, раньше были проблемы с зацепкой лайтмапов в бандлы-префабы.
https://docs.unity3d.com/Manual/Buildin ... ndles.html
ИзображениеИзображение
При упаковке бандлов с лайтмапами надо обязательно поставить настройку - мануальная сборка лайтмапов в настройках прожекта.

Также было желание как то добавить PVS данные из оклюжинга в бандл, но наверное это невозможно. Бандл с включенной информацией из оклюжинга при загрузке на сцену просто выбивает юнити. короче никак невозможно, я где то читал об этом.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Собирает ли юнити лайтмапу в бандл?

Сообщение ikhtd 01 апр 2017, 15:19

Еще насчет желания оклюзить сцену загруженную из бандлов. Попробовал такой вариант, в редакторе в корневую сцену временно установил префаб который грузится из бандлов. Затем отработал эту сцену оклюжином, получил оклюжн информацию. Потом удалил этот бандл префаб, который обработали оклюжином. Сцену без префаба, но с оклюжином сохранил. Затем провел тест в игре - запустил корневую сцену, инстансировал префаб- сцену, на него поставил игрока с камерой и на визуализации мне кажется что оклюжен все таки работает для ресурсов загруженных из бандла, то есть он обрабаьывается все равно оклюженом. Потестирую потом более точно в игре на сравнении фпс. у меня в редакторе просто различия фпс все равно не видно что с окулдером что без - только в билде заметно.

PS
Пашет, пашет оклюжн с бандлами! На тестах вебгл дает до +10 фпс.

PS2
Чтобы было меньше проблем с браузерами при работе с бандлами, чтобы они их не кешировали непонятно где навечно, лучше ставить расширение бандла swf. У меня все swf бандлы удаляет из кеша без проблем. это случается с файлами без расширения, браузер их не удаляет из кеша.
Или попробовать в Opera приватный просмотр для безопасности
Ctrl+Shift+N
открывает новое приватное окно. либо из меню - приватное окно.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 22