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

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

Почему не взять модель со стока

Первая мысль была простая: на 3D-стоках полно мозгов и домов, скачал и готово. Не вышло, и причин три.

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

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

Третья — лицензия. Многие модели можно смотреть, но нельзя встраивать в своё приложение, а мне нужно именно это.

В итоге у меня сложилось простое правило. Если у объекта есть настоящая анатомия, беру научные данные. Если объект инженерный и его устройство описывается правилами, пишу его кодом. Так и разделились четыре новые модели: мозг и мышь — из науки, дом и ДНК — из кода.

Мозг из научного атласа

Сердце и тело человека для первой версии я брал из HuBMAP. Это открытый проект, где учёные собирают эталонные 3D-модели органов человека. Там же нашёлся и мозг. Он размечен по данным атласа мозга Allen, и каждая структура лежит отдельным объектом. Лицензия CC BY 4.0: можно использовать, если указываешь источник.

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

Разбирается он в два этапа. Разводишь руки, и сначала расходятся полушария. Разводишь дальше, и они распадаются на доли, а изнутри показываются глубокие структуры. Свёл руки, и всё собралось обратно.

Отдельно я возился с подписями. Название структуры на латыни ученику мало что даёт. Поэтому при наведении руки на часть видно, за что она отвечает. А в карточке лежит факт, который хочется пересказать. Например, мозжечок занимает около 10% объёма мозга, но в нём примерно 80% всех нейронов. Или что у лондонских таксистов, которые учат наизусть город, задняя часть гиппокампа больше, чем у обычных людей.

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

Если честно, из всех четырёх моделей мне лично интереснее всего именно мозг. Покрутить в руках то, чем ты сейчас думаешь, — странное и очень залипательное ощущение. И не только мне: больше всего мозг понравился коллеге с работы, когда я ему показал.

Лягушка, которой не случилось, и мышь из томографа

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

На деле нормальной открытой лягушки я не нашёл. Нужна была модель, где есть и скелет, и органы, и лицензия, которая разрешает встроить её в приложение. Лягушки, акулы и птицы с органами либо лежат на сайтах, где для скачивания нужна регистрация и непонятно, что потом можно делать с файлом. Либо это грубые модели для 3D-печати, где органы похожи на леденцы.

Зато нашлась мышь. И не просто модель, а научный атлас Digimouse. Его в 2007 году собрали Dogdas, Stout, Chatziioannou и Leahy по КТ и тонким срезам настоящей лабораторной мыши. Лицензия CC BY-SA 4.0: показывать и использовать можно, но если раздаёшь сам файл модели, то только под той же лицензией и с указанием авторов.

В моей версии мышь разбирается на 21 часть: кожа, скелет с позвонками и рёбрами, шесть отделов мозга, сердце, лёгкие, печень, почки и остальные органы. Разводишь руки, и кожа уходит вверх, мозг поднимается над черепом, а органы опускаются под скелет. Получается что-то вроде вскрытия слоями, только обратимого.

У каждой части тоже есть факт. Сердце мыши бьётся 500–700 раз в минуту, дышит она около 150 раз в минуту, а мозг весит примерно полграмма. И мыши не умеют срыгивать, что, кстати, одна из причин, почему с ядами против грызунов это работает.

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

Дом и ДНК, которые проще написать кодом

С домом атлас не поможет. Зато у дома есть правила, по которым его строят, и их можно описать прямо в коде.

Я взял каркасный дом. Он хорош тем, что внутри него всё видно: фундамент, деревянный каркас, трубы, проводка, стены, перекрытия и крыша. Всего пятнадцать частей. Размеры не случайные: например, стойки каркаса стоят через 60 см, как в настоящем строительстве, потому что под этот шаг выпускают утеплитель и листы обшивки.

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

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

С ДНК история ещё проще и одновременно сложнее. Готовых моделей спирали полно, но мне нужна была спираль, которую можно расстегнуть руками. Поэтому она целиком строится кодом по реальным параметрам: например, на один виток приходится около 10,5 пары оснований.

Разводишь руки, и спираль расстёгивается сверху вниз, как молния, на две цепи. Примерно так она раскрывается в клетке перед копированием. У каждой буквы свой цвет и подпись: аденин всегда стоит в паре с тимином, гуанин с цитозином. А тимин есть только в ДНК, в РНК его место занимает урацил.

Зато по картинке ДНК у меня на первом месте. Когда спираль расходится на две цепи прямо между ладонями, это самый эффектный момент во всём обновлении.

Плюс кода в том, что такую модель можно сделать ровно под жест. Её не надо подгонять: она с самого начала знает, где у неё «молния» и в каком порядке её расстёгивать.

Голограмма, которую не видно на видео

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

Мозг на записи был бледный, как дымка. Мышь мелкая, и органы сквозь кожу едва угадывались. ДНК превратилась в тонкие белые линии, а буквы оснований не читались совсем. Нормально получился только дом: у него плотный каркас из прямых линий, и прозрачность его не съедает.

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

Слева первая запись, справа после правки.

Что сделал:

  • мозг, мышь и ДНК стали примерно вдвое ярче, а контуры деталей — заметнее;

  • у ДНК стали толще остов, кольца оснований и связи между ними, а цвета букв подобраны так, чтобы читаться и на светлом фоне;

  • мышь стала крупнее в кадре и повёрнута боком, а при разборке части разлетаются компактнее и не вылезают за край;

  • для съёмки появился отдельный режим яркого свечения, он включается одной клавишей.

Вывод для себя я сделал такой: проверять модель надо не на мониторе, а на записи, которую потом откроешь на телефоне. Именно так её увидит большинство людей.

Как научная модель становится лёгкой

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

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

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

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

Что в итоге

Главное, что я понял на этом обновлении: хорошая учебная модель — это не красивая модель. Это модель, где каждая часть отдельная, стоит там, где ей положено, и знает, что про неё рассказать. Для живого берёшь науку, для инженерного пишешь правила кодом.

Открытых научных данных оказалось больше, чем я думал, но они разбросаны и почти всегда требуют доработки. А некоторых нет вообще: открытой лягушки с органами я так и не нашёл.

Всё это живёт в проекте M2 Holo Lab, он сейчас в закрытом тестировании. Если вы преподаёте и хотите попробовать на занятии, заявку можно оставить на m2holo.com.

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

Модели: мозг — HuBMAP Reference Organ, Brain (CC BY 4.0); мышь — Digimouse, Dogdas B., Stout D., Chatziioannou A., Leahy R. M., 2007 (CC BY-SA 4.0).