masterspammer (masterspammer) wrote,
masterspammer
masterspammer

Categories:

Воксели, боиды и мемы - песочница

(продолжение ранее начатой темы)

Песочница заполнена песком и представляет собой квадрат много*много (например, 10000*10000 песчинок) . Песок сыплется и по-умолчанию(*) не допускает пустот. То есть для каждой координаты достаточно знать высоту, чтобы полностью определить расположение песка. Получается массив чисел. Одно число - один "столбик" песчинок.

Сумма всех "высот" по всем координатам постоянна(**) - в каком-то смысле это закон сохранения. Более того, при появлении чего-то (например, насекомое "вылупилось" из яйца) оно появляется "из песка", оставляя ямку (возможно даже соответствующей формы), а при исчезновении - распадается на песок (см. далее про состав грунта) - возможно, не всё, а только недоеденная хищником часть. Рост - уменьшает количества песка (через поедание растительности) в песочнице; естественно, только лишь до момента смерти существа. Ну и гадить они будут (чтоб не расти бесконечно) тем же песочком (но с другим составом :-) ).

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

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

Клетки имеют и вычислимые параметры, например высота (среднее высот клеток), уклон (угол и азимут) и "шершавость" рельефа,  высчитываются из значений высот в точках, а солнечная радиация (в данный момент времени) - из уклона и погодных условий. Кэшировать или нет эти параметры - вопрос технический, и сугубо практический.

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

Погода в песочнице моделируется так (и по совместительству так же происходит визуализация):

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

Пиксельные и воксельные объекты (существа, пыль, паутина и тому подобное) находящиеся над песком считаем состоящими из висящих точек. Висящие точки имеют альфа канал и могут быть полупрозрачными.

Для каждой "висящей" точки актуальны координаты в двух плоскостях - относительно солнца (проекция на плоскость, перпендикулярную солнечным лучам) и относительно земли (собственно вертикальная проекция). Координата относительно солнца позволяет взять все точки, перекрывающие свет до данной (и отобразить тень если они есть). Где-то бесконечно высоко - плоскость точек с неопределённой координатой относительно земли - это облака, их тень движется по земле (как от изменения времени суток, а значит и угла падения лучей, так и от просто движения самих облаков). Сами облака не показываются.

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

(возможно, через размытие и изменение цвета в зависимости от высоты/глубины можно придать визуально большую объёмность итоговой картине; сюда же - имитация сглаживания теней из-за неточечного характера источника света - с ростом высоты тень более размыта)

Для клеток освещённость влияет на температуру. Висящие точки для клеток не рассчитываются, то есть на растительность не влияют; облака - влияют опосредованно через коэффициент облачности.

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

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

Температура воздуха должна зависеть от температуры почвы, высоты и так далее. Пока моделироваться не будет.

------

Игровое поле будет выглядеть как Google Maps :-) и самое забавное, что я вполне представляю себе все алгоритмы, которые требуются для вышеописанного. Другое дело, что многие коэффициенты придётся находить опытным путём.

------

Примечания:

* "дыры" и "норы" моделируются отдельно и возможны далеко не для всякого места. Например, сухой песок просто осыпется.

** с поправкой на подземные пустоты, если они есть.
Tags: gamedev, xbugs, ФиксикиПокусали, ХочетсяСтранного
Subscribe

  • (no subject)

    Дети притащили из школы ротовирус - так-то это довольно регулярная болячка, хотя штаммами разнится как грипп - на этот раз досталось сыну и чуть…

  • Техноорки

    Началось с того, что у жены в машине начал часто загораться индикатор аккумулятора и иногда возникать глюки зажигания на полной нагрузке…

  • Заусенец

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

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments