Просмотр полной версии : Blitz 3D
Мы создаем игру на движке блиц3д и необходимо реализовать отрывающиеся конечности у персонажей. И небыло бы проблем, если бы персонаж после расчленения оставался лежать на месте экзекуции. Но надо сделать таким образом, чтобы страдалец бегал с оторванной конечностью. И тут возникают проблемы - как эту конечность оторвать, если она привязана к скелету? Да и как это сделать на программном уровне, если тело персонажа представляет собой единую модель вместе с руками и ногами? Модели и анимацию делаем в 3d Max. Вот такая вот проблема. Интересно узнать, как это реализуется в профессиональных проектах. В качестве примера приведу еще не вышедшую "Legendary the box", где будет возможность отстреливать от монстров куски.
ivg
Совет "не использовать Blitz" Вам, очевидно, не подходит? Тогда копайтесь в его функциях (или там за прошедшее время кто-то удосужился прикрутить объектно-ориентированное программирование?).
Вам нужно получить доступ непосредственно к буферу вершин модели. Дело в том, что любая модель - это просто куча вершин, связанных в полигоны. Данные по вершинам (позиция, текстурные координаты и т.п.) всецело определяют модель. Таким образом, добравшись до этих данных, теоретически можно попробовать их как-то обрабатывать, но
1) Это будет медленно (Lock памяти, модификации, разве что буфер удастся при отстреле быстро разделить на два...)
2) Вовсе не факт, что... ммм... "недодвижок" уровня Blitz3D это позволяет.
Возможно, лучше будет написать вертексный шейдер - опять же, если Blitz это позволяет и у Вас достаточно умения написать такой шейдер.
Но самое нормальное - это, конечно, не использовать единую модель. Ума не приложу, зачем с такими амбициями Вам это понадобилось. Ну сделайте отдельно модели рук ног и т.д., почему обязательно одна модель на целый персонаж?
Дело в том, что при использовании отдельных моделей конечностей, в местах их "стыковки" с телом будут ярковыраженные стыки, которые в нашем случае не получится скрыть одеждой. Конечно хочется сделать более качественные модели, но если не будет других вариантов, то придется руки и ноги делать отдельно.
Была мысль скрывать оторванные конечности с помощью карт прозрачности, но опять же, как это реализовать на программном уровне? Понятно, что рисовать много текстур, учитывающих каждый возможный вариант (оторвано, например, обе руки, или обе ноги, или одна рука и две ноги и т.п.) практически нереально.
Дело в том, что при использовании отдельных моделей конечностей, в местах их "стыковки" с телом будут ярковыраженные стыки, которые в нашем случае не получится скрыть одеждой. Конечно хочется сделать более качественные модели, но если не будет других вариантов, то придется руки и ноги делать отдельно.
Что-то я не понял, почему. Что, не судьба вашу одну модель просто разбить на две-три-десять-сколько нужно?
Была мысль скрывать оторванные конечности с помощью карт прозрачности, но опять же, как это реализовать на программном уровне?
Есть такая хорошая штука - шейдерами называется. Как раз для таких фокусов они и предназначены.
Понятно, что рисовать много текстур, учитывающих каждый возможный вариант (оторвано, например, обе руки, или обе ноги, или одна рука и две ноги и т.п.) практически нереально.
Что-то я не понял, зачем рисовать много текстур. Можно одну и ту же комплексную назначать моделям руки, ноги и чего угодно, а текстурными координатами говорить, что именно брать из этой текстуры. Плюс есть мультитекстурирование. Либо, если уж так неймётся, напишите программу, по одной комплексной генеряющую эти ваши отдельные.
Chkalov_vs
05.03.2008, 08:45
Если я не ошибаюсь в формате md2 (используется квейком и блиц его прекрасно понимает) анимация морфинговая. Может можно просто сделать несколько вариантов анимации модели (с руками и без), а уж потом использовать соответствующие "кадры" анимации?
Ты имеешь ввиду с помощью морфинга из целой руки делать оторванную?
Chkalov_vs
06.03.2008, 08:07
Ты имеешь ввиду с помощью морфинга из целой руки делать оторванную?
Именно. Но я могу и ошибаться. Судя по описанию в Игромании, формат md2 хранит в себе несколько вариантов одной модели и подгружает их по очереди. По идее должно получиться. Надо у профи спрашивать.
Chkalov_vs
Судя по моему опыту работы с md2, он просто хранит в себе анимации и всё. При этом я ещё ни в одной модели не видел, например, исчезновения одной из вершин в каких-то кадрах, поэтому не уверен, что формат поддерживает то, что Вы имеете в виду.
Я не знаю на счет md2, но модификатор morfer в максе работает, только если колличество вершин неизменно. Поэтому я имел ввиду придать руке форму оторванной, не удаляя вершины, а смещая их соответствующим образом (например все вершины в одну точку). Я в нашем проекте занимаюсь моделлингом и анимацией, а в блице не шарю, но когда я предложил такой вариант нашим программистам, мне сказали, что блиц не поддерживает морфер, но при его использовании он присваивает вершинам кости и работает с ними. Только в таком случае, колличество вершин ограничено (около 250-ти). Поэтому такой вариант тоже не подходит.
Что-то я не понял, почему. Что, не судьба вашу одну модель просто разбить на две-три-десять-сколько нужно?
Что-бы сгладить переходы между полигонами, к модели применяется модификатор Smooth, но если разбить модель на несколько частей, то переходы между этими частями уже не сглаживаются, поэтому будут заметны стыки.
Что-бы сгладить переходы между полигонами, к модели применяется модификатор Smooth
Программно??? В процессе игры??? :eek:
Ну тогда шейдер можно чуток переписать. Или просто с нормалями поиграться.
, но если разбить модель на несколько частей, то переходы между этими частями уже не сглаживаются, поэтому будут заметны стыки.
А сначала сгладить как надо (если имеется в виду 3dmax), а потом отделить нужные вершины в отдельный объект - не катит?
Программно??? В процессе игры???
Нет, в самом максе.
А сначала сгладить как надо (если имеется в виду 3dmax), а потом отделить нужные вершины в отдельный объект - не катит?
Smooth сглаживает переходы между полигонами единой модели, поэтому даже если после сглаживания отделяем часть модели в отдельный объект, сглаживание на объекте сохраняется, а в месте его стыковки с основной моделью пропадает.
Smooth сглаживает переходы между полигонами единой модели, поэтому даже если после сглаживания отделяем часть модели в отдельный объект, сглаживание на объекте сохраняется, а в месте его стыковки с основной моделью пропадает.
Продублируйте ряд перекрывающихся полигонов между конечностью и туловищем, и сделайте один чуть-чуть под другим.
Chkalov_vs
06.03.2008, 20:48
Smooth сглаживает переходы между полигонами единой модели, поэтому даже если после сглаживания отделяем часть модели в отдельный объект, сглаживание на объекте сохраняется, а в месте его стыковки с основной моделью пропадает.
Проделал следующую операцию: применил к модели Smooth, конвертировал в EditableMesh, детачил часть модели. Стык практически ен виден.
А не вариант после попадания в руку заменить модель на другую? Это уже к программистам вопрос.
П.С. Нельзя ли сменить назвение темы, например, "вопросы по блицу"?
Да, переименовано в "Blitz 3D", чтобы больше про Блиц тем не плодили.
Проделал следующую операцию: применил к модели Smooth, конвертировал в EditableMesh, детачил часть модели. Стык практически ен виден.
Проделывал тоже самое, результат не понравился. Такой вариант на тот случай если не получится с целой моделью. Позже попробую как советует pokibor, т.е. сделать полигоны не встык, а один под другим.
А не вариант после попадания в руку заменить модель на другую? Это уже к программистам вопрос.
Заменить можно, но не создавать же много моделей под каждый возможный случай.
Chkalov_vs
14.03.2008, 08:46
Экспортирую модель из макса в б3д с помощью B3dPipeline, нормал бамп не отображается. Каким образом можно его прикрутить?
Feanor62rus
20.03.2008, 21:35
На сколько я знаю Blitz 3D с нормал бампингом, паралаксом и прочими наворотами не работает.
На сколько я знаю Blitz 3D с нормал бампингом, паралаксом и прочими наворотами не работает.
В таком случае уж лучше было бы промолчать ;)
Давно уже в разработке двиг приносящий ДХ9 для блица.
Найти можно на blitz.pp.ru в разделе "Проекты".
Feanor62rus
21.03.2008, 20:54
Официально он не входит в комплект блица, так что не надо на меня наезжать))
JohnK, простите, а что такое "двиг для блица"? Сам блиц то двигом можно назвать с очень большой натяжкой. Но "двиг для блица"... это переворачивает мое мировоззрение)))
Так он в разработке или уже работает?
Fire-studio
23.03.2008, 16:19
Люди! Когда делаешь игру, часто доходит дело до ИИ! Но думаешь как подступиться! И как сделать правильнее! Если ставить вейпоинты как дорогу, то бот будет просто ходить по назначенному маршруту! Тоесть бот не сможет "ДУМАТЬ" ! Можно ли создать вейпоинты по всей плоскости кроме стен? И чтобы бот сам выбирал куда ему идти! )) Конечно это СЛОЖНО ! А есть другие способы?
Повторная тема. Пока перемещаю в тему по Блицу, раз уж в названии прямо указан Блиц. Если обсуждение перейдёт-таки к конкретным алгоритмам, возможно, будет организована новая тема либо я его перенесу в одну из "важных" тем.
JohnK, простите, а что такое "двиг для блица"? Сам блиц то двигом можно назвать с очень большой натяжкой. Но "двиг для блица"... это переворачивает мое мировоззрение)))
Так он в разработке или уже работает?Двиг для блица - это двиг для блица)
Да, мечта извращенца, но, увы, иначе никак. Он в разработке, но есть уже стабильные версии.
Люди! Когда делаешь игру, часто доходит дело до ИИ! Но думаешь как подступиться! И как сделать правильнее! Если ставить вейпоинты как дорогу, то бот будет просто ходить по назначенному маршруту! Тоесть бот не сможет "ДУМАТЬ" ! Можно ли создать вейпоинты по всей плоскости кроме стен? И чтобы бот сам выбирал куда ему идти! )) Конечно это СЛОЖНО ! А есть другие способы?
Сначала лучше бы жанр сказать)
Затем, уже решать.
Понятие "Легко" в создании ИИ отсутствует.
Можно ли создать вейпоинты по всей плоскости кроме стен?Да, можно.
Fire-studio
Использование ИИ - действительно крайне сложная тема. Я тут кое-что накропал и хотел крапать дальше, но подоспела работа, аспирантура и стало банально не до того. Однако посмотреть можете: здесь (http://forum.igromania.ru/showthread.php?t=52084).
Далее, наличие вейпоинтов вовсе не означает отсуствие думалки бота. Если вейпоинтов много, то это просто различные варианты, по которым бот может направиться. А уж выбор - его дело. Скажем, стоит он на рядом с вышкой, а там 7 вариантов пути - влево-вправо-назад, на лестницу до 2, 3, 4 пролётов и спрятаться под вышку, скажем. Вот и выбирает, что же ему сделать.
Конечно, можно делать ботов без вейпоинтов, но (на мой взгляд!) такая овчинка выделки не стоит, хотя в этом случае, как верно заметил JohnK, всё зависит от жанра и организации игрового пространства. Если опишите проект подробнее, возможно, Вам будут более конкретные подсказки.
Кстати, наличие вейпоинтов не подразумевает даже жёсткого задания маршрута. Это просто точки, скажем так, на некой глобальной карте, а локально бота никто не обязыват следовать чётко по ним. Скажем, если он видит игрока, то разумнее будет плюнуть на вейпоинты и хаотически кувыркаться-искать укрытия и т.д., а после победы направиться к ближайшему вейпоинту, скажем, по элементарному методу правой-левой рук или чего-нибудь чуть более сложного.
Fire-studio
23.03.2008, 17:33
О моем проекте как я уже говорил более подробно написано на http://fire-studio.ucoz.ru
Fire-studio
Из этого описания техническая сторона дела совершенно неясна. Вы спрашиваете о программировании - даёте сюжет и примерную общую схему. Они-то зачем в таком вопросе?
Если я правильно понял, ИИ должен быть примерно как в гта . Fire-studio, для Блица есть куча различных либ для реализации ИИ, которые значительно упрощают процесс, зачем изобретать велосипед заново. Но в грамотном ИИ без вайпойнтов все-равно не обойтись.
Fire-studio
26.03.2008, 12:41
SubRon
я понимаю!
А вот у меня такой вопрос! Я сделал в 3ds max 8 модель замка! кому интересно вот тут скрин http://igrostroenie.my1.ru/_fr/6/5321466.jpg
Когда загружаю в блитц, выдает ошибку около RenderWorld ! Как от этого избавиться?
Fire-studio
Может прекратишь секретничать и скажешь что за ошибка?)
Fire-studio
26.03.2008, 19:00
JohnK
не понял! Какие секреты??? Он просто прекращает работу программы и выделяет renderwolrd!
BaZilisk
26.03.2008, 19:06
По поводу реализации отрвыаемых конечностей:
В первых частях Unreal это реализовывалось посрелством того, что голова вимналась внутрь модели (посредством анимации), а на её месте спаунилась модель кровавой головы, кторая и отлетала.
Fire-studio
28.03.2008, 18:38
Люди! Кто знает? на чем и где можно сделать хорошие деревья и побольше для Блитца! Чтобы не тормозил!
С помощью TreeGenerator 2.0, ИМХО мощная прога.
А вот у меня такой вопрос! Я сделал в 3ds max 8 модель замка! В каком формате модель?
Когда загружаю в блитц, выдает ошибку около RenderWorld ! Как от этого избавиться?
Опиши подробнее что за ошибка? просто так не объяснившись блиц не может выпрыгнуть, только если....какими командами ты задаешь начало и конец цикла???
Fire-studio
05.04.2008, 19:18
В каком формате модель?
Опиши подробнее что за ошибка? просто так не объяснившись блиц не может выпрыгнуть, только если....какими командами ты задаешь начало и конец цикла???
1) b3d
2) Graphics3D 1280,1024,32,1
SetBuffer BackBuffer ()
Repeat
UpdateWorld
RenderWorld
Flip
Until keyhit (1)
End
$TR@NGER
11.04.2008, 17:15
где можно найти blitz 3D
Добавлено через 4 минуты
Люди! Кто знает? на чем и где можно сделать хорошие деревья и побольше для Блитца! Чтобы не тормозил!
А чё, в максе не судьба?
Fire-studio
11.04.2008, 17:44
$TR@NGER
с 4000 полигонов минимум?)) неее! Блитц тормозить будет! Причем очень сильно!
Chkalov_vs
11.04.2008, 21:15
с 4000 полигонов минимум?)) неее! Блитц тормозить будет! Причем очень сильно!
Это Вы о стандартной максовской флоре? А ручками? Без проблем можно уложиться в 1000 поликов.
Fire-studio
14.04.2008, 19:52
Chkalov_vs
Все равно много! Если предположить что будет лес в котором скажем минимум 400 деревьев (и то что это за лес) То блитц будет жестко тормозить! Очень! Поверьте! Ипробовал на себе)) я нашел выход! Можно конечно использовать два перекрещенных полигона для деревьев! Вот тогда он даже при размножении на 1000 тормозить не будет)
Сдравствуйте! Я только вчера запустил Blitz3d но так неплохо знаю Basic то мне понравилось. А теперь вопрос:
1)Нужно чтобы один обьект, прикрепленный к другому по нажатию на кнопку начинал двигаться с постоянной скоростью. что за скрипт?
2) нужно чтобы при достижении определенного расстояния от обьекта, прикрепленный к нему изчезал.
Fire-studio
24.04.2008, 16:36
cRabbs
значит так!
cube=CreateCube()
cube2=CreateCube(cube)
positionEntity cube2,0,0,1
cube3=createsphere()
PositionEntity cube3,0,0,3
repeat
If keydown (200) TurnEntity cube,0,1,0
If EntityDistance(cube,cube3) =>3 hideentity cube
Помогите, не работает столкновение!
Graphics3D 1280,1024,16,3
SetBuffer BackBuffer()
Const typeshar=1,typecub=2
lit=CreateLight()
shar=CreateSphere()
PositionEntity shar,-25,0,15
texshar=LoadTexture("shar.jpg")
EntityTexture shar,texshar
EntityType shar,TypePlayer
cam=CreateCamera()
PositionEntity cam,0,40,0
TurnEntity cam,90,0,0
pln=CreatePlane()
tex=LoadTexture("zemla.jpg")
ScaleTexture tex,10,10
EntityTexture pln,tex
n=20
For i=0 To n Step 5
cub=CreateCube()
PositionEntity cub,0,0,i
EntityType cub,Typewall
Next
Collisions TypePlayer,TypeWall,2,3
Repeat
Collisions TypePlayer,TypeWall,2,3
If KeyDown(200) MoveEntity shar,0,0,.1
If KeyDown(208) MoveEntity shar,0,0,-.1
If KeyDown(205) MoveEntity shar,.1,0,0
If KeyDown(203) MoveEntity shar,-.1,0,0
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
Fire-studio
03.05.2008, 11:36
ха ха ха! Посмотри на константы! У тебя там TypeShar и Typecub. А коллизию ты задаешь TypePlayer,TypeWall,2,3
vBulletin® v3.8.0, Copyright ©2000-2025, Jelsoft Enterprises Ltd.