forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   3Д оптимизация (http://forum.boolean.name/showthread.php?t=12677)

LLI.T.A.L.K.E.R. 16.06.2010 14:12

3Д оптимизация
 
Вложений: 4
Сделал некий способ скрытия объекта, который находится позади видимого.
Использовал основу стандартного урока - расчёт в 2д крайних вершин объекта.

Есть глюки и их нужно доработать. Прошу помочь, а то голова уже кипит >O<
Так же не работает скрытие при показе объектов в обратном порядке (не скрываются объекты, которые отображались до текущего). Здесь нужно доработать алгоритм.

На 3-ем рисунке в режиме WireFrime 1 чётко видно то (указано мною зелёным цветом), что объекты которые не видны - они не отображаются. Так понижается количество полигонов и должен повыситься ФПС.

Сначала хотел использовать эту систему в своём проекте.. А как допёрло реализовать его - выкладываю здесь. :moil:

is.SarCasm 16.06.2010 15:10

Ответ: 3Д оптимизация
 
Вообще, работает , но смысла честно... у меня фпс не меняется вообще.

Igor 16.06.2010 15:13

Ответ: 3Д оптимизация
 
Идея хорошая, только всё-таки сделай много обьектов и сравни фпс.

is.SarCasm 16.06.2010 15:27

Ответ: 3Д оптимизация
 
Я создавал 3000 кубиков, лаги ужасные. Думаю тут для сравнения нужны высокополигоналки

LLI.T.A.L.K.E.R. 17.06.2010 08:08

Ответ: 3Д оптимизация
 
Вложений: 1
Применение этого способа оптимизации я вижу такое:
в игре имеются высоко полигональные модельки/объекты (больше подойдут типа прямоугольный параллелепипед - например домики, здания, бункера, стены или ящики). Например у здания каждое окошко обработано.
Но не стоит считывать крайние точки именно у самой модели, так как просчитывание каждой вершины будет накладно.
Лучше в редакторе модели сразу же сделать прямоугольник (или плоскость) по краям модели. А в программе считывать вершины этого прямоугольника.

PHP код:

*____________* <- вершина
|(~~~)---/~~)|
|! 
моделька !|
|!
__________!| 

Поправки:
Цитата:

RenderMaxXL=Width ;исправил с =Widht2(пол экрана) на ширину экрана (крайнее правое)
RenderMaxXR=0 ;с пол экрана на противоположное крайнее левое
RenderMaxYU=Height ;с =Height2 (пол высоты) на крайнее нижнее (в понимании верхнее)
;а то до этого застревали точки на середине экрана
Цитата:

Text RenderMaxXL,RenderMaxYU,RenderMaxXL ;здесь случайно оставил RenderMaxYD
Text RenderMaxXR,RenderMaxYU,RenderMaxXR
Цитата:

If (leftmost>RenderMaxXL+1) And (rightmost<RenderMaxXR-1) And (topmost>RenderMaxYU+1) Then
HideEntity ent
Else
If (topmost>1) And (leftmost>1) And (rightmost<Width-1) Then ShowEntity ent ;добавил проверку. Без этого при наклонении камеры, вниз все объекты (топмост и др. которых был меньше 0 и 1) изображались.
End If
Вроде в коде оставил pxCreateWorld(1,"") и pxSetGravity(0,-40,0) - их нужно удалить. :)

Остаётся глюк (на рисунке): почему-то крайнее левое иногда равняется 0 (нулю). То ли что-то пропущено, то ли равняется на невидимый объект. :dontknow:

И все же невыгодно просчитывать каждые 1000 или 10000 тысячные объекты. Нужно как-то сократить число (но вроде не возможно, кроме как просто иметь меньшее их количество).

Блин глюки в работе с верхней вершиной. :pure_magic: Когда задний объект ниже ближнего, но края его видны.

jimon 17.06.2010 09:01

Ответ: 3Д оптимизация
 
ты изобрел софтварный, немного извращенный (если вообще рабочий), occlusion culling, кстати о порталах слышал ? :)

http://http.developer.nvidia.com/GPU...gems_ch29.html
http://www.gamasutra.com/view/featur...oors_fast_.php
http://www.gamasutra.com/view/featur...algorithms.php

Mr_F_ 17.06.2010 14:29

Ответ: 3Д оптимизация
 
да, да таких целей юзаются порталы и BSP.
и ещё я чето не понял - если стоит бублик, который крайними точками загораживает то что за ним, через дырку тоже ничего не увидишь? и все объекты на экране не идеальные квадраты, а могут иметь кучу всяких дырок и углублений.

---
кстати во)
http://insidecpp.ru/antipatterns/reinventing_the_wheel/

Черный крыс 17.06.2010 18:12

Ответ: 3Д оптимизация
 
Думаю лучше погугли на тему Octree

Kolobok 09.07.2010 00:03

Ответ: 3Д оптимизация
 
А я думаю дольше будет проверять, скрывать, отображать кубики, чем просто рисовать их... :)

is.SarCasm 09.07.2010 00:10

Ответ: 3Д оптимизация
 
Цитата:

скрывать, отображать кубики
Полигоны все равно подвергаются рендеру.

SBJoker 09.07.2010 00:52

Ответ: 3Д оптимизация
 
те что скрыты или альфа==0 не обрабатываются рендером.

is.SarCasm 09.07.2010 00:58

Ответ: 3Д оптимизация
 
А скрываю и уменя почему то RenderTris не меняется

LLI.T.A.L.K.E.R. 09.07.2010 20:35

Ответ: 3Д оптимизация
 
Идея скрывать и показывать не кубики, а прикреплённые к ним высокополигональные объекты (например домик или бункер, гараж, здание - такие как в Delta Force)

Теперь нужно прикрепить формулу нахождения точки в многоугольник (я её пока не понял и она на другом языке прог-я), но видимо в Blitz-е математические вычисления - слабое место..

Не подскажете что в Blitz-е выгоднее:
сразу рендерить 50 (или др.) высокополигональных объектов
или
вычислять свойства 50 кубиков, потом рендерить видимый объект?
А если 1000?

Ну в стиле Delta Force это будет непригодно, а вот если в стиле города GTA?

В OpenGL читал используют Z-буффер вроде и там легче :"(

- - - - -

Ещё есть альтернативная идея:
кубики разукрашивать в разные неповторяющиеся цвета - а потом брать с экрана цвет пикселей в 2D координатах граней кубика.
Если цвет не его - значит он не видим и значит не нужно рисовать его "объект".
Ну и в запас для ограничения лишней повторной проверки держать некую базу данных не/видимости.

Но это уже вычисления и проверка буффера.

Gector 09.07.2010 21:30

Ответ: 3Д оптимизация
 
Цитата:

кубики разукрашивать в разные неповторяющиеся цвета - а потом брать с экрана цвет пикселей в 2D координатах граней кубика.
Если цвет не его - значит он не видим и значит не нужно рисовать его "объект".
Ну и в запас для ограничения лишней повторной проверки держать некую базу данных не/видимости.

Но это уже вычисления и проверка буффера.
Это тормозня еще хуже выйдет.

IGR 09.07.2010 23:32

Ответ: 3Д оптимизация
 
да какая это оптимизация !!

З-буфер и в директ икс юзается кста !!
Реальный оптимайз получится на уровне железа !! А так можно деревъя и порталы юзать для большых пространств !!

А то что ты запрячешь 10 домиков а остальные 100500 отрендеришь ничего, при этом написав кучу ифов и проверок, не даст !!


Часовой пояс GMT +4, время: 17:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot