Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

Разрушаемые объекты   Найти похожие ветки 

 
Lostcoder   (2005-04-21 23:19) [0]

Модет кто кинет ссылочкой на информацию или подкинет идеи как сделать рузрушаемые объекты.
Скажем есть стена - и если в нее пулей попасть, то получется аккуратная сквозная дырочка - а если гранаткой - то уже целая дыра. Но так чтобы разрушение генерировалось динамически в зависемости (конечно упрощенной с точки зрения физики - не Ansys пишем) от воздействия.
Или например если надо сделать вмятину, изгиб?
Интересуют способы представления данных в памяти и преобразования их в картинку.

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

Если интересно - DX8


 
XProger ©   (2005-04-22 00:57) [1]

ну сквозную дырочку в заборе можно сделать изменив альфа компоненту текстуры в месте попадания.

P.S.
Ты в Red Faction играл? Так же хочешь? ;)


 
Sphinx ©   (2005-04-22 01:15) [2]

В RF не генерировалось кстати :)

Что за 8-миричные деревья не понял, но вот в RF было сделано примерно так (в первой части точно, во второй не знаю, не понравилась - не играл - не разбирался):
те материалы что можно было пробить были нескольких моделей.
а) цельный куб (прямоугольник)
б) несколько вариантов сломанного (если глубоко продолбить стенку - это заметно, особенно по следам взрывов)

очевидно при проломе просто менялась моделька цельного на рандомный проломленый, т.е. все разрушения заранее просчитаны и в ран-тайме не считаются - от сюда скорость.
Неплохо сделано было в AvP II с проломом дверей, правда тоже хитро (на цельную дверь накладывали "лишние" полигоны для эффекта прогиба, а после пролома подменяли модельку).

Считать разрушения в реальном времени в любом случае будет накладно, а если плюсом к этому физика пойдет - тормоза обеспечены (PIV 3Ghz and up не считается ;) )


 
Ке   (2005-04-22 01:47) [3]


> Lostcoder   (21.04.05 23:19)  
> Модет кто кинет ссылочкой на информацию или подкинет идеи
> как сделать рузрушаемые объекты.
> 1) Скажем есть стена - и если в нее пулей попасть, то
> получется аккуратная сквозная дырочка
> 2) - а если гранаткой - то уже
> целая дыра.

1) Стена очень часто, это всего два больших треугольника, с большой текстурой. Чтобы сделать в ней дырочку, вместо двух треугольников, надо вставить целую кучу, плюс просчитать координаты текстуры, кроме того надо потратить треугольники на внутреннюю часть отверстия, и тоже чем-то его отекстурить.
А что будет, если пуля попадает не в плоскость, а в угол ? А что будет, если пуля, отстрелит часть объекта ?
В общем я не говорю, что это невозможно, но очень сложно. Желаю удачи, если соберёшься делать.

2) Вполне реально. Вычисляешь расстояние до точки взрыва, и его вектор. И сдвигай по этому вектору точки модели в соответствии с силой взрыва. Вот и всё. Только учти, что сделать большую стену двумя треугольниками уже не получится. Потому, как треугольники выгибаться не могут. Разве что нормалями.


 
Lostcoder   (2005-04-22 11:31) [4]

Я сделал так:
Тормозит безбожно.
Исходный объект - куб.
Если в нем надо сделать отверстие - то куб разделяется на 8 мелких кубиков и определяется в какой имненно подкуб попадает отверстие.
И так далее рекурсивно - пока не дойдешь до предела деления (скажаем 1мм^3) этот кубик - соответственно не рисуешь.

Получается 8-ричное дерево, где ветка заканчивающаяся nil"ом не рисуется и дииикие тормоза при отрисовке (ну это понятно). Да и не очень красиво.
Вот если бы теперь придумать алгоритм построения поверхности по этим кубикам было бы супер.
З.Ы. я не игрушку пишу, поэтому мне особые визуальный эффекты и 60фпс не надо, но хотелось бы чтобы их было > 5 8-)


 
Xeno ©   (2005-04-22 12:16) [5]

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


 
Sapersky   (2005-04-22 14:12) [6]

В RF не генерировалось кстати :)

А я читал, что как раз генерировалось, причём вплоть до проверки видимости - динамически перестраиваемые порталы или что-то в этом духе. Для избежания тормозов сильно ограничили объём разбиваемых материалов - их гораздо меньше, чем не разбиваемых. Но тормоза в момент деформации на Celeron 500 всё равно чувствовались.

Вообще, есть хорошие методы для частных случаев - [1] для тонкостенных поверхностей (дырки в самолётах в Ил-2), несквозные выбоины - лепим текстуру выбоины сверху с bump-mapping и т.п. А что-то универсальное и при этом быстро работающее придумать сложно.

Можно поразбираться с CSG (Constructive Solid Geometry). Т.е., например, вычитаем из стены цилиндр - получаем дырку. Если пересчитывать геометрию, то делается это BSP-деревьями - вроде что-то такое есть в GLScene, не знаю правда, насколько хорошо работающее.
Где-то видел демку на OGL, которая делала CSG без пересчёта геометрии, на stencil-буфере - хотя тормозила она изрядно.

Можно с вокселями (фактически, разделение на кубики это и есть воксели). Относительно построения поверхности по кубикам - см. marching cubes algorithm.
Ещё, может быть, volumetric textures - хотя не уверен, подойдут ли они для данного случая. Если это всего лишь текстура, пусть и объёмная - её нужно накладывать на полигоны, т.е. геометрию всё равно придётся генерировать (ломать) вручную. Опять же, аппаратная поддержка оставляет желать...

Ещё можно перейти на raytracing :)


 
Lostcoder   (2005-04-22 15:17) [7]

Ну я понял. Дайте мне безграничные ресурсы и я сделаю вам матрицу 8-).

Кстатьи та чстет Вокселей, именно так это и называлось в той статье - где я идею алгоритма подглядел.


 
Sphinx ©   (2005-04-22 16:17) [8]

> Sapersky   (22.04.05 14:12) [6]

Я не читал...я просто сравнивал эти проломы...если и генерировались - то очень шаблонно. Я сейчас не про стекла говорю а про стены в шахтах. Там точно разбивалось на кубы и пролом заменял цельный куб на "дырявый".

Может и ошибся, но выглядело именно так :)

А вот про стекла не скажу...разбивались они действительно красиво и вроде бы как случайно.

З.Ы. у меня на Cel600+192MB + GF 2MX 16MB не тормозило так что бы сильно, я думал это от эффекта взрыва, потому как небольшие лаги были при любых взрывах и на "разбиваемых" и на "не разбиваемых" объектах.


 
Lostcoder   (2005-04-25 16:35) [9]

Продолжая тему вокселей - щаменил разбиение кубика на 8 подкубиков на разбиение этого кубика на фигуры типа - полкуба/четверть куба/кубик.
Получил двоичное дерево (вместо 8-ричного) и экономию памяти в 1.5-2 раза (в зависемости от объекта).

Может еще кто в курсе - как соптимизировать такой алгоритм? Идея мне понравилась. И еще - как пооптимальнее отрисовывать такие "кубические" объекты. Щас в лоб рисую кубики. Из одной модели изменяя масштаб. Но если кубиков/фигур > 10000 то это несколько тормозит. Может есть идеи как отсечь ненужные объекты/поверхности и не прорисовывать их?


 
Lostcoder   (2005-04-25 16:49) [10]

Нашел интересную ссылку по теме
http://graphics.cs.msu.su/courses/cg03b/assigns/hw6/index.html
Сейчас изучаю. Может быть это то что нужно?


 
Sapersky   (2005-04-25 18:48) [11]

Видел пример Яна Хорна с метаболлами, вроде тех, что на скриншотах (http://www.sulaco.co.za/opengl/metaballs.zip). Особой скоростью он не блещет - с другой стороны, деформации от взрывов (в отличие от метаболлов) не обязательно пересчитывать на каждом кадре.


 
Ке   (2005-05-01 03:58) [12]

Окажывается в GLScene есть подходящий пример на тему.

GLScene\Demos\meshes\CSG

Показывает как из одного 3ds-объекта можно вырезать другой 3ds-объект. Загрузи в одни забор, в другой цилиндр показывающий полёт пули. И просто вырезай из забора цилиндр.

Правда останется проблема повисших в воздухе отстрелянных частей.


 
MrAngel   (2005-05-01 15:06) [13]


> с другой стороны, деформации от взрывов (в отличие от метаболлов)
> не обязательно пересчитывать на каждом кадре.

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


 
TButton ©   (2005-05-01 22:46) [14]

а вы Silent Storm видели?


 
ТБаТоН   (2005-05-02 02:29) [15]


> TButton ©   (01.05.05 22:46) [14]
> а вы Silent Storm видели?

Нет. Что там ?


 
TButton ©   (2005-05-02 06:28) [16]


> Нет. Что там ?

а там сабж.


 
XProger ©   (2005-05-03 01:58) [17]

http://www.kriconf.ru/2004/rec/KRI-2004.Programming_08.ogg


 
Lostcoder   (2005-05-04 21:38) [18]

Silent Storm класная игрушка. Особенно когда тело от взыва гранты вылетает в окно и выбивает его собой - это смотрится здорого.

А вот на счет GLScene это интересно. Пойду гляну.


 
TButton ©   (2005-05-04 23:45) [19]


> Silent Storm класная игрушка. Особенно когда тело от взыва
> гранты вылетает в окно и выбивает его собой - это смотрится
> здорого.

угу =) или вышка обрушивающаяся от взрыва



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.04 c
9-1115050817
parovoZZ
2005-05-02 20:20
2005.08.28
GL_TRIANGLE_FAN


14-1123227895
pavel_guzhanov
2005-08-05 11:44
2005.08.28
Книги Тейскейра и Пачеко


1-1123492939
a80h19
2005-08-08 13:22
2005.08.28
скопировать объекты-классы


1-1123239022
rolex
2005-08-05 14:50
2005.08.28
Как в ListView список прокрутить в самый конец?


14-1122051595
SoftX
2005-07-22 20:59
2005.08.28
Аниме=эротика?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский