Към съдържанието
PN Scripts

Игри

Един художествен стил от различни пакети с CC0: пребоядисване на палитрите и олекотяване на моделите за уеб

  • PN Scripts
  • 8 мин четене

Безплатните пакети с ресурси под лиценз CC0 са едно от най-хубавите неща за малките екипи, които правят игри. Те обаче създават и един от най-разпознаваемите изгледи в игрите: рицар от един пакет, дървета от друг, къща от трети, всеки със свои цветове и ниво на детайл. Играчите наричат това „сглобка от готови ресурси“, а правилата за качество на сайтовете за игри искат последователен художествен стил точно по тази причина. В нашите 3D браузърни игри Faultwarden и Billowpost героите и предметите идват от пакети с CC0, но всяка игра изглежда като себе си. Тази статия показва как: проверката на лиценза, малък скрипт, който пребоядисва палитрите на пакетите, и стъпка в изграждането, която олекотява моделите за уеб.

#Решете какво идва от пакети и какво остава ваше

Първото решение е по-важно от всеки скрипт. И в двете игри пакетите дават само герои и предмети: хора, врагове, дървета, скали, къщи, сандъци. Всичко, което определя вида на сцената, е наше: теренът, небето, морето от облаци, водата, визуалните ефекти, интерфейсът, иконите, логото, корицата за магазина и цялата музика и звук, които се синтезират в самата игра. Земята и небето заемат по-голямата част от екрана, така че когато те са ваши и последователни, заетите предмети стоят във вашия свят, вместо да го определят.

От това следва второ правило: едно семейство пакети на игра. Faultwarden ползва три пакета на KayKit; Billowpost ползва три комплекта на Kenney. Никоя игра не смесва двете семейства и никой пакет не се дели между двете игри, така че те не приличат и една на друга.

#Проверете лиценза в деня на изтеглянето и пазете доказателство

CC0 означава, че авторът се е отказал от правата си, доколкото законът позволява: можете да ползвате, променяте и продавате творбата, а посочването на автора не е задължително. Това е най-простият лиценз, но два навика пак си струват.

  • Прочетете лицензионния файл в самото изтегляне, в деня на изтеглянето. Лицензите се променят. През 2026 г. поне един популярен автор на безплатни ресурси премина от CC0 към собствен лиценз с допълнителни условия и ние оставихме тези пакети настрана, вместо да следим два набора условия. Важи лицензът, който е дошъл с файловете, които наистина ползвате.
  • Запишете го. Всяка игра има файл с бележки за чужди материали, в който са всеки пакет, авторът му, адресът на източника, датата на изтегляне, текстът на лиценза и за какво се ползва пакетът. За Billowpost той пази и контролната сума на всеки изтеглен файл, така че по-късно да можем да докажем точно коя версия сме ползвали.

Посочваме авторите, въпреки че CC0 не го изисква, и никога не ползваме техните лога или имена в нашата марка. Пакет, ползван „само за предмети“, е записан с това ограничение, например „дървета, скали, руини; никога шестоъгълните му плочки“, защото шестоъгълните плочки биха направили арената да изглежда като друг вид игра.

#Защо пребоядисването на текстура пребоядисва модела

Много стилизирани пакети с малко полигони, включително тези на KayKit и Kenney, които ползваме, не оцветяват всеки модел отделно. Всички модели в пакета делят една малка текстура палитра, решетка от цветни квадратчета, всяко с лек преход, и всяка стена на всеки модел сочи към едно квадратче. Сменете квадратчето и всяка повърхност, която го ползва, сменя цвета си във всички модели наведнъж. Така цял пакет може да се пребоядиса със скрипт за изображения, без да се отваря 3D редактор.

Обща смяна на оттенъка би оцветила в зелено и лицата, и кожата, затова скриптът работи с маски. Той превръща палитрата в оттенък, наситеност и яркост, избира квадратчетата на един материал по диапазони и мести само тях:

H, S, V = hsv(Image.open(f"{ADV}/rogue_texture.png"))

green = (H > 0.22) & (H < 0.5) & (S > 0.2)                 # наметалото
brown = (H > 0.02) & (H < 0.11) & (S > 0.25) & (V < 0.75)  # кожата на облеклото

WAYS = {'teal': (0.49, 0.62, 0.95), 'ember': (0.015, 0.72, 0.95), 'moss': (0.29, 0.55, 0.85)}
for name, (th, ts, tv) in WAYS.items():
    h = np.where(green, th, H)
    s = np.where(green, np.clip(S * ts / 0.75, 0, 1), S)
    v = np.where(green, np.clip(V * tv, 0, 1), V)
    h = np.where(brown, 0.065, h)          # кожата става медна във всеки вариант
    save(rgb(h, s, v), f"oda_{name}")

Умножаването на наситеността и яркостта, вместо замяната им, пази собствените стъпки на сенките в пакета: светлите и тъмните квадратчета на наметалото остават светли и тъмни, само в нов цвят. Кожата на лицето и металът не попадат в нито една маска, така че пазят оригиналните си квадратчета.

