От нарезки до среза

Ядро «Ролльни» в инженерных схемах: как выбор нарезки задаёт форму куска, что с ним делает раскладка, что — скрутка, и что в итоге показывает срез. Документ правится вместе с математикой; расхождение ловит сторож в state-check. ⚠ Сверено 05.09. Сторож с 05.09 падал на загрузке (URLSearchParams в песочнице vm, пришло с PR #172) — починено в PR #176, но пока он лежал, часть чисел на этой странице разъехалась и была поправлена руками. Кроме того у игры теперь второй набор снимков каталога — play/core-v2/units.js, в миллиметрах, — и он со state-check не сверяется (задача #174).

ПроектРолльня
Единица1 ед. = 5 мм
База на схемахХосомаки
Профилипо формуле кода
Ревизия03.09.2026
ЧАСТЬ I

Что мы кладём

кусок как тело
Ф-1

Нарезка задаёт форму

ЗАГОТОВКА семь классов реза в каталоге

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

⚠ Третий рез — косой — в игре пока не у кого. Вопрос владельца 01.09: «это у чего такой?» Ответ: ни у чего. Профиль ломтик (линза, выпуклая с обеих сторон) в коде есть, но ни одна начинка каталога его не использует — перепись по cut: брусок 8 · присыпка 5 · лист 4 · кружок 3 · паста 2 · сектор 1 · полумесяц 1 · полукруг 1 — пересчёт 05.09: брусок 9 · присыпка 7 · лист 4 · кружок 3 · паста 2 · сектор 1 · полукруг 1, всего 27 записей, а не 25. Класса полумесяц в каталоге нет ни одного: форма снята 01.09 вместе с CRESCENT_INNER/CRESCENT_HALF (geometry.js:515) и отображается в полукруг (geometry.js:528). Ломтика по-прежнему нет.

Сам овал ножом получить можно: косой рез цилиндра даёт эллипс, это 斜め切り. Так что фигура учит верному приёму — просто игра его пока не предлагает. Чертёж здесь опережает каталог, и это надо либо догнать (завести начинку с косым резом), либо сказать вслух, что рез показан как принцип.

Чего здесь ещё нет: японских техник нарезки с их настоящими размерами — сколько миллиметров у 拍子木切り, что даёт 半月切り, как режут каждую нашу начинку в реальной практике. ждёт разбора источников · задачи #46 «выбор нарезки», #10 «разобрать каждую начинку»
Ф-2

Сечение куска: два контура

разрез поперёк куска

Кусок описан одним контуром, у которого две границы. Верхняя — cutTop(lu), нижняя — cutLow(lu), где lu отсчитывается поперёк куска от −0,5 до +0,5, а высота меряется в долях собственной толщины куска.

Ребро не бывает острым — это было НАШЕ допущение, и оно снято 01.09. Фаска ARRIS обнулена: справочник приёмов нарезки разобран целиком (docs/ingredients.md, раздел 6-бис) — двадцать три способа, и ни в одном не сказано, что ребро выходит скруглённым, везде описан прямой ход ножа. Наблюдение, из которого фаска выросла («у маки края не бывают острыми»), верно, но относится к готовому роллу, где начинку обжимает рис, а не к куску до скрутки. Скругление, если оно нужно, должно появляться в намотке — issue #125.

Нижний контур задаёт сам профиль. Зеркало — не общее правило с исключениями, а поведение отдельных профилей: у бруска и кружка низ действительно зеркалит верх, у полукруга и сектора он () => 0 (плоское дно), у полумесяца — своя дуга () => 0. Каждое записано в самом профиле, а не выведено допущением снаружи; флагов round / lens / flatBottom как способа выбрать форму больше нет — форму задаёт класс нарезки cut. Читаться они при этом ещё умеют: сохранённые роллы в альбоме и ссылки на пазл записаны до перехода, а flatBottom вдобавок остался ручным снятием зеркала для форм без своего класса — им и рисует чертёж Ф-4 ниже. Блок формы лежит ниже в этом же файле — можно сверить.

Ссылка «см. Ф-6» вела не туда и тоже исправлена: симметрии посвящена Ф-4, а Ф-6 — «Кусок на листе». Ошибка от того, что у фигуры Ф-4 идентификатор svg id="fig6": ссылались на имя в коде вместо номера на странице.

Ф-3

Классы нарезки: что каталог различает и что описано телом

что каталог уже различает

В каталоге у каждой начинки записан класс нарезки. Телом описаны шесть: брусок, кружок, ломтик, полукруг, сектор и четверть круга (いちょう切り) — у каждого своя формула сечения. Лист — это тот же брусок с очень малой толщиной.

Присыпка занимает место, но не бугрит рис — это две разные вещи, и их легко свалить в одну. Пометка paint верна: дэмбу размазывают (「塗るようにおいて」), а не кладут бруском. Но «размазан» не значит «не существует»: у слоя 30 × 5 мм есть площадь, и в бюджет ядра он входит. Рис при этом не поднимается — тонкий слой лист не бугрит.

Сектор (огурец 「縦6〜8等分」), полукруг (раскрытая креветка) и полумесяц (долька авокадо 「縦6等分のくし切り」) — все три первые два пришли из японских источников; форма «полумесяц» снята из кода 01.09, а авокадо стал бруском 10 × 10. ⚠ Один и тот же огурец с 05.09 показывается в двух формах: классический движок держит сектор 14 × 9,9 мм (catalog.js:305), а фикстура F02 в режиме ?v2 — брусок 8 × 8 (core-v2/units.js:113). Раскладка игрока в ?v2 берёт живой каталог, то есть сектор, — расхождение осталось только у фикстуры (задача #174). И паста не особый случай рисования: у неё теперь есть тело — полукруг, потому что выдавленный жгут лежит НА рисе и выпуклого низа у него быть не может.

Это честная картина, а не упрёк: пока игра про твёрдые куски, особый случай дешевле общего закона. Но как только паста должна вытеснять рис, затекать в углубление и по-своему выглядеть на срезе — особый случай перестаёт работать.

Открытый вопрос: нужна ли пасте своя геометрия — слой переменной толщины вместо куска — и что тогда считается её «сечением». задачи #66 «пасты и присыпки как классы материала», #74 «плейсмент и классы»
Ф-4

Что допущение о симметрии запрещает

кружок и он же с плоским дном

Слева — кружок, каким его описывает модель сейчас: низ зеркалит верх. Справа — тот же верхний контур, но с плоским дном: купол, лежащий на рисе. Так выглядит половинка авокадо и ломтик рыбы кожей вниз.

Разница не косметическая: площадь сечения 0,785 → 0,893 — это нижняя долька, которую зеркало отрезало.

⚠ Обе доли — про кружок, целый и со срезанным дном, а не про класс полукруг. У полукруга доля тела ровно 0,785 — та же, что у кружка, потому что его профиль это полный купол (top = √q, low = 0), а не кружок с плоским низом. Замер cutFill: кружок и полукруг дают одинаково 0,7854, а 0,8927 — только связка кружок + плоское дно, которую этот чертёж и рисует.

Форму выбирает класс нарезки (cut), и у каждого своя пара функций верх/низ. Картинка слева — как модель описывает именно кружок, справа — как она же описывает кружок с плоским дном. Оба существуют одновременно.

Ф-5

Чего в теле ещё нет

профиль вдоль куска · задача №10

Тело — призма

Сечение задано поперёк, а вдоль куска оно постоянно. Значит сверху кусок — прямоугольник, и в каком месте по v ни режь, фигура на срезе одна и та же. Скруглённые торцы, которые рисовались раньше, были враньём: домен тоже считает кусок прямоугольным, и срез у самого торца показал бы вещество там, где рисунок обещал пустоту.

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

ЧАСТЬ II

Как мы это кладём

раскладка и виды
Ф-6

Кусок на листе

вид сверху · хосомаки, полулист 105 × 190 мм

Две оси листа. u — вдоль скрутки: этот размер станет длиной дуги на спирали. v — вдоль ролла: этот останется собой, вдоль него потом режут. Кусок узок по u и длинен по v — поэтому он и превращается в спираль полоской, а не пятном.

У каждой начинки в каталоге записаны wU — ширина вдоль u, hU — толщина, dv — какую долю длины ролла кусок занимает. Лосось 2,0 × 2,0 ед. = 10 × 10 мм — квадрат, по рецептам роллов クラシル 「クリームチーズとサーモンは1cm角の棒状に切ります」; авокадо там же и таким же бруском, 「アボカドは1cm幅に切ります」. Креветка 2,0 × 1,0, но dv = 0,30 — коротышка, попадает не в каждый ломтик.

Калибр начинки следует за толщиной ролла, и источники это различают. Тэкка-маки — хосомаки, и там 白ごはん.com даёт 「サクを7〜8mm角の棒状に切る」; в роллах потолще калибр 1 см. Наш тунец так и стоит на 7,5 мм, лосось — на 10. Это то самое правило «размер куска ↔ диаметр ролла» из docs/kitchen-practice.md.

Ф-7

Откуда берётся вид сверху

взгляд отвесно вниз

Глаз сверху видит ровно верхний контур. В поперечной позиции lu луч зрения упирается в поверхность на высоте cutTop(lu) — той самой границе, что в Ф-1 была верхом фигуры. Поэтому вид сверху и вид в срезе не выводятся друг из друга — они делят этот контур.

Нижнюю границу сверху увидеть нельзя. Она попадает только в срез. Это и есть ответ на вопрос «почему форма среза следует из формы верха»: не следует. Следует ровно половина, вторую половину пока даёт допущение о симметрии.

Свет считается, а не рисуется. Наклон поверхности в точке даёт нормаль, нормаль даёт долю света. Валик светел посередине не потому, что там нарисован блик, а потому что там поверхность смотрит вверх.

Ф-8

Вид сбоку: модель против практики

разрез поперёк грядки · проверено источниками

Модель вдавливает в рис каждый кусок отдельно. Повара так не делают. Разбор японских источников (docs/kitchen-practice.md) показал: приёма «вдавить кусок» в языке рецептов нет вовсе — везде глагол のせる, «положить сверху».

Что есть на самом деле — 土手 (дотэ, «дамба»): дальний край и бока рисовой постели раскладывают выше, центр не вспучивают. Получается неглубокая чаша, сделанная поднятием бортика, а не выкапыванием ямы. Она и держит начинку по центру при скрутке. Углубление, если его вообще делают, — одно и широкое, под весь набор, и сделано до укладки.

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

Сомнение владельца подтвердилось. Механизм придётся заменить: вместо «каждый кусок продавливает свой след» — «постель имеет профиль-чаши, куски садятся в неё». Глубины и высоты бортика в источниках нет ни одной — это замеры, которые придётся делать самим. #74 «классы плейсмента» — открыт; #1 «карта высот» закрыт 03.09, #25 «топология урамаки» закрыт 31.08. Из соседних ссылок этой страницы закрыты также #15, #16, #19, #104, #114, #118, #129, #6, #46, #111 — идти по ним как по списку работ нельзя, открыты только #74 и #10 (сверено 05.09).
Ф-9

Раскладка кистью

ЗАГОТОВКА штрих кладёт, игра решает как

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

Штрих один, а что вдоль него ложится — зависит от выбранного: брусок ляжет одним телом, ломтики лосося — внахлёст, присыпка — россыпью, паста — сплошной лентой. Значит кисть = ингредиент + нарезка, и нарезка выбирается один раз на инструмент, а не на каждый кусок.

Модель к этому почти готова. Прямой штрих — это ровно один кусок: центр в середине штриха, поворот по его углу, длина по его длине. Кусок в модели и есть призма постоянного сечения, вытянутая вдоль своей оси; «доля длины ролла = 1» у большинства начинок буквально означает полосу во всю длину. Модель уже описывает мазки — их просто кладут по одному.

Что исчезает: перетаскивание куска, удаление выносом за лист, кнопка поворота, выделение отдельного куска. Ориентация перестаёт быть выбором и становится следствием жеста — это ровно тот же ход, каким свет перестал рисоваться руками и стал считаться из наклона поверхности (Ф-7).

Чего здесь ещё нет: самого штриха — ни один жест не реализован, любой кусок появляется по тапу. И обязательная часть: чем игрок исправляет неудачный штрих. Единица отмены должна стать штрихом, а не последним куском — без ответа на это кисть неиграбельна. задача #110 «раскладка кистью» · связано: #57 (правило становится законом укладчика), #46 (нарезка — часть инструмента), #6 (два жеста на одной поверхности)
ЧАСТЬ III

Что с ним происходит

скрутка и срез
Ф-10

Лист свернулся

спираль переменной толщины

Скрутка — замена координат, а не новая геометрия. Точка листа (u, v) едет на спираль: u превращается в длину дуги от сердцевины, толщина листа — в радиальную глубину. v не участвует вовсе, он вдоль оси ролла.

Шаг витка = уплотнённый рис + обёртка. У хосомаки это 1,4 / 1,19 + 0,02 = 1,20 ед. (6,0 мм): рис в ролле тоньше, чем на постели, потому что циновка выжимает воздух между зёрнами (#129). До 01.09 здесь стояло 1,42 — шаг ненабитого слоя: нори тоньше риса в семьдесят раз и на шаг почти не влияет — но именно она задаёт тёмную линию, по которой на срезе видно витки.

схема не в масштабе · замер модели 03.09: 1,19 витка, ⌀ 28,9 мм (хосомаки в нори, пустой лист)

Эталон в play/checks.js даёт те же 28,9 мм и 1,19 витка; у всех баз обороты лежат в 1,05–1,24. Последним диаметры УМЕНЬШИЛА постель: она перестала платить рисом за голую полосу у ближнего края, под которую уходит подворот. Нормировка намазки делилась на весь лист, а грядка лежит не от нуля — средняя толщина выходила на 5 % больше заявленной, и на столько же был лишний рис. Диаметр идёт как корень из площади, поэтому упал на 3 % (#166).

Ф-11

Обёртка задаёт шаг витка

пять обёрток, настоящие толщины

Шаг витка — это рис плюс обёртка, поэтому толщина обёртки прямо меняет диаметр ролла. Разброс огромный: нори 0,10 мм против гюхи 1,50 мм — в пятнадцать раз. Замер на хосомаки (31.08, после правки подворота): ⌀ 29,1 мм с нори против 31,9 мм с гюхи, витков 1,146 против 1,142.

Обёртка почти не меняет число оборотов — 1,146 против 1,142. Расходится диаметр, потому что шаг витка это рис плюс обёртка.

Обёрток пять, и все японские: блин и бисквитный рулет сюда не входят. Сладкий ролл при этом есть, его держит 求肥 (гюхи), лист из моти-муки с сахаром и сиропом. Сахар не даёт ему черстветь — потому его в вагаси и раскатывают в лист, чтобы заворачивать.

Открытый вопрос: рисовая бумага в этом списке — вьетнамская. В Японии её едят (生春巻き), но традиционной японской обёрткой она не является. Либо осознанное послабление, либо её место должны занять 湯葉 или лента дайкона 桂剥き. задача #111 «состав игры»

Честность чисел разная — и ни одна из пяти не замерена. Четыре помечены inferred прямо в каталоге. Пятая, нори, стояла с источником «FAO» — но разбор 31.08 показал, что FAO даёт габарит и вес, а толщину не называет. 0,10 мм выводится из 21 × 19 см и 3 г при разумной плотности, и это честный вывод, а не источник. Догадка, одетая в источник, хуже честной догадки.

Открытый вопрос: ЗАКРЫТО. У выбора обёртки нет интерфейса — поле в модели есть, задать его игрок не может. #13 закрыт 31.08, #98 закрыт 01.09 — оба ДО ревизии этой страницы. Ф-15 ниже про #98 так и пишет, а здесь вопрос стоял открытым: страница противоречила сама себе.
Ф-12

Деформация: чего скрутка ещё не делает

ЗАГОТОВКА жёсткое тело против податливого

Кусок уже едет по витку и потому изогнут — это модель делает, видно на Ф-13. Но едет он как жёсткое тело: сохраняет форму, только повёрнутую по дуге. В жизни он ещё и сминается прижимом, и прямоугольник становится бочкообразным сектором. Сегодня этого нет ни в каком виде.

Числа для этого нашлись, и они опрокидывают интуицию. Есть серия, где авокадо, тунец, тамаго и креветка измерены одним протоколом (Cureus 2024, open access): авокадо оказалось жёстче сырой рыбы и в 5,6 раза жёстче тамаго. «Авокадо мнётся сильнее всех» — это про спелое; магазинное плотное ближе к овощу.

Спелость сильнее, чем разница между продуктами. Авокадо при дозревании идёт 2290 → 160 кПа, падение в 14 раз — больше, чем разница между огурцом и мясом. Значит начинка это не число, а отрезок. А огурец за 9 суток меняет не жёсткость, а характер: деформация разрушения растёт, и он из хрустящего становится гнущимся. Свежий огурец не мнётся — он колется.

Чего в литературе нет: давления при скрутке маки не измерял никто — ни пищевая инженерия, ни производители суши-роботов. Прижим придётся назначить игровым параметром; из источников берётся только относительная податливость. И под эту шкалу не ложатся ни нори (лист гнётся и рвётся, а не сминается), ни рис (зернистая масса уплотняется и течёт, а не пружинит). задача #15 · разбор с проверенными DOI — docs/papers.md
Ф-13

Ролл разрезали

срез поперёк оси v

Нож идёт поперёк оси ролла — значит поперёк куска. На срезе появляется ровно та фигура из Ф-1, только изогнутая по витку: её ширина легла вдоль дуги, толщина — вдоль радиуса. Чем ближе к сердцевине, тем сильнее изгиб.

Отсюда и главное правило игры: узор на срезе — следствие раскладки. Где положил по u — на каком витке окажется; где положил по v — попадёт ли вообще в этот ломтик.

ЧАСТЬ IV

Связь с артом

правило, а не стиль
Ф-14

Схема и то, как это выглядит

рядом, всегда парой
1 · схема — чертёж
Срез в пиксельном режиме, кадр из игры
2 · кадр из игры — клетка 8 px
Срез в гладком режиме, кадр из игры
3 · кадр из игры — клетка 2 px

Этот документ не описывает арт. Он описывает математику; арт из неё выводится. Правило одно и записано в решении «кусок — тело»: внешний вид не рисуется, а спрашивается у тела, а стиль задаётся одним числом — размером клетки. Крупная клетка без сглаживания даёт пиксель-арт, мелкая со сглаживанием — гладкий вид.

Но схему трудно читать, не видя результата. Поэтому здесь будет пара: слева чертёж, справа — как это выглядит на самом деле. Где кадр снят со стенда, это не догадка, а сама игра; где стенда ещё нет — помечено «предполагаем».

Кадры 2 и 3 сняты 31.08.2026, после правки подворота, площади ядра и профилей форм. Проверить их свежесть можно меркой: глубочайшее вхождение нори даёт на старых кадрах 0,676, на новых 0,927 при коридоре источника 0,75…1,0.

На кадрах — канонический футомаки: четыре роли, которых требует источник (おぼろ · 卵焼き · 煮物 · 青味), проверенные canonCheck. Начинки на срезе стоят у самой корки, а не в центре: это известное расхождение с практикой (задача #98), и кадры показывают его честно, а не прячут.

Разница между 2 и 3 — одно число. Это не два рисунка и не два режима отрисовки: геометрия, материал и свет там одни и те же, меняется только размер клетки, в которую собирается ответ тела. Поэтому стиль можно менять, не трогая ни домен, ни материалы. решение #105 «кусок — тело» · задача #104 «пиксель-арт»
Ф-15

Шесть настоящих срезов

не схемы — кадры из игры
Срез: 鉄火巻き · тунец
鉄火巻き · тунец
хосомаки · ⌀ 32,2 мм · 1,18 оборота

Одна начинка на полулисте — канон хосомаки. Рёбра бруска прямые: фаска обнулена по справочнику, скругление углов у неё не задано.

Срез: かっぱ巻き · огурец
かっぱ巻き · огурец
хосомаки · ⌀ 32,7 мм · 1,17 оборота

Тот же лист, другая нарезка: огурец идёт сектором 「縦6〜8等分」, а не бруском. Форма на срезе — следствие того, как повар режет, а не свойство продукта.

Срез: Канонический футомаки
Канонический футомаки
целый лист · ⌀ 50,5 мм · 1,21 оборота

Четыре роли, которых требует источник: おぼろ (розовая прослойка), 卵焼き (жёлтый брус), 煮物 (кампё и шиитакэ), 青味 (огурец). Раскладку подтверждает canonCheck.

Срез: Урамаки наизнанку
Урамаки наизнанку
⌀ 38,5 мм · 1,04 оборота

Рис снаружи, нори внутри — порядок ПНр, вывернутый по-настоящему (#124). Ролл замыкается: 1,041 витка, то есть нахлёст 4 % сверх полного оборота.

Срез: 鳴門巻き в ролле
鳴門巻き в ролле
целый лист · ⌀ 53,6 мм · 1,20 оборота

Наруто — единственная настоящая спираль, подтверждённая источником: 「小口に渦巻き模様が見られるのが特徴」. Спираль здесь рисует текстура куска, а не намотка листа.

Срез: Сладкий на гюхи 求肥
Сладкий на гюхи 求肥
⌀ 59,6 мм · 1,19 оборота

Обёртка толщиной 1,5 мм против 0,10 мм у нори — в пятнадцать раз. Шаг витка растёт, и ролл заметно толще при том же листе.

Заведено 31.08 по замечанию владельца: «примеров срезов в доке ядра достаточно?» Было два, и оба — одна раскладка в двух стилях, при четырнадцати схемах. Для документа «От нарезки до среза» этого мало: схема объясняет замысел, а срез показывает, что модель делает на самом деле.

Все шесть сняты одним прогоном 03.09 с одной модели, ровная рука (press 1, v 1, air 0), срез посередине ролла. Числа рядом — замер той же модели, а не подпись к картинке. Дата обязательна: кадры уже однажды прожили в документе одиннадцать правок модели, и подпись под ними читалась как нынешняя норма.

Что эти кадры показывают честнее любого текста. Начинки лежат в центре — видно на каждом из шести, и это то же, что говорит повар: 「寿司飯の両端を合わせることで具材の周りにちゃんと寿司飯が届き、真ん中に」 — два конца рисовой постели смыкаются вокруг начинки, и она оказывается посередине. Ядром ролла стали сами начинки, а рис ушёл в стенку: √доли начинки 0,487 R при источниковых 0,48–0,54. задача #98 закрыта 01.09 · замер tools/measure-slice.js
Ф-16

Чем рисуется кусок и как это называть

решение 31.08 + словарь

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

СловоЧто этоГде живёт
ТелоФорма куска в сечении: пара функций «где верхняя граница» и «где нижняя» (cutTop / cutLow). Между ними — сплошное вещество, не оболочка: cutSpan даёт интервал по глубине. ⚠ Но это призма, а не 3D-тело: профиль растянут вдоль оси ролла и вдоль неё не меняется, а сам кусок абсолютно жёсткий — не сжимается ни при каком прижиме. Слово «тело» обещает больше, чем есть (#10, #118)play/model/geometry.js, блок формы
СпрайтРастровая картинка куска, посчитанная из тела по клеткам. Не рисуется художником — вычисляетсяpieceTopSprite
Клетка (арт-пиксель)Единственное число, задающее стиль: крупная без сглаживания — пиксель-арт, мелкая со сглаживанием — гладкий видPIX, ?pix=N, ?flat
ГраньБоковая или торцевая стенка куска, видимая сверху. Не обводка: это тоже вид тела, просто сбокуpieceSideColor
Фоновый светДоля цвета, которая остаётся у поверхности, отвёрнутой от источникаAMBIENT
КонтурВекторная линия по настоящим координатам модели, поверх любой графики. По-английски это path + stroke; по-русски достаточно «контур»strokeOutline, клавиша L

Что рисуется поверх, а что нет — решение 31.08.2026.

  • Поверх пикселей рисуется ТОЛЬКО контур, и только по клавише L. По умолчанию выключен. Это режим проверки глазом, а не арт.
  • Контур берётся из координат модели, а не из того, что нарисовал рендер. Отсюда его настоящая ценность: он эталон, независимый от стиля. Подойдёт пиксель, гладкий или любая будущая графика — расхождение контура со спрайтом и есть ошибка отрисовки. Первый же прогон показал её на концах повёрнутого куска.
  • Никакой другой графики поверх нет. Ни чёрной обводки, ни рамки: кусок отделяет от риса собственная грань. Чёрный контур для этого не годится — с ним кусок читается обёрнутым в нори (решение владельца, 31.08).

Что такое «луч», и почему это слово встречается всюду. Срез — круг. Чтобы что-нибудь про него узнать, его надо опросить, и самый естественный способ для круга — идти от центра наружу под каким-то углом, шагами, и на каждом шаге спрашивать модель: что здесь лежит? Такая прямая от центра и есть луч. Пройдя много лучей по кругу, получаем полную картину, не обходя каждый пиксель.

Одним и тем же приёмом меряется почти всё, что мы знаем о срезе:

Что меряемЛучейЧто берём с луча
диаметр и некруглость360радиус, на котором ролл кончился
глубина нори (не ушла ли внутрь)36самое глубокое её вхождение
контур границ240все радиусы, где сменился материал
слепок для регрессии24 × 12 колецкласс материала в узле сетки

И здесь же — предел приёма, найденный 31.08. Луч даёт набор точек на одной прямой. Соседний луч даёт другой набор. Чтобы получилась линия, надо угадать, какая точка на втором луче продолжает какую на первом, — а на краю куска угадать нельзя: две границы там сходятся в одну и пропадают. Отсюда рваный контур, который владелец увидела сразу: «я не ожидала, что пути могут быть прерывистыми». Она права — контур куска не рвётся: скрутка его деформирует, но не разрывает. Рвёт его способ измерения, а не геометрия.

Правильный приём для замкнутых границ — не опрашивать лучами, а обходить саму границу по сетке (marching squares): петля получается замкнутой по построению, и рваться ей нечем. Сшивание лучей по близости радиуса, сделанное 31.08, убрало крупные разрывы (два полных круга сомкнулись), но мелкие обрывки на краях кусков остались — их лучами не победить. Заведено задачей.

Стиль не выбран, и это записано честно. Пиксельный вид включён по умолчанию, но он — сознательный выход за рамки пайплайна, сделанный ради того, чтобы было на что смотреть (HYPOTHESIS.md). Владелец 31.08 сказала, что видит игру на Steam в стиле inbento, а не в пиксельном — вопрос открыт (docs/design-core.md, п. 5). Менять стиль дёшево: это одно число, клетка, и обе ветки уже живут в коде. решение #105 «кусок — тело» · задача #104 «пиксель-арт» · #114
ТАБЛИЦЫ

Кто на что отвечает и чему верить

сводка
Т-1

Кто на что отвечает

одно описание — один вопрос
ФункцияОтвечает на вопросКто спрашивает
cutTop(d, lu) Где верхняя граница сечения в поперечной позиции lu вид сверху, срез, вытеснение риса
cutLow(d, lu) Где нижняя. По умолчанию зеркало верхней только срез
cutSpan(d, lu) Что закрашивать в разрезе — обе границы вместе срез
patchColor(m) Какое вещество в точке: прожилка, кожица, семечко оба вида — одна и та же
pieceLight(d, lu) Сколько света, из наклона той же поверхности вид сверху

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

Т-2

Что замерено, что выведено, что придумано

чему в этих схемах можно верить
КорзинаСколькоЧто это значит
замерено11 · 9 % внешний источник называет именно эту величину
выведено13 · 11 % честно посчитано из замеренного
придумано, помечено21 · 17 % догадка, и рядом об этом сказано
придумано, не помечено~65 · 54 % догадка, о которой не сказано
помечено неверно11 · 9 % заявлен источник, которого нет

Внешняя опора модели расширилась 01.09, и не там, где искали. Долго она стояла на трёх источниках — SUZUMO (толщина и длина пласта), FAO (габарит листа), Мацуи 2001 (зерно), — и одна ошибка в SUZUMO шатала половину базы. Такая ошибка и нашлась.

Недостающие числа искали по кулинарным сайтам и фотографиям мастеров; там их нет. Нашлись они в паспортах суши-машин: у станка сечение ролла — конструктивный размер сменного узла, допуск назван прямо, а ракурса и масштаба, которыми болеет обмер по снимку, не существует вовсе. Три конкурирующих производителя дают один и тот же ряд до миллиметра, и это делает его отраслевым стандартом, а не мнением.

Опаснее всего не «придумано без пометки», а «обосновано устаревшим». Шесть из одиннадцати неверных пометок — это утверждение, которое проект сам опроверг и не вернулся поправить код. Например: масса риса футомаки стояла как 160 г, а 160 — это длина пласта в миллиметрах; ускорение поиска стояло как ×17, хотя замер дал ×3 и док это записал; обжим циновки обоснован «круглостью настоящего маки», которую собственный док называет неподтверждённой.

Все одиннадцать разобраны и восемь уже исправлены — docs/number-audit.md. Это не разовая уборка: разрыв «правим док → забываем код» породит их снова, и сторож в state-check ловит только отставание этого документа ядра.

Поэтому 31.08 появился третий сторож — сверка с практикой поваров (play/test/practice.js, печатается в ?check). Два первых следят за целостностью изнутри: цела ли модель, сходятся ли гит и доки. Третий спрашивает то, чего ни один из них спросить не может: сходится ли модель с тем, как делают на самом деле. На 01.09 — 29 утверждений с источниками: 19 меряются (16 сходятся, 3 расходятся честно, со ссылкой на задачу), 10 остаются пробелами. На 05.09 — 36 утверждений: 32 сходятся, 4 не проверяются, честных расхождений не осталось ни одного. Отдельно 7 пробелов знания: величина, которой не называет никто.

Тот же день убавил этот последний список впервые. Первой строкой в нём стояла некруглость — «не измерена никем, пороги стоят на пустом месте». Теперь у неё есть число. Правило, которое из этого следует: прежде чем записать величину в «искать негде», проверить, не нормирует ли её кто-то по работе — производитель оборудования, регламент, диетология, патент.

Ошибка бывает и обратной, и это главное в нём. Легко заметить, когда модель делает то, чего не бывает. Куда труднее заметить, что мы считаем что-то невозможным, а мастер именно это и делает — и в этом мастерство. Поэтому у каждой записи есть поле можетБыть: «источник говорит, что так бывает, а модель не умеет». Такие записи не валят проверку, но и не молчат.

Т-3

Модель против промышленного ряда

первые точки калибровки, 01.09.2026
ВеличинаМодельИсточникСходится
нори по обхвату210 мм200–210 мм✓
доля начинки в срезе24 %23–29 % (машина)✓
√доли начинки0,525 R0,48–0,54 R✓
где лежит начинкадиск 0,06…0,51 Rдиск, медиана 0,48 R✓ #98
нори между слоями риса0,0140✓ #130
хосомаки ⌀28,9 мм26–34 мм✓
нахлёст нори+58,5 мм3–60 мм✓ #132
некруглость среза0,210,15–0,38✓ #19 закрыт 01.09
центрированность1,290,85–1,55✓ #129 закрыт 01.09

Откуда взялись коридоры. 株式会社トップ печатает таблицу «сечение ↔ вес риса» по шести классам ролла. Плотность самого риса во всех строках одна, поэтому падение кажущейся плотности с ростом сечения — это ровно тот объём, который отдан начинке: 23–29 %. Веса независимо подтвердил диетологический бюллетень больницы 米子医療センター по всем трём общим классам. Длину нори на каждый класс даёт AUTEC отдельной колонкой.

Две дороги пришли в одну точку. Своя выкладка проекта шла от размеров листа нори и правила четверти и дала 20–29 %; промышленная идёт от весов на упаковочной машине и даёт 23–29 %. Модель стоит внутри обеих.

⚠ Но «доля начинки» и «радиус ядра» — это ОДНО число, а не два: они связаны тождеством a = √доли и выведены из одной таблицы. Модель, попадающая «в оба коридора разом», попадает в один. Здесь это было записано как двойное подтверждение — неверно, поймано скептиком 01.09.

Габарит сечения здесь намеренно не сравнивается. Промышленные 45 мм — это 「45mm角」, сторона квадрата, а модель отдаёт диаметр круга. Один рабочий периметр 180 мм даёт либо квадрат со стороной 45,0 мм, либо круг ⌀ 57,3 мм: это один и тот же ролл. Сначала сюда записали «модель толще на 17–30 %» — вывод был неверен ровно из-за этой подмены. Сравнивается то, что от формы не зависит — длина нори, — а форма меряется отдельно, некруглостью, и вот там расхождение настоящее.

Строка «нахлёст нори» была невозможностью и стала нормой. Обхват ролла превышал длину листа — 212,7 мм при 210, — то есть нори физически не хватало его обернуть. Чинилось это не подкруткой числа, а сменой укладки: рис лежит ОДНИМ КОЛЬЦОМ вокруг начинок, а нори обходит готовое кольцо снаружи. Тогда и «один оборот» источников встаёт на своё место — он про нори, а не про рис. Issue #132, влито 01.09.

Футомаки похудел — постель считается от ВЕСА. Стояла толщина 12 мм из паспорта рисового пласта SUZUMO, и наша постель несла 306 г риса. Рецепты называют 200 (白ごはん.com 「約200gくらいが目安」), что даёт 7,85 мм. Сегодня эталон футомаки — ⌀ 42,9 мм. ⚠ Промышленный 太巻 46 мм角 — это равновеликий круг ⌀ 52 мм, то есть на 9 мм БОЛЬШЕ нашего. Расхождение оставлено открытым нарочно: размеры мы берём у машин, а механику у поваров, и доводить диаметр до промышленного значило бы подгонять модель под цель, которую никто не выбирал. Развилка — issue #131.

Доля начинки 18,6 % — и это ручной футомаки, а не недоложенный. Тела канонических начинок дают 276 мм². Рецепт 白ごはん.com для базового футомаки — 279 мм² (厚焼き玉子 1㎝角 · 椎茸 4〜5㎜幅 ×3 · かんぴょう · 三つ葉). Совпадение почти точное.

Коридор 23–29 % выведен из весов упаковочной машины и описывает ролл, набитый плотнее. По решению владельца ориентир — повара, поэтому он остаётся справочным: говорит, каким бывает магазинный футомаки, а не каким должен быть наш. Ручного коридора пока нет — один рецепт это n = 1, и сужать по нему нельзя (#16, #131).

Всё это меряется командой, а не глазами: node tools/measure-slice.js. До 01.09 любое число модели можно было увидеть только открыв ?check и посмотрев — то есть расхождение находилось, лишь если кто-то смотрел. Так и находились предыдущие четыре: все четыре нашла владелец, ткнув пальцем в скриншот.