Сообщений
10, на страницах:
1добавить сообщениеСоздание реалистичных водных поверхностей для использования в BGE
Скачать архив с туториалом + исходная сцена (2.7 Mb)
ВведениеТуториал описывает пошаговые инструкции по созданию реалистичных водных поверхностей для использования в Blender Game Engine. Он рассчитан скорее на подготовленного пользователя чем на новичка. Версия блендера должна быть не ниже 2.49. Работа является вольной адаптацией туториала
http://blenderartists.org/forum/showthread.php?p=1422042#post1422042СтартИтак, поехали. Открываем блендер, удаляем стартовый куб. В режиме затемнения включаем отображение текстур.

Во вкладке Game (в верхнем левом углу) ставим галочку напротив Blender GLSL Materials. Добавим в нашу сцену плоскость (пробел → add → mesh →plane). Выбираем вид сверху (кнопка 7 на цифровой клавиатуре). Маштабируем поверхность: нажимаем S, вводим число 10 и Enter, далее кнопка N, появится окно Transform Properties. В нем изменяем имя плоскости на water_surface, в настройках материала добавляем новый материал (закладка Links and Pipeline -> Add New) и активируем ZTransp - должно получится вот так:
СкриптДля создания реалистичной воды нам понадобится небольшой скрипт и настройка логических блоков. Подразделяем окно 3Dview на две части, в левой или правой части меняем тип окна на Text Editor и вставляем текст для скрипта mirror (примеры всех необходимых скриптов есть в архиве с туториалом, вам нужно будет отрыть их в любом текстовом редакторе, скопировать текст и вставить его в блендер).
Переходим в панель логики (F4), нажимаем на Add Property, выбираем тип string и вводим значения как показано на рисунке. Теперь добавляем сенсор Always, соединяем его с созданным контроллером Python и вводим mirror.
ТекстурированиеДалее переходим в меню текстур (F6) и добавляем новую. В качестве текстуры воды можно использовать изображение практически любого размера и цвета, это связано с тем что поверхность воды как зеркало отражает окружающий мир. В закладке Texture нажимаем Add New, выбираем тип Image и нажимаем load. Из списка выбираем water.png (образцы ВСЕХ необходимых текстур идут в архиве с туториалом). Таким же способом создаем текстуру — карту нормалей (water_n), она добавит нашей водичке замечательные «гребешки» волн. В настройках текстуры нажимаем Normal Map.
water_n — текстура анимированая и чтобы сделать такую для своего проекта потребуется немного повозится, видеоурок например можно посмотреть
здесьМеняем тип окна на UV/Image Editor. Выбираем из списка доступных текстур water_n. Далее в меню View → Real-time Properties прописываем настройки, как показано на скриншоте:

Теперь нажимаем F9 и добавляем UV-текстуру.

Возвращаемся к настройкам материалов и для текстуры water_n в панели Map Input устанавливаем значения sizeX и sizeY равным 20. Там же меняем метод текстурирования с Orco на UV. В панели Map To параметр Col меняем на Nor — от числового значения этого параметра будет зависеть «жесткость» отражения ряби, попробуйте поэкспериментировать с настройками Nor от 0 до 1. Основные же настройки искажения волн можно будет изменять в редакторе Нодов чуть позже.

Мы добавим еще одну текстуру radial_alpha.jpg, назовем ее radial_a а после создания удалим из списка, эта манипуляция позволит использовать ее в редакторе Нодов.
Редактор НодовПо использованию нодов написано не так уж и много материала, но это достаточно обширная тема, которая заслуживает отдельного рассмотрения, поэтому не будем останавливаться на подробном изучении данного вопроса. Скажу лишь только, что нужно внимательно следить за всеми взаимодействиями между узлами, потому что малейшее изменение взаимосвязей сильно влияет на конечный результат:)
В настройках материалов на закладке Links and Pipeline нажимаем Nodes, вместо add new выбираем наш материал water_surface, после чего в окне 3DView открываем Node Editor.

Перед нами появится два нода, левый мы удалим, и с помощью комбинации пробел → add → добавим необходимые части как показано на рисунке:
PlayПосле того как мы закончим с нодами открываем окно 3DView и нажмем P. На экране должна появится анимированая водичка синего цвета. Теперь подкорректируем цвет гребней волны — они сейчас тоже синие. Нажимаем Tab и в режиме редактирования с помощью кнопки А выделяем все вершины. Меняем тип окна на UV\Image editor, в нем нажимаем А еще раз для выделения всех вершин, после кнопку М → X Axis. Нам еще понадобится развернуть текстуру на 180 градусов. Нажимаем R и вводим 180 и Enter. Переключаемся в 3DView и в объектном режиме добавим любой объект прямо над водой. Нажимаем Р. Ну как, выглядит совсем не плохо?

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

После добавления неба водичка станет достаточно привлекательной и пригодной для использования в BGE:
Под водойОк, теперь у нас есть красивая водная поверхность, однако для полноты эффекта добавим изменение резкости при погружении в воду и дно. Но перед этим нам нужна возможность перемещаться по сцене. Открываем Text Editor и добавляем новый скрипт mouselook. В окне 3DView выделяем камеру и переходим в настройки логики (F4). Изменяем параметры как показано на рисунке, обратите внимание на названия объектов, их нельзя называть по-другому, поскольку они прописаны в скрипте.

Теперь в окне 3DView создадим плоскость, назовем seabed и в меню Transform Properties (N) зададим параметры как на скриншоте:

Далее на плоскость добавим текстуру дна (Тех38.bmp) и перейдем на создание стен и «подводного окружения». На стенах подробно останавливаться не будем, скажу только что это четыре плоскости соединенные вместе с текстурой каменной кладки (если вы дошли до этой части туториала проблем со стенами возникнуть не должно). Теперь создадим еще одну плоскость и в Transform Properties назовем ее underwater_surface. Нажимаем F9 и добавляем UV текстуру. Переходим в настройки материала:

Отлично, а теперь последний но не менее важный этап — добавим в нашу сцену 2D фильтр, который будет имитировать подводную среду. В меню 3DView выбираем камеру и жмем Shift + S → Cursor → Selection. Нажимаем пробел и добавляем куб. Далее S, вводим 0.1 и Enter . Теперь выбираем куб, зажимая Shift выделяем камеру и нажимаем Ctrl + P → Make parent. Дальше пробел → Add → Empty. Выбираем Empty, затем куб, нажимаем Tab и в режиме редактирования выделяем ту вершину, которую видно из камеры (кнопка 0) → Ctrl + P → Make vertex parent. Нажимаем Tab и добавляем в нашу сцену лампу. Привязываем ее к камере. Если все сделали правильно в меню Outliner мы сможем наблюдать такую картину:

Открываем Text Editor и добавляем еще 2 скрипта — fog_underwater и blur_radial. Согласно следующему скриншоту редактируем объект Empty в настройках логики (F4):

Ну вот и все! Надеюсь вам понравился туториал также, как и мне понравилось с ним работать. Удачного блендинга!
S.LavikP.S. Спасибо SpewBoy, за интересную реализацию возможностей BGE. Также спасибо Igor BV Palych за критические замечания, повысившие уровень туториала.