Здравствуйте, вот задумался о создании ночного звёздного неба. Но пока понятия не имею как это сделать, даже алгоритма не могу придумать. Я так понимаю нужно взять чёрный skydome, текстуру звёзд, как-то рандумно раставить, а мерцание.... хм загадка. Ведь на каждую звезду источник света не поставишь - это затратно. Кто-нибудь делал подобное? Можете подсказать алгоритм, статейки или ещё что-нибудь полезное по этой теме.
Спасибо за внимание.
Я когда-то делал системой частиц. Каждая звезда - частица, и у неё быстро меняется альфа (закон изменения подобрать вручную)
http://graphics.ucsd.edu/~henrik/papers/nightsky/
там PDF статья
еще http://www.stellarium.org/
там с исходниками + реальные траектории космических объектов.
ну и хороший каталог звёзд с кординатами:
http://cdsarc.u-strasbg.fr/viz-bin/Cat?V/50
Хм, что мешает написать шейдер, который меняет яркость текстуры функцией вида F(u,v,t) , где u, v - текстурные координаты, t - время?
Мерцание звёзд - это эффект прохождения света через атмосферу неоднородной плотности, чем плотнее, грязнее и т.д., тем больше мерцают.
Я делал просто - изменял яркость по синусу, расстоянию и угловым координатам (что бы все звёзды не в одной фазе мерцали), с большой скоростью изменял яркость от 50% до 100%. Зависит от Visual Magnitude звезды и положения наблюдателя над поверхностью земли.
Честно мало кто заметит как правильно мерцает звезда. Глаз ловит только изменение яркости.
Спасибо за Ваши ответы, постараюсь максимально разобрать каждый из предложенных вариантов, возникнут вопросы отпишусь, ещё раз благодарю.
Если звёзды генерируются шумом перлина, то для мерцания достаточно слегка трясти скайбокс. Звёзды будут попадать мимо пикселей и их цвет будет сильно отличаться, отсюда и мерцание.
HandriX
> и блюмом его..... блюмом!!!
Должно быть ты имел ввиду Blur, но всеравно xD, ибо СМЕШНО
Странно, никогда не замечал что звезды мерцают.
Да и в Сталкере не видел, и в Кризисе тоже не видел.
Вопрос - нафига такое делать?
Делал мерцающее небо в 2D игре так:
Отрисовываем текстуру с обычными немерцающими звездами.
Поверх отрисовываем черную (цвета неба) текстуру медлено скролящуюся по небу, и имеющую рваную маску в альфаканале с резкими границами. Маска перекрывает звезды, заставляя их мерцать. Юзал такое как в DD так и в D3D выглядит хорошо.
Megabyte-Ceercop
> Поверх отрисовываем черную (цвета неба) текстуру медлено скролящуюся по небу, и
> имеющую рваную маску в альфаканале с резкими границами.
А, собственно, зачем резкую? Можно и плавный шум, варьирующийся от "чёрного, но почти прозрачного" до "совсем прозрачного".
можно поизвращаться...
берешь текстуру с звездами, и а альфа канале упаковываешь данные о фазе и частоте мерцания пикселя(ну или другом канале, смотря какие ты юзаешь)... потом в шейдере делаешь простую функцию(тот же синус) с учетом времени... должно получиться очень красиво и гибко...
Antio666
> берешь текстуру с звездами, и а альфа канале упаковываешь данные о фазе и
> частоте мерцания пикселя
Мерцание происходит не периодически, а по шумовому принципу.
Двигать одну текстуру по второй - большой расход филрейта.
Самое простое - Point Sprites, в вертексный шейдер передаём БОЛЬШОЙ случайный вектор и вычисляем DP3 с позицией вертекса, потом берём дробную часть - это яркость.
Sbtrn. Devil
> А, собственно, зачем резкую?
Да действительно, можно использовать и плавные переходы и плавные в перемежку с резкими. Просто первый вариант мне пришлось делать на DD, а там 1 битная прозрачность и блендинг.
Mikle
> Двигать одну текстуру по второй - большой расход филрейта.
> Самое простое - Point Sprites
шейдер для такого филрейта состоит из 1 команды, поэтому способ практически беззатратный.
зато позволяет разместить сразу 100500 звезд и все они перцают.
ПС: как впоминаю то небо, что приходилось делать, прям слеза наворачивается. Настолько живописно было : )
Тема в архиве.