Войти
ПроектыФорумУтилиты

Космический симулятор SpaceEngine (151 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1150 151 152 153217 Следующая »
#2250
16:32, 29 ноя. 2011

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


#2251
19:44, 29 ноя. 2011

AIIIBAP
При текстурировании что происходит с краями текстур? Если стоит режим CLAMP, пиксели за краями считаются равными пикселям на краях. Если REPEAT, то пикселям на противоположном краю. Тебе же надо, чтобы брались пиксели с соседней текстуры. Аппаратно это нереализуемо насколько я знаю, программно есть множество способов. Я например генерирую текстуры 256*256, но с масштабом 254.0/256.0, так что по периметру автоматически получаются пиксели из соседних текстур. Рендерить надо тоже с таким масштабом (передавать в шейдер множитель для текстурных координат). С картами нормальней сложнее - для правильной генерации нормалей нужно генерировать высоты с запасом 2 пикселя. Правда из-за этого у меня появилась проблема - сетку 254*254 не покрыть равномерно мешами 33*33. Крайний меш должен быть 31*33 или 33*31 или 31*31, но я пока это игнорирую, поэтому у меня на планетах можно видеть горизонтальные террасы шириной 2 треугольника.

#2252
22:53, 29 ноя. 2011

Всем спасибо! Я решил проблему! Я явно прописал нормали для мешей. До этого они генерировались специальным методом и косячно, теперь же норм!

#2253
22:21, 1 дек. 2011

Касательно атмосферы E.Bruneton'а. На GeForce 8600M GT  (256мб) она вообще запустится? Хотелось бы как-то узнать заранее до начала портирования этого метода для своего проекта.

#2254
8:51, 2 дек. 2011

Morphia
> а где же зеленые , красные , желтые
Зелёных звёзд в природе не бывает. :)
Зеленым может быть свечение газа той же небулы, но не цвет звезды.

#2255
12:13, 2 дек. 2011

Просто для наглядности: зависимость цвета тела от его температуры
http://www.vendian.org/mncharity/dir3/blackbody/
http://www.vendian.org/mncharity/dir3/blackbody/UnstableURLs/bbr_color.html

#2256
12:40, 2 дек. 2011

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры
#2257
18:56, 2 дек. 2011

Зелёные звёзды = белые звёзды

#2258
0:29, 7 дек. 2011

Neptune
Смотрел недавнее видео. Красиво, блин!

Как ты так чётко склоны определяешь?
Т.е. в функции цвет зависит от наклона поверхности, а вот как этот наклон надёжно получать?

#2259
2:45, 7 дек. 2011

Artlav

Наклон определяю из карты нормалей:

    vec4  bumpData = texture2D(NormalMap, texCoord);
    vec3  norm = 2.0 * bumpData.xyz - 1.0;
    float slope = clamp(1.0 - pow(norm.z, 6.0), 0.0, 1.0);

Величина наклона получается не в градусах или радианах, а в каких-то условных единицах, от 0.0 до 1.0

#2260
9:28, 7 дек. 2011

Neptune
> Наклон определяю из карты нормалей:
Многопроходная генерация?
А карта нормалей как генерируется?

#2261
14:49, 7 дек. 2011

Artlav
1) Шейдером генерируется карта высот, время 1-10 мс
2) Другим шейдером по карте высот строится карта нормалей, время 1-2 мс
3) Третьим шейдером по картам высот и нормалей генерируется карта цвета, время 1-10 мс
4) Карта высот считывается в память CPU для построения меша и физики, время ~50-80 мс (упс, боттлнек)
5) Строится меш и заливается в GPU

Карта нормалей строится обычным образом - считаются градиенты из текущего в 4 соседних пикселя и усредняются. Можно брать и 8 пикселей, с весами и т.д., но я не стал заморачиваться.

В шейдерах, генерирующих высоту и цвет, суммарно больше сотни вызовов перлин нойса. Главная проблема у меня - считывание карты высот в CPU, это жутко медленная операция. Причём карта высот и цвета 256*256, а меш всего 32*32 - явная избыточность. Методы оптимизации:
1) Считывать только каждый восьмой пиксель
2) Пропускать 3 промежуточных уровня
3) Строть меш на GPU (render to VBO)
4) Использовать один и тот же плоский меш и сэмплить карту высот в вершинном шейдере, выводящем планету
5) Сделать рендер планеты трассировкой луча - самое качественное, нет мучений со стыками патчей
Сделал второе, скорость загрузки возросла раз в 10 (но ещё не отладил). Думаю теперь попробовать первое. В методах 3-5 всё равно придётся что-то считывать в CPU для физики.

#2262
16:26, 7 дек. 2011

Neptune
> 1) Шейдером генерируется карта высот, время 1-10 мс
> 2) Другим шейдером по карте высот строится карта нормалей, время 1-2 мс
> 3) Третьим шейдером по картам высот и нормалей генерируется карта цвета, время
> 1-10 мс
> 4) Карта высот считывается в память CPU для построения меша и физики, время
> ~50-80 мс (упс, боттлнек)
> 5) Строится меш и заливается в GPU

Однако...
Блин, шустро же такое у тебя работает.

#2263
16:36, 7 дек. 2011

самая жесть у тебя - это взятие соседних пикселей с соседних патчей. Без них реально правильно нормаль не сделать - но это ппц =(
Я просто решил схитрить. У меня планета в памяти ничего почти не занимает и генерится на лету - я пользуюсь своей собственной функцией для случайных чисел, и мне вообще не надо хранить ничего кроме того что уже на экране или вскоре на нём появится. Но вот эти самые соседние пиксели подкинули мне проблем! Ещё есть вариант нормали по краям считать без учёта соседей, представить что они вверх направлены - но это очень нехорошо!

#2264
17:39, 7 дек. 2011

AIIIBAP
Ты не так понял - для расчета нормали не нужно брать пиксели с соседних текстур.
Кусочек карты высот генерируется сразу шире на несколько пикселей по краям.
Я кстати тоже буквально вчера попробовал сделать все на гпу - процессор просто выводит меши сферы с нужной детализацией, а шейдер поднимает поверхность и генерирует диффуз(простой градиент) по функции шума. Работает бодро, но если считать нормали+нормальную текстуру поверхности+тени+постэффекты, я думаю будет не экономично, буду делать сохранение в текстуры. Если считать нормали без учета соседей, все равно будут полосы. Можно попробовать считать нормали без карты высот сразу по шуму, тогда не надо возится с краями.
Neptune
а как карту высот считываешь в память CPU? Текстуру можно вернуть как массив?

Страницы: 1150 151 152 153217 Следующая »
ПроектыФорумУтилиты