ПрограммированиеФорумОбщее

Что значит движок поддерживает модели только с n количеством полигонов?

Страницы: 1 2 Следующая »
#0
11:57, 13 дек 2012

Понял, что программист из меня посредственный - больше нравится графика, поэтому буду пользоваться движками вроде юнити. Однако из-за того, что долгое время связывал себя с программированием, не покидает зуд любопытства: почему говорят, что рендер-движки (кажется, они) поддерживают модели с определенным количеством полигонов; как графические модели превращаются в файлы, а затем из файлов - опять в графические модели и рисуются на экране. Предположение: смоделировать что-нибудь простенькое в блендере, сохранить в файл, а затем просмотреть его (с документацией по формату файла, чтоб уж не совсем бессмысленное времяпровождение было). Может даже свой простенький вьювер написать. Как вариант? Или что-нибудь другое посоветуете? А то этот "зуд" покоя не дает:(

#1
12:38, 13 дек 2012

Ну модель - это набор вершин (x,y,z, нормаль) и треугольников (номер 1-й, 2-й,3-й  вершин в списке вершин). В движке происходит расчет экранных координат каждой вершины, потом растеризуются треугольники либо построчно, либо по другим алгоритмам. В файле соответственно записаны x,y,z каждой вершины и данные треугольников либо в бинарном, либо текстовом виде (посмотри в блокноте текстовый .x).
loonypy
> почему говорят, что рендер-движки (кажется, они) поддерживают модели с
> определенным количеством полигонов;
Думаю, из-за ограничения объема вершинного буфера.

loonypy
> Может даже свой простенький вьювер написать.
loonypy
> А то этот "зуд" покоя не дает:(
) хм, на мой взгляд это одно из свойств программистского характера. Пиши движок )

#2
13:37, 13 дек 2012

glDrawElements glInterleavedArrays - отрисуеш любой объект, разберешся с их форматом останется только прочитать вершины из файла.

#3
13:48, 13 дек 2012

loonypy
> то этот "зуд" покоя не дает:(

Пойти на медфорум ? :)

#4
15:06, 13 дек 2012

Из за хранения индексов в двух байтах может быть. Но это скорее ограничение формата.

#5
23:19, 13 дек 2012

loonypy
> Понял, что программист из меня посредственный - больше нравится графика,
> поэтому буду пользоваться движками вроде юнити.
Unity не конструктор, код писать придётся.

> почему говорят, что рендер-движки (кажется, они) поддерживают модели с
> определенным количеством полигонов
Геометрия модели задаётся списком её вершин и списком её треугольников. Каждый треугольник задаётся индексами его вершин в списке вершин модели. В частности в Unity индекс вершины хранится двумя байтами, соответственно у одной модели не может быть больше 65к вершин.

#6
8:57, 14 дек 2012

alexzzzz
> В частности в Unity индекс вершины хранится двумя байтами
а еще анимация софтверная, а еще...

З.Ы.
Интересно, куда вся эта толпа "программистов на юнити" трудоустроится, если движок сфейлится =)

#7
11:20, 14 дек 2012

Grettir
> Интересно, куда все эта толпа "программистов на юнити" трудоустроится, если
> движок сфейлится =)
Это верно, но по крайней мере не существует нормального более-менее современного  и притом бесплатного открытого двига на c++. Возможно, писать на юнити будет быстрее. Тем более говорят, что сейчас главнее контент. Я вообще думаю, что контент тоже скоро будет шаблонизирован и его производство будет поставлено на конвейер и главным станет гейм-дизайн.

#8
11:43, 14 дек 2012

Значит, взять файл с текстовым форматом. Затем взять этот файл и попробовать написать его отрисовку на экран. Для отрисовки стоит воспользоваться огл\директ икс, или для лучшего понимания чем-нибудь более низкоуровневым, если такое существует? Кроме .х есть еще какие-нибудь подходящие для изучения? Почему модель описывается списком вершин и нормалей, списком треугольников? Нормаль, вроде, нужна для указания рендеру отображать треугольник или нет. А треугольник и сам по себе набор вершин - зачем еще список вершин нужен. У кого об этом почитать?

Grettir
> Интересно, куда все эта толпа "программистов на юнити" трудоустроится, если
> движок сфейлится =)
Я не считаю себя игропрограммистом или еще как-либо связывающим свою основную работу с разработкой игр - скорее авантюристом: хочу попытаться сделать свою версию игры, на которую "запал" много лет назад, исправив все косяки, которые мне в ней не нравятся. Ну, еще пару идей реализовать... опять же, попытаться:)

#9
12:52, 14 дек 2012

loonypy
> А треугольник и сам по себе набор вершин - зачем еще список вершин нужен. У
> кого об этом почитать?
тяжелый случай... смотри у вершины могут быть (xyz, xn,yn,zn, tutv) = 32 float. К тому же может быть и другой формат вершин (с тангенциальными и бинормальными координатами). К тому же одна и таже вершина может использоваться разными треугольниками
indexedVertices | Что значит движок поддерживает модели только с n количеством полигонов?. Например, на рисунке вершины 0 и 3 используются обоими треугольниками - зачем тратить память, дублируя информацию. Индекс(номер вершины в списке) весит 2 байта в общем случае, если в модели не больше 65к вершин.
Список вершин:
данные вершины 0 ну там xyz и прочее
данные вершины 1
данные вершины 2
данные вершины 3

Список полигонов:
013 треугольник состоит из 0-й,1-й,3-й вершин, что находятся в списке выше
032 треугольник состоит из 0-й,3-й,2-й вершин, что находятся в списке выше

Надеюсь дошло?

#10
13:01, 14 дек 2012

> Для отрисовки стоит воспользоваться огл\директ икс, или для лучшего понимания
> чем-нибудь более низкоуровневым, если такое существует?
Если хочешь распотрошить тело компьютерной графики, поищи книги по алгоритмическим основам машинной графики(алгоритмы брезенхема, отсечения, фильтрация текстур) и начинай писать софтверный рендер (есть немного багованный пример, но для начала сойдет http://www.codeproject.com/Articles/170296/3D-Software-Rendering-Engine-Part-I).
Разница между софтверным рендером и directx/ogl в том, что в последних нужно просто отправить данные о треугольнике и сказать -"Нарисуй-ка мне его", а в при случае софтверного рендера тебе всю эту грязную и неблагодарную (ввиду того, что технологии ушли далеко) работу по рисованию треугольника придется сделать самому. Главное же преимущество DX/OGL - расчет производится на видеокарте в большинстве современного железа, а не на центральном процессоре.

loonypy
> хочу попытаться сделать свою версию игры, на которую "запал" много лет назад
что за игра хоть?

#11
14:28, 14 дек 2012

graveman
> тяжелый случай...
Поэтому в игропрограммирование стараюсь не лезть.

graveman
> Надеюсь дошло?
Частично: список вершин - перечень координат, а список треугольников - какому треугольнику какие координаты соответствуют. По поводу всего остального. "xyz" -- понимаю, координаты точки. "xn,yn,zn," -- вроде что-то про нормаль. "tutv" и "= 32 float" -- не понимаю (32*4байта? Описание одной вершины занимает 128 байт памяти?).

graveman
спасибо за ссылку, на выходных нормально почитаю.

> что за игра хоть?
"Freedom_Fighters", http://ru.wikipedia.org/wiki/Freedom_Fighters
Управление помощниками сильно злило, ИИ, а так же невозможность играть за своих.

#12
14:51, 14 дек 2012

loonypy
любая из координат имеет размерность float (4 байта). tu, tv - текстурные координаты (какой вершине на картинке какая точка соответствует).  (xyz, xn,yn,zn, tutv) - 8 чисел float = 32 байта на вершину.

loonypy
> какому треугольнику какие координаты соответствуют
Я бы сказал, на каких координатах он "стоит" или построен. Есть индексированные треугольники(могут использовать одинаковые вершины, есть неиндексированные (у каждого свои вершины).

loonypy
> "xn,yn,zn," -- вроде что-то про нормаль
Да, нормаль определяет отражение света. Ее можно интерполировать между треугольниками, которые используют вершину - получится гладкое изображение. Ищи в гугле и здесь - до опупения основы эти пересказаны уже.

#13
7:14, 16 дек 2012

loonypy
> Нормаль, вроде, нужна для указания рендеру отображать треугольник или нет.

треугольник не будет нарисован, если мы на него смотрим с обратной стороны,
а вот куда "смотрит" своей плоскостью треугольник - это задаёт как раз нормаль.

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

А в компьютерной графике не так:
нормаль можно направить куда захочешь (если это нужно)

своеобразный трюк позволяющий сделать картинку лучше, экономя ресурсы

вот перпендикуляры синего цвета - это и есть нормали
Изображение

нормали можно задавать и для отдельных вершин
http://www.gamedev.ru/terms/Normal

Изображение

в данном случае метод затенения учитывает нормали из каждой вершины и сглаживает

поэтому выглядит более плавно

при том же количестве полигонов

вообще напридумана целая куча всяких методов затенения - более качественных, более оптимальных

сейчас в основном на шейдерах
что будет дальше ....
graveman
> а в при случае софтверного рендера тебе всю эту грязную и неблагодарную (ввиду
> того, что технологии ушли далеко) работу по рисованию треугольника придется
> сделать самому.

возможно будет второе пришествие софтварных рендеров

так как видеокарты всё больше становятся универсальными вычислительными

#14
10:59, 17 дек 2012

graveman
> Я вообще думаю, что контент тоже скоро будет шаблонизирован и его производство
> будет поставлено на конвейер и главным станет гейм-дизайн.

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

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.