Форум

Сообщения, созданные пользователем Grohot
26 февраля 2016 13:13
Grohot, не могли бы вы подготовить простой пример, где на вашей машине наблюдается отстование объекта от курсора или прислать ваш проект?
Постараюсь соорудить пример отдельной темой.
Но пока выходит, что машина, где тормоза меньше все-таки помощнее и имеет отдельно GeeForce 800M.


Еще этот вопросик затерялся немного :)
25 февраля 2016 22:59
И еще появился вопрос.
Попробовал ортогональную камеру.
С ней не работает camera.calc_ray.

Т.е. при камере с перспективой, чтобы переместить объект, куда показывает курсор на нужной плоскости, мы
используем calc_ray для поиска точки пересечения луча камеры с нужной плоскостью.
В случае с ортогональной камерой вроде как пересечение искать и не надо наверно - куда ткнули, туда и ставим объект видимо. Но как преобразовать координаты мыши в координаты сцены, чтобы переместить туда объект (при ортогональной камере, которая смотрит на сцену строго перпендикулярно сверху)?
25 февраля 2016 22:27
Если fps ниже скорости обновления экрана (обычно 60 гц), то будут наблюдаться задержки в перетаскивании объектов. Это справедливо и для обычных десктопных игр.
FPS включается при инициализации b4w свойством show_fps: true. Просмотрите примеры в code snippets
Посмотрел, что выводит fps:
1. на моноблоке core i5, 6Гб ОЗУ (что с видеокартой не смотрел)
показывает 17-20fps при этом даже высокополигональная сцена с тенями можно сказать, практически не тормозит
Правда при этом в моноблоке начинает дико шуршать куллер :) (но на штатных примерах тоже шуршит).

2. на стационаре тоже core i5 2500 3.3GHz, 16Гб (со своим графическим ядром, т.е. отдельной карты на борту нет) сцена с включенными тенями (без разницы все-таки с лоу или хай-поли мешами) fps 3-5 и тормоза.
По поводу зависания при переключении вкладок (сталкивался с таким):
Возможно вы запустили какойнить цикл, который продолжает работать, даже если вкладка не активна. При этом рендер сцены b4w останавливается, если вкладка не активна.
Нет. Цикл есть только при инициализации, который точно отрабатывает только один раз (размножение объектов) и при переключении закладок он уже не отрабатывает повторно.
Дальше все только на событиях без циклов внутри их обработчиков.
Возможно при копировании объектов вы используете глубокое копирование, что сильно загружает память.
Проверил. Размножил объекты не глубоким копированием и материал на них тоже не копировал.
Ничего не изменилось - fps - 4.
При этом когда начинаешь перетаскивать объект по сцене мышью fps падает до одного вообще
Больше того.
Всем объектам назначил один материал, который создается по дефолту - тоже fps-4.
Потом удалил все объекты и вместо них сгенерил просто 50 uv-сфер с сабдивайдом до 2000 полигонов каждая (тоже не глубоким копированием) - fps 3-4. НО при этом при переключении закладок не тормозит.
Потом вместо сфер с кучей полигонов попробовал кубики аналогично - fps - 4
Т.е. падает именно при включенных тенях.
Завтра сравню видеокарты на машинах, основная разница скорее в этом.
Но как-то надеюсь, что core i5, ну должен бы вытягивать и сам.

Например, на машине, где наблюдаются тормоза
raytest показывает fps 15.
24 февраля 2016 23:27
Добрый вечер, Роман.
Вы можете сделать второй объект (который выше) не selectable в Blender'e. Тогда он не будет участвовать в работе функции m_scenes.pick_object
Но объект, который выше должен быть селектбл (его ж перетаскиваю мышью, а чтобы его подхватить тоже использую pick_object). Было бы неплохо, наверно, иметь в функции pick_object возможность указывать на каком слое надо "пикнуть" объект (если слои сцены экспортируются конечно), или просто какой по счету по ходу луча.
Ещё могу посоветовать использовать функцию из физики m_phy.append_ray_test_ext Это уже "пикинг" на стороне физического движка. Но работать с ним сложнее. Тут есть пример его использования.
Спасибо большое. Посмотрю.
Это интересное поведение. Не могли бы вы обратить внимание на FPS при этом. А еще лучше, подготовить небольшой пример, где проявляется подобное поведение, чтобы сразу можно было разобраться в чем дело
Как вывести fps не знаю. В примерах видел вывод fps на канву, поищу.
Пример постараюсь подготовить. Хотя это проявляется не на всех машинах.
На вкладке Render->Object Outlining можно уменьшить значение Factor. Контур выделения станет уже и тусклее. Размытость не исчезнет, но будет не так заметна.
Спасибо, Иван. Стало лучше :)
А сколько у вас материалов на каждом объекте?
Если 1 то хорошо бы посмотреть на него.
На каждом объекте по одному материалу.
Материал, свет и камеру и мир приложил в сцене.
Это материал, который принимает тени из-за рендеринга которых тормоза.

Вообще примерно так:
1. Исходная сцена имеет:
- порядка 10 исходных подвижных (по onmousemove) объектов с большим числом полигонов (геометрия разная материал один)
- 1 объект неподвижный тоже с одним материалом, представляющий собой плоскость с одним полигоном
- два источника света типа Point и освещение окр. мира
- статичная vertical камера , которая смотрит на сцену сверху вниз (т.е. вертикальная, но расположена горизонтально)
2. При загрузке сцены:
- из 10 подвижных объектов создается еще 40 глубоких копий
- из 1 неподвижного объекта создается еще 79 глубоких копий, лежащих в одной плоскости
- подвижные объекты можно перемещать по сцене и они всегда находятся над неподвижными,
соответственно выставлено, что подвижные объекты отбрасывают тени, а неподвижные принимают. Двигать можно всегда только один объект при этом все остальные стоят неподвижно, хотя пока даже изначальная отрисовка сцены идет очень долго.
Пробовал изменять число источников света, от которых считать тени - эффекта не дало.
Может надо где-то как-то включить какую-нибудь буферизацию на странице?
Т.е. странно - переключаешься между закладками браузера и когда переходишь на закладку сцены происходит зависание до 4-х секунд при том, что сцена уже загружена ранее же, по-новой никаких копий объектов не создается (просто перешли на другую закладку и вернулись обратно).
При этом стабильное зависание при переключении на закладку со сценой наблюдается в хроме, в firefox-е на этой же машине тоже подвисает, но через раз (в ie не смотрел).

Возможно ли, что время обсчета сцены зависит от расстояния камеры до сцены? (Типа длиннее лучи,, дольше считать :)) Основная плоскость сцены размером 20 на 20 единиц, чтобы камера с дефолтными настройками всю ее захватила, глядя на нее строго сверху, приходится размещать ее на расстоянии порядка 40 единиц от сцены. При этом хотелось еще бы попробовать не перспективную камеру, а ортогональную, но при ортогональной даже с расстояния 70 сцена не лезет в кадр, а если выставить больше например 100, то сцена вообще пропадает, не видно ее становится (может уплывает из фокуса, пока не понял).
23 февраля 2016 00:21
Попробуйте поиграться с настройками теней.
Например, уменьшить resolution.
Включить каскадные тени и настроить дальность прорисовки конкретно для вашей сцены.
Разрешение менять пробовал. Не помогло.
Ощутимо помогло в комплексе:
1 - изменил тип камеры (была Target, поставил статичную)
2 - уменьшил число полигонов мешей (в среднем каждый объект был порядка 3000 полигонов)
уменьшил в среднем до 500. Таких объектов порядка 50 штук на сцене.

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

Возникло еще несколько мелких вопросов:
1. по scenes.set_outline_intensity. Возможно ли регулировать как бы жесткость выделения (т.е. например, чтобы меш выделялся не размытым свечением, а более четким контуром)

2. возможно ли с помощью m_scenes.pick_object как-то определить объект над, которым находится мышь, при условии, что нужный объект перекрывается другим объектом? (т.е. клик идет на одном объекте, а обратиться надо к обратиться надо к объекту, который за ним или например, мы тащим объект и надо выделять объекты, над которыми мы его тащим).

3. В примере объекты таскаются мышью с большой инерционностью, т.е. не успевают за мышью.
Видимо, сам по себе js + отрисовка не успевают. Возможно ли это как-то решить особенно, если объект перемещается в одной плоскости, без большой перспективы? Например, на время перемещения перемещать не сам меш, а как бы его скрин, а на mouseup снова отрисовать объект :) Или может есть более гуманные варианты?
21 февраля 2016 23:57
Всем привет. Вернулся к старому вопросу по поводу крайне медленной отрисовки сцены.
Выяснил, что все дело в тенях.
Т.е. если в рендере отключить генерацию теней, то все хорошо работает, объекты можно перемещать по сцене более менее без лагов. Но если включить генерацию теней, то начинаются жуткие тормоза как при изначальной отрисовке сцены, так и большая задержка по отклику на реакцию мыши (перетаскивание объектов).
Но без теней сцена резко теряет вид.

На сцене
- две источника Hemi, у которых отключена генерация теней
- освещение мира (генерация теней включена).
- и порядка 20 объектов, которые:
- отбрасывают тень
- сами не принимают тени и отражения (вообще отражения практически не влияют на скорость отрисовки)
- каждый из 20 объектов имеет 3 тыс. полигонов.
- все эти 20 объектов отбрасывают тени просто на плоскость, ну и выделяется рельеф самих объектов.

Вопрос. Что можно сделать с тенями, чтобы они были и чтобы работало не так медленно?
13 февраля 2016 11:30
Спасибо, Михаил. Интересно дождаться материалов :)

Еще возник вопрос.
Сцена экспортирована в json, подхватывается в html.
В среднем за полторы секунды грузится локально (секунда загрузка json + 0.3 секунды еще генерятся скриптом объекты на сцене).

Но дальше наблюдается такой момент.
Если в хроме открыто несколько закладок, то при переключении на закладку, где уже отрендерена сцена идет зависание тоже где-то на секунду (при том, что json же не грузится уже и при том, что на другие закладки переключение идет быстро). То же самое и с поворотом камеры - сильно тормозит. (Core i5, 16Гб оперативки, правда без отдельной видеокарты, но с графикой особых проблем раньше не замечал).

При этом примеры из прилагающихся туториалов работают нормально, не тормозят.
На сцене порядка 40 объектов с общим числом полигонов ~110тыс. Попробовал уменьшить число объектов до 10, ничего не изменилось. Есть подозрение, что что-то не то выставил в рендере или в свойствах объектов. Попробую методом исключения убирать. Но с другой сотроны, так не на всех машинах же тормозит.
12 февраля 2016 16:57
Такое поведение камеры не поддерживается, движок выровняет её по горизонтали.
Странно, но камера смотрит сверху вниз (так же как если выбрать вид сверху в блендере).

Тип источника света Area не поддерживается. Какого эффекта вы ходети добиться с помощью него? Вы можете использовать Hemi или Environment Map Lighting со светимостью с нужной стороны.
Ну хотя бы блики чтобы были для выделения объема. И странно, но блики есть от area.


Да естественно если сделать просто темный материал без текстур и эффектов то можно получить просто черный материал. Даже у черного мрамора есть лёгкая еле заметная текстура, так же можно сделать либо отражение, либо в самом материале можно добавить Кубамапу и подать её в Color по френелю. И настроить размытый спекуляр.
Эмм…. )))) Все это придется на форум по блендеру переадресовать ) Или может видеотутор какой нарыть бы )


Что бы объекты отражались но небыли видны предусмотрен специальный параметр Reflect Only в настройках объекта, он будет отражаться но не будет виден для камеры.
Вот спасибо. Может решит вопрос. Хотя кубамапа с колором по френелюс размытым спекуляром звучит как что-то более подходящее

Вот тут.
Вупор, как говорится. Спасибо )
12 февраля 2016 16:49
И еще не нахожу где в блендере есть закладка Render, о которой говорится в документации
Пробовал и Ctrl+Alt+U - в настройках не видно.
Смотрю на вкладке свойств (Properties), где есть закладки Объекты/Материалы/Текстуры/Сцена/Окр мир и т.п.
Но закладки Render там не вижу
12 февраля 2016 16:20
Добрый день.
Вопрос наверно, больше по самому блендеру, но хотелось бы услышать ответ в контексте возможности реализации в b4w.
1. Есть простой меш - плоскость, допустим с материалом, черного цвета.
2. На эту плоскость строго сверху смотрит камера.
3. Сверху сбоку на эту же плоскость вместе с окружающим светом светит area
4. Хотелось бы получить материал что-то вроде черного полированного мрамора (пробовал по-всякому играть с материалом)

Но на html-страничке получаю просто черный квадрат (максимум, можно блик поймать, покрутив лампу, но блик получается слишком ярким как засвет и все портит или наоборот бледным, т.е. просто бледно-черный квадрат)

Вопрос как добиться глубины цвета/материала?
Напрашивается ответ: добавить на поверхность тени и отражение каких-то предметов (может еще есть варианты, не знаю).

Но возникает вопрос можно ли добавить меши так, чтобы они отражались в на этой плоскости, но при этом не попадали в кадр камеры (т.е., чтобы их вообще не было видно на сцене, при том, что камера находится достаточно далеко от поверхности, т.е. эти меши надо поместить между камерой и плоскостью, чтобы они отражались в ней, но при этом, чтобы в кадре их не было )?