в общем, сегодня меня посетили мысли))
дело в том, что я задумался: в инете за долгое время мне не удалось найти уроков на тему шейдеров
есть некие вступления, но изучив их дальше вывода треугольника через шейдеры у меня дело не пошло
то просто ничего не рисуется то какие то ошибки, и главное, фиг разберешься в чем дело!! ррр :)
в общем я тут хочу (и предлагаю другим) начать писать уроки по шейдерам шаг за шагом
сначало здесь, а если из этого получится что-нибуть толковое, то содадим статьи)
если кто-то хочет помочь мне в изучении и раскрытии этой темы то пишите мне ПМ будет координировать свои действия
дял начала, я думаю, напишем небольшой фреймворк
затем будут уроки, попытаемся создать свой менеджер шейдеров-материалов-света, т.е. попропробуем продублировать возможности АПИ
за основной принцип возьмем KISS, да (keep it simple, stupid!))
пока что все смутно, но мысли уже начали оформляться )
Feaerenil
А зачем и что там учить?
Учить надо мат часть.
> фреймворк
Для шейдеров??? Не годится... Это чтож, байткод формировать, потом пихать в систему? Шейдер быстрым должен быть.
Лучше, даже более чем лучше, это комплекс статей по работе с шейдерами и применении последних технологий визуализации.
Вакуум в информационном пространстве вокруг этого дела действительно раздрожает... Я ваще ничего толкового по шейдерам не нашел, окромя описания
этимологии слова... Толи жилят они от нас информацию (крутые дядьки) толи еще чего... Обидно одним словом.
А шейдеры сейчас знать надо, это изречение уже как дефакто.
Batusay
Есть вопросы - создавай тему и спрашивай.
[dob]
Знаете, товарищ, я и вопросов то придумать не могу, потаму как ничерта про эту технику не знаю.
Пнул бы кто в нужную сторану... :)
(тока не на www.ultimategameprogramming.com, я там был уже, надо больше информации, [eng/rus] не важно, но отечественное предпочтительнее)
Batusay
Ну раз не знаеш - так мож оно тебе и не надо?
[dob]
Вот, все они всегда так говорят!
Как треугольники выводить я знаю, как мультитекстурирование - знаю, свет, анимация - знаю. Четко знаю, что не хватает информации, ее надо больше!
Информация и время, два неоценимых фактора, которых всегда не хватает!
Поисковики взад! Они не дают того, что надо или ваще ничего не дают.
Раз уж ты про мат часть заикнулся, могешь объяснить почти по строкам тот шейдер для эффекта воды (переменные, какая структура для чего (точнее, назначение полей применительно к алгоритму), шаги алгоритма, и т. д.)?
Batusay
Можно я попробую на другом примере?(Просто не понимаю где "тот шейдер для эффекта воды")
//Point light Bump Specular //У каждой вершины есть аттрибуты. // многие используют встроенные переменные, такие как gl_Vertex, glNormal, gl_MultiTexCoord0... // но я предпочитаю делать так: attribute vec3 s_attribute_0;//Vertex attribute vec2 s_attribute_1;//TexCoord attribute vec3 s_attribute_2;//Color/Normal attribute vec3 s_attribute_3;//BiNormal attribute vec3 s_attribute_4;//Tangent //uniform переменные - это константы, которые передаются из программы в шейдер. //На протяжении всего рендеринга объекта эти константы одинаковы. uniform float in_Tile; //Тайлинг текстуры(Кол-во повторений) uniform vec3 in_CamPos; //Позиция камеры uniform vec4 in_LightPos0; //Позиция источника света //varying переменные используют для связи вертексного и фрагментного шейдеров. //Эти переменные записываются для каждой вершины, а во фрагментном шейдере они интерполированы для текущей //точки треугольника varying vec2 v_TexC0; //Координаты тексуры varying vec3 v_LightVec; //Позиция ист. света в пространстве полигона, или tangent space (Сложное место) varying vec3 v_CamVec; //Позиция камеры в том-же пространстве //главная функция =) void main() { //Нахожу позицию точки, с применённой мировой матрицой vec4 position = gl_ModelViewMatrix * vec4( s_attribute_0, 1.0); //Домножаю на проекционную, получаю точку в clip space или в пространстве экрана =) gl_Position = gl_ProjectionMatrix * position; //Передаю текстурные координаты в фрагментный шейдер v_TexC0 = s_attribute_1 * in_Tile; //Создаю матрицу для преобразования векторов в tangent space mat3 tbn = mat3( s_attribute_4, s_attribute_3, s_attribute_2); //Нахожу вектор, "указывающий" на ист. света из вертекста v_LightVec.xyz = in_LightPos0.xyz - ( position.xyz); //Преобразую его в пространство полигона v_LightVec.xyz = v_LightVec.xyz * tbn; //Нахожу вектор, "указывающий" на камеру из вертекста v_CamVec.xyz = in_CamPos.xyz - ( position.xyz); //Преобразую его в пространство полигона v_CamVec.xyz = v_CamVec.xyz * tbn; }
Фрагментный шейдер позже или продолжение следует =)
Вопросы? Можете поправить также.
Batusay
Или тебе DX нужен? =))
NULL_PTR
> Или тебе DX нужен? =))
Ащета да! :)
HLSL (Cg) тобишь.
А "Тот самый эффект воды" - я имел ввиду тот шейдер, который [dob] сюда скинул (называется, блин да он там один, "вода (ps)")/
чёрт, продолжения не будет.
вечером попробую расписать тот шейдер
Но все равно спасибо!
хехе=))
да, там TODO в конце стоит, в надежде, что как будет время и силы сделать описание к ниму.
NULL_PTR
Лучше в vec4 все расчитывать, у тебя тут больше будет тратится на "вытаскивание" vec3 части из vec4, хотя сейчас уже возможно это поправили, но очень не уверен в этом.
[dob]
Всегда вродь одна операция была.
Ну вообще там был довольно халтурный пиксельный шейдер(быстрый, но не по канонам =) )
Даже не знаю, продолжать ли расписывать его.
Сейчас нет времени
Тема в архиве.