Страница: 1 | 2 | 
		
		 
			   
			 
			 
			 
			 
			
 
  
		
     
  
    
Вопрос: 2D Освещение.
     
    
Добавлено: 08.01.14 20:06
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652
 AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
      
       
  
Привет.
 
    
Хочу сделать освещение для Двумерной игрушки, по типу такого:
http://habrahabr.ru/post/204782/
Игра не на dx или gl - Пишется на спрайтовом движке sr2d от майкла, соответственно о векторной графике можно забыть.
Но есть один плюс - мне не нужно динамично освещение обновлять.
Вот, хотелось бы узнать ваши мысли о том, как это реализовать.
У меня пока только одна мысль - заранее рендерить lightmap для каждого источника света. Либо во время загрузки карты, либо еще в редакторе при сохранении. В Первом случаи - загрузка карты будет очень долгой. Во втором - вместе с картой будет идти куча карт освещенности.
Может есть более гениальный способ для всего этого?
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 18
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: Mikle
 Mikle

Вопросов: 5
Ответов: 134
      
 Профиль |  | #1
       
Добавлено:  09.01.14 07:50
       
    
       
  
 
    
Пара секунд на Атоме, посмотри в моей 64к игре, там 3D маска для большой карты рассчитывается при старте игры за несколько секунд. Рассчёт лайтмапы софтверный, не на видюшке.
Расскажи подробнее, как устроена карта, которую нужно затенять.
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: AWP
 AWP

ICQ: 345685652 
Вопросов: 96
Ответов: 1212
      
 Web-сайт:  
 Профиль |  | #2
      
Добавлено:  09.01.14 16:18
       
    
       
  
Сделал небольшой тест:
 
    
http://bmber.in/download/test.jpg
Стандартный скроллинг.
-Карта блочная(кубики 32x32) + будет доп. поверхность аля worms, только растровая.
-На карте будут спрайты с альфо-каналом. Соответственно трассировка для Лайтмапа будет не по "кубикам" проходит луч или нет), а по всем точкам, что может значительно увеличить время обработки.
проходит луч или нет), а по всем точкам, что может значительно увеличить время обработки.
-Будут источники света, которые могут выключаться и менять степень освещенности. Поэтому, думаю, одной большой лайтмапы на всю карту не хватит и придется делать свою для каждого источника света.
-Возможно будут небольшие, динамичные источники света, но как их в реал-тайме обрабатывать пока не знаю.
Т.ч. сейчас сделал считается сносно, но для реал-тайма даже рядом не подходит.
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: AWP
 AWP

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

ICQ: 345685652 
Вопросов: 96
Ответов: 1212
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  09.01.14 20:41
       
    
       
  
Немного допила и почти реалтаймовые готовы.
 
    
http://youtu.be/MijbYYYC2ew
Но, чувствую, в полевых условиях, оно может не пройти проверку. Все упирается в смазывание картинки. В здоровых лайтмапах будет конкретно лагать...
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: Mikle
 Mikle

Вопросов: 5
Ответов: 134
      
 Профиль |  | #5
       
Добавлено:  10.01.14 06:37
       
    
       
  
Так тебе нужен реалтайм, или не реалтайм? Ты же писал:
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: AWP
 AWP

ICQ: 345685652 
Вопросов: 96
Ответов: 1212
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  10.01.14 09:53
       
    
       
  
 
    
-Возможно будут небольшие, динамичные источники света, но как их в реал-тайме обрабатывать пока не знаю.
В основном, все будет статично, но будет(я надеюсь) парочка динамичных источников.
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: Mikle
 Mikle

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

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

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

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

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

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

Вопросов: 5
Ответов: 134
      
 Профиль |  | #13
       
Добавлено:  29.01.14 13:58
       
    
       
  
 
    
Это реальнее, vb.net тоже подобный прирост даёт. Но я почти уверен, что на AMD процессоре VB6 окажется впереди.
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа: Mikle
 Mikle

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

ICQ: 345685652 
Вопросов: 96
Ответов: 1212
      
 Web-сайт:  
 Профиль |  | #15
      
Добавлено:  29.01.14 18:54
       
    
       
  
Да, таблицы и там и там были.
 
    
у меня Феном 2.
Должна показывать.