GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (14 стр.)

Сообщения на форуме пользователя Andrey (14 стр.)

separate_shader_objects: кто-нибудь пробовал на AMD?21 июля 201220:15#9
innuendo
>ты почитай, что пишут там в спеке отчего они сделали :)
почитал как раз то что не хватало. Есть другие причины в спеке но они мне неинтересны и лишние на данный момент. А так совместимость будет совместимость с Direct3D/Cg/PS3
> бред - это так отцы сказали ? в 80 % имеет пары VS/PS которые ставятся парами,
> бред, почему не одной строчкой ?
да ты что? можно отключить спекуляр оставить diffuse, (может константы лишние пойдут), тени вблизи с PCF вдали без него. Это навскидку. Больше спорить не буду.
Загрузчик мешей для DX1021 июля 201219:32#5
crozzy
> 1) AttributeTable и AttributeBuffer - это одно и тоже?
не специалист по X файлу. Ну а SDK почитать самому?
>2) Как правильно задать раскладку ввода (input layout) для мешей с несколькими текстурными координатами?
думаю сам подумай, поразвивайся. Никто разжевывать не будет кроме конкретный вопросов.crozzy
separate_shader_objects: кто-нибудь пробовал на AMD?21 июля 201219: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 вершинный шейдер можно лодировать и подсовывать несколько пиксельных, а если они в одной программе то это бред и дублирование кода вершинного шейдера.
OpenGL и lib3ds20 июля 201214: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
Загрузчик мешей для DX1020 июля 201210:42#2
crozzy
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);
Это не понятно для чего. тип формата вершины можно хранить вообще 1 байтом.
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 раз.
Итого ты будешь много раз к файлу обращаться. Читай Header,(1 вызов) из него узнавай число текстур, формат вершин, число вершин, число полигонов, размер списка таблицы подмешей и т.д.
Читай за 2 раза VB,IB ну и все остальное.
V Engine (3д движок)17 июля 201218:50#68
TDM
..
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;
..
Вы не используете UBO ?
зачем glAlphaFunc, glLoadMartrixf и т.д. во времена OpenGL 3.0 и выше ?
я так понял OpenGL 2.1 используется?
Качество графических эффектов на уровне, Интересует техно демка на серьезной сцене, а не пару кубиков c шейдерами. Как это движок потянет, как оптимизирован и т.д.
Поглядите мой код.16 июля 201214:03#20
Pokimon
Нормальный код. Красиво пишешь, согласен с 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 июля 201219:12#3
.Scotina
>Что вопрос делает в "Программировании..."?
вопрос в правильной теме :)
>как сохранить изображение из макса в свой кастомный формат хранения изображений?
А что такое изображения макса??? скриншот 3D сцены?
Почему некоторые игры сильно тормозят13 июля 201214:30#47
TarasB
>потому что окклудеры и лоды всё время меняют геометрию на ходу.
Зачем окклудерам менять геометрию на ходу? что-бы CPU убить вообще? не забывай про Lua скрипты и остальную игровую логику.
Окклудером просто чанк травы можно отсечь.
TarasB
=A=L=X=
Я дебажил Far Cry через NvPerfhUD. Трава это группа поликов объединенных в 1 DIP. Тонкие Травинки - это грамотно сделанная текстура с альфа каналом. По расстоянию подменяется менее детализированный набор поликов объединенных в DIP, пиксели плавно отсекаются альфа тестом, а с расстоянием и вовсе скрывается. Все просто.
Максимум на сложных сценах у Far Cry было до 100000 поликов в кадре.
> Проц короче всю геометрию по максимуму загружает в видюху и посылает в неё
> только массивы изменяющихся с ходом вьюпорта данных - а их на деле сравительно
> мало.
>Да, но на ходу вычислить, какием именно треугольники надо поменять и как именно менять - неслабый алгоритм получается, очень хитрожопый...
>Да, алгоритм не сортировка пузырьком конечно, но ничего сверхсложного не вижу.
Не надо ничего вычислять!, какие сортировки треугольников??? вы что? CPU и так убивается бедный. Все в редакторе оптимально разбивается на чанки в редакторе, сохраняются для лодов, в готовом оптимальном виде.
анимация травы это естественно вершинный шейдер.
актуальность нового движка?12 июля 201218:28#17
flaber
> Сделано уже. Очередь на загрузку и отдельный поток. Пока ресурс не загружен подсовывается пустышка. Инициализация в потоке рендера.
Можно без потоков лучше Async I/O.
flaber
> Какие форматы нужны?
Свой формат нужен, бинарный, чтоб грузился быстро, inplace loading, сразу читать в VB/IB кости и т.д. если скелетка.
Из всех остальных можно конвертеры предоставить прямо из командной строки, как набор tools к движку. Можно из редактора это открывать как некое дополнение. Но в коде движка это вообще лишнее. Ты же говорил есть плагин экспорта вот и добавь его поддержку.
>- система частиц
а что за система? Частицы мягкие ? редактор есть? Есть множество эмиттеров в составе 1 системы? Сколько аффекторов поддерживется? трансформацию поворота к камере делаешь на CPU или GPU ?
пробовал из 3DS Max экспортировать?
SNVampyre
> Если говно типа огра, то не нужен однозначно.
Ну огр точно твою примитивную сцену нарисует не за 10000 DIP с такими же шейдерами, постпроцессом и тенями. И стриминг есть и ландшафт, да и всего всего там много. Да есть у него минусы.
Поражаюсь над людьми сделают кубик и шейдеров покруче и с постпроцессом все написал крутой движок, огр гавно Rage тоже.
актуальность нового движка?12 июля 201213:13#10
flaber
Написание движка, дает очень нехилый опыт и знания в программрровании. Так что ты не треряешь время никак.
> - динамическая подгрузка ресурсов
как будешь делать? Async I/O ? сложная тема достаточно.
>- загрузка моделей (3ds + свой формат и плагин для экспорта к максу)
зачем тебе 3DS ? лишняя трата времени.
>скриптов не предвидится. Все на чистом c++ ))
а это зря. Очень зря.

Импостеры заработали? Очень нужная фича. У ландшафта щели заделываешь?

вообще не хватает демки.

Ищу старый движок с хорошими тулзами и сырцами C++11 июля 201212:26#7
.Scotina
ну в CS есть Bullet. Не знаю по затратам насчет разрушаемости. Возможно автор это требование не найдет, и придется что-то дорабатывать на крайняк, хотя-бы малыми затратами.
Ищу старый движок с хорошими тулзами и сырцами C++11 июля 201210:33#5
BorisV
CrystalSpace ?
Irrlicht ? там точно редактор есть
движков море!
skeletal animation, shaders9 июля 201214:34#5
shestakoffvs
> int parent_index;
>Vector scale_vector;
Не нужно это в шейдере. Пересчитывай иерархию костей на CPU и шли массив готовых матриц или кватеринон + позиция.
>Это что за координаты относительно кости?
Позиция текущей кости относительно родительской.
Render Ops6 июля 201213:58#67
Executor
>Ну я понял, у тебя нет инстанирования. То есть объект может рендерится один раз и всё, нельзя его 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 у них теперь ссылки на константы как на автоматические так и на индивидуальные.

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр