dynamic sun WIP

Список разделов Уроки и Часто Задаваемые Вопросы (ЧАВО, FAQ) Blender 3D

Модераторы: exooman, PORSHNE

Сообщение #1 Николас » 01.07.2018, 17:44

Здарова.
Для начала так - если не задеты авторские права иных сторон, то идея (старт, как и продолжение) СС0 1.0

Что ж я такого придумал, если такого уже нет конечно? И даже пытаюсь разработать/доработать.

Вы знаете, что в Блендере есть привязка солнца к вершине игрока - оно движется за ним и не вращается.
Я подумал о такой вещи:
- солнце имеет разрешение теней, оно размещено (по теням) по центру игрока, но в таком случае 3/4 теней всегда вне обзора - "мертвая" зона.
И вот решил сделать скрипт - dynamic sun, где солнце с тем же разрешением теней перемещается в зависимости от положения и вращения персонаж. То есть, фактически задействуется на 100% теневой буфер, а это то, что если у вас по классике 1024, то с таким скриптом получится 2048 - разрешение теней. А это экономия в 4 раза видеопамяти. Там может быть и 4096, просто не 1/4 в обзоре камеры, а все ~100% (есть пару % потери все ровно)...
Пока есть наработки, и мне бы не хотелось что бы где то кто то НЕ залицензировал под себя исключительно - теория в СС0 1.0 это, ради чего я начал WIP. Я люблю GPL, я люблю копирайт и я люблю Блендер пиплов - лучше что бы у всех такое было. А там хоть и под Unity®, хоть под Unreal® или ... (если нет такого) - мне все ровно.

Вот схема работы (принципиальная):
Изображение
*потом постараюсь выложить полу рабочий скрипт - полу, потому что углы наклона солнца не до конца проработаны
** скрипт сам по себе не сложный, при понятном принципе много кто может и сам себе разработать


Благодарю за внимание.

Добавлено спустя 51 минуту 28 секунд:
Вот первый рабочий пример - можете подключится к разработке, а можете и себе отдельно сделать...
Поскольку стараюсь разработать более универсальный скрипт (на все углы) то пока логике далеко до конечной, но уже кое что есть - принцип работы, а углы и вариации можно доделать.
Вложения
dynamic_sun01.blend.zip
(512.49 КБ) Скачиваний: 8
Николас M
Аватара
Откуда: Черновцы +
Сообщения: 211

Сообщение #2 exooman » 01.07.2018, 19:23

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

Добавлено спустя 7 минут 41 секунду:
в своем скрипте ты еще значения подбираешь, а куда проще и быстрее во вьюпорте перетащить солнце, закрепленное к камере и всё. Ведь в скрипте, ты по-сути делаешь всё тоже самое, но ради большей точности еще будешь добавлять автоматизацию просчета DoF камеры и алгоритмы калибровки. И учитывая, что всё это на питоне, уж лучше буфер теней увеличить в 2 раза, чем терять еще больше производительности на логике.

Ну и напоследок вот такой аргумент - подобная калибровка будет иметь смысл только в тестах, на реальной же сцене это эффекта не даст никакого. Почему? Потому что, чтобы его заметить, пирамида усечения должна быть достаточно маленькой. А это значит, что настройки будут такими, что тени станут урезаться прямо под носом.
То есть, никто изначально не будет настраивать так солнце. Да и как помню, тени в блендере отображаются в два каскада. То есть, еще есть вероятность, что при таком алгоритме ты будешь видеть тени крайнего каскада (меньшего разрешения).
exooman M
Аватара
Сообщения: 1491


Сообщение #3 Николас » 01.07.2018, 21:30

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

Добавлено спустя 7 минут 41 секунду:
в своем скрипте ты еще значения подбираешь, а куда проще и быстрее во вьюпорте перетащить солнце, закрепленное к камере и всё. Ведь в скрипте, ты по-сути делаешь всё тоже самое, но ради большей точности еще будешь добавлять автоматизацию просчета DoF камеры и алгоритмы калибровки. И учитывая, что всё это на питоне, уж лучше буфер теней увеличить в 2 раза, чем терять еще больше производительности на логике.

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

Между 1024, и 2048 не 2х, а 4х... не очень увеличишь.
Ни каких DoF не надо, просто алгоритм еще не доработан.
И солнце не есть спот-лайт, и далеко не костыль - мое мнение, уж простите. Там только фильтры сглаживания можно добавить, как в UPBGE.
Солнце всегда привязывается со смещением в ту или иную сторону (а не только в перед) - но центр фрустума на игроке, вот и потеря 1/4 теневого буфера. И если оно привязано к вершинам - оно даже не меняет положение свое относительно игрока, если на прямую к игроку - то вертится, но и угол солнца тоже - что весьма не то. Питон не сильно нагрузит систему, даже не заметно, знаю из своего опыта - алгоритм не сложный.
Вы как будто саму теорию даже не поняли... а есть те, кто понял, и даже слово - экономия.
Не велосипед, а эврика. Не спорте зря, дайте времени все разложить по полочкам - и мне доделать скрипт, и вы потом скажите - фуфло или нет. В скрипте есть большой смысл, если получится разработать угловой алгоритм (вариативный) то еще и универсальный.
Благодарю за внимание.
Николас M
Аватара
Откуда: Черновцы +
Сообщения: 211

Сообщение #4 exooman » 01.07.2018, 23:45

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

А так как абсолютной точности не будет априори(при некоторых углах тени начнут усекаться по краям камеры), один черт придется солнце ставить не далеко от камеры.
Я не пойму лишь одного - чего тут лицензировать, патентовать и прочее? обычная работа с локальными координатами. Причем еще для узконаправленной цели - для оптимизации. Оптимизации, которая бессмысленна, потому что это БГЕ. Тут не тени тормозят, а скелетная анимация с логикой.

Вот тебе самое простецкое решение, без тон кода - возьми свою камеру и сделай её родителем любого объекта. Этот объект и будет нужной локальной позицией для "солнца". Копируй эту позицию по нужным осям и готово. Три строчки кода, а принцип тот же.
exooman M
Аватара
Сообщения: 1491


Сообщение #5 Николас » 02.07.2018, 10:23

exooman писал(а):дада, конечно. Берем координаты камеры, добавляем к ним необходимое локальное значение из которого будем лепить позицию солнца и всё - огород сгорожен.

А так как абсолютной точности не будет априори(при некоторых углах тени начнут усекаться по краям камеры), один черт придется солнце ставить не далеко от камеры.
Я не пойму лишь одного - чего тут лицензировать, патентовать и прочее? обычная работа с локальными координатами. Причем еще для узконаправленной цели - для оптимизации. Оптимизации, которая бессмысленна, потому что это БГЕ. Тут не тени тормозят, а скелетная анимация с логикой.

Вот тебе самое простецкое решение, без тон кода - возьми свою камеру и сделай её родителем любого объекта. Этот объект и будет нужной локальной позицией для "солнца". Копируй эту позицию по нужным осям и готово. Три строчки кода, а принцип тот же.

- абсолютная точность зависит от качества алгоритма. Алгоритм углов еще не доработан, сделан принцип поворота от ориентации и смещения согласно позиции и угла (углы пока хромают). Да и там написал я - почти что на 100% использовать буфер - ~, это значит, что есть маленький запас на перекрытия со всех сторон.
Вообще то, все что пишется, есть объектом интеллектуальной собственности, такой вот Закон... и СС0 это отказ от копирайта, в сторону СС - creative community. А оптимизация почти что в 4 раза использования буфера теней, это есть немного.
И BGE, как мне кажется, как и в любом движке, все смысленно - и оптимизация, и шейдеры... Большой недостаток движка, это старые OpenGl API, но дело мастера боится.

По поводу родителя - я тоже так думал, и по проще пробовал, но вот все ровно вышел на такой скрипт. Я до сих пор не вижу решения в три строчки, да даже и в 10, уж простите. Для решения задачи нужны не только координаты - принцип парент, но и ориентация. А если сделается хороший алгоритм углов и смещения, то получится привязать солнце к дневному/ночному циклу.

Благодарю за внимание.
Николас M
Аватара
Откуда: Черновцы +
Сообщения: 211


Вернуться в Blender 3D

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость

cron