Как создавать текстуры для андроид

Как создать свой собственный текстурпак для Minecraft PE, используя Gimp

Создавать свой собственный текстурпак достаточно весело, но этот процесс занимает длительное время. Перед тем как начать, я хочу сказать: если вы заинтересованы в портировании текстурпака, пожалуйста, согласуйте все необходимые моменты и получите разрешение у разработчика. А теперь, погнали!

Чтобы сделать текстурпак, вам нужно несколько вещей:

  • Компьютер
  • Программа Gimp (в качестве альтернативы, можно выбрать Photoshop)

Шаг 1

Откройте Gimp и далее папку .assets. Найдите файлы, которые желаете отредактировать.

Шаг 2

Теперь, как именно можно рисовать? Очень легко! Нажмите на клавишу Windows, затем «закрепленные окна», далее «настройки кистей» и последнее – «настройки инструмента». Теперь, у вас должно появиться два небольших окошка, как указано на изображении.

После этого, измените размер карандаша до 1.00. Для текстур 16х16 такая кисть будет идеальной. В целом, это все. Теперь вы можете рисовать пиксели.

Шаг 3

Отредактируйте нужный вам элемент с помощью настроенной кисти.
Вы можете редактировать абсолютно все блоки или предметы, которые пожелаете.

После этого, переименуйте ваш файл Assets.zip (Важно! Не .assets файлы, а Assets.zip) в любой, который вы пожелаете. Именно этот отредактированный и переименованный архив и будет являться вашим текстурпаком.

Вы можете поделиться ним с друзьями, разместить на веб-сайте или использовать самостоятельно!

Источник

Как создать и портировать набор текстур для Pocket Edition

В последнее время появляется все больше вопросов о том, как создавать или портировать контент для игры Minecraft Pocket Edition. Вот вам небольшой гайд по основным пунктам, которые помогут начать работу с контентом.

В целом, вам понадобится пройти всего 5 простых процессов:

  • Поиск шаблона для будущего набора;
  • Создание или поиск текстур, с которыми вы хотите работать;
  • Работа с текстурами;
  • Запуск игры и отладка, поиск багов;
  • Повторение 2-4 пунктов до тех пор, пока все не будет готово.

Это ключевые шаги, которые позволят вам активно работать с контентом для Pocket Edition. А теперь давайте углубимся в каждый из этих шагов, чтобы понять все детали процессов.

Шаг 1 – поиск шаблона для будущего набора

Существует несколько мест, где вы можете найти шаблон. К этой статье мы не будем прикреплять ссылки на загрузку, так как ссылка меняется с каждой версией. Вместо этого мы подскажем вам где можно найти и скачать их. Одним из вариантов является загрузка через файл APK. Чтобы найти его, необходимо открыть файл minecraft.apk как zip-архив и найти в нем папку resourse_packs. В данной папке выберите vanilla/client. Это и есть папка шаблона, который вам нужен.

Еще одним способом получения шаблона является банальный поиск в Google. Данный метод сам говорит за себя. Ну и последним местом, где вы можете найти шаблон, является сама игра. Вы можете просто использовать ее набор текстур (Например, Faithful PE как шаблон). Вы можете изменить эти файлы позже. Фактически, это три места, где можно найти шаблон для будущего набора.

Шаг 2 – получение или создание нужных текстур

На самом деле, именно этот шаг является самым длительным из всех 5. В зависимости от того, переносите ли вы текстуры или создаете самостоятельно, эта процедура может занять какое-то время. Всего существует 4 основных типа текстур:

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

Если Вы создаете текстуры самостоятельно: вероятно, этот вариант будет наиболее длительным. Вам нужно будет создать текстуры для всех файлов, которые Вы хотите изменить. Просмотрите весь объем шаблона и определите, какие из текстур Вы хотели бы изменить.

ВАЖНО: для создания текстур лучше всего использовать Photoshop или GIMP. Пожалуйста, не используйте Microsoft Paint. Как только нужные текстуры будут портированы или созданы, можно передвигаться к следующему шагу.

Шаг 3 – копирование текстур и файлов

Этот шаг периодически может запутать людей. Папки PC нужно скопировать, и иногда переименовывать. ВАЖНО: Есть несколько текстур, которые требуют особого внимания при портировании. Мы вернемся к ним позже.

Читайте также:  Опендиаг про крякнутый для андроид

Портирование файлов внутри папок или копирование созданных файлов:
PC Папка -> PE Папка:

  • textures/blocks –> textures/blocks
  • textures/items –> textures/items
  • textures/entity –> textures/entity
  • textures/font –> font
  • textures/gui –> textures/gui
  • textures/painting–> textures/paining (нужно переименовать на kz.png)

Просто продолжайте всегда следовать этому шаблону для всех текстур.

Шаг 4 – запуск и отладка, исправление багов

Этот шаг позволит Вам узнать, правильно ли работают все текстуры. Просто откройте Вашу игру и посмотрите, какие текстуры работают, а какие нет. Благодаря этой проверке Вы сможете определить конкретные файлы, с которыми наблюдаются проблемы. Как мы уже говорили выше, есть несколько файлов, которые требуют особого внимания. Большинство из них мы указали ниже и прикрепили информацию о том, что с ними нужно делать. Этот шаг актуален только для случаев портирования текстур.

textures/blocks/fire.png (все файлы с наличием слова «огонь»). Переименуйте все названия так, как в версии Vanilla.

textures/blocks/lava.png (все файлы с наличием слова «лава»). Переименуйте все названия так, как в версии Vanilla.

textures/blocks/water.png (все файлы с наличием слова «вода»). Переименуйте все названия так, как в версии Vanilla.

textures/blocks/portal.png. Переименуйте все названия так, как в версии Vanilla.

textures/items/splash potions – Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/items/potions – Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/items/arrows – Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/items/spawn eggs – Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/blocks/piston (все файлы с наличием слова «поршень»)- Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/entity/pistonarm/pistonarm – Нужно создать Ваши собственные текстуры. PC версия использует другой формат.

textures/blocks/grass_side.png – если в игре у Вас появляется странный зеленый блок, добавьте специальный Альфа слой, согласно инструкции из этого твиттер-сообщения: https://twitter.com/MCPEDL/status/757527227181465600 (Спасибо DLJohn за добавление этого шага).

Это все проблематичные файлы. По крайней мере те, с которыми чаще всего возникают проблемы. Теперь можно переходить к последнему шагу.

Шаг 5 – повторение шагов 2-4

В процессе работы с текстурами Вам может понадобиться повторение процедур, которые указаны в шагах со 2 по 4. То есть, Вам нужно будет портировать или создавать новые текстуры, копировать их, проверять на работоспособность. И так до тех пор, пока абсолютно весь набор не будет работать идеально. Но и после этого есть дополнительные заметки, о которых хотелось бы сказать.

Дополнительно:

Чтобы играть со своим окончательным набором, можно оставить его в папке. Но если Вы хотите распространять его, необходимо поместить все в .zip файл или преобразовать в .mcpack. Мы рекомендуем использовать архивирование в .zip файл, так как его загрузка в игре происходит гораздо быстрее в самой игре.

Однако стоит отметить, что пользователи iOS могут получить больше преимуществ от .mcpack, так как папка в .zip архиве может повредиться. Чтобы создать .mcpack файл, нужно создать файл pack.zip (можете заархивировать что-либо). Затем перенесите файлы набора текстур в этот архив. Когда все будет готово, переименуйте формат архива из .zip в .mcpack. Все готово.

Это все основы работы с созданием и портированием наборов текстур для Pocket Edition.

Источник

Изучаем OpenGL ES2 для Android Урок №4. Текстуры

Перед тем как начать

» Если вы новичок в OpenGL ES, рекомендую сначала изучить предыдущие 3 урока: раз / два / три
» Основы кода, используемого в этой статье, взяты отсюда и отсюда.

Результатом данного урока будет дельфин прыгающий над поверхностью моря.

Немного о текстурах

Текстура — это растровое изображение, которое накладывается на поверхность полигональной модели для придания ей цвета, окраски или иллюзии рельефа. Использование текстур можно легко представить себе как рисунок на поверхности скульптурного изображения.

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

Качество текстурированной поверхности определяется текселями — количеством пикселей на минимальную единицу текстуры. Так как сама по себе текстура является изображением, разрешение текстуры и её формат играют большую роль, которая впоследствии сказывается на быстродействии и качестве графики в приложении.

Текстурные координаты

В OpenGL координаты текстур задают обычно в координатах (s, t) или (u,v) вместо (х, у). (s, t) представляет собой тексель текстуры, которая затем преобразуется в многоугольник.

В большинстве компьютерных координатных систем отображения, ось Y направлена вниз, а Х – вправо, поэтому верхний левый угол соответствует изображению в точке (0, 0).

Надо помнить, что у некоторых андроид системах память будет работать только с текстурами, стороны которых кратны 2 в степени n. Поэтому нужно стремиться, чтобы атлас с текстурами был соответствующих размеров в пикселях, например, 512х512 или 1024х512. Также, если вы не будете использовать POT текстуру (POT – Power Of Two, то есть степень двойки), вы не сможете применить тайлинг или автоматическую генерацию мипмапов. В данном случае под тайлингом понимается многократное повторение одной текстуры. Помните, правый нижний угол всегда имеет координаты (1,1), даже если ширина в два раза больше высоты. Это называется нормализованными координатами.

