Форум Игромании
 
Регистрация
Справка
Пользователи Календарь Сообщения за день

Результаты опроса: Игру какого жанра следует сделать?
Платформер 4 28.57%
Скроллер 3 21.43%
Гонки 8 57.14%
Космический симулятор 2 14.29%
3D-Action 4 28.57%
Файтинг 0 0%
Стратегия 2 14.29%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 14. Вы ещё не голосовали в этом опросе

 
 
Опции темы
Старый 03.12.2007, 16:57   #1
Пугатель
 
Аватар для [CCCP] Monster

 
Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,103
Репутация: 1085 [+/-]
Жанр учебного проекта

Повторный опрос

Подробности тут: http://forum.igromania.ru/showthread.php?t=52299
__________________
Служу Советскому Союзу!

Хорошо смеется тот, кто стреляет первым! (танкистская мудрость)
[CCCP] Monster вне форума  
Отправить сообщение для [CCCP] Monster с помощью Skype™
Старый 13.12.2007, 09:14   #2
Гейммастер
 
Аватар для luden


 
Регистрация: 13.12.2006
Адрес: Зелёный город
Сообщений: 5,618
Репутация: 698 [+/-]
Физика

Хотелось бы пообсуждать создание физики в играх. Какие существуют в этой области наработки и решения.

Моя борьба с гуглом результатов не дала, так что выкладывание ссылок приветствуется.

Ну и сходу первый вопрос на обсуждение, взаимодействие объектов, как отследить его наиболее оптимально?
Очевидных для меня вариантов два и оба ужасны. Первый, это перебор всех физических объектов и проверка их взаимодействия в соответствии с формулами их задающими, что естественно вызывает квадратичный рост нагрузки на процессор в зависимости от количества объектов. Второй - разбитие области на дискретные квадратики\кубики, закраска которых будет означать наличие\отсутствие там объекта, это вызовет линейный рост нагрузки, но с крайне высоким стартовым значением и совершенно неприличным коэффициентом.
Последнее время я думаю над попыткой объединения этих двух методов, но пока ещё стойкая концепция не выработона.
__________________
Уникальным личностям посвящается
Человек, сидящий в инвизе - ущербен, я так считаю. Человек закрывающий свои данные вконтакте - тоже, между прочим.
^_^
luden вне форума  
Отправить сообщение для luden с помощью ICQ
Старый 13.12.2007, 20:58   #3
Пугатель
 
Аватар для [CCCP] Monster

 
Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,103
Репутация: 1085 [+/-]
luden

Ну, из ссылок сразу на ум пришла вот эта:
http://www.gamedev.ru/articles/?sect=7

там есть небольшой раздельчик "физика".

О подробностях реализации самой анимации и движка физики, я писал вот тут:

http://forum.igromania.ru/showpost.p...6&postcount=15


А с перебором объектов вынужден огорчить - его не избежать. Его можно лишь оптимизировать. Путей тут два - уменьшать количество участвующих объектов и упрощать алгоритм, вращаемый в цикле перебора.

Первое, самое эффективное - это наделение визической модели столкновений особой иерархией, позволяющей отсеять объекты, которые совершенно точно не взаимодействуют. Второй - наделение объектов упрощенными представлениями о своем строении для ускорения обсчета первого метода.

Например, первый метод можно построить на секторах - особых "кубиках" в пространстве. При перемещении объект определяет, в каком кубике он находится. При определении столкновений обсчитываются только объекты, принадлежащие одному и тому же кубику. НА первый взгляд может показаться, что слишком сложно. Но на самом деле такой алгоритм экономит часть времени. Допустим, у нас абсолютно трехмерное пространство, и принадлежность сектору определяется тремя числами целого типа, соотвестственно положению сектора в пространстве. Пространство делится на сектора-кубы со сторонами по 100 условных единиц пространства. Обратите внимание, что для того, чтобы пересчитать индексы секторов, необходимо текущую координату просто поделить на 100 и преобразовать в целое (обрезать дробную часть). В то время, как для того, чтобы определить столкновение между объектами, нужно как минимум преобразовать матрицы ориентации объектов в пространстве, для того чтобы определить пересечение полигонов или BoundingBox'ов (окружающих параллелепипедов). Таким образом, при обходе объектов, мы сравниваем их сектора, если совпадают - считаем пересечения. Если нет - отбрасываем.

Алгоритм хорош, но требует доработок на предмет случая на границе двух секторов.

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

Его идейное продолжение - еще в процессе загрузки модели узнать максимальное расстояние от центра масс объекта до одной из точек-вершин параллелепипеда. После чего при алализе столкновений сравниваем расстояние между центрами масс двух объектов с суммой расстояний до параллелепипедных вершин, и если оно меньше или равно, обсчитывать уже BoundingBox'ы.
__________________
Служу Советскому Союзу!

Хорошо смеется тот, кто стреляет первым! (танкистская мудрость)
[CCCP] Monster вне форума  
Отправить сообщение для [CCCP] Monster с помощью Skype™
Старый 25.04.2008, 00:03   #4
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,356
Репутация скрыта [+/-]
3D Моделирование (Все программы) - перемещено

Тема перемещена в раздел "Учимся вместе", вот прямая ссылка: http://forum.igromania.ru/showthread.php?t=59.
Дублирующих тем не создавать, все обсуждения вести там. Я отлично понимаю, что тема соответствует тематике раздела, но такого желание модераторского коллектива. Потому и оставляю это перенаправление в важном.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)
pokibor на форуме  
Отправить сообщение для pokibor с помощью ICQ
Старый 27.09.2008, 18:22   #5
Новичок
 
Регистрация: 26.09.2008
Сообщений: 6
Репутация: -9 [+/-]
Тесселяция полигонов

Тесслеяция (tessellation) или адаптивная тесселяция полигонов.

На сегодняшний день для разработчиков игр и игрового железа очень остро встала проблема низкого уровня детализации геометрии (квадратные пальцы, квадратные колеса, квадратные бочки и т.п., вобщем квадратные округлости), которую компания ATI решила преодолеть при помощи аппаратного тесселятора. На современных видеокартах начиная Radeon HD 2xxx применяется программируемый блок для аппаратной тесселяции в дополнение к шейдерным блокам. Сея фишка позволяет динамически разбивать объект на большее число полигонов, когда это необходимо, не вызывая при этом дополнительной нагрузки на системную шину и CPU, т.к. все это выполняется в GPU используя при этом только ресурсы видеокарты.

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

Тесселятор можно задействовать как в Direct 3D, так и в OpenGL.
Полная поддержка тесселяции ожидается в DirectX 11.
В OpenGL на радеонах c последними дровами уже существует расширение:
GL_AMDX_vertex_shader_tessellator
ранее применялось:
GL_ATI_pn_triangles


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

Впервые тесселятор применялся на Xbox 360, затем его унаследовали и обычные видеокарты семейства Radeon.


При тесселяции полигоны добавляются, конечно-же не в той плоскости что исходная.
Существует 3 режима тесселяции:
-добавление новых полигонов с математическим скруглением заданных поверхностей объекта в целом;
-добавление новых полигонов произвольно на новых плоскостях от заданной в определенных пределах - "шум".
-добавление новых полигонов по заранее заданной карте смещения.

Но только вот игр я пока не встречал, где бы эта штука применялась.

Вот вам видео, которое демонстрирует процесс аппаратной тесселяции:

Tessellation-V1.0.mov (143,23Мб) - это магнет ссылка для поиска в P2P сетях.

Или ищите в интернете файл Tessellation-V1.0.mov весом 143,23Мб

Последний раз редактировалось Dripman; 27.09.2008 в 18:53.
Dripman вне форума  
Старый 11.10.2008, 21:05   #6
Пугатель
 
Аватар для [CCCP] Monster

 
Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,103
Репутация: 1085 [+/-]
[Статья] Группы сглаживания

Тема: группы сглаживания

Статья предназначена для программистов 3D графики и специалистов среднего уровня в 3D моделировании

Введение

Группы сглаживания – это механизм изменения свойств освещенности объектов при использовании алгоритма затенения по Фонгу. Суть вопроса заключена в следующем. Часть полигонального объекта (или он весь) может быть отнесена к одной или нескольким группам сглаживания. Этих групп может быть до 32 штук. При этом на границе разных групп сглаживания наблюдается разница в освещенности. При этом художник старается так расположить группы сглаживания, чтобы достичь оптимального результата.

Основы

Чтобы объяснить, зачем нужны и как работают группы сглаживания, необходимо углубиться в принципы обработки графики современными видеокартами. А именно нас интересует обработка массивов вершин и треугольников. Для того, чтобы не лезть в дебри аппаратного обеспечения, рассмотрим, как выглядит оптимальный подход к визуализации (прорисовке) больших объемов треугольников с точки зрения программирования графики (без разницы – Direct3D или OpenGL – подходы к обработке массивов вершин и индексов у них одинаковы).

Для обработки трехмерных полигональных объектов используются два массива – массив вершин и массив индексов. В массиве вершин хранится список задействованных в объекте вершин. Одна вершина представляет собой структуру с данным по расположению в пространстве, координатам вектора нормали, координатам текстур (причем одна модель может содержать до 8 текстур одновременно), по цвету, размеру точки и т.п. Нас интересуют только расположение вершины в пространстве и координаты вектора нормали. Вектор нормали должен быть нормализованным, т.е. единичным (его длина должна быть равна единице в условных координатах). О том, как формируется нормаль, я расскажу позже.

Сейчас необходимо пояснить формирование массива индексов. Итак, в массиве вершин каждая вершина имеет порядковый номер от начала массива, по которому к ней можно обратиться (программистам известно, что к любому элементу любого массива можно обратиться по индексу). Так вот, в массиве индексов содержатся порядковые номера вершин. Эти порядковые номера имеют 16-битную размерность (на схеме показано, что они int, на самом же деле они short, либо unsigned int, в зависимости от опций). Каждые 3 элемента массива указывают на одну из вершин треугольника, принадлежащего трехмерному объекту. На самом деле указывать могут и каждые 4 элемента, это указывается в свойствах, однако нас интересуют для простоты треугольники.

Скрытый текст:


На схеме я показал массив треугольников, а не сплошной массив индексов для упрощения понимания того, как используется массив индексов. Каждая тройка вершин формирует треугольник, значит по сути в массив индексов дробится по «тройкам» элементов на треугольники. Система при прорисовке берет три элемента массива индексов, считывает значения порядковых номеров из них и затем по ним обращается к вершинам из массива вершин.
Массив вершин был создан для того, чтобы экономить память при создании геометрии объектов. Ведь каждая вершина (которая может занимать довольно много памяти – до 64 байт, в то время как один индекс занимает 2 байта, а треугольник из 3 индексов – 6 байт) может входить сразу в несколько соседних треугольников. Значит, дублировать их нет смысла.

Когда появился алгоритм затенения по Фонгу, оказалось, что для правильных расчетов затенения необходимы нормали именно к треугольникам (нормаль к точке с точки зрения математики – бредовое понятие). Однако нормали сосредоточены в описании вершин.

Значит, если треугольник состоит из 3-х вершин, то для правильного затенения плоского треугольника нам надо все 3 нормали в описании его вершин направить в одну сторону, которая совпадает с направлением реальной нормали к поверхности. В случае со сферой – аналогично. Мы имеем большое количество треугольников, которые опираются на общие вершины. Эти вершины имеют направление нормалей, совпадающее с радиусом, только направлены они от центра. И получается, что мы имеем достаточно качественное затенение сферы, которое обеспечивается билинейной интерполяцией направлений нормалей по всей поверхности.

В случае, когда у нас один треугольник с тремя вершинами – все понятно. Нормали задаются по направлению нормали к плоскости треугольника. А что если одна вершина расположена на стыке нескольких треугольников? Ответ прост. Вычисляется среднее направление нормали. Это значит, что каждый из соседних треугольников имеет определенную площадь, и эта площадь как раз и определяет, на сколько нормаль спорной вершины будет близка по направлению с нормалью этого треугольника. Чем больше площадь, тем большее влияние на направление нормали вершины оказывает нормаль треугольника. Вот так выглядят нормали на сфере:

Скрытый текст:


Со сферой, или с объектами где края не острые, и их плоскости составляют более 90 градусов друг к другу, все хорошо.

А что произойдет, если нам аналогичным методом понадобится отобразить, скажем, коробку? Ведь все стороны коробки – плоские. И угол между двумя ее плоскостями составляет 90 градусов. Если использовать приведенный алгоритм, то получится что-то вроде этого:


Скрытый текст:


Обратите внимание на направление нормалей. Именно так они будут посчитаны при использовании описанного выше алгоритма. Однако, выход есть. Необходимо просто дублировать вершины там, где мы имеем необходимость в изменении затенения. Т.е. там, где угол между плоскостями достигает более 90 градусов. Таким образом, мы испытываем необходимость в дублировании вершин во всех углах куба. В каждый угол помещается по 3 вершины, на каждую из граничащих сторон. Каждая из сторон в индексном массиве задает индексы именно своего набора вершин. И тогда мы можем считать нормали именно к нужным вершинам и именно с использованием только нужных для них треугольников. Получается вот так:

Скрытый текст:



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

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

Применение групп сглаживания для улучшения качества затенения.

Проблемы с затенением часто возникают при моделировании сложных объектов. При этом выглядит такое затенение на них довольно отвратительно. Ниже приведен пример наиболее часто встречающихся ошибок затенения:

Скрытый текст:



Это крыло автомобиля и оконный проем. Обратите внимание на направление нормалей и на результат освещения. Как это можно исправить?

Чтобы это исправить, нужно задать разные группы сглаживания тем частям модели, которые должны выглядеть плоскими, однако граничат с другими частями модели.

Вот как я назначаю группы сглаживания:

Скрытый текст:



А вот результат:

Скрытый текст:



Скрытый текст:



Сравните с первым вариантом.


А теперь несколько замечаний и советов:

Экспериментируйте. Разделяйте на разные группы только те части объектов, которые по вашей задумке должны быть разными. Например, не стоит отделять разными группами сглаживания нос на лице человека. А вот глаза, губы, волосы вполне можно.

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

Если групп сглаживания не хватает, не отчаивайтесь. Полигонам, которые не контактируют друг с другом, вы можете смело назначать одинаковые группы сглаживания. Это не отразится на результате.
__________________
Служу Советскому Союзу!

Хорошо смеется тот, кто стреляет первым! (танкистская мудрость)

Последний раз редактировалось [CCCP] Monster; 13.01.2010 в 20:34.
[CCCP] Monster вне форума  
Отправить сообщение для [CCCP] Monster с помощью Skype™
Старый 04.10.2009, 00:35   #7
Опытный игрок
 
Аватар для Darth_MYlus
 
Регистрация: 01.03.2009
Сообщений: 1,931
Репутация: 404 [+/-]
Скрипты для Unreal Tournament 3

Эта тема посвящена скриптовому языку Unreal Tournament 3, с помощью которого можно создавать новые и изменять существующие правила в игре Unreal Tournament 3(и не только). Информации в интернете по этому вопросу крайне мало и в основном она на английском языке(Epic Games Forums). Скрывать не буду - я полный лузер в этом деле, т.к. начал заниматся этим два месяца назад, но уже кое чему научился. (один из моих мутаторов http://ifolder.ru/14311797). Если кто-то занимается чем-то подобным-отзовитесь! Одному очень тяжело!
P.S. жду критики по поводу мутатора

Добавлено через 53 минуты
Это туториал, о том как настроить и скомпилировать первый скрипт в виде мутатора
Вам понадобится:
-Игра Unreal Tournament 3(желательно пропатченная до версии 2.0 вместе с Titan Pack)
-UT3ScriptSource(набор исходников всех скриптов, который можно скачать с http://udn.epicgames.com)
-NotePad++ (или любой другой заменитель блокнота)
-Хотя бы поверхностный знания о языках программирования
-и терпение (которого нам иногда так не хватает)
Приступим:
Шаг 1: Создадим ярлык для компилятора-скопируйте ярлык Unreal Tournament 3 на рабочий стол и в поле "объект" введите make (например "D:\Games\Unreal Tournament 3\Binaries\UT3.exe" make)
Шаг 2: Зарегистрируем новый скрипт - для этого откроем UTEditor.ini, который находится в ...\My Games\Unreal Tournament 3\UTGame\Config, и после строки ModPackages[...] допишем ModPackages=NewMutator
Шаг 3: Создадим рабочую папку нового мутатора-для этого создадим папку ...\My Games\Unreal Tournament 3\UTGame\Src\NewMutator\Classes
Шаг 4: Создадим файл NewMutator.uc c таким текстом (убедитесь, что он в ANSI):
class NewMutator extends UTMutator;

function InitMutator(string Options, out string ErrorMessage)
{
if ( UTGame(WorldInfo.Game) != None )
{
UTGame(WorldInfo.Game).DefaultInventory.Length = 0;
UTGame(WorldInfo.Game).DefaultInventory[0] = class'UTWeap_SuperShockRifle';

}

Super.InitMutator(Options, ErrorMessage);
}


Шаг 5: В этой же папке создадим файл UTWeap_SuperShockRifle.uc с текстом:
class UTWeap_SuperShockRifle extends UTWeap_ShockRifle;


defaultproperties
{
WeaponFireTypes(0)=EWFT_Projectile
WeaponFireTypes(1)=EWFT_Projectile
WeaponProjectiles(0)=class'UTProj_Grenade'
WeaponProjectiles(1)=class'UTProj_ShockBall'
InstantHitDamage(0)=35
FireInterval(0)=+0.21
FireInterval(1)=+0.1
InstantHitDamageTypes(0)=class'UTDmgType_Grenade'
InstantHitDamageTypes(1)=class'UTDmgType_ShockPrim ary'
AmmoCount=500
LockerAmmoCount=500
MaxAmmoCount=500
}

Шаг 6: Теперь запускаем сделанный нами ярлык к компилятору-если все сделано верно, то компилятор сообщит об отсутствии ошибок.
Шаг 7: Скомпилированный скрипт находится в папке ...\My Games\Unreal Tournament 3\UTGame\Unpublished\CookedPC\Script имя "NewMutator.u"
Шаг 8: Конечно, дальше можно запустить игру и увидеть этот мутатор в списке мутаторов, но в игре он себя никак не проявит(БАГ)-Чтобы этого избежать нужно скопировать его в папку ...\My Games\Unreal Tournament 3\UTGame\Published\CookedPC\Script
Шаг 9: Запускаем игру и наслаждаемся усовершенствованным оружием

Добавлено через 1 час 37 минут
А теперь разберем, что здесь получилось
1-строка №1 "class NewMutator extends UTMutator;" говорит о том, что скрипт имеет имя NewMutator и дополняет собой скрипт UTMutator.
2-строка №6 "UTGame(WorldInfo.Game).DefaultInventory.Lengt h = 0;" говорит о том, что слот оружия №0 будет занят
3-строка №7 "UTGame(WorldInfo.Game).DefaultInventory[0] = class'UTWeap_SuperShockRifle';" говорит о том, что слот оружия №0 будет занят оружием, описываемом в файле "UTWeap_SuperShockRifle.uc"
А теперь разберем файл "UTWeap_SuperShockRifle.uc":
1-стора №1 говорит о том, что создано оружие SuperShockRifle на основе ShockRifle
2-далее идут параметры оружия:
"WeaponFireTypes(0)=EWFT_Projectile" тип выстрела ЛКМ
"WeaponFireTypes(1)=EWFT_Projectile" тип выстрела ПКМ
"WeaponProjectiles(0)=class'UTProj_Grenade'" описание типа выстрела ЛКМ(в нашем случае гранаты)
"WeaponProjectiles(1)=class'UTProj_ShockBall'" описание типа выстрела ПКМ(Альтернативный огонь)
"InstantHitDamage(0)=35" мощность урона
"FireInterval(0)=+0.21" скорость выстрела ЛКМ
"FireInterval(1)=+0.1" скорость выстрела ПКМ
"InstantHitDamageTypes(0)=class'UTDmgType_Grenade' " тип урона ЛКМ
"InstantHitDamageTypes(1)=class'UTDmgType_ShockPri mary'" тип урона ПКМ
"AmmoCount=500" количество патронов при подборе
"LockerAmmoCount=500" количество патронов в "магазине"
"MaxAmmoCount=500" максимальное количество патронов

Последний раз редактировалось Darth_MYlus; 04.10.2009 в 02:13. Причина: Добавлено сообщение
Darth_MYlus вне форума  
Старый 02.10.2011, 23:32   #8
Надежда Редорана
 
Аватар для lYXl
 
Регистрация: 28.06.2009
Адрес: Н-ск
Сообщений: 2,069
Репутация: 469 [+/-]
http://www.knigoizdanie.ru/kak-napis...t-rasskaz.html
хотя бы с этого начни
__________________
"Познание даёт любовь"
"Во тьме, свет особенно красив"
Что-то нашли, что-то потеряли...
lYXl вне форума  
Отправить сообщение для lYXl с помощью ICQ Отправить сообщение для lYXl с помощью Skype™
Старый 11.11.2012, 21:29   #9
Новичок
 
Аватар для scorpion24
 
Регистрация: 11.11.2012
Сообщений: 7
Репутация: 2 [+/-]
Создание игр на fps creator x9

Уроки по fps creator x9 специально для

Здравствуйте! Я решил делать видео уроки по одному из самых лёгких конструкторов под названием fps creator x9. Уроки будут от самого начало "Где скачать fps creator" и до других сложных уроков. Если вы ещё нуб (Новичок) по creator'y, то просто вы не сможете понять суть самой программы если не будите смотреть с самого начала! И так Уроки будут добавляться. Если вы действительно хотите по больше уроков, то прошу писать коментарии. Всем спасибо за внимание!
Если возникнут вопросы по программе, но не найдете на на них ответы в видео, то я непременно сделаю видео по вашему вопросу, если вам не успеют ответить устно.
P.S. Прошу поставить "+"

Урок №1 (Загрузка creator'a)
Урок №2 (Введение)
Урок №3 (Фонарь и руки)
Урок №4 (Скрипты часть 1)
Урок №5 (Скрипты часть 2)
Урок №6 (Шейдеры)
Урок №7 (вей-поинты)

Последний раз редактировалось scorpion24; 17.11.2012 в 17:46. Причина: Добавлено сообщение
scorpion24 вне форума  
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Rambler's Top100 Яндекс цитирования