Във Faultwarden героят получава шест цветови варианта от един модел, които играчът отключва като награди. Враговете в оригиналния пакет са скелети; нашият скрипт превръща костта в бледа плоча, плата в мътно виолетово, а топлите акценти в жарав цвят, така че те се четат като каменните обвивки от нашата история, а не като скелетите на пакета. Главният противник ползва същия модел с по-тъмен базалт и по-ярка жар. Пакетът с предмети само е затоплен и леко приглушен към нашата художествена посока. Корицата на тази статия показва палитра преди и след.

#Олекотяване и компресиране за браузъра

Пакетът е направен за всяка възможна игра, затова носи много повече, отколкото трябва на една. Скрипт за изграждане с glTF-Transform превръща пакетите в малките файлове, които играта зарежда:

  1. запазват се само мрежите и анимациите, които играта ползва, а общите анимации отиват в един файл библиотека, който ползва всеки герой;
  2. оригиналните текстури се заменят с пребоядисаните, смалени до 512 пиксела и записани като WebP;
  3. повтарящите се върхове се сливат, дублираните данни и всичко неизползвано се махат, позициите и нормалите се квантуват, а геометрията се компресира с meshopt.

Всички модели във Faultwarden, с анимациите и текстурите, са около 1,4 MB, а цялата игра е около 2,3 MB. Всеки цветови вариант на героя е отделна текстура от около 6 KB, така че шест облика струват по-малко от една снимка. Суровите пакети изобщо не са в хранилището на играта: скриптът преизгражда всичко от тях при нужда, а хранилището пази само нашите текстури и резултата.

#Осветете го като един свят

Последната стъпка е в изобразяването. Всеки модел, зает или наш, стои под едно и също слънце, една и съща светлина от небето, един и същ цвят на мъглата и едно и също тоново картографиране и хвърля сянка върху нашия терен. Материалите от пакетите идват със свои стойности за грапавост и светене; ние ги задаваме сами, например матова повърхност и слабо синьо-зелено собствено светене на героя, за да се чете той ясно и върху тъмна или пъстра земя. Малки неща довършват работата: туфи трева, които са част от нашите каменни плочи и падат с тях, и прах и частици в цветовете на играта. Когато осветлението е общо, играчите спират да виждат откъде е дошъл моделът.

#Списък за проверка

  • Едно семейство пакети на игра, само за герои и предмети.
  • Теренът, небето, ефектите, интерфейсът и кориците са направени от вас.
  • Лицензът е прочетен в изтеглянето и записан с дата, източник и контролна сума.
  • Текстурите палитри са пребоядисани с маски във вашата палитра.
  • Моделите са олекотени и компресирани; суровите пакети стоят извън хранилището.
  • Общо осветление, мъгла и тоново картографиране; стойностите на материалите са зададени от вас, а не от пакета.

За картинки за магазина, направени от истинската сцена, а не от готовите изображения на пакетите, вижте картинки за страницата на игра в itch.io, Game Jolt и Steam. Ако работите в Blender, а не с код, статията ни за пакетен експорт на сцени от Blender към GLB и FBX описва страната на износа. Двете игри са безплатни и са обявени като „Очаквайте скоро“ в каталога с игри на PN Scripts.

#Често задавани въпроси

Длъжен ли съм да посоча авторите на ресурси с CC0?

Не, CC0 не го изисква. Все пак е добра практика да ги посочите в бележките и на страницата в магазина, без да ползвате логата им и без да внушавате, че те одобряват играта ви.

Мога ли да продавам игра, в която има модели с CC0?

Да. CC0 позволява търговска употреба и промени. Не можете само да претендирате за изключителни права върху непроменените ресурси, защото всеки друг също може да ги ползва.

Как да пребоядисам цял пакет с малко полигони наведнъж?

Ако моделите в пакета делят една текстура палитра, пребоядисайте нея. Изберете квадратчетата на всеки материал по диапазони на оттенък, наситеност и яркост и местете само тях, така че кожата и металът да запазят цветовете си.

Как да избегна вида на сглобка от готови ресурси?

Направете сами големите повърхности като терена, небето и интерфейса, ползвайте едно семейство пакети, пребоядисайте ги във вашата палитра и осветете всичко с едно и също слънце, мъгла и тоново картографиране.

#Източници

Коментари

Коментари

Напишете първия коментар.

Оставете коментар

Следваща стъпка

pnscripts.com/bg/contact

Пишете на екипа

Попитайте за статия или ни разкажете за проект, който искате да изградим. Отговаряме до един работен ден.

Пишете ни

Семейството PN Scripts

Другите сайтове на PN Scripts

Хостингът, игрите и блогът имат свои сайтове, поддържани от същата компания.

  • pnscripts.com

    PN Scripts

    Софтуерно инженерство

    Уеб и мобилни приложения и API по поръчка, плюс нашите продукти и плъгини с отворен код.

  • games.pnscripts.com

    Игри

    Игри и игрови сървъри

    Домът на игрите на PN Scripts: безплатни браузърни игри, които се играят веднага, а игровите сървъри предстоят.

  • hosting.pnscripts.com

    Хостинг

    Хостинг и инфраструктура

    Споделен хостинг, KVM VPS, самостоятелни сървъри и домейни от същата компания, която изработва проекта ви.

  • blog.pnscripts.com

    Блог

    Статии и бележки

    Практични статии за разработка на софтуер, хостинг, отворен код и игри, писани от хората, които ги създават.

    Вие сте тук