Читайте также:  Как узнать где человек по геолокации андроид без его согласия

В приложениях нередко используется множество маленьких текстур, причём переключение с одной текстуры на другую является относительно медленным процессом. Поэтому в подобных ситуациях бывает целесообразно применение одного большого изображения вместо множества маленьких. Такое изображение называют текстурный атлас (англ. Texture atlas). Под-текстуры отображаются на объект, используя UV-преобразование, при этом координаты в атласе задают, какую часть изображения нужно использовать.

Так как в нашем приложении есть три текстуры (небо, море и дельфин), они объединены в один атлас размером 1024х1024 формата png.

Как вы видите, я добавил еще одно изображение дельфина (в правом нижнем углу). Потом можно поиграться, и подключить его вместо того, что слева. Данный атлас сделан очень плохо, так как осталось много свободного места. Существуют алгоритмы и программы, которые позволяют упаковать изображения оптимальным образом. Например, как на фото.

Вес (размер занимаемой памяти) текстуры можно определить таким способом: байт умножить на пиксель высоты и пиксель ширины, таким образом 32-битная текстура размера 1024 на 1024 занимает 4*1024*1024 = 4’194’304 байт.

16-битная текстура 1024 на 1024 займет уже только 2Мб, так что стоит подумать – стоит ли использовать 32-битные изображения или нет.

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

В данном уроке будем использовать только метод GL_TEXTURE_2D, который позволяет надеть текстуру на плоскость (есть еще GL_TEXTURE_CUBE_MAP, который работает с текстурой развернутого куба, состоящей из 6-ти квадратов).

Как надеть текстуру?

Прежде чем надевать, выясним на что.

Один прямоугольник (состоящий из двух треугольников) будет лежать в плоскости х0у, на него наденем текстуру неба. Для этого в методе private void prepareData() класса OpenGLRenderer создадим массив координат float[] vertices, куда занесем координаты не только треугольников, но и координаты соответствующей текстуры.

Первые три числа строки — координаты левого верхнего угла неба (-2, 4, 0), следующие два числа – координаты точки текселя (0,0), которые соответствуют нашей вершине треугольника. Обратите внимание на вторую точку (вторая строка), которая совпадает с левым нижним краем неба (-2, 0, 0), для нее координаты точки текселя (0, 0.5f), т.е. s = 0 (левый край текселя), а t = 0.5, так как текстура неба занимает по вертикали только половину текселя. Потом задаем третью точку (верхний правый край неба) и четвертую точку, чтобы нарисовать два треугольника методом GL_TRIANGLE_STRIP (смотри предыдущий урок).

Вторую плоскость (море) я сначала решил сделать перпендикулярно первой (небу), но потом несколько увеличил угол, понизив переднюю кромку моря для красоты фронтального вида на устройстве.

Обратите внимание, как изменились координаты, вырезающие нам из атласа море. Изображение дельфина я разместил на плоскость, которая параллельна небу и сдвинута на нас по оси 0Z на 0,5 единиц.

Если возникнет желание поменять дельфина на другого, то это нужно сделать именно здесь. Итак, мы прошли первый шаг и сделали соответствие между вершинами треугольников и точками текселя.

Второй шаг или, как загружаются текстуры

Прежде, чем описать загрузку текстур, нужно разобраться с таким понятием, как текстурный слот. Именно к нему мы подключаем текстуру, с помощью его можем производить с ней разные манипуляции и менять её параметры.

Выбрать текущий слот для работы можно так:

где GLES20.GL_TEXTUREx – номер выбранного слота, например GLES20.GL_TEXTURE0,
константы прописаны для 32 текстур (последняя GL_TEXTURE31).

Для подключения текстуры к слоту используется процедура

Где: первый параметр – тип текстуры, второй – ссылка на текстуру.

Эта процедура прикрепляет текстуру к текущему слоту, который был выбран до этого процедурой GLES20.glActiveTexture().

То есть для того чтобы прикрепить текстуру к определенному слоту нужно вызвать две процедуры:

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

Как только мы поместили наш графический файл texture.png в папку ресурсов проекта drawable, система автоматически присвоила ему номер id (идентификатор ресурса — это целое число, которое является ссылкой на данный ресурс). Идентификаторы ресурсов хранятся в файле R.java.

В классе TextureUtils есть метод loadTexture. Этот метод принимает на вход id ресурса картинки, а на выходе возвращает id созданного объекта текстуры, который будет содержать в себе эту картинку.

Читайте также:  Изменить название сети андроид

Итак, вначале передаем в качестве аргументов контекст и идентификатор ресурса графического файла public static int loadTexture(Context context, int resourceId) <

