TexturePacker (+пакуем normal maps)

Общие вопросы о Unity3D

TexturePacker (+пакуем normal maps)

Сообщение gnoblin 01 дек 2011, 18:47

Хочу паковать в атласы не только дифузную текстуру, но и нормалмапу.

Но вот делаю что-то не так и после упаковки нормал смотрится совсем по-другому.

Проект-пример в аттаче.

До:
do.jpg

После:
posle.jpg


Обращаюсь за помощью в сообщество! :)
Кто что думает?

Сам код работы с нормалмапой вот:
Синтаксис:
Используется csharp
Texture2D normal_packedTexture = (Texture2D)Instantiate(shaderToMaterial[key][0].GetTexture(normal_tex_name));
            //new Texture2D(packedTexture.width, packedTexture.height);
            if (normal_packedTexture.Resize(packedTexture.width, packedTexture.height))
            {
                Debug.Log("resized");
            }
            else
            {
                Debug.Log("not resized");
            }
           
            normal_packedTexture.Apply();

Texture2D[] normal_texs = new Texture2D[texs.Length];
            for (int i = 0; i < texs.Length; i++)
            {
                if (shaderToMaterial[key][i].HasProperty(normal_tex_name))
                {
                    normal_texs[i] = shaderToMaterial[key][i].GetTexture(normal_tex_name) as Texture2D;
                    if (normal_texs[i] == null)
                    {
                        Debug.Log("normal null!");
                    }
                    //setpixels32, make no longer readable
                    float x = (int)(uvs[i].x * packedTexture.width);
                    float y = (int)(uvs[i].y * packedTexture.height);
                    float width = (int)(uvs[i].width * packedTexture.width);
                    float height = (int)(uvs[i].height * packedTexture.height);
                    Debug.Log(string.Format("pack normal: {0},{1},{2},{3} ", x, y, width, height));
                   
                    Color[] colz = normal_texs[i].GetPixels();
                   
                    normal_packedTexture.SetPixels((int)x, (int)y, (int)width, (int)height, colz);


                }
                else
                {
                    Debug.Log("doesn't have property");
                }
            }
           
            normal_packedTexture.Apply(true, false);
 
У вас нет доступа для просмотра вложений в этом сообщении.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение Order 02 дек 2011, 08:42

У тебя в packedTexture одна текстура пакуется и с нее нормалмап текстура генерируется ? или туда должно обе помещаться из ресурсов ?

Нормальмап текстура меняется при включении скрипта, в инспекторе заметно сглаживается .. наверно он берет с текстуры и генерирует новую.

Если я правильно думаю, нужно запаковать две текстуры :)
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 02 дек 2011, 13:05

Order писал(а):У тебя в packedTexture одна текстура пакуется и с нее нормалмап текстура генерируется ? или туда должно обе помещаться из ресурсов ?

Нормальмап текстура меняется при включении скрипта, в инспекторе заметно сглаживается .. наверно он берет с текстуры и генерирует новую.

Если я правильно думаю, нужно запаковать две текстуры :)


В packedTexture у меня diffuse текстуры пакуются,
в normalPackedTexture у меня пакуются существующие normal текстуры.

В инспекторе у меня никаких изменений текстуры нету.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение waruiyume 02 дек 2011, 15:23

Это как-то связанно с mipMap, если выключить их генерацию(на текстуре до), или приблизится к объекту вплотную, то не видно разницы между до и после.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 02 дек 2011, 15:45

без генерации мипмапов у меня получается плоский объект (вероятно потому что включен отсутствующий мипмап)

в итоге: что все-таки сделать?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 02 дек 2011, 22:01

skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение artk 03 дек 2011, 02:26

gnoblin писал(а): normal_packedTexture.Apply(true, false);

А откуда два параметра?

Для удобства можно заменить дефуз на нормал, чтобы увидеть как наложилась. Ну или можно посмотреть какой собственно атлас получился.
Первая мысль - uv увеличены вдвое.
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 03 дек 2011, 04:32

первый параметр: перегенерить мипмапы,
второй параметр: сделать недоступной для дальнейшего редактирования (makeNoLongerReadable)

с ув там всё в порядке, а текстуру можно посмотреть в инспекторе
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение waruiyume 03 дек 2011, 08:03

После долгих плясок с бубном, удалась скопировать мипы со смещением 8-} :crazy:
Снизу-до, сверху-после:
Изображение
В изменённую часть добавлены маркеры:
http://dl.dropbox.com/u/23279033/goblin/nmu.7z
P.S. Забыл, автогенерацию мипов, тоже нужно вырубить.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 03 дек 2011, 17:26

