Как настроить текстуру без потерь качества

Программирование на Юнити.

Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 15:22

И отображалась пиксель в пиксель?
Оригинальная текстура в png, без альфы.
Создаю текстуру в скрипте, формат ARGB.32, затем загружаю в неё данные посредством WWW.
В итоге текстура размыта:

Оригинальное изображение:
Изображение

В собранном билдe даже при качестве фантастик:
Изображение

Scale текстуры 1.

Как побороть?

Синтаксис:
Используется csharp
WWW w = new WWW(path);        
Texture2D texture = new Texture2D(1024, 768, TextureFormat.ARGB32, false);
while (!w.isDone) ;
w.LoadImageIntoTexture(texture);
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 15:51

текстура NPOT размера - по-любому будет мылиться.

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

Re: Как настроить текстуру без потерь качества

Сообщение DbIMok 20 окт 2011, 16:00

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://deymon.online.fr/unity3d/test/WebPlayer.unity3d&w=400&h=300&t=false&preview=1' height='"+(300+30)+"' width='400' frameborder='0' scrolling='no'></iframe>"); </script>

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class TestWWW : MonoBehaviour
{
        private string url = "http://dl.dropbox.com/u/37140776/good.png";
        public Texture2D tex;

        IEnumerator Start()
        {
                tex = new Texture2D(196, 251, TextureFormat.ARGB32, false);
                WWW www = new WWW(url);
                yield return www;
                http://www.LoadImageIntoTexture(tex);
        }

        void OnGUI()
        {
                if (tex != null)
                        GUI.DrawTexture(new Rect(0,0,tex.width,tex.height), tex);
        }
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 16:07

Текстура выводится через меш. Квад, а у материала в mainTexture присваивается эта текстура. Это бэк, квад размером с экран.
Т.е. предлагаете привести к POT?

DbIMok, спасибо, но yield return не подходит для ожидания загрузки и вывод этой текстуры через GUI тоже.

Правка: как такого же добиться при выводе через меш?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 17:16

yield или не yield - роли не играет

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

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 17:40

gnoblin писал(а):yield или не yield - роли не играет


Да я в курсе :) Это к тому, что мне не нужна асинхронная загрузка.

gnoblin писал(а):про меш и пиксель-в-пиксель есть порядочное количество тем на форуме


Ищу не нахожу кроме этой и другой моей же темы. Ткните, плийз, пальцем.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 19:43

Квад создаётся точно размером с текстуру, как победить это размытие?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение artk 20 окт 2011, 20:21

А вы точно поменяли Filter mode? Без www работает?
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 20:34

Riddik писал(а):Да я в курсе :) Это к тому, что мне не нужна асинхронная загрузка.


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

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 20:34

Riddik писал(а):Квад создаётся точно размером с текстуру, как победить это размытие?

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

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 20:39

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

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 20:58

gnoblin писал(а):
Riddik писал(а):Да я в курсе :) Это к тому, что мне не нужна асинхронная загрузка.


Она асинхронная в обоих случаях жеж.


Ага, потому и жду в цикле, пока не загрузится. Надо ждать загрузку и дальше код не выполнять, другим способов не нашёл.

gnoblin писал(а):что значит "точно размером с текстуру"?


Значит что на экране будет отображена без искажений размеров.
Вот координаты вертексов меша, на который натягивается текстура (картинка будет строго по центру):

Синтаксис:
Используется csharp
float x0 = (Screen.width - texture.width) * 0.5f;
float y0 = (Screen.height - texture.height) * 0.5f;
float x1 = x0 + texture.width;
float y1 = y0 + texture.height;          

Vector3 <img src="./images/smilies/unmarked.gif" alt="[]" title="Запланировано" /> verts = new Vector3 [4] { camera.ScreenToWorldPoint(new Vector3(x0, y1)),
                                                     camera.ScreenToWorldPoint(new Vector3(x1, y1)),
                                                     camera.ScreenToWorldPoint(new Vector3(x1, y0)),
                                                     camera.ScreenToWorldPoint(new Vector3(x0, y0)) };
 
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 21:08

gnoblin писал(а):http://unity3d.ru/distribution/viewtopic.php?f=16&t=4162&p=34867&hilit=%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%BA%D0%B0%D0%BC%D0%B5%D1%80%D0%B0#p34867

viewtopic.php?f=105&t=4634&p=38736&hilit=%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%BA%D0%B0%D0%BC%D0%B5%D1%80%D0%B0#p38736


Настройки орографической камеры, чтобы получить 1пиксель == 1 юнит, на появление "мыла" не влияют. Или я ошибаюсь?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение Riddik 20 окт 2011, 21:23

artk писал(а):А вы точно поменяли Filter mode? Без www работает?

Да, ставил даже трилинейную фильтрацию и пробовал без WWW. Тот же результат. Мыло.
Что же напасть такая? Почему через GUI.DrawTexture мыла нет, а если на mesh натянуть и без изменения масштабов - есть.

Степень двойки сейчас попробую.

Update: попробовал - ещё хуже размытие. 1024х1024

Ребята, где я туплю? Ведь так не бывает.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Как настроить текстуру без потерь качества

Сообщение gnoblin 20 окт 2011, 22:07

Ага, потому и жду в цикле, пока не загрузится. Надо ждать загрузку и дальше код не выполнять, другим способов не нашёл.


Я не понял в чем проблема...
//1)
bool finished;

...
finished = false;
yield return www;
finished = true;

//2)
Debug.Log("blabla0 "+Time.time);
yield return www;
Debug.Log("blabla1 "+Time.time);
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

Вернуться в Скрипты

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

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