Потом создаем пустой массив из одного элемента. В этот массив OpenGL ES запишет свободный номер текстуры, который называют именем текстуры textureIds

Потом генерируем свободное имя текстуры, которое будет записано в textureIds[0]
glGenTextures(1, textureIds, 0);

Первый параметр определяет, как много объектов текстур мы хотим создать. Обычно создаем всего одну. Следующий параметр — имя текстуры, куда OpenGL ES будет записывать id сгенерированных объектов текстур. Последний параметр просто сообщает OpenGL ES, с какой точки массива нужно начинать записывать id.

Проверяем, если ничего не записано, то возвращаем ноль.

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

Загружаем картинку в Bitmap из ресурса

Объект текстуры по-прежнему пуст. Это значит, что у него по-прежнему нет никаких графических данных. Загрузим наше растровое изображение. Для этого нам необходимо сначала привязать текстуру. В OpenGL ES под привязкой чего-либо понимается, что мы хотим, чтобы OpenGL ES использовал данный конкретный объект для всех последующих вызовов до тех пор, пока мы снова не изменим привязку. В данном случае мы хотим привязать текстуру объекта. Для этого мы используем метод glBindTexture(). Как только привяжем текстуру, сможем управлять ее свойствами, такими как данные об изображении.

Выбираем активный слот текстуры

Делаем текстуру с именем textureIds[0] текущей

Создаем прозрачность текстуры. Если не написать эти две строки, наш дельфин будет на черном непрозрачном фоне, как на скриншоте выше.

Есть еще одна деталь, которую нам необходимо определить перед тем, как мы сможем использовать объект текстуры. Она связана с тем, что наш треугольник может занимать больше или меньше пикселов на экране по сравнению с тем, сколько пикселов есть в обозначенной зоне текстуры. Например, на экране мы можем использовать гораздо больше пикселов по сравнению с тем, что перенесли из зоны текстуры. Естественно, может быть и наоборот: мы используем меньше пикселов на экране, чем на выделенной зоне текстуры. Первый случай называется магнификацией, а второй — минификацией. В каждом из них нам необходимо сообщить OpenGL ES, как нужно увеличивать или уменьшать текстуру. В терминологии OpenGL ES соответствующие механизмы называются фильтрами минификации и магнификации. Эти фильтры являются свойствами объекта текстуры, как и сами данные изображения. Чтобы их установить, необходимо сначала проверить, привязан ли объект текстуры с помощью glBindTexture(). Если это так, устанавливаем их следующим образом:

О влиянии фильтров на изображение можно почитать здесь.

Переписываем Bitmap в память видеокарты

Удаляем Bitmap из памяти, т.к. картинка уже переписана в видеопамять

И напоследок снова вызываем метод glBindTexture, в котором в слот текстуры GL_TEXTURE_2D передаем 0. Тем самым, мы отвязываем наш объект текстуры от этого слота.

Еще раз, мы сначала разместили объект текстуры в слот GL_TEXTURE_2D,

потом выполнили все операции с ним, затем освободили слот. В результате объект текстуры у нас теперь настроен, готов к работе, и не привязан ни к какому слоту текстур.

Доступ к текстурам из шейдера

В предыдущих уроках мы писали шейдеры в самом теле программы в виде объектов строки. Удобно вынести их в отдельный ресурс, как предложено тут. Таки образом, в папке проекта res создается папка raw, в которую закладываются два файла vertex_shader.glsl и fragment_shader.glsl. Вот их содержимое

Здесь мы, как и ранее, вычисляем итоговые координаты (gl_Position) для каждой вершины с помощью матрицы. А в атрибут a_Texture у нас приходят данные по координатам текстуры, которые мы сразу пишем в varying переменную v_Texture. Это позволит нам в фрагментном шейдере получить интерполированные данные по координатам текстуры.

Вначале устанавливаем среднюю точность расчетов

В GLSL существует специальный тип униформы, который называется sampler2D. Сэмплеры можно объявлять только во фрагментном шейдере

В нем у нас есть uniform переменная u_TextureUnit, в которую мы получаем номер слота тектуры, в котором находится нужная нам текстура. Обратите внимание на тип переменной. Напомню, что из приложения мы в эту переменную передавали 0, как integer. Т.е. переданное в шейдер число (а нашем случае 0) указывает на какой слот текстуры смотреть.

В varying переменную v_Texture приходят интерполированные координаты текстуры из вершинного шейдера. И шейдер знает, какую точку текстуры надо отобразить в текущей точке треугольника.

Осталось использовать координаты текстуры и саму текстуру, чтобы получить итоговый фрагмент. Это выполнит метод texture2D, и в gl_FragColor мы получим цвет нужной точки из текстуры.

Исходники скачиваем отсюда. Удачи вам и всего хорошего!

Источник

Оцените статью