спасибо :ymdaydream: \m/

раньше я как-то не думал что мипмапы нужно копировать отдельно :-s
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 03 дек 2011, 17:44

плюс вопрос дня:
получается для 3д объектов вообще некорректно мипмапы пересчитывать чтоли?
т.к. в редакторе качественнее/по-другому получается чем в рантайме?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение Neodrop 05 дек 2011, 11:41

Лучше примеры к форуму прикреплять, ибо надёжнее.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 06 дек 2011, 18:20

добрался скачать!

я так понимаю инкрементирование prTl не универсально? (т.е. не будет работать в случае если текстур больше и они расположены по-другому)

Синтаксис:
Используется csharp
 float x = (int)(uvs[i].x * packedTexture.width);
                    float y = (int)(uvs[i].y * packedTexture.height);
                    float width = (int)(uvs[i].width * packedTexture.width);
                    float height = (int)(uvs[i].height * packedTexture.height);
                    Debug.Log(string.Format("pack normal: {0},{1},{2},{3} ", x, y, width, height));
                   
                    //normal_packedTexture.SetPixels((int)x, (int)y, (int)width, (int)height, colz);

                    for (int ml = 0; ml < normal_texs[i].mipmapCount; ml++)
                    {
                        //normal_packedTexture.SetPixels((int)x, (int)y, (int)width >> ml, (int)height >> ml, colz, ml);
                        if(ml==0)
                        {
                            Color[] colz = normal_texs[i].GetPixels();
                            normal_packedTexture.SetPixels((int)x, (int)y, (int)width, (int)height, colz);
                        }
                        else
                        {

                                Color[] colz = normal_texs[i].GetPixels(ml);
                                normal_packedTexture.SetPixels(prTl>>ml,0,
                                    (int)width >> ml, (int)height >> ml, colz, ml);
                        }
                   
                    }
                    prTl += normal_texs[i].width;


и будет лучше делать не
Синтаксис:
Используется csharp
normal_packedTexture.SetPixels(prTl>>ml,0,
                                    (int)width >> ml, (int)height >> ml, colz, ml);


а
Синтаксис:
Используется csharp
normal_packedTexture.SetPixels((int)x>>ml, (int)y>>ml,
                                    (int)width >> ml, (int)height >> ml, colz, ml);

?

Большое спасибо за помощь! :ymhug:

Но всё-таки,
в каких случаях кроме упаковки нормала мы ещё можем захотеть копировать мипмапы вручную как здесь?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 06 дек 2011, 18:43

Финальный вариант кода:
Синтаксис:
Используется csharp
for (int i = 0; i < texs.Length; i++)
            {
                if (shaderToMaterial[key][i].HasProperty(normal_tex_name))
                {
                    normal_texs[i] = shaderToMaterial[key][i].GetTexture(normal_tex_name) as Texture2D;

                    if (normal_texs[i] == null)
                    {
                        Debug.Log("normal null!");
                    }
                    Debug.Log(normal_texs[i].mipmapCount);
                    //setpixels32, make no longer readable
                    float x = (int)(uvs[i].x * packedTexture.width);
                    float y = (int)(uvs[i].y * packedTexture.height);
                    float width = (int)(uvs[i].width * packedTexture.width);
                    float height = (int)(uvs[i].height * packedTexture.height);
                    Debug.Log(string.Format("pack normal: {0},{1},{2},{3} ", x, y, width, height));

                    for (int ml = 0; ml < normal_texs[i].mipmapCount; ml++)
                    {
                        if(ml==0)
                        {
                            Color[] colz = normal_texs[i].GetPixels();
                            normal_packedTexture.SetPixels((int)x, (int)y, (int)width, (int)height, colz);
                        }
                        else
                        {

                                Color[] colz = normal_texs[i].GetPixels(ml);
                                normal_packedTexture.SetPixels((int)x>>ml,(int)y>>ml,
                                    (int)width >> ml, (int)height >> ml, colz, ml);
                        }
                   
                    }
                }
                else
                {
                    Debug.Log("doesn't have property");
                }
            }
           
            normal_packedTexture.Apply(false, false);
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: TexturePacker (+пакуем normal maps)

Сообщение gnoblin 06 дек 2011, 19:12

Может проблема в том что юнити не понимает что ассет обновился?
И возможно в рантайме такой проблемы не будет.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7