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

Вниз

smd2v12-src большая модель приводит к Out of memory   Найти похожие ветки 

 
Kav   (2007-02-20 17:51) [0]

http://www.igrodel.ru/glsl-bones.htm
скачал этот пример smd2v12-src про скелетную анимацию, но стаккнулся со странным багом не могу понять, при загрузке сравнительно больших моделек выдает ошибку типа
---------------------------
Project1
---------------------------
Out of memory.
---------------------------
ОК  
---------------------------
, не могу точно отловить ошибку как-будто когда я пошагово нажимаю F8, ошибка не появляется, но стоит нажать F9, то все конец.


 
@!!ex ©   (2007-02-20 18:08) [1]

Юзаешь чужие сорцы?

В свое время разбирался с smd, на примере, где скелет бегает.
Тоде куча багов, и все такое.
Переписал все с 0. Не Copy&Paste, а именно вникал в каждую строчку кода и писал свою реализацию.

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


 
Belorus ©   (2007-02-20 19:42) [2]

@!!ex дай человеку свои сырцы :) Может ему горит :)


 
Kav   (2007-02-20 19:46) [3]

Все сорцы хороши, но вот этот smd2v12-src он хорош тем что в нем
скелетка реализована на вершинных шейдерах :)
Кстати я так понял что в SMD нет материалов есть только текстуры или это не так?


 
@!!ex ©   (2007-02-20 20:04) [4]


> Все сорцы хороши, но вот этот smd2v12-src он хорош тем что
> в нем
> скелетка реализована на вершинных шейдерах :)

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


> @!!ex дай человеку свои сырцы :) Может ему горит :)

Если надо, без проблем. только не хочу выкладывать на общее обозрение. Чтобы не позориться. ;)


> Кстати я так понял что в SMD нет материалов есть только
> текстуры или это не так?

Это так.


 
Kav   (2007-02-20 20:14) [5]

>Не так давно пришел к выводу, что выгоднее разбивать вершины по >принадлежности к ноде и просто выставлять в API нужную матрицу >трансформации. Тогда и проц не грузиться и шейдеров не надо. н алюбом >старье работает. Правда еще не успел реализовать. Времени пока нету.
если я правильно тебя понял,что у тебя деформаций не будет а там где стык костей - произойдет разрыв тела, а еслия тебя не правильно понял то хотелось бы увидеть это и пощупать
Кстати если не тяжело то сорцы свои вышли на kavi5@yandex.ru, все легче разбираться когда сорцов больше


 
@!!ex ©   (2007-02-20 22:01) [6]


> Kav   (20.02.07 20:14) [5]

Полигонов принадлежащих нескольким нодам обычно не так много их реально посчитать и на проце. Хотя это чисто мои мысли.


 
Kav   (2007-02-21 09:27) [7]

@!!ex
в принципе да идея не плохая, я никогда этого не замечал!


 
Kav   (2007-02-21 09:35) [8]

@!!ex
Хотя вообще-то надо практически хотябы посчитать сколько вершин принадлежат сразу двум костям и прикинуть какая производительность будет, но все же круто будет если приличная по скорости анимация будет без VS


 
@!!ex ©   (2007-02-21 17:43) [9]


> Kav   (21.02.07 09:35) [8]

Чем выше детализация модели, тем ниже процент таких полигонов(Вершина может принадлежать только одной ноде. ;)).


 
Sapersky   (2007-02-21 20:05) [10]

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

В DX SDK 8.1 (www.clootie.ru) есть пример SkinnedMesh с реализацией шейдерного и нешейдерного методов. Можно сравнить скорость (я сейчас на интегрированной карте особой разницы не увидел, что и понятно, она TnL не поддерживает вообще, так или иначе всё на CPU).


 
Kav   (2007-02-22 10:06) [11]

Sapersky  
но там не известно как они нешейдерный метод реализовали, ну сегодня на работу пойду скачаю посмотрю, но если честно сказать в в этом DX SDK черт голову сломит :)


 
Sapersky   (2007-02-22 12:35) [12]

Результаты на Radeon 9000 Pro:

D3D Non-Indexed  - 665
D3D Indexed         - 766
Software             - 232
D3D Indexed (VS) - 800

