|
FAQ Туториалы и часто задаваемые вопросы |
30.09.2005, 17:46
|
#1
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Доброе время суток всем желающим написать на Блице Варкрафт-4!
So, не растекаясь мыслию по древу, сразу к примеру.
В прикрепленном архиве два .ББ файла: "1" и "2" соответственно, запустив которые можно посмотреть демку террана с лесом и летающей сверху камерой. Всё почти как в стратегиях, только нет орков и камера управляется клавишами управления курсора.
Файл "1" демонстрирует "принципиально простой", иначе- "классический"- метод реализации этого-самого леса.
Файл "2" демонстрирует "принципиально правильный" метод.
Понять чем они отличаются просто: первый у меня выдает 70ФПС когда в кадре нет вообще ничего и 40- когда в кадре много деревьев. Кроме того, он может просто заглючить на некоторых машинах (глюк Блица с террайнами) и исправить это будет невозможно. Никак.
Второй выдает соответсвенно 3000 и 150 ФПС, никогда не заглючит и если убрать деревья, станет видно, что террайн освещается заметно красивее. Недостатка два: тоннельный эффект на деревьях и долгая генерация террайна.
P.S. 2Новички: Комментов в примерах необходимый минимум. Однако, не смотря на внешнюю навороченность, даже во втором примере код предельно прост и требует лишь внимательного прочтения. Обратите внимание на алгоритмы соединения мешей, рендер-твининга и генерации террайна. Удачи!
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Diplomat за это полезное сообщение:
|
|
01.10.2005, 20:03
|
#2
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Что, так плохо, что ни у кого даже ругательных комментариев не возникло?
Как демка-то? Показатели ФПС как, меняются от способа оптимизации?
Шо ж вы так пассивно?
|
(Offline)
|
|
01.10.2005, 20:18
|
#3
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
в первом примере все работает довольно нормально ФПС у меня 40 даже если ничего в экране нет, а если на гору заберешься, чтоб много деревьев в экране было, то до 20 опускается...
второй пример работает принципиально быстрей, только глючит неимоверно, типа кадры прокрутятся быстро, а потом машина ждет до конца секунды... и так каждую секунду... и ФПС прыгает с 50 до 30 (причем прыгает по 5 раз в секунду).
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
01.10.2005, 20:18
|
#4
|
|
чет терейн тормозной... )
МА-ЛА-ДЕЦ
вообщем а чембы ненаписать функцию гемора... ой... generate типа ланджафта ?
ну чтобы типа... типа генерить типа ланджафт из типа типа... короче картинки типа под типа названием в типа карта типа высот...
ps. злостный пост но БЕЗ ОФФТОПА Я НАПИСАЛ!
|
|
|
01.10.2005, 20:45
|
#5
|
|
Во втором исходнике при медленном поворачивании камеры деревья, которые находятся рядом, "мелькают": как будто верхушка одного дерева вдруг оказывается скрыта другим деревом, хотя последнее находится дальше.
Но я не исключаю, что это все из-за моих тупых дров для видяхи.
|
|
|
01.10.2005, 21:24
|
#6
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
второй пример работает принципиально быстрей, только глючит неимоверно
|
Хм, так быть не должно. Не должно...
Знаешь, попробуй может вот какие варианты:
1. уменьшить количество деревьев в два раза (в обоих примерах для чистоты эксперимента): Если компьютер не очень крутой, то при ФПС<10-20 твиннинг и таймер обновления камеры будут глючить;
2. убрать вообще задержку "Delay 20" в модуле обновления камеры (тоже в обоих примерах);
3. снести к чертям рендер-твининг во втором примере (убрать CaptureWorld() и поставить просто "RenderWorld()" вместо RenderWorld(Twining/100))
Если всё это не поможет- значит или код косой, или железо...
вообщем а чембы ненаписать функцию гемора...
|
) Что, прям чтоб и хейтмапы сам генерил? А генератор колормапов уже есть.
как будто верхушка одного дерева вдруг оказывается скрыта другим деревом, хотя последнее находится дальше.
|
Не, это не у тебя. Это классический ДиректХ-овский тоннельный эффект. Если использовать на деревьях маск-текстуры вместо текстур с альфаканалом- он исчезнет. Просто модельек деревьев других не было.
|
(Offline)
|
|
02.10.2005, 00:17
|
#7
|
Знающий
Регистрация: 07.09.2005
Сообщений: 238
Написано 2 полезных сообщений (для 2 пользователей)
|
ОГО ПРИКОЛЬНО ОСОБЕНО ТУМАН МЕЖДУ ДЕРЕВЬЯМИ ПОНРАВИЛСЯ!!
Жалько только что у меня комп тупой, подвисает всё
|
(Offline)
|
|
02.10.2005, 15:09
|
#8
|
|
а у меня скорость держится такая как указал дипломат
хотя процесор в несколько раз тормознее
глюков ненайдено - видяха XFX 6600GT , дрова 77.72
|
|
|
03.10.2005, 20:26
|
#9
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Интересный примерчик.
Дома у меня оба примера работали одинаково медленно - около 20 кадров.
Это на Celeron 433, 224 Mb ОЗУ, GF2MX200 64 Mb
На более крутом компе -AMD Sempron 2600+, 512 Mb ОЗУ, RADEON9550 128 Mb- 2 пример быстрее:
в 1ом примере: 40 кадров ВСЕГДА - странно... так не должно быть по-мойму...
во 2ом: 80-110 кадров, если камера смотрит только на поле, и больше 1000, если в пустоту.
Во втором примере при движении или повороте текстура земли размазывается (рябь какая-то), после остановки нормальной становится. Деревья тоже "мелькают"...
ПС: я не понял, зачем нужен флаг 256 для текстуры детализации.
Пробовал убрать флаг вообще - рябь исчезает, но и вид немного другой...
|
(Offline)
|
|
03.10.2005, 23:15
|
#10
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Ну, на слабых компах 20ФПС выводится по той простой, что счетчик ФПС возвращает данные 10 раз в секунду, округляя точность 10 да еще и завышает на 10ФПС... Зачем? Раньше юзал для техданных- потом забыл исправить.
Корректно получать данные о ФПС можно заменив его код на следующий:
;FPS counter
FPS=FPS+1
If mFPS<MilliSecs() Then
mFPS=MilliSecs()+1000
MaxFPS=FPS
FPS=0
EndIf
А неизвестный флаг "256" значит, что у тебя неновая версия то ли Блица, то ли хелпов. И артефакты изображения могут быть связаны миенно с этим.
Эта фича по определению- "складирует текстуру в видеопамять". А по сути- она выключает мипмаппинг (размытие) текстур, что очень важно при изображении детайлмаппов на террайнах итп... Ну, 20% ФПС жреть...
|
(Offline)
|
|
06.10.2005, 10:44
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
На моей машине (Celeron D 2400 / GF MX400 64MB / 512MB Dual) FPS примерно 20(на горе)-40(просто на карте) во втором примере.
Если установить режим цвета в 16 бит то FPS вырастает до 35-55 соответственно.
Без твининга FPS вырастает на 5-10 к/с, но зато дергается камера (надо написать функцию обработки камеры)
А в общем примерчик неплохой
|
(Offline)
|
|
06.10.2005, 10:52
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Кстати при флаге 256 (Store texture in vram) выключается мипмеппинг текстур, а следовательно и их сглаживание. В этом режиме (256) у меня пример 2 работает чуть медленнее.
|
(Offline)
|
|
06.10.2005, 20:47
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
вообщем а чембы ненаписать функцию гемора... ой... generate типа ланджафта ?
ну чтобы типа... типа генерить типа ланджафт из типа типа... короче картинки типа под типа названием в типа карта типа высот...
|
Вот повозился немного сегодня и сделал процедурку генерации террейна:
Function GenerateTerrain%(SizeX#,SizeZ#,MaxHeight#,HeightMapFile$,Detail,VertexColorsMap$="")
;#Region Собственно генератор террейна
Local StepX#=SizeX#/Float#(Detail)
Local StepZ#=SizeZ#/Float#(Detail)
Local Mesh%=CreateMesh()
Local Surface%=CreateSurface(Mesh)
Local X#,Z#,H#,K#=3*255
Local I#,J#
Local HeightImage%=LoadImage(HeightMapFile$)
ResizeImage(HeightImage%,Detail+1,Detail+1);Это проще чем изобретать алготитм сглаживания поверхности
;Расположение вертексов
SetBuffer ImageBuffer(HeightImage%)
For I=0 To Detail
X=-SizeX#/2+I*StepX#
For J=0 To Detail
GetColor(I,J)
H#=(ColorRed()+ColorGreen()+ColorBlue())/K ;H = 0 .. 1
Z=SizeZ#/2-J*StepZ#
AddVertex(Surface,X,MaxHeight#*H,Z,I/Float#(Detail),J/Float#(Detail))
Next
Next
SetBuffer BackBuffer()
FreeImage(HeightImage%)
;Создание поверхности
For I=0 To Detail-1
For J=0 To Detail-1
AddTriangle (Surface%,I+(Detail+1)*J,I+(Detail+1)*(J+1),I+1+(Detail+1)*(J+1))
AddTriangle (Surface%,I+(Detail+1)*J,I+1+(Detail+1)*(J+1),I+1+(Detail+1)*J)
Next
Next
;#End Region
;#Region Раскрашивание вертексов
If VertexColorsMap$<>"" Then
Local ColorImage%
EntityFX Mesh%,2;Использование режима 'use vertex colors instead of brush color'
ColorImage%=LoadImage(VertexColorsMap$)
ResizeImage(ColorImage%,Detail+1,Detail+1);Это чтобы упростить нахождение цвета вертекса
SetBuffer ImageBuffer(ColorImage%)
For I=0 To Detail
For J=0 To Detail
GetColor(I,J)
VertexColor(Surface%,J+(Detail+1)*I,ColorRed(),ColorGreen(),ColorBlue())
Next
Next
SetBuffer BackBuffer()
FreeImage(ColorImage%)
EndIf
UpdateNormals(Mesh%)
Return Mesh%
;#End Region
End Function
Вот и все.
А это измененный код примера...
|
(Offline)
|
|
06.10.2005, 22:55
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
вообщем а чембы ненаписать функцию гемора... ой... generate типа ланджафт
|
Не забываем писать закрывающие теги
|
(Offline)
|
|
06.10.2005, 23:13
|
#15
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Просто соединение с инетом через мабильник и часто глючит, по этому сообщение не полностью дошло!:'((
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:30.
|