|
11.06.2014, 00:21
|
#286
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от mr.DIMAS
Что будет быстрее - загрузить текстуру в jpg ( распаковка, все дела ) или несжатый tga?
|
Ты имеешь ввиду "из", а не "в"?
Быстрей всего загружаются форматы с RLE сжатием, даже быстрей чем без сжатия.
Вообще если что то разжимается быстрей чем читается с диска распакованный вариант, то значит загружаться будет быстрей.
Раз у тебя D3D9 то вообще используй DDS - он же на GPU распаковывается.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.06.2014, 00:50
|
#287
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Ты имеешь ввиду "из", а не "в"?
|
Риальне "из". Опечатался.
Спасибо за то что напомнил про DDS. Пожалуй переведу в него текстуры.
__________________
|
(Offline)
|
|
11.06.2014, 00:54
|
#288
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от mr.DIMAS
Риальне "из". Опечатался.
Спасибо за то что напомнил про DDS. Пожалуй переведу в него текстуры.
|
Судя по wiki opengl через расширение тоже держит dds. Еще я помню doom3 (у него opengl рендер) также использует dds. Так что я думаю это оптимальный вариант и ты ничего не теряешь.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.06.2014, 02:16
|
#289
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
В релизе текстуры обязаны быть в DDS. DDS это контейнер нативных видюшных данных. Большинство текстур отлично сжимаются DXT, что позволяет экономить дохрена видеопамяти. Самому сжатию нечего делать в рантайме (это не реалтайм дело) - сжимать надо на препроцессе а не у игрока.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.06.2014, 02:35
|
#290
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от Mr_F_
В релизе текстуры обязаны быть в DDS. DDS это контейнер нативных видюшных данных. Большинство текстур отлично сжимаются DXT, что позволяет экономить дохрена видеопамяти. Самому сжатию нечего делать в рантайме (это не реалтайм дело) - сжимать надо на препроцессе а не у игрока.
|
Ну в DXT всё равно извлечение данных во время выборки? Там конкретный пиксель вычисляется из общего шаблона.
Да важно отметить что в видеопамяти нужно хранить в DXT, больше по причине ограниченного размера vram, нежели скорости распаковки.
Актуально при таких больших локациях как в TrueHorror
В Watch Dogs заметил что текстуры прогружаются напрямую в видеопамять (видимо из-за наличия общей памяти в консолях), и если её не хватает то стримится с диска.
Разве нельзя кешировать текстуры в ram?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.06.2014, 12:05
|
#291
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
Ну в DXT всё равно извлечение данных во время выборки?
|
Оно в железе. DXT читается даже быстрее, чем неDXT, потому что меньше работы с памятью.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.06.2014, 01:41
|
#292
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Для катсцен понадобилась скелетная анимация. До этого был морфинг - но он слишком много жрет оперативки.
В качестве костей используются узлы сцены - точнее их global transform. И вот тут косяк. Если этой трансформацией преобразовать вершину - она улетает в ебеня.
Вроде как нужно получить transform в с.к. относительно [0,0,0] а не позиции кости.
Кароч я тут понаписал ататы. Научите меня скелетке.
__________________
|
(Offline)
|
|
17.06.2014, 02:41
|
#293
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
у тебя меш в Т-позе - т.е. в такой позе, при которой у костей есть определённые дефолт-ротации.
тебе нужно иметь инвертированные матрицы костей в Т-позе, чтобы мировые ротации костей анимационные преобразовывать в пространство относительно Т-позы. вот и все дела.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.06.2014, 02:47
|
#294
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: [TrueHorror] - разработка
Есть книга Джима Адамса про скелетную анимацию.
Однако книга 2004 года и некоторые вещи связанные с directx в ней сильно устарели (даже для dx9), но теоретическая часть в ней подробно расписана.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.06.2014, 04:27
|
#295
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от Samodelkin
Есть книга Джима Адамса про скелетную анимацию.
.
|
Прочитал как Адам Дженсен.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.06.2014, 11:18
|
#296
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: [TrueHorror] - разработка
книга Джима Адамса про скелетную анимацию
|
не знаю даже, я за ~1.5 дня её писал, чутка погуглив
можно конечно извращаться типа дуал кватернионов, но под них и арт надо готовить специально итп
для самого скелета юзал обычные ноды сцены с иерархией, как и mr.DIMAS
|
(Offline)
|
|
17.06.2014, 16:01
|
#297
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: [TrueHorror] - разработка
Ну там не только скелетка, там еще рэгдолл, морфинг, лицевая анимация и еще всякие более общие штуки. Да после прочтения книги, нужно поискать более современные статьи, конкретно по реализации, т.к. то что в книге - устарело, но теория там ОК.
|
(Offline)
|
|
18.06.2014, 02:58
|
#298
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Бля. У меня бомбит пукан. Эта скелетка никак не получается. Вроде все правильно сделал - но нет блять - меш перекареживает просто пздц. В топку. Оставлю морфинг - рагдолл не нужен.
Второй день маюсь - ну просто пичаль, ненависть, ярость, агрессия, фрустрация, безысходность, депрессия.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо mr.DIMAS за это полезное сообщение:
|
|
18.06.2014, 14:46
|
#299
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Я упертый\упоротый - вот все мои исходники скелетки.
Расчет вершин по скелету
if ( node->skinned )
{
int i = 0;
for( auto meshIter = node->meshes.begin(); meshIter != node->meshes.end(); ++meshIter )
{
Mesh * mesh = *meshIter;
vector< Vertex > temp = mesh->vertices;
for( int i = 0; i < mesh->vertices.size(); i++ )
{
Vertex & vertex = mesh->vertices[ i ];
Weight & weight = mesh->weights[ i ];
btVector3 lastPosition = btVector3( vertex.coords.x, vertex.coords.y, vertex.coords.z );
btVector3 newPosition = btVector3( 0, 0, 0 );
for( int j = 0; j < weight.boneCount; j++ )
{
SceneNode * bone = weight.bones[ j ].node;
newPosition += newPosition += bone->invBoneBindTransform * bone->globalTransform * lastPosition * weight.bones[ j ].weight;
}
vertex.coords.x = newPosition.x();
vertex.coords.y = newPosition.y();
vertex.coords.z = newPosition.z();
}
UpdateBuffers( mesh );
mesh->vertices = temp;
}
}
Поиск костей и расчет их инверсных матриц.
for( int i = 0; i < numMeshes; i++ )
{
SceneNode * node = scene->childs[ i ];
node->invBoneBindTransform = CalculateGlobalTransform( node ).inverse();
for( int k = 0; k < node->meshes.size(); k++ )
{
Mesh * mesh = node->meshes[ k ] ;
for( int j = 0; j < mesh->weights.size(); j++ )
{
Weight & w = mesh->weights[ j ];
for( int q = 0; q < w.boneCount; q++ )
{
w.bones[ q ].node = reinterpret_cast< SceneNode* >( FindByName( w.bones[q].name.c_str() ));
}
}
}
}
Расчет глобальной трансформации
btTransform & CalculateGlobalTransform( SceneNode * n )
{
if( n->body )
n->body->activate( true );
if( n->parent )
{
if( n->parent->frozen )
{
n->globalTransform = CalculateGlobalTransform( n->parent ) * n->localTransform;
if( n->body )
{
n->body->setWorldTransform( n->globalTransform );
n->body->setLinearVelocity( btVector3( 0, 0, 0 ));
}
}
else
{
if( n->body )
n->globalTransform = n->body->getWorldTransform();
else
n->globalTransform = CalculateGlobalTransform( n->parent ) * n->localTransform;
}
}
else
{
if( n->body )
n->globalTransform = n->body->getWorldTransform();
else
n->globalTransform = n->localTransform;
}
return n->globalTransform;
}
И в аттаче пример работы этой хуиты.
[E] - анимировать объект
__________________
Последний раз редактировалось mr.DIMAS, 18.06.2014 в 19:21.
|
(Offline)
|
|
18.06.2014, 16:57
|
#300
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от mr.DIMAS
Бля. У меня бомбит пукан. Эта скелетка никак не получается. Вроде все правильно сделал - но нет блять - меш перекареживает просто пздц. В топку. Оставлю морфинг - рагдолл не нужен.
Второй день маюсь - ну просто пичаль, ненависть, ярость, агрессия, фрустрация, безысходность, депрессия.
|
Да что там сложного? Берём позицию вершины в T-позе, умножаем её по очереди на инвертированные матрицы костей в порядке иерархии, умножаем на матрицу объекта (ЕМНИП). Вот, переводил как-то статью.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:46.
|