Шейдер всё-таки оказался немного быстрее.
Cледует учесть, что используется версия шейдеров 1.0, которая проще и на большинстве карт работает быстрее (GLSL, видимо, использует 2.0, судя по тому, что не запускается на поддерживающей только первые шейдеры карте).
Сам шейдер (точнее, шейдеры - я так понял, для случаев с разным кол-вом матриц) находится в ресурсах (skinnedmesh81.res).

Что касается нешейдерных методов - см. мануал к DX SDK по темам Geometry Blending, Indexed Vertex Blending.
Если коротко, то принцип такой: в D3D можно выставить одновременно несколько  матриц трансформации. При этом в формат вершины включаются коэффициенты, которые задают влияние каждой матрицы на данную вершину.
В случае Non-Indexed можно задать одновременно до 4 матриц, модель рендерится по частям (похоже на то, что предлагал @!!ex).
В случае Indexed в формат вершины дополнительно включаются 4 байта, задающие индексы в "матричной палитре", т.е. одновременно можно использовать 256 матриц, т.е. фактически все сразу и выводить модель за один приём. Indexed не поддерживается аппаратно некоторыми старыми картами, GeForce2MX, например (работает, но медленнее чем Non-indexed).
Наверняка в OpenGL есть нечто подобное, посмотрите расширения.


 
@!!ex ©   (2007-02-22 12:56) [13]


> Cледует учесть, что используется версия шейдеров 1.0, которая
> проще и на большинстве карт работает быстрее (GLSL, видимо,
>  использует 2.0, судя по тому, что не запускается на поддерживающей
> только первые шейдеры карте).

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


 
Sapersky   (2007-02-22 13:49) [14]

На интегрированной карте пример с http://www.igrodel.ru/glsl-bones.htm вываливается на glCreateShaderObjectARB (AV at adress 00000000), т.е. расширение в принципе не поддерживается. В то же время шейдерные демки DX SDK 8.1 и 3DMark2001 крутятся вполне успешно.


 
Kav   (2007-02-23 02:15) [15]

Сегодня посидел вечерок, частично переписал что-то, где-то вдумался в код с которого передираю (кстати передирал с примера smoothtexs), и о чудо смог загрузить в свой движек, потом отобразил модель, попробывал проиграть анимацию (которую я сразу сделал на VS 1.1), вроде работает и все это я сдела за один вечер!
только меня пугает одно пример с которого я делал есть CheckBox, возле которого надпись "Интерполяция углов (глюки)",  я случаем не глючный пример передрал?


 
Kav   (2007-02-23 14:07) [16]

@!!ex
как ты делаешь Интерполяция углов, а то что даже переписал как сам понимал этот участок кода но от гльков не избавился
нахожу сначала изменение угла между кадрами
 aF:=(animcia.kadri[sledKadr].povorot[i][n] -animcia.kadri[kadr].povorot[i][n]);  
а потом прибавляю к углу на кадре изменение угла от времени          
TempPovorot[n]:=(animcia.kadri[kadr].povorot[i][n] +(af*timeKadr));
но увы есть кадры в которых одна нога поворачивается больше чем нужно на число Пи
может ты можешь поточне подсказать фомулу Интерполяция углов?


 
@!!ex ©   (2007-02-23 19:18) [17]


> Kav   (23.02.07 14:07) [16]

Интерполяцию углов желательно делать через кватернионы.
Они позволяют многих багов избежать.
Сам я в этом не особо силен, мало касался этого вопроса.


 
Kav   (2007-02-23 19:19) [18]

понятно, пойду переписывать!



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

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

Наверх




Память: 0.49 MB
Время: 0.008 c
1-1195488425
DevilDevil
2007-11-19 19:07
2008.07.27
Получить Call-Stack


3-1202464120
ANB
2008-02-08 12:48
2008.07.27
Векторные запросы. Оракл и все остальные СУБД


9-1171983109
Kav
2007-02-20 17:51
2008.07.27
smd2v12-src большая модель приводит к Out of memory


15-1212426139
Kostafey
2008-06-02 21:02
2008.07.27
Посоветуйте систему автоматизации документирования кода


2-1214551499
Ivan
2008-06-27 11:24
2008.07.27
Панель из Dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский