Войти
ПрограммированиеФорумГрафика

[OpenGL][шейдеры]немного общего непонимания

Страницы: 1 2 Следующая »
#0
21:29, 9 ноя. 2011

Всем добрый вечер.

Не так давно решил заняться 3д графикой и игростроением, чтобы отвлечься от работы.
Почитал книжек по OpenGL, недавно осилил спеки по OpenGL ES. Вроде бы до конца понял,
как все происходит с точки зрения графики. Но пока что не могу понять, как это использовать
при проектировании графического движка.

Собственно вот как я вижу ситуацию:
1. Есть конвейер, для него можно писать програмки (шейдеры).
2. В шейдер можно передавать вертексы (набор заданных мной атрибутов).
3. В шейдер можно передавать т.н. Uniform переменные, которые будут общими для всех шейдеров.
4. Можно создать некоторое количество текстур, пронумеровав их через GL_TEXTUREi,
где i - номер текстуры, который передается в шейдер через sampler (вот тут очень не уверен, что все так и есть, если нет - поправьте).
5. vayring переменные и прочие внутренности шейдеров тоже понятны.

Т.е. шейдер получает набор атрибутов для каждого вертекса, общие uniform и номера текстур, обрабатывает их в 2 этапа (вертексны->фрагментный) и в итоге получается картинка.

Теперь собственно вопрос.
Допустим, у меня есть 3 модели. Каждая модель стостоит из набора вершин и костей. Каждая вершина жеско привязана к одной из костей.
Каким образом лучше организовать взаимодейстиве всего этого безобразия в шейдере?
Каждый вертекс модели загружаю через набор атрибутов, кости при каждой перерисовке меняю, используя uniform?
Все модели рендерятся одним шейдером или удобнее использовать несколько шейдеров и переключаться между ними?

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

В любом случае всем спасибо за продуманные и взвешенные ответы.


#1
21:48, 9 ноя. 2011

trex
> Почитал книжек по OpenGL, недавно осилил спеки по OpenGL ES.
Тебе первое или второе все таки?

Можешь начать с сообщества http://www.gamedev.ru/community/ogl/ и уроков в нем.

ЗЫ. Почитал еще подробней что тебе надо, советую сначала с азами разобраться, прежде чем думать о "костях".

#2
22:22, 9 ноя. 2011

KpeHDeJIb
> Тебе первое или второе все таки?
Пока что второе (ES), хочтся разобраться с шейдерами в минимальном объеме, а потом уже геометрический, тесселяция и т.п.

> прежде чем думать о "костях"
Не думал, что это какая-то очень уж сложная тема. На первый взгляд все очень просто.

> сначала с азами разобраться
Да я вроде бы разобрался. Т.е. кубик покрутил, теорию посмотрел. Сейчас как раз начинаю пробовать что-то более сложоне писать.
Может быть подскажете набор упражнений, выполнив которые я мог бы начать двигаться дальше?

#3
1:13, 10 ноя. 2011

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

#4
1:26, 10 ноя. 2011

trex
> Пока что второе (ES), хочтся разобраться с шейдерами в минимальном объеме, а потом уже геометрический, тесселяция и т.п.
Я не понимаю при чем тут шейдеры? ES это для эмбеддед систем, это не значит "OpenGL с шейдерами", хотя может это я вас неправильно понял.

> На первый взгляд все очень просто.
Кости конечно не сложно, если брать в расчет только иерархию трансформаций, но если оптимизация скелетки и скининг то становится все намного веселее, стоит ли этим сейчас заниматься?

> Может быть подскажете набор упражнений, выполнив которые я мог бы начать двигаться дальше?
Упражнения это что-то вроде "отойдите от компьютера, пошевелите левы глазом, пошевелите правым"? Ссылку на уроки именно по "новому" OpenGL я дал, как говорится - чего же боле?

#5
1:28, 10 ноя. 2011

Sayd
> натыкание лбом на все базовые сложности в понимании "как сбацать игруху"
Да я вроде бы уже потыкался во все основы - портировал игрушку с iOS на Symbian/MeeGo.
Сейчас хотелось бы сконцентрироваться на OpenGL. В принципе кубик я повертел, цвета вершин порасставлял, источник света воткунл.
Осталось еще текстуры потыкать, но я это на сладкое оставил и сейчас не трогаю.

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

#6
1:37, 10 ноя. 2011

KpeHDeJIb
> Я не понимаю при чем тут шейдеры? ES это для эмбеддед систем, это не значит
> "OpenGL с шейдерами", хотя может это я вас неправильно понял.
Просто в 4-ом опенгл хочется исопльзовать, так сказать "всю мощь", но для этого пока что нет знаний. Можно начать тыкать совсем по чуть-чуть, но тогда сложно будет найти тех, кто потестирует мои творения.
Мне, волею судеб, достался N950 (прототип N9), сейчас их уже продали достаточно, а игрушек в официальном store не так много. К тому же есть несколько простеньких идей, которые хочется реализовать.
Вот в итоге я и решил заняться ES, тем более, что спеки там значительно короче чем в полном GL =)

> Кости
Так дело не в костях в принципе, а в
> Сейчас я для своих потех некоторые базовые классы пытаюсь вводить, вот и не
> могу понять, у каждого объекта должен быть свой шейдер, который его рисует, или
> шейдеры переключаются крайне редко и в программе должны быть 1-2 шейдера и все.


> Упражнения это что-то вроде "отойдите от компьютера, пошевелите левы глазом,
> пошевелите правым"? Ссылку на уроки именно по "новому" OpenGL я дал, как
> говорится - чего же боле?
Я немножко не это имел ввиду. Просто сейчас я попробовал передать в шейдер вершины и их нарисовать - все понятно.
Почитал теорию по всему остальному - тоже вроде бы все понятно, но надо пробовать.
Чтобы было удобнее пробовать - решил написать несколько базовых классов и возник вопрос по шейдерам.


P.S. Может быть заодно порекомендуете что-нибудь по основам 3д графики. steps3d я уже читал, так же есть базовые представления о пространственной геометрии, моделировании/нормалях и т.п. (2 года преподавал 3д макс). Но меня не покидает ощущение, что чего-то я все же не знаю. Причем чего-то очень важного.
Или это опыт, сын ошибок трудных? Т.е. набираться знаний придется на практике и только так?

#7
1:39, 10 ноя. 2011

P.S.
> 4. Можно создать некоторое количество текстур, пронумеровав их через
> GL_TEXTUREi,
> где i - номер текстуры, который передается в шейдер через sampler
Вот тут я все правильно понял? Просто времени не так много, а для текстур их сначала нужно еще из файла загрузить и вообще много мороки, но судя по докам - все именно так.
Или я не так спеку прочитал?

#8
1:45, 10 ноя. 2011

trex
> Вот в итоге я и решил заняться ES
Блин, но почему ES? Откуда ES? На PC нету ES! Есть только эмуляция, да и та через обычный OpenGL.  И почему сразу 4ый? Зачем 4ый? Что вам от него надо? Шейдеры? Шейдеры еще в 2.1 появились. Уроки (ссылку на которые я уже два раза дал) ориентированы на OpenGL 3.0-3.3, это сейчас хороший середняк, судя по данным стима сейчас 87% пользователей имеют железо DX10 или выше, так что я думаю тут уж точно у большинства железо держит "хотябы" GL 3.0.

trex
> Вот тут я все правильно понял? Просто времени не так много, а для текстур их
> сначала нужно еще из файла загрузить и вообще много мороки, но судя по докам -
> все именно так.
> Или я не так спеку прочитал?
Честно я и вопроса не понял, через GL_TEXTUREi нумеруются не текстуры а текстурные юниты, вобщем или спека совсем не пошла, либо читали вы ее по диагонали.

#9
2:25, 10 ноя. 2011

KpeHDeJIb
> Блин, но почему ES?
Если я напишу игру для PC она не принесет мне ничего кроме опыта (вряд ли ее кто-то скачает даже на посмотреть), если я напишу игру для N9 - получу отзывы игроков (т.е. значительно больше опыта) и, возможно, $50-$100 которые с удовольствием потрачу на мороженое.

> На PC нету ES!
Действительно нету. Но у меня есть Nokia N950, а там ES вполне себе есть. А игр для него сейчас мало.
Потом, если будет все получаться и мой энтузиазм не утихнет, займусь PC версией. Насколько я понял, отлчия между ES и чистым GL в плане философии работы минимальны.


> Честно я и вопроса не понял
Немного тороплюсь, видимо не получается нормально объяснить свою мысль. К тому же хромает теория, а точнее термины.
В любом случае я быстренько пробежался по тексту Вашего урока с кубом и текстурой и мне показалось, что я понял все правильно.
Т.е. сначала мы загружаем текстуру (там все просто), потом биндим ее на текстурный юнит, а номер этого юнита передаем в sampler,
который и используем в шейдере.

P.S. Пожалуйста, подскажите, как все же принято использовать шейдеры - для каждой модели своя программа или одна программа на все модели (понимаю, что это крайности, но к какой из них ближе вариант, который применяется в игрострое).

#10
2:29, 10 ноя. 2011

P.S.
KpeHDeJIb
> И почему сразу 4ый?
Когда появился 4-ый, меня это заинтересовало, купил себе карточку под 4-ый (самую дешевую из ATIшных).
Вообще в 3д ударился только из-за этого.
Даже сложно сказать, чем меня 4-ый и заинтересовал, но сейчас это уже не так важно.
Наверное, давняя мечта - сделать игру/движек с замечательной графикой для Linux.

#11
5:28, 10 ноя. 2011

  Судя по всему, человека, который бы умел работать с костями в этой теме пока не появлялось, иначе сразу бы сказали. Все умеют только троллиль и советовать писать тетрисы, а как делать что-то сложнее тетрисов не знают. "Профессионалы", блин.

trex
  Пользуйся поиском по форуму, такие темы должны былы подниматься.

#12
10:23, 10 ноя. 2011

Zefick
> Судя по всему, человека, который бы умел работать с костями в этой теме пока
> не появлялось, иначе сразу бы сказали.

Пару раз уже заходил, не понимаю чем могу помочь автору насчёт костей.
Шейдеров скиннинга в инете дофига.

#13
11:33, 10 ноя. 2011

Zefick
> Судя по всему, человека, который бы умел работать с костями в этой теме пока не
> появлялось, иначе сразу бы сказали.
Сказали что? Во-первых человек так и не сказал что его в костях интересует, просто иерархия преобразований или же скининг? Впринципе и то и другое довольно легко ищется в этих ваших интернетах.

В любом случае я не думаю что это все хорошо пойдет на его Nokia, да и количество людей с поддержкой OpenGL ES 2 значительно меньше чем людей с поддержкой даже OpenGL 4, не говоря уже про OpenGL 3.

#14
11:46, 10 ноя. 2011

Господа, возможно кто-то все же сумеет ответить мне на вопрос:
> Пожалуйста, подскажите, как все же принято использовать шейдеры - для каждой
> модели своя программа или одна программа на все модели (понимаю, что это
> крайности, но к какой из них ближе вариант, который применяется в игрострое).
Собственно ради него вся тема создавалась, а мы куда-то ушли в сторону обсуждения костей и версий GL.

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

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