Будет большим плюсом если раньше вы работали с Three.js и gltf моделями или если у вас есть желание с этим работать.
** Контекст: я инди-программист, разрабатываю low poly online игру в браузере. Это первый заказ из серии - при успешном выполнении планируется долгосрочное сотрудничество с регулярными заказами (самолеты, здания, окружение).
Пока начнем с модели самолета, потому что в дальнешим это будет нашей единицей меры, от которой в будущем будем разрабатывать дальнейшие модели на карте.
** Пример модели: Я прикрепил архив модели, на которую нужно ориентироваться.
** Визуальные требования: * Нужно сделать похожую low poly модель самолета spitfire только в 1.5 раза больше чем та модель, которую я прислал. * Количество triangles и vertices можно уменьшить в 2-3 раза, нам не нужен экстра реализм, идея игры в простоте и динамике. * В идеале сохранить узнаваемую форму модели spitfire(в особенности трубы двигателя). Увеличить в 1.5 раза. Сделать пропеллер отдельной mesh'ю. * Анимации вшитые в саму модель нам не нужны, мы их не делаем. Анимировать я буду программно, используя jsx разметку, которая нам доступна для gltf моделей (об этом ниже)
** Технические требования: * Для работы с моделями в браузере лучше всего подойдет формат gltf, собственно он нам и требуется. * Я конверчу gltf модель в jsx разметку с помощью https://gltf.pmnd.rs/. Если закинете пример модели, которую я прислал, то увидите, что нам выдается разметка типа "<group name="Sketchfab_model" rotation={[Math.PI / 2, 0.003, Math.PI / 2]}>" Этого не нужно бояться, это просто представление group, mesh, geometry и т.д. * Желательно упаковать модель так, чтобы было как в jsx исходной модели: ```` <group name="Spitfire_Plane" position={[0, 16, 7]}> <group name="Body" position={[0, -0.319, -0.043]}> <mesh name="Body_MAT_0" castShadow receiveShadow geometry={nodes.Body_MAT_0.geometry} material={materials.material} /> </group> <group name="Aileron_L" position={[1.35, -0.445, -0.077]} rotation={[0, 0, -0.179]}> <mesh name="Aileron_L_MAT_0" castShadow receiveShadow geometry={nodes.Aileron_L_MAT_0.geometry} material={materials.material} /> </group> ``` * Эйлероны, колесо вместе с шасси, пропеллер должны идти отдельной группой. Также просьба не добавлять на группы вращение, чтобы на самих саб-группах не было rotation={[0, 0, -0.179]}. На группах вращение должно быть по нулям rotation={[0, 0, 0]} - это важное требование, которое нужно соблюдать и для будущих моделей * По матералу и цветам пока можно использовать как на модели-референсе