Скорпіон у бинтах
Надійшов знімок екрана з чужої кампанії про пустелю. Підпис під картинкою: «поранений піщаний скорпіон». На картинці — м’язистий чоловік у бинтах і каптурі, стоїть прямо, обличчям до глядача. До нього приробили клешні та хвіст із жалом.
Рід — це граматика
У кожного персонажа є поле gender. Заведене воно ось навіщо:
Russian adjectives agree with the noun’s gender, so “friendly” and “alive” have no single correct rendering without it: дружелюбен / дружелюбна, жив / жива.
З імені рід не вивести, тому Майстер оголошує його прямо. Поле граматичне, і в настановах Майстрові написано саме це.
А малювальник читав те саме поле як анатомію:
GENDER_WORD = {"m": "man", "f": "woman", "n": "creature"}
Кожен запит до моделі починався рядком Subject: a hulking and massive man., і вже під ним ішов опис скорпіона.
«Скорпіон» — чоловічого роду. Майстер поставив m, і мав рацію: інакше попливуть усі прикметники навколо персонажа. Середній рід виглядає виходом — він дає «creature» замість «man», — але дістатися до нього майже неможливо: дракон і вовк чоловічого роду, змія жіночого. Немає такого значення, за якого і текст виходить правильний, і картинка.
Тож лагодити треба було не настанови, а модель даних.
Вісім картинок
Перевіряли вимірюванням, а не міркуванням: вісім рендерів на справжньому стилі світу та з його справжнім якорем. Опис в усіх однаковий, і в ньому жодного слова про одяг — лише хітин, вісім ніг, клешні, хвіст.
Контроль — теперішній код, нічого не змінювали — повернув чоловіка в каптурі, рясі та поясі. Ані каптура, ані ряси в описі не було. Вони прийшли з рядка Subject: a … man і з матеріалів самого світу. Тобто опис, який написав Майстер, був ні до чого — винною виявилася дорога, якою він їхав.
Далі з’ясувалися дві речі, і обидві скоротили роботу. Змінювати треба рівно одне — іменник. І вистачає загального слова: «велика тварина, звір, не людина», без породи. Породу модель і так бере з опису. Отже, не потрібно ані нового поля для перекладу, ані дроблення кешу картинок за мовами.
Так з’явилося поле morphology зі значеннями humanoid і beast. Значення за замовчуванням не потрапляє ні в запит, ні в ключ картинки, ні у файл-опис поруч із нею — тому жоден уже намальований портрет не перемальовується.
Вимірювання було правильне, а висновок — ні
За кілька годин у грі з’явився кістяний дракон. Позначений beast, поле дійшло куди слід, запит до моделі містив «звір, не людина» — а на картинці двоногий, із квадратними плечима, у броні, вдягненій як кіраса.
Скорпіон нічого не довів про дракона.
Рамка кадру каже:
The entire figure from head to feet, standing upright and facing the viewer
У скорпіона немає варіанта «стати прямо» — цій настанові немає за що зачепитися. У дракона є. І в одному запиті водночас опинилися «звір, не людина» — і чотири вказівки в інший бік: стати прямо; ноги і ступні мають бути видні; матеріали світу, де перелічені сорочки, фартухи та чоботи; і рядок про те, що це «один із людей цього світу».
Проти дракона четверо переважують.
Замінили один рядок — на «у власній поставі й анатомії, як ця істота насправді стоїть і рухається, не в людській позі». Двоногий став чотириногим. Броня нікуди не зникла, але лягла на тварину як попона, а не як кіраса на груди: опис її вимагав, і вимагав законно.
Не описуйте картинці її вміст
На другому заході ми наступили на власні граблі.
У нових правилах кадру було написано: «істота повністю, від краю до краю, у своєму справжньому масштабі». Слимак, якого опис називає величезним, повернувся в колі селян із смолоскипами. Модель попросили показати справжній масштаб — вона сумлінно додала те, з чим цей масштаб можна порівняти.
Правило тепер каже, що істота в кадрі одна, і нічого не каже про її розмір.
Обидві помилки однакової форми, і це єдиний висновок, який варто винести:
Фраза, яка описує, що має бути на картинці, — це запрошення домалювати щось іще. Заборонили одяг — тварин вдягли в бинти (матеріали світу сперечалися з рамкою, і модель поділила різницю навпіл). Попросили масштаб — навколо тварини зібрали натовп. Справа рамки — будова тіла та кадрування, решта не її.
Знайшлося принагідно
Поки все це перевіряли, з’ясувалося, що в редакторі світів не можна зберегти жодного персонажа з готового світу — взагалі жодного поля. Сервер відповідав помилкою на будь-яке збереження.
Причина — у перевірці, яка передавала id двічі: один раз з адреси, другий раз із самих даних, бо в усіх записів, що потрапили до бази через розкладку готового світу, id лежить і всередині даних теж. Працювали лише персонажі, заведені просто в редакторі: у них дані приходять без id.
Тести цього не бачили з прикрої причини. Кожен із них спершу створює собі персонажа — тим самим запитом. Тобто готує дані тим способом, який працює, і зламатися правильним способом уже не може. Нова перевірка тому бере запис із готового світу, а не створює власний.
Полагодження — один рядок. Скільки цей дефект прожив, невідомо.
Що далі
Морфологія поки що знає рівно два значення: людина і звір. Крилатих, змієподібних і безформних у списку немає навмисно — за кожним значенням має стояти перевірена картинка, а не здогад.
У коміксі звірі й досі малюються людьми: там своя рамка, свої ключі та своя сцена, і це окрема робота.