Author Topic: Лесная зарисовка  (Read 580 times)

0 Members and 1 Guest are viewing this topic.

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #15 on: March 19, 2018, 06:49:12 PM »
К своему стыду я только сейчас осознал, как капризен Ньютон. Нет-нет, это очень хороший физ. движок, не самый быстрый, правда, не самый стабильный, но удобный и богатый возможностями. К чему это я?   
Оказывается, Ньютон очень не любит глобальных объявлений в main-е и до него.

Например, обычный код для создания физ. персонажа- камеры:
Code: [Select]
///КАМЕРА
wNode* camPlayer=wFpsCameraCreate(100,0.5f*0,&wKeyMapDefault[0]);
wNodeSetPosition(camPlayer,cameraPosition);

///ФИЗ. ТЕЛО-ЭЛЛИПСОИД
wNode* camBody=wPhysBodyCreateSphere(radius,mass);

///СОЧЛЕНЕНИЕ- АП-ВЕКТОР
wNode* camJoint=wPhysJointCreateUpVector(wVECTOR3f_UP,camBody);

Ничего особенного, оно работает, но....... через раз вызывает крах. Я извелся, ловя, где собака копала.
То в оконном режиме работает, в фуллскрине вылетает, то наоборот. Никакой связи.......

Но если подойти ТАК, все ОК.

Code: [Select]
wNode* createPhysPlayer(wVector3f position,wVector3f radius,Float32 mass)
{
    wNode* camBody=wPhysBodyCreateSphere(radius,mass);
    wNode* camJoint=wPhysJointCreateUpVector(wVECTOR3f_UP,camBody);
    wNodeSetPosition(camBody,position);
    return camBody;
}

......
......
Code: [Select]
wNode* camPlayer=wFpsCameraCreate(100,0.5f*0,&wKeyMapDefault[0]);

    wVector3f cameraPosition={-2000,terrainMax.y+50,};
    wNodeSetPosition(camPlayer,cameraPosition);

    wNode* cameraBody=createPhysPlayer(cameraPosition,{20,100,20},10.f);

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

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #16 on: March 27, 2018, 08:44:29 AM »
Привет всем.

Небольшие сдвиги в проекте.

Реализовано:
-Смена времен года (лета/осень/зима/весна);
-Смена времени суток (день/ночь);
-Домик лесника (модель из ассетов движка) и костерок возле дома; От костра исходит свет, радиус которого колеблется.
-Проверка столкновений с возможностью отключения.
-Фонарь (ненаправленный свет) для ночных прогулок по лесу.

Доделаю озеро и скоро выложу первую демку.

С сожалением констатирую, что XEffects для больших сцен малопригоден.

Пока для меня самая большая проблема- сделать тени. Стенсильные стандартные не годятся: для деревьев нет возможности подключить, так как деревья не имеют полноценных мешей в смысле wMesh. Я мог бы обойти это, но, думаю, фпс просядет на порядок. При условии, что у меня он и так 20-30, это будет печально.   Есть мыслишки на будущее о тенях:
-Из дерева генерируем настоящий меш
-Создаем временный нод с мешем дерева
-Проецируем в текстуру
-Обрабатывает для получения однородной картинки
-Из полученной текстуры получаем декаль
-Располагаем его в соответствии с позицие дерева и положением солнца
-Накладываем декаль на террайн.   Но это в теории.

На первом скрине- летняя ночь возле домика.
На втором- прогулка по ночному зимнему лесу с фонарем.
На третьем- берег озера (осень).

« Last Edit: March 27, 2018, 05:30:58 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 885
  • Reputation 34
  • Game making is my hobby for life!
Re: Лесная зарисовка
« Reply #17 on: March 27, 2018, 05:54:10 PM »
Смотрится неплохо. Интересно походить по сцене, буду ждать демку.

Тени можно попробовать сделать через другие шейдеры (не xEffects). Возможности как DirectX 9.0c, так и OpenGL это позволяют. Я не говорю про всякие навороты, а просто про мягкие динамические тени, которые были доступны уже в DX 8.1.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #18 on: March 27, 2018, 09:05:45 PM »
Ок.

Покажу мою жалкую попытку внедрить стенсильные тени прямо из мешбуфферов.  Как я и подозревал, ничего хорошего не вышло.
Впрочем, начиная с версии иррла 1.8 я на своей машине уже ни разу не видел нормальных стенсильных теней.
Даже в стандартных туториалах.

Жаль, что так. Я тут вник в технологию работы нода стенсильной тени. При желании можно было-бы сделать вполне нетормозные тени. Отключить их регенерацию для случаев, когда не меняется положение источников света. Создать ПОСЛЕ добавление всех запланированных статичных источников света и рендерить спокойно.

С шейдерами тоже пока не клеится, буду копать пока в сторону декалей.

« Last Edit: March 27, 2018, 09:21:46 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #19 on: March 29, 2018, 04:12:07 PM »
Привет всем.
Продолжаем эксперименты с тенями.
Собрал гибридную сборку иррлихт: со стенсильными тенями от версии 1.7.3 и с новыми.

Результат, по моему, очевиден.

Теперь попробуем сделать отключение регенерации теней. От Солнца, например, не требуется их постоянное обновление. От фонарика- не обязательно, будет слишком затратно.
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 885
  • Reputation 34
  • Game making is my hobby for life!
Re: Лесная зарисовка
« Reply #20 on: March 29, 2018, 06:34:33 PM »
Привет.
Ну ты гений. Вот аналитический склад ума тебе очень помогает. Скоро текущие разработчики Иррлихта начнут писать тебе на e-mail, если узнают о твоих наработках. А что у них в 1.9. разве не исправлено это? Получается нет.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #21 on: March 31, 2018, 01:03:50 PM »
Привет всем. Признаться, запланировал я больше, чем сделано.

Вот первая демка "Лесной зарисовки".

Сразу скажу: подводная часть не реализована.

Вообще как-то энтузиазм поугас: много проблемных мест. Например, штатные коллизии работают на тройку: то и дело камера "застревает" в террайне. Пока отключил селектор ландафта, сделано без него. Но это временный вариант.

Дальше. Тени полноценные стенсильные для дерева, полученного с помощью Генератора деревьев, имхо, пока не реализованы. Только от стволов, от листьев- нет. Пока не ясно, как с этим бороться.   Тени и так пришлось штопать из иррлихт 1.7.3, родные совсем не годятся.

Коллизии так-же пришлось допиливать. Не работала функция создания коллизии по габаритной коробке.

В остальном- голый движок, без сторонних шейдеров, только стандартные материалы.    По крайней мере пока.

Проведена череда оптимизаций, так что интересует фпс. В сцене- 2000 деревьев, к каждому подключены коллизии и тени+ шевеление от ветра.

Каждое дерево имеет: два лод-уровня + биллборд с изображением дерева (будем считать третьим уровнем).

Деревья, не попавшие в створ камеры, а так же их тени- становятся невидимыми. Озеро тоже.

Для дождя задействовано 13 000 биллбордов, для снега- 10 000.

Для травы- 14 000 + 7 000 частиц двух видов. Каждую травину и дерево раскачивает генератор ветра, поэтому нагрузка на ЦП есть.

Небо- трехслойные новые облака, появивившиеся в движке в WS3D относительно недавно. Вода- стандарная, старого образца. wRealWater выглядела бы получше, но она не поддерживает туман. Пока не используем.

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

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

Будем собирать пожелания и замечания, если таковые будут.  Исходники: С++, будут по требованию.

В архиве есть часть лишней медии из ассетов движка, лень фильтровать, если честно.
« Last Edit: May 28, 2018, 02:40:05 PM by Nikolas - WS3D Developer »
Под лежачий камень мы всегда успеем...

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Re: Лесная зарисовка
« Reply #22 on: April 04, 2018, 06:43:33 AM »
Quote
Тени полноценные стенсильные для дерева, полученного с помощью Генератора деревьев, имхо, пока не реализованы. Только от стволов, от листьев- нет. Пока не ясно, как с этим бороться.
А никак. Стенсильные тени не предназначены для проекции теней от полупрозрачных поверхностей. Поэтому и придумали шэдоумаппинг, который используется в том же XEffects.
Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 885
  • Reputation 34
  • Game making is my hobby for life!
Re: Лесная зарисовка
« Reply #23 on: April 29, 2018, 04:48:23 PM »
Приветик.
Как там говорят? "Я не тормоз. я медленный газ".  ;D (Спустя месяц решл проклмментировать).

Запустил "Лесную зарисовку" и увидел один из лучших (по функциональности) проектов на движке. Реализовано много!
FPS 17-70 смотря на каком участке леса находишься, т.е. смотря сколько полигонов обрабатывается в данный момент (тестировал на нубуке:
ОС: Windows 7 Ultimate 64-bit SP1
Проц.: Intel Core i3 370M @ 2.40GHz
Опер. память: 4,00ГБ 1-канальная DDR3 @ 532 МГц
Видеокарта: 512 МБ  ATI AMD Mobility Radeon HD 5000 Series
Мышь: серая, домашняя, любит сыр  ;D ).

Помимо других фич, понравилась смена времени года одним кликом. Умно!

Можно реализовать 1 мелочь: при включении осадков можно внедрить затухание костра.
Тени... да, нужно что-то делать, хотя для любительской инди-игры пойдёт, геймеры простят, если игрушка будет интересной.
Ну и подводный мир, тоже можно что-то сделать. Например, хотя бы просто если опускаешься ниже уровня воды делать свет меньше, т.е. сцену темнее. Также подключить один из шейдеров постобработки (пример 120), например эффекты №№ 2,6,19,20,23,26,27,28,39,42.
Поднимаешься из воды - отключать эффект.

Думаю, стоит делать продолжение. Можно для большего фана ввести какой-нибудь простой игровой момент уже, цель какую-нибудь.

Хорошая работа, Nikolas!  ;)
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Offline Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Re: Лесная зарисовка
« Reply #24 on: April 29, 2018, 05:57:44 PM »
Запустил сегодня со звуком демку и был ошеломлен. Так гораздо круче. Вообще, демка мне очень понравилась - быстрая смена времени года/суток, которая за собой тянет смену эффектов... очень круто. С дождем, осенью и туманом мне напомнило сильно игру "Мор. Утопия". 5+ за демку
Crudux Cruo!

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #25 on: April 30, 2018, 10:24:00 AM »
Привет всем. Спасибо за тестирование и отзывы. Сколько много слов написано! Я уж было решил, что все совсем отстойно получилось.
Смотря с чем сравнивать, конечно. Продолжение, наверное, будет, но не сейчас. Все пожелания учтём обязательно.
Под лежачий камень мы всегда успеем...

Offline ALex98

  • Friends
  • Commoner
  • *
  • Posts: 20
  • Reputation 4
Re: Лесная зарисовка
« Reply #26 on: June 20, 2018, 11:58:33 PM »
Классная демка) Выдаёт в среднем 40 кадров при включенном дожде и тенях. Самый минимум кадров который был - это 31. Самое главное, что проект спокойно запустился в wine и работал на порядок быстрее , чем прошлая версия на windows 8.1. Ну и тестовое железо(Ноутбук) :
Проц :Intel Core i7-6700HQ CPU @ 2.60GHz(На самом деле обычно 3.5 ГГц)
Видюха :NVidia GeForce 940M , 2gb
Оперативка: 8gb ddr3
ОС : Xubuntu 18.04 x64

З.Ы.: Прикольно смотреть вверх и жмать "W", можно ещё и полетать по уровню :)

Online Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Re: Лесная зарисовка
« Reply #27 on: June 21, 2018, 08:34:16 AM »
Привет, Alex98, спасибо за тест.
Quote
смотреть вверх и жмать "W", можно ещё и полетать по уровню
Если отключить галку "Collision", можно летать как угодно и где угодно без гравитации и столкновений.
Под лежачий камень мы всегда успеем...