Сообщения на форуме пользователя Andrey (14 стр.)
separate_shader_objects: кто-нибудь пробовал на AMD? | 21 июля 2012 | 20:15 | #9 |
---|
innuendo
>ты почитай, что пишут там в спеке отчего они сделали :)
почитал как раз то что не хватало. Есть другие причины в спеке но они мне неинтересны и лишние на данный момент. А так совместимость будет совместимость с Direct3D/Cg/PS3
> бред - это так отцы сказали ? в 80 % имеет пары VS/PS которые ставятся парами,
> бред, почему не одной строчкой ?
да ты что? можно отключить спекуляр оставить diffuse, (может константы лишние пойдут), тени вблизи с PCF вдали без него. Это навскидку. Больше спорить не буду.
>ты почитай, что пишут там в спеке отчего они сделали :)
почитал как раз то что не хватало. Есть другие причины в спеке но они мне неинтересны и лишние на данный момент. А так совместимость будет совместимость с Direct3D/Cg/PS3
> бред - это так отцы сказали ? в 80 % имеет пары VS/PS которые ставятся парами,
> бред, почему не одной строчкой ?
да ты что? можно отключить спекуляр оставить diffuse, (может константы лишние пойдут), тени вблизи с PCF вдали без него. Это навскидку. Больше спорить не буду.
Загрузчик мешей для DX10 | 21 июля 2012 | 19:32 | #5 |
---|
crozzy
> 1) AttributeTable и AttributeBuffer - это одно и тоже?
не специалист по X файлу. Ну а SDK почитать самому?
>2) Как правильно задать раскладку ввода (input layout) для мешей с несколькими текстурными координатами?
думаю сам подумай, поразвивайся. Никто разжевывать не будет кроме конкретный вопросов.crozzy
> 1) AttributeTable и AttributeBuffer - это одно и тоже?
не специалист по X файлу. Ну а SDK почитать самому?
>2) Как правильно задать раскладку ввода (input layout) для мешей с несколькими текстурными координатами?
думаю сам подумай, поразвивайся. Никто разжевывать не будет кроме конкретный вопросов.crozzy
separate_shader_objects: кто-нибудь пробовал на AMD? | 21 июля 2012 | 19:29 | #5 |
---|
gammaker
>ERROR: 0:3: error(#143) Undeclared identifier gl_Position
>ERROR: 0:3: error(#143) Undeclared identifier gl_TexCoord
Расширение GL_ARB_separate_shader_objects это OpenGL 4.0, что-то типа #version 400 core стоит? может шейдер не написан по спецификации GLSL 4.0 ?
ATI драйвер может лучше соблюдает стандарт. nVidia компилит через Cg который может хавать все подряд, в том числе и несовместимости с версиями.
innuendo
> спорный вопрос, однако :)
Наконец они добавили это и разработчику удобней решать под свою архитектуру как сделать лучше. К примеру имея 1 вершинный шейдер можно лодировать и подсовывать несколько пиксельных, а если они в одной программе то это бред и дублирование кода вершинного шейдера.
>ERROR: 0:3: error(#143) Undeclared identifier gl_Position
>ERROR: 0:3: error(#143) Undeclared identifier gl_TexCoord
Расширение GL_ARB_separate_shader_objects это OpenGL 4.0, что-то типа #version 400 core стоит? может шейдер не написан по спецификации GLSL 4.0 ?
ATI драйвер может лучше соблюдает стандарт. nVidia компилит через Cg который может хавать все подряд, в том числе и несовместимости с версиями.
innuendo
> спорный вопрос, однако :)
Наконец они добавили это и разработчику удобней решать под свою архитектуру как сделать лучше. К примеру имея 1 вершинный шейдер можно лодировать и подсовывать несколько пиксельных, а если они в одной программе то это бред и дублирование кода вершинного шейдера.
OpenGL и lib3ds | 20 июля 2012 | 14:49 | #3 |
---|
revaldo666
>Модель в окне не видно, все faces загружаются, модель находится в координатах x=0,y=900,z=0;(смотрел в 3ds max-e)
поставь 3ds max-e в (0, 0, 0). Экспортни снова. либо при загрузке 3ds получи геометрический центр модели, отними его от всего списка вершин, этим ты сам переместишь ее в (0, 0, 0).
Учти что в 3ds max-e с OpenGL оси координат Y и Z изменены местами.
>Пробовал изменить glTranslatef(0.0f,0.0f,0.0f);
>однако не помогло.
Это не поможет. У тебя модель возможно высоко стоит, а камера где? Получается камера "не видит" модель. Разберись с матрицами мира и камеры и Model-View матрицей в OpenGL
>Модель в окне не видно, все faces загружаются, модель находится в координатах x=0,y=900,z=0;(смотрел в 3ds max-e)
поставь 3ds max-e в (0, 0, 0). Экспортни снова. либо при загрузке 3ds получи геометрический центр модели, отними его от всего списка вершин, этим ты сам переместишь ее в (0, 0, 0).
Учти что в 3ds max-e с OpenGL оси координат Y и Z изменены местами.
>Пробовал изменить glTranslatef(0.0f,0.0f,0.0f);
>однако не помогло.
Это не поможет. У тебя модель возможно высоко стоит, а камера где? Получается камера "не видит" модель. Разберись с матрицами мира и камеры и Model-View матрицей в OpenGL
Загрузчик мешей для DX10 | 20 июля 2012 | 10:42 | #2 |
---|
crozzy
Это не понятно для чего. тип формата вершины можно хранить вообще 1 байтом.
Тоже лишнее.
это все и вместе с типом формата вершины, числом текстур выноси в Header, читай это за 1 раз.
Итого ты будешь много раз к файлу обращаться. Читай Header,(1 вызов) из него узнавай число текстур, формат вершин, число вершин, число полигонов, размер списка таблицы подмешей и т.д.
Читай за 2 раза VB,IB ну и все остальное.
if ((fvf&D3DFVF_XYZ) ==0x002) fstr.write("POS ",4); if ((fvf&D3DFVF_NORMAL) ==0x010) fstr.write("NORM",4); if ((fvf&D3DFVF_PSIZE) ==0x020) fstr.write("PSIZ",4); if ((fvf&D3DFVF_DIFFUSE) ==0x040) fstr.write("COL0",4); if ((fvf&D3DFVF_SPECULAR) ==0x080) fstr.write("COL1",4);
fstr.write("DATA", 4);
fstr.write((char*)&vertexbuffersize, 4); ... fstr.write((char*)&bytesperindex, 4); fstr.write((char*)&indexbuffersize, 4); ... fstr.write((char*)&ssNum, 4); for (DWORD i = 0; i<ssNum; i++) { fstr.write((char*)&table[i], attsize); } .. fstr.write("NOTX", 4); ..
Итого ты будешь много раз к файлу обращаться. Читай Header,(1 вызов) из него узнавай число текстур, формат вершин, число вершин, число полигонов, размер списка таблицы подмешей и т.д.
Читай за 2 раза VB,IB ну и все остальное.
V Engine (3д движок) | 17 июля 2012 | 18:50 | #68 |
---|
TDM
Вы не используете UBO ?
зачем glAlphaFunc, glLoadMartrixf и т.д. во времена OpenGL 3.0 и выше ?
я так понял OpenGL 2.1 используется?
Качество графических эффектов на уровне, Интересует техно демка на серьезной сцене, а не пару кубиков c шейдерами. Как это движок потянет, как оптимизирован и т.д.
.. uniform vec4 color; uniform vec4 color1; uniform vec4 light; uniform vec4 light1; uniform vec4 params; uniform vec4 shadow_params[2]; uniform vec4 sss_params; uniform vec2 screen; uniform float alpha_func; ..
зачем glAlphaFunc, glLoadMartrixf и т.д. во времена OpenGL 3.0 и выше ?
я так понял OpenGL 2.1 используется?
Качество графических эффектов на уровне, Интересует техно демка на серьезной сцене, а не пару кубиков c шейдерами. Как это движок потянет, как оптимизирован и т.д.
Поглядите мой код. | 16 июля 2012 | 14:03 | #20 |
---|
Pokimon
Нормальный код. Красиво пишешь, согласен с Pushkoff const нужен, хорошо что еще и переполнение буфера нету для всяких *printf функций.
кстати если совсем уже идеально то к примеру
bchar err_text[512];
...
swprintf(err_text, 512
константу лучше слева ставить.
Нормальный код. Красиво пишешь, согласен с Pushkoff const нужен, хорошо что еще и переполнение буфера нету для всяких *printf функций.
кстати если совсем уже идеально то к примеру
bchar err_text[512];
...
swprintf(err_text, 512
меняем размер буфера, нужно менять в swprintf, подумай насчет COUNTOF или его аналогов,
далее где assert ? на NULL указатели на входные параметры функций? от них хуже не будет это точно. Как говорил aruslan на каждый параметр функции должен стоять в идеале.
if(cur_type->value.function->type == bLisp_NativeFunction)
3ds max: экспорт текстуры | 13 июля 2012 | 19:12 | #3 |
---|
.Scotina
>Что вопрос делает в "Программировании..."?
вопрос в правильной теме :)
>как сохранить изображение из макса в свой кастомный формат хранения изображений?
А что такое изображения макса??? скриншот 3D сцены?
>Что вопрос делает в "Программировании..."?
вопрос в правильной теме :)
>как сохранить изображение из макса в свой кастомный формат хранения изображений?
А что такое изображения макса??? скриншот 3D сцены?
Почему некоторые игры сильно тормозят | 13 июля 2012 | 14:30 | #47 |
---|
TarasB
>потому что окклудеры и лоды всё время меняют геометрию на ходу.
Зачем окклудерам менять геометрию на ходу? что-бы CPU убить вообще? не забывай про Lua скрипты и остальную игровую логику.
Окклудером просто чанк травы можно отсечь.
TarasB
=A=L=X=
Я дебажил Far Cry через NvPerfhUD. Трава это группа поликов объединенных в 1 DIP. Тонкие Травинки - это грамотно сделанная текстура с альфа каналом. По расстоянию подменяется менее детализированный набор поликов объединенных в DIP, пиксели плавно отсекаются альфа тестом, а с расстоянием и вовсе скрывается. Все просто.
Максимум на сложных сценах у Far Cry было до 100000 поликов в кадре.
> Проц короче всю геометрию по максимуму загружает в видюху и посылает в неё
> только массивы изменяющихся с ходом вьюпорта данных - а их на деле сравительно
> мало.
>Да, но на ходу вычислить, какием именно треугольники надо поменять и как именно менять - неслабый алгоритм получается, очень хитрожопый...
>Да, алгоритм не сортировка пузырьком конечно, но ничего сверхсложного не вижу.
Не надо ничего вычислять!, какие сортировки треугольников??? вы что? CPU и так убивается бедный. Все в редакторе оптимально разбивается на чанки в редакторе, сохраняются для лодов, в готовом оптимальном виде.
анимация травы это естественно вершинный шейдер.
>потому что окклудеры и лоды всё время меняют геометрию на ходу.
Зачем окклудерам менять геометрию на ходу? что-бы CPU убить вообще? не забывай про Lua скрипты и остальную игровую логику.
Окклудером просто чанк травы можно отсечь.
TarasB
=A=L=X=
Я дебажил Far Cry через NvPerfhUD. Трава это группа поликов объединенных в 1 DIP. Тонкие Травинки - это грамотно сделанная текстура с альфа каналом. По расстоянию подменяется менее детализированный набор поликов объединенных в DIP, пиксели плавно отсекаются альфа тестом, а с расстоянием и вовсе скрывается. Все просто.
Максимум на сложных сценах у Far Cry было до 100000 поликов в кадре.
> Проц короче всю геометрию по максимуму загружает в видюху и посылает в неё
> только массивы изменяющихся с ходом вьюпорта данных - а их на деле сравительно
> мало.
>Да, но на ходу вычислить, какием именно треугольники надо поменять и как именно менять - неслабый алгоритм получается, очень хитрожопый...
>Да, алгоритм не сортировка пузырьком конечно, но ничего сверхсложного не вижу.
Не надо ничего вычислять!, какие сортировки треугольников??? вы что? CPU и так убивается бедный. Все в редакторе оптимально разбивается на чанки в редакторе, сохраняются для лодов, в готовом оптимальном виде.
анимация травы это естественно вершинный шейдер.
актуальность нового движка? | 12 июля 2012 | 18:28 | #17 |
---|
flaber
> Сделано уже. Очередь на загрузку и отдельный поток. Пока ресурс не загружен подсовывается пустышка. Инициализация в потоке рендера.
Можно без потоков лучше Async I/O.
flaber
> Какие форматы нужны?
Свой формат нужен, бинарный, чтоб грузился быстро, inplace loading, сразу читать в VB/IB кости и т.д. если скелетка.
Из всех остальных можно конвертеры предоставить прямо из командной строки, как набор tools к движку. Можно из редактора это открывать как некое дополнение. Но в коде движка это вообще лишнее. Ты же говорил есть плагин экспорта вот и добавь его поддержку.
>- система частиц
а что за система? Частицы мягкие ? редактор есть? Есть множество эмиттеров в составе 1 системы? Сколько аффекторов поддерживется? трансформацию поворота к камере делаешь на CPU или GPU ?
пробовал из 3DS Max экспортировать?
SNVampyre
> Если говно типа огра, то не нужен однозначно.
Ну огр точно твою примитивную сцену нарисует не за 10000 DIP с такими же шейдерами, постпроцессом и тенями. И стриминг есть и ландшафт, да и всего всего там много. Да есть у него минусы.
Поражаюсь над людьми сделают кубик и шейдеров покруче и с постпроцессом все написал крутой движок, огр гавно Rage тоже.
> Сделано уже. Очередь на загрузку и отдельный поток. Пока ресурс не загружен подсовывается пустышка. Инициализация в потоке рендера.
Можно без потоков лучше Async I/O.
flaber
> Какие форматы нужны?
Свой формат нужен, бинарный, чтоб грузился быстро, inplace loading, сразу читать в VB/IB кости и т.д. если скелетка.
Из всех остальных можно конвертеры предоставить прямо из командной строки, как набор tools к движку. Можно из редактора это открывать как некое дополнение. Но в коде движка это вообще лишнее. Ты же говорил есть плагин экспорта вот и добавь его поддержку.
>- система частиц
а что за система? Частицы мягкие ? редактор есть? Есть множество эмиттеров в составе 1 системы? Сколько аффекторов поддерживется? трансформацию поворота к камере делаешь на CPU или GPU ?
пробовал из 3DS Max экспортировать?
SNVampyre
> Если говно типа огра, то не нужен однозначно.
Ну огр точно твою примитивную сцену нарисует не за 10000 DIP с такими же шейдерами, постпроцессом и тенями. И стриминг есть и ландшафт, да и всего всего там много. Да есть у него минусы.
Поражаюсь над людьми сделают кубик и шейдеров покруче и с постпроцессом все написал крутой движок, огр гавно Rage тоже.
актуальность нового движка? | 12 июля 2012 | 13:13 | #10 |
---|
flaber
Написание движка, дает очень нехилый опыт и знания в программрровании. Так что ты не треряешь время никак.
> - динамическая подгрузка ресурсов
как будешь делать? Async I/O ? сложная тема достаточно.
>- загрузка моделей (3ds + свой формат и плагин для экспорта к максу)
зачем тебе 3DS ? лишняя трата времени.
>скриптов не предвидится. Все на чистом c++ ))
а это зря. Очень зря.
Написание движка, дает очень нехилый опыт и знания в программрровании. Так что ты не треряешь время никак.
> - динамическая подгрузка ресурсов
как будешь делать? Async I/O ? сложная тема достаточно.
>- загрузка моделей (3ds + свой формат и плагин для экспорта к максу)
зачем тебе 3DS ? лишняя трата времени.
>скриптов не предвидится. Все на чистом c++ ))
а это зря. Очень зря.
Импостеры заработали? Очень нужная фича. У ландшафта щели заделываешь?
вообще не хватает демки.
Ищу старый движок с хорошими тулзами и сырцами C++ | 11 июля 2012 | 12:26 | #7 |
---|
.Scotina
ну в CS есть Bullet. Не знаю по затратам насчет разрушаемости. Возможно автор это требование не найдет, и придется что-то дорабатывать на крайняк, хотя-бы малыми затратами.
ну в CS есть Bullet. Не знаю по затратам насчет разрушаемости. Возможно автор это требование не найдет, и придется что-то дорабатывать на крайняк, хотя-бы малыми затратами.
Ищу старый движок с хорошими тулзами и сырцами C++ | 11 июля 2012 | 10:33 | #5 |
---|
BorisV
CrystalSpace ?
Irrlicht ? там точно редактор есть
движков море!
CrystalSpace ?
Irrlicht ? там точно редактор есть
движков море!
skeletal animation, shaders | 9 июля 2012 | 14:34 | #5 |
---|
shestakoffvs
> int parent_index;
>Vector scale_vector;
Не нужно это в шейдере. Пересчитывай иерархию костей на CPU и шли массив готовых матриц или кватеринон + позиция.
>Это что за координаты относительно кости?
Позиция текущей кости относительно родительской.
> int parent_index;
>Vector scale_vector;
Не нужно это в шейдере. Пересчитывай иерархию костей на CPU и шли массив готовых матриц или кватеринон + позиция.
>Это что за координаты относительно кости?
Позиция текущей кости относительно родительской.
Render Ops | 6 июля 2012 | 13:58 | #67 |
---|
Executor
>Ну я понял, у тебя нет инстанирования. То есть объект может рендерится один раз и всё, нельзя его 10 раз сунуть на рендер с разными данными.
>Как-то на универсальность это не тянет. Ведь роп может создасться и без какого либо явно объекта содержащего в себе информацию.
>Какие аллокации при загрузке тут нужно делать?
>На что должны ссылаться указатели? Если не в РОП эти параметры хранить, то где?
>Если делать user parameters то либо их делать статическим массивом - много памяти, либо делать динамически - много аллокаций и бреда.
Ну храни отдельно данные для этих целей. Какие проблемы? Пусть ROP на них ссылается. Напиши некий интерфейс
Вообще это уже другой пример, про рандомный цвет устраивает идея?
Напиши несколько реализаций, пусть ROP имеет указатель на эти реализации и будет он специфически для каждой ситуации для текущего ROP будет обновлять данные для шейдеров.
Выделяй память под параметры отдельно, самое простое и годное решение. ROP будет ссылаться на эти параметры. т.е. тем совсем в другое русло ушло. Если требуется специфическое хранение констант то это уже другая тема. Это задача SceneManager,SceneGraph и GameLogic т.д.
Делай динамически, не вижу бреда тут. Я же предложил в материале сделать массив дополнительных параметров к примеру. Для какого объекта нужно для того и выделил сколько нужно. Если их нету то при отрисовке ROP ничего обновляться не будет. Как оптимально хранить данные и выделять под них память и ссылку на них хранить в ROP, это уже твое дело тут по сути ROP не причем, если в нем хранить ссылку.
>256 фрагментных шейдерных констант.
совсем плохо... в текстуры данные нужно переводить, конечно это завязано на Tools очень сильно.
>Предполагаем, что у нас 1000 объектов может отрендерится максимум, хотя во многих играх можно и 2к видеть, ну пусть 1к будет. 8 кб * 1000 = 8 мбайт.
Для 800 объектов у тебя может быть 10 одинаковых шейдеров с набором автоматических констант. На остальные объекты выделяй память для других специфичных для них констант.
Итого там будет КБ, а не МБ, ты сильно преувеличиваешь. Ну если у тебя действительно для всех 1000 объектов User константы отличаются то тут да, хранить отдельно и обновляй тоже, и ROP будет иметь ссылку на них.
>Рендер универсален, соответственно он ничего не может знать о том, сколько ему захотят отдать данных и каких.
Прошелся по сцене заполнил ROP у них теперь ссылки на константы как на автоматические так и на индивидуальные.
>Ну я понял, у тебя нет инстанирования. То есть объект может рендерится один раз и всё, нельзя его 10 раз сунуть на рендер с разными данными.
>Как-то на универсальность это не тянет. Ведь роп может создасться и без какого либо явно объекта содержащего в себе информацию.
>Какие аллокации при загрузке тут нужно делать?
>На что должны ссылаться указатели? Если не в РОП эти параметры хранить, то где?
>Если делать user parameters то либо их делать статическим массивом - много памяти, либо делать динамически - много аллокаций и бреда.
Ну храни отдельно данные для этих целей. Какие проблемы? Пусть ROP на них ссылается. Напиши некий интерфейс
class IUpdaterShaderParameters { void UpdateShaderParameters(ROP& cop) = 0; }
Напиши несколько реализаций, пусть ROP имеет указатель на эти реализации и будет он специфически для каждой ситуации для текущего ROP будет обновлять данные для шейдеров.
Выделяй память под параметры отдельно, самое простое и годное решение. ROP будет ссылаться на эти параметры. т.е. тем совсем в другое русло ушло. Если требуется специфическое хранение констант то это уже другая тема. Это задача SceneManager,SceneGraph и GameLogic т.д.
Делай динамически, не вижу бреда тут. Я же предложил в материале сделать массив дополнительных параметров к примеру. Для какого объекта нужно для того и выделил сколько нужно. Если их нету то при отрисовке ROP ничего обновляться не будет. Как оптимально хранить данные и выделять под них память и ссылку на них хранить в ROP, это уже твое дело тут по сути ROP не причем, если в нем хранить ссылку.
>256 фрагментных шейдерных констант.
совсем плохо... в текстуры данные нужно переводить, конечно это завязано на Tools очень сильно.
>Предполагаем, что у нас 1000 объектов может отрендерится максимум, хотя во многих играх можно и 2к видеть, ну пусть 1к будет. 8 кб * 1000 = 8 мбайт.
Для 800 объектов у тебя может быть 10 одинаковых шейдеров с набором автоматических констант. На остальные объекты выделяй память для других специфичных для них констант.
Итого там будет КБ, а не МБ, ты сильно преувеличиваешь. Ну если у тебя действительно для всех 1000 объектов User константы отличаются то тут да, хранить отдельно и обновляй тоже, и ROP будет иметь ссылку на них.
>Рендер универсален, соответственно он ничего не может знать о том, сколько ему захотят отдать данных и каких.
Прошелся по сцене заполнил ROP у них теперь ссылки на константы как на автоматические так и на индивидуальные.