Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: 2D Освещение. Добавлено: 08.01.14 20:06  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Привет.

Хочу сделать освещение для Двумерной игрушки, по типу такого:
http://habrahabr.ru/post/204782/

Игра не на dx или gl - Пишется на спрайтовом движке sr2d от майкла, соответственно о векторной графике можно забыть.
Но есть один плюс - мне не нужно динамично освещение обновлять.

Вот, хотелось бы узнать ваши мысли о том, как это реализовать.

У меня пока только одна мысль - заранее рендерить lightmap для каждого источника света. Либо во время загрузки карты, либо еще в редакторе при сохранении. В Первом случаи - загрузка карты будет очень долгой. Во втором - вместе с картой будет идти куча карт освещенности.

Может есть более гениальный способ для всего этого?

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #1 Добавлено: 09.01.14 07:50
В Первом случаи - загрузка карты будет очень долгой.

Пара секунд на Атоме, посмотри в моей 64к игре, там 3D маска для большой карты рассчитывается при старте игры за несколько секунд. Рассчёт лайтмапы софтверный, не на видюшке.
Расскажи подробнее, как устроена карта, которую нужно затенять.

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 09.01.14 16:18
Сделал небольшой тест:
http://bmber.in/download/test.jpg

Стандартный скроллинг.
-Карта блочная(кубики 32x32) + будет доп. поверхность аля worms, только растровая.
-На карте будут спрайты с альфо-каналом. Соответственно трассировка для Лайтмапа будет не по "кубикам";(проходит луч или нет), а по всем точкам, что может значительно увеличить время обработки.
-Будут источники света, которые могут выключаться и менять степень освещенности. Поэтому, думаю, одной большой лайтмапы на всю карту не хватит и придется делать свою для каждого источника света.
-Возможно будут небольшие, динамичные источники света, но как их в реал-тайме обрабатывать пока не знаю.

Т.ч. сейчас сделал считается сносно, но для реал-тайма даже рядом не подходит.

Ответить

Номер ответа: 3
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #3
Добавлено: 09.01.14 16:21
Забыл добавить. Предполагается, что карта будет большая. Массив где-то, 256х128, может больше.

Ответить

Номер ответа: 4
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 09.01.14 20:41
Немного допила и почти реалтаймовые готовы.
http://youtu.be/MijbYYYC2ew

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

Ответить

Номер ответа: 5
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #5 Добавлено: 10.01.14 06:37
Так тебе нужен реалтайм, или не реалтайм? Ты же писал:
мне не нужно динамично освещение обновлять.

Ответить

Номер ответа: 6
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #6
Добавлено: 10.01.14 09:53

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

Ответить

Номер ответа: 7
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #7 Добавлено: 10.01.14 16:47
Вот посмотри медленный, но качественный расчёт теней, для статики пойдёт:
http://yadi.sk/d/Ind2_A_NFo7CF

Ответить

Номер ответа: 8
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #8
Добавлено: 10.01.14 19:18
Спасибо! Тени красивые, но они как радиальный моушен-блюр работают. От каждой точки тень отбрасывают, без отсечения "невидимых" частей.
Буду свои допиливать, но надо как-то найти способ более быстрого сглаживания, хотябы по контурам.
В идеале с радиальным размазыванием. Типа такого:
http://bmber.in/download/blurtest.jpg

Ответить

Номер ответа: 9
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 10.01.14 23:35
Модифицировал немного.
http://www.youtube.com/watch?v=ymMHJT1k4pA

Ответить

Номер ответа: 10
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #10
Добавлено: 28.01.14 21:03
Переписал функцию смазывания на FreeBasic и загнал в dll, которую интегрировал в SR2D_Sprite.
Прирост производительности(эффекта blur), по сравнению с vb ровно в два раза.

Ответить

Номер ответа: 11
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #11 Добавлено: 29.01.14 07:51
AWP
Очень интересно, можешь дать для тестов dll и исходник функции, хочу потестировать. Пока ещё ни один бейсик так не обгонял VB6, разве что vb.net на современных процессорах. Но FreeBasic я ещё не сравнивал.

Ответить

Номер ответа: 12
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #12
Добавлено: 29.01.14 13:43
Mikle
Я, честно говоря, чуток облажался. В vb забыл оптимизации врубить. Прирост всего 8.3% оказался.
С другой стороны, он тебе может понравиться: встроенный ассемблер, многопоточность...
в общем, тест тоже выложу: http://bmber.in/test.zip

И чуток оптимизировал трассировку: http://bmber.in/test.jpg

Ответить

Номер ответа: 13
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #13 Добавлено: 29.01.14 13:58
Прирост всего 8.3% оказался.

Это реальнее, vb.net тоже подобный прирост даёт. Но я почти уверен, что на AMD процессоре VB6 окажется впереди.

Ответить

Номер ответа: 14
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 133
 Профиль | | #14 Добавлено: 29.01.14 17:48
AWP, а в VB6 при тестировании ты тоже применил этот трюк с подготовкой таблицы значений для деления заранее?
Почему твоя программа ничего не показывает, только выводит время?

Ответить

Номер ответа: 15
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #15
Добавлено: 29.01.14 18:54
Да, таблицы и там и там были.
у меня Феном 2.
Должна показывать.
  1. Dim SR As New SR2D_Sprite
  2.     
  3. Private Sub Command2_Click()
  4.     SR.LoadFromFile "800630.jpg"
  5.     Pc.Width = SR.Width
  6.     Pc.Height = SR.Height
  7. End Sub
  8. Private Sub Command1_Click()
  9.     Dim N As Long
  10.     tm = Timer
  11.     For N = 0 To 199
  12.         SR.TestBLUR 6
  13.     Next
  14.     Form1.Caption = Int((Timer - tm) * 1000) / 1000 & " sec"
  15.     SR.PaintToDevice Pc.hDc
  16.     Pc.Refresh
  17. End Sub
  18. Private Sub Command3_Click()
  19.     Dim N As Long
  20.     tm = Timer
  21.     For N = 0 To 199
  22.         SR.filter_Blur 6, False, False
  23.     Next
  24.     Form1.Caption = Int((Timer - tm) * 1000) / 1000 & " sec"
  25.     SR.PaintToDevice Pc.hDc
  26.     Pc.Refresh
  27. End Sub

Ответить

Страница: 1 | 2 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам