Форум

А что это за ужасные тени?

11 января 2017 22:38
Решил для динамических объектов попробовать настроить риал-тайм тени и совсем не понял, как эта часть движка работает или должна работать. В общем, alpha blend вообще тени не работают, так же как и в add. Остальные выдают жирные черные тени, которые при повороте объекта через обычный b4w.transform.rotate_z_local просто сдвигают тень как будто она идет не от объекта, а от его боундинг-бокса. Проверил все сниппетсы и проекты - флаг почему-то тень-полоска, по остальным тени статические.

Тени, вообще, есть? Они полноценно работают?
Я хочу в cycles при запекании отключить несколько динамических объектов и смоделировать для них риал-тайм тени.
Алексей
12 января 2017 15:39
В общем, alpha blend вообще тени не работают, так же как и в add.
Для прозрачных объектов тени не поддерживаются. Нужно сделать копию объекта, для которого выставить опцию Cast Only, тогда такой объект будет невидимым, но будет отбрасывать тень. Ещё можно использовать Alpha Clip материалы - для них тени также работают.

Остальные выдают жирные черные тени
Цвет теней зависит от настроек освещения окружающей среды: ссылка - если ничего в сцене не настраивали, то рассеяное освещение отсутствует и в тени будет густой черный цвет. В настройках мира достаточно включить настройку Environment Lighting и выставить подходящее значение Energy.

Размеры, толщина и пр. зависят от типа и расположения источника освещения, а также от настроек на панели Scene->Shadows. Для наружных сцен логично делать источник типа Sun. По настройкам теней гляньте мануал: Тени - там все подробно описано.

которые при повороте объекта через обычный b4w.transform.rotate_z_local просто сдвигают тень как будто она идет не от объекта, а от его боундинг-бокса
Похоже на баг, не смог воспроизвести, но тени на скриншоте точно выглядят неправильно. Можете скинуть сцену?

Проверил все сниппетсы и проекты - флаг почему-то тень-полоска, по остальным тени статические.
Про флаг не понял, с ним, вроде, все нормально. Статика или динамика - неважно, тени рендерятся одинаково.
Команда Blend4Web
16 января 2017 11:44
Спасибо. Проверил на другом компе - все нормально. Скорее всего вопрос к драйверам видеокарты и винде10. Думаю, тема закрыта.
Алексей
16 января 2017 23:28
Поспешил я видимо с закрытием темы.

Тени, что Opaque, что Clip - проходят через стенки, backface culling включал, отключал, все виды прозрачности менял - ничего.

Приходится тратить кучу времени на все это, хотя к разработке приложения это не имеет никакого отношения.
Алексей
16 января 2017 23:33
Уточните, можно ли динамически сделать объект прозрачным? Если тени и динамика нормально (доступно для пролетариев) не впишутся в приложение - хотя бы прозрачными сделаю двери при пролете через них.
Алексей
17 января 2017 12:48
Тени, что Opaque, что Clip - проходят через стенки, backface culling включал, отключал, все виды прозрачности менял - ничего.

Вы об этом?

- если говорить о физической модели, то тень сзади должна быть в любом случае, просто отбрасывать её должна была сама плоскость.

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

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

Уточните, можно ли динамически сделать объект прозрачным? Если тени и динамика нормально (доступно для пролетариев) не впишутся в приложение - хотя бы прозрачными сделаю двери при пролете через них.
нельзя
Команда Blend4Web
17 января 2017 15:28




А обойти этот момент с тенями как-то можно, если использовать скрытый объект типа того, который используется для collision? Если включать отправку теней для всех объектов, то нагрузка существенно возрастает и модель перестет нормально работать на значительной части компьютеров.
Алексей
17 января 2017 16:22
Если честно - на скриншотах не очень понятно, как все это проявляется. Конкретно с дверьми - если нужна возможность включать/отключать тени, то на самом объекте можно тени отключить, сделать копию этого объекта и выставить на нём опцию Shadow Cast. Тогда копию, которая отбрасывает тени, можно будет скрывать/показывать в нужный момент.
Команда Blend4Web
17 января 2017 17:45
Ответ на сообщение пользователя Иван Любовников
Если честно - на скриншотах не очень понятно, как все это проявляется. Конкретно с дверьми - если нужна возможность включать/отключать тени, то на самом объекте можно тени отключить, сделать копию этого объекта и выставить на нём опцию Shadow Cast. Тогда копию, которая отбрасывает тени, можно будет скрывать/показывать в нужный момент.

Все именно так и сделано. На этих скрытых объектах выставлено shadow cast & cast only, на всех остальных объектах receive shadows и задумка, ясное дело, в том, чтобы для динамических объектов включить тени и получить запеченную модель с небольшим количеством теней. Насколько я понимаю, чтобы тени не сквозили через объекты, на них надо выставить также и receive shadows, но это существенно меняет дело. Тогда считать приходится по теням всю геометрию. В документации написано "выставить на объектах receive shadows", а про cast shadows и то, что тени будут проникать через все поверхности ничего не сказано. То есть, либо все запечено и работает быстро либо надо считать всю модель с тенями от всего и тогда, скажем прямо, далеко не на всех компах работает. Для мобильного приложения это уже не подходит.

Может есть возможности отключать тени в зависимости от видимости объекта на экране? Прозрачностью нодой value можно как-нибудь управлять?
Алексей
17 января 2017 18:50
То есть, либо все запечено и работает быстро либо надо считать всю модель с тенями от всего и тогда, скажем прямо, далеко не на всех компах работает. Для мобильного приложения это уже не подходит.
Есть вариант настроить тени похуже качеством - будут считаться побыстрее, но не факт, что их вид вас устроит.

Может есть возможности отключать тени в зависимости от видимости объекта на экране? Прозрачностью нодой value можно как-нибудь управлять?
Если настроен cast only объект, то можно просто его скрывать методом hide_object, тогда и тень отключится. Нодой value тоже можно. Если материал типа Alpha Clip, тогда value надо присоединить ко входу alpha ноды Output.

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