Форум

Работа c геометрией и материалами (шейдерами)

08 октября 2015 15:21
Доброго времени всем!

Необходимо создать нечто, похожее на https://clara.io но весьма упрощенное. Техническими терминами оперирую плохо, потому постараюсь объяснить что нужно, в обычной, разговорной форме.
Имеем страницу в браузере с окном 3D и областью инструментов. Модуль должны уметь:
• Загружать несколько популярных форматов, в том числе и анимированный fbx.
• Примитивно работать с геометрией – перемещать, поворачивать, масштабировать.
• Работать с материалами.
• Работать со светом.
• Настраивать окружение.
Подробнее нужно остановиться на материалах. Нам нужно иметь несколько базовых шейдеров с возможностью тонкой настройки. Назначать материалы нужно уметь как на объекты, так и на элементы меша (вероятно нужно иметь возможность отделять элементы меша в отдельный объект).
Работа со светом в базовом варианте может заключаться только лишь в настройке интенсивности источника(ов).
Настройка окружения может сводиться к выбору скайбокса, его повороту и интенсивности.
В работе с шейдерами и светом нужно придерживаться технологии (идеологии) PBR ( https://www.marmoset.co/toolbag/learn/pbr-theory )

Более подробно обсудить все детали и составить качественное тз можно при личном общении. Присылайте свои контакты на maraykin@yandex.ru

С уважением!
Юрий.
09 октября 2015 12:09
И снова здравствуйте!

На данный момент 56 просмотров, и ни одного комментария.
Это наводит на следующие мысли:
• Я недостаточно толково объяснил задачу.
• Задача слишком сложна для уровня компетенции здешних специалистов.
• Другие причины…

Как бы там ни было, прошу сообщество оставить хоть какие-то комментарии. Может быть кто советом поможет…

С уважением!
Юрий.
09 октября 2015 15:33
Добрый день и добро пожаловать на форум, Юрий.

Вы вполне доходчиво объяснили, что вы хотите получить, и я попытаюсь ответить, почему вы пока не получили отклика.
В целом то, что вы описали похоже на проект уровня sketchfub или p3d.in. Вы написали про "весьма упрощенное", но лично я не увидел в вашем тексте упрощений, а напротив встретил несколько очень серьзных модернизаций.

• Загружать несколько популярных форматов, в том числе и анимированный fbx.
Для этого потребуется написать столько парсеров, сколько форматов вы хотите поддержать. Если формат довольно сложный, то поддержка всего функционала может занять очень много времени. В частности анимация везде реализована по разному. Таким образом, только на этот пункт может уйти несколько месяцев.

Для загрузки и хранения контента понадобится серьезная серверная часть с соответствующими оптимизациями. То есть для данной задачи кроме frontend разработчика нужны и серверные программисты.

Подробнее нужно остановиться на материалах. Нам нужно иметь несколько базовых шейдеров с возможностью тонкой настройки. Назначать материалы нужно уметь как на объекты, так и на элементы меша (вероятно нужно иметь возможность отделять элементы меша в отдельный объект).
Для этого помимо программирования трехмерной части нужна тонкая проработка интерфейса. То есть потребуются не только программисты, но и дизайнеры. Плюс, возможность детальной настройки окажет серьезное влияние на производительность, и нужно будет искать баланс между скоростью и гибкостью.

В работе с шейдерами и светом нужно придерживаться технологии (идеологии) PBR ( https://www.marmoset.co/toolbag/learn/pbr-theory )
Этот пункт так же требует очень детальной проработки. В движках типа Unreal Engine или Unity целые группы разработчиков тратили месяцы на создание приемлeмых PBR шейдеров.

В общем, подобный проект - это довольно дорогостоящая и длительная разработка. Если вы располагаете достаточно серьезным бюджетом (думаю, здесь речь о семизначных суммах), то, вероятно, вы бы могли найти кого-то заинтересованного.
09 октября 2015 16:54
Евгений, в первую очередь благодарю вас за ответ!

По существу Вашего ответа могу сказать следующее:
Я обращался в вашу организацию напрямую. С кем разговаривал, не помню. Но мне был дан ответ, что все это реализовать вполне возможно, и сложностей в этом никаких нет, и что B4W все это сделать позволяет.
Теперь по-порядку. Парсер: думаю, что это уже кто-то сделал, равно как и шейдеры. Открытая библиотека PBRного шейдера есть. С сервером у меня все в порядке: он и есть, и есть back-end разработчик его поддерживающий. Что касается интерфейса, то тут я к UX придираться не буду, я технарь - есть слайдер с параметром, и отлично.
То, что я хочу получить, является смесью sketchfub, p3d.in и clara.io (но повторюсь: по отношению к clara.io функционал весьма урезаным должен быть. sketchfub, p3d.in - да, но за уже готовыми наработками сложностей в реализации никаких не вижу).
09 октября 2015 16:58
Согласен с Евгением, за несколькими исключениями на мой взгляд.
1. Если использовать уже готовые наработки по загрузчикам - то тогда все делается быстрее.
2. Про анимацию согласен
3. Что касаемо хранения на сервере - не думаю что тут все так сложно. Тут уже зависит от желаний, планируемой нагрузки и целей.
4. Назначение материалов само по себе не является крупной проблемой. Хорошие зарузчики умеют разбивать скажем obj на составные меши и назначать отдельные конфиги на них. Но! Здесь нужны хорошие модели, если модель плохая - как не пыжься, все твое разбиение будет сыпаться напрочь. Я как-то получил модель, типо дома (строительная фирма какая-то), в котором нужно было размечать различные части, различными текстурами и материалми - нууу модель была сделана плохо, меши сгруппированы плохо, из этого мало чего хорошего получится.
5. Насчет PBR - если хочется действительно крутого результата, то да, там нужно сидеть и очень замороченно подбирать все эти параметры, но если говорить об упрощенности - то достаточно стащить откуда угодно стандартные настройки под разные материалы типо дерева, стекла, и т.д.
6. Тонкая настройка и баланс производительности - да, здесь и правда довольно сложно, сталкивался. Но в моем случае это была динамическая генерация букв из разных шрифтов, при чем на лету, и с примелимым для пользователя откликом. Настройка материалов чуть-чуть проще, но да, интерфейс и прочее - повозится придется, никуда не денишся.

Основная мысль - полный кастом делать - реально дорого и сложно. Если тырить кучу готового - тогда все равно довольно сложно и дорого, но уже реально.

Вопрос в количество кастома.
09 октября 2015 17:01
С анимацией, тоже соглашусь, не понимаю пока как это можно сделать. Но решение может придти по ходу основной разработки.
09 октября 2015 19:16
Но мне был дан ответ, что все это реализовать вполне возможно, и сложностей в этом никаких нет, и что B4W все это сделать позволяет.
B4W действительно всё это сделать позволяет, но реализация такого проекта в любом случае потребует много сил.

Ответ на сообщение пользователя DarkCat
1. Если использовать уже готовые наработки по загрузчикам - то тогда все делается быстрее.
Тут нужно учитывать, что существующие парсеры заточены под конкретные движки, и для большинства форматов все-равно придется их значительно изменять/писать что-то свое.
12 октября 2015 09:47
Доброго времени всем!

А тем временем 133 просмотра уже. На почте пусто. То есть желающих сделать этот проект, с вашего форума, ровно нуль!
Евгений, вопрос такой: B4W сделать это позволяет и three.js и playcanvas это позволяют сделать тоже. three.js и playcanvas это позволяют сделать как бы с нуля (ну можно, конечно, взять что-то готовое, и перепилить), но это может стоить много денег. Я это понимаю. Но вот B4W я так и не понял, что это такое… Вроде что-то сделали для того, чтобы облегчить работу программистов, вроде есть масса готовых решений. Но вот я прошу сообщество сделать просто загрузчик и отображалку (на первых порах, конечно) и это вызывает какие-то непреодолимые сложности.
Прошу вас учесть в ответах то, что я являюсь лузером. Мне нужно просто понять, что мне нужно использовать, для достижения цели, и сколько я смогу на это потратить (с учетом того, что оперировать семизначными суммами я не могу).

Благодарю за ответы!
С уважением!
Юрий.
12 октября 2015 11:03
Ответ на сообщение пользователя Maraykin
Евгений, вопрос такой: B4W сделать это позволяет и three.js и playcanvas это позволяют сделать тоже. three.js и playcanvas это позволяют сделать как бы с нуля (ну можно, конечно, взять что-то готовое, и перепилить), но это может стоить много денег. Я это понимаю. Но вот B4W я так и не понял, что это такое… Вроде что-то сделали для того, чтобы облегчить работу программистов, вроде есть масса готовых решений. Но вот я прошу сообщество сделать просто загрузчик и отображалку (на первых порах, конечно) и это вызывает какие-то непреодолимые сложности.
Доброе утро,

Юрий, если делать просто загрузчик и отображалку наших экспортированных json-ов без того функционала, который вы описали выше, то это можно сделать на Blend4Web очень быстро.

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

То есть, другими словами. Просмотрщик json-файлов в Blend4Web - это очень простая задача. Просмотрщик десятков форматов с кастомизацией меша (вы писали про выделение частей меша из общей модели) - это очень сложная задача.

Поэтому, раз вы не располагаете очень ощутимым бюджетом, нужно сразу определиться от чего вы готовы отказаться. Например, взять три каких-нибудь несложных формата и четко понять какой (ограниченный) набор данных из них будет достаточен для вас и дать пользователю только небольшой простор для модификаций. К римеру - заменять текстуру и менять цвет diffuse и specular на материале. И я бы не связывался с анимацией для начала.
12 октября 2015 12:56
Хорошо. Давайте двигаться поступательно. Давайте определим задачу в первом приближении (но понимая, что мы будем развивать модуль до уровня редактирования меша и внедрения базовых шейдеров). Берем в качестве референса https://sketchfab.com/. Наш модуль должен уметь загружать obj (меш и UV) и fbx (меш, UV и анимация). Должен иметь возможность настроить стандартный шейдер: diffuse (цвет и текстура, параметр (определяет степень смешивания с цветом)), specular (цвет, текстура, параметр (определяет степень смешивания с цветом)), glossiness (параметр, текстура), normal/bump (текстура, параметр), transparency (текстура, параметр); PBR шейдер: принцип тот же, можно смотреть на настройку шейдера на sketchfab.com, и можно сделать некоторую скидку на используемую библиотеку, но картинка должна быть похожа на референсы. Настройка сцены: связываем с настройкой освещения, можно взять классическую настройку источников света (2-3 источника) вместе с картой окружения (рефлекта, HDR, кубмапы, как вам удобнее), список из 3-5 карт. Настраивать источники света не нужно!
Серверная часть будет решаться в содружестве с моим разработчиком. Над интерфейсом сильно думать не надо, решим все быстро, главное функционал!
Если есть еще какие вопросы, пишите.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.