Пост N: 4
Зарегистрирован: 01.11.06
Откуда: Москва
Рейтинг:
0
Отправлено: 01.11.06 08:28. Заголовок: Шейдеры для программистов игр и художников
[реклама вместо картинки]
Себастьен Сент-Лаурент Шейдеры для программистов игр и художников
В названии книги все сказано. Эта книга отличается от других, посвященных шейдерам книг. Она сосредотачивается только на шейдерах и их создании. Вы будете использовать программу ATI RenderMonkey, которая предоставляет простую и удобную среду для разработки шейдеров, позволяющую вам направить всю свою энергию на разработку шейдеров, а не на создание каркаса приложения. Книга рассматривает различные техники, начиная от простых цветовых фильтров до достаточно сложных, таких как глубина резкости, марево нагретого воздуха и визуализация в широком динамическом диапазоне. Упражнения в конце каждой главы позволят закрепить полученные навыки, самостоятельно усовершенствуя шейдеры из книги. И для программистов и для технически образованных художников эта книга будет идеальным руководством для освоения шейдеров!
Отправлено: 10.03.10 12:12. Заголовок: 8daemon пишет: Ты с..
8daemon пишет:
цитата:
Ты скорее всего сменил или забыл сменить стандартный обход вершин, который указывает стороны треугольника видимую и не видимую
Вполне возможно. Я с графикой совсем недавно работаю, многое еще не знаю. Тем не менее данная опция выставлена в примерах, которые предоставляют разработчики программы. И на картинке в книге видно, что для прохода Render State выставлен. В общем-то я это написал для тех, для следующих поколений читателей. Если я столкнулся с такой загвоздкой, то не исключено, что другие не столкнутся. Кстати, может подскажешь. Там далее по книге, где про цветофильтры рассказывается. Такое впечатление, что с матрицами преобразования что-то не то.
Вполне возможно. Я с графикой совсем недавно работаю, многое еще не знаю. Тем не менее данная опция выставлена в примерах, которые предоставляют разработчики программы. И на картинке в книге видно, что для прохода Render State выставлен. В общем-то я это написал для тех, для следующих поколений читателей. Если я столкнулся с такой загвоздкой, то не исключено, что другие не столкнутся. Кстати, может подскажешь. Там далее по книге, где про цветофильтры рассказывается. Такое впечатление, что с матрицами преобразования что-то не то.
Я правда не начинал читать этой книги, жду когда она будет полностью переведена. Укажи точное положение матрицы (глава, раздел).
Отправлено: 10.03.10 21:56. Заголовок: To 8daemon: Глава пя..
To 8daemon: Глава пятая, подраздел "Черно-белый, как в старые времена", рисунок 5.10. Я черно-белое изображение получил, но несколько отличным способом, как приведено в книге. Именно данный пример дает какое-то зеленоватое изображение. Я этот вопрос прогуглил, в литературе тоже не так описывается это дело, в частности предлагается использовать матрицу 5х5 для цветовых преобразований (с дополнительной строкой и столбцом).
Глава пятая, подраздел "Черно-белый, как в старые времена", рисунок 5.10. Я черно-белое изображение получил, но несколько отличным способом, как приведено в книге. Именно данный пример дает какое-то зеленоватое изображение. Я этот вопрос прогуглил, в литературе тоже не так описывается это дело, в частности предлагается использовать матрицу 5х5 для цветовых преобразований (с дополнительной строкой и столбцом).
Почитал, математически всё верно. Только я не понял, зачем они цветовой вектор представляют матрицей столбцом, когда она идёт матрицей строкой float4x4 color_filter; sampler Texture0;
float4 ps_main(float2 texCoord: TEXCOORD0) : COLOR { // Читаем исходный цвет float4 col = tex2D(Texture0, texCoord);
// Применяем матрицу к исходному цвету return mul(col, color_filter); }
Так попробуй, предварительно транспонировав матрицу на рисунке 5.10, надеюсь значешь как это делается.
Отправлено: 11.03.10 10:58. Заголовок: Кстати, по поводу 8..
Кстати, по поводу 8daemon пишет:
цитата:
Ты скорее всего сменил или забыл сменить стандартный обход вершин, который указывает стороны треугольника видимую и не видимую
D3DRS_CULLMODE - определяет способ отображения задней стороны треугольника. D3DCULL_NONE - не выбирает задние грани, т.е. обратная сторона треугольника будет отображаться.
Так что ты все верно сказал. Единственно что в только что установленной программе этот параметр нужно выставить.
Отправлено: 11.03.10 11:07. Заголовок: To 8daemon. Отлично,..
To 8daemon. Отлично, так работает. Матрицу преобразования оставил без изменения, а собака порылась в строке return mul(col, color_filter); Это ж матрицы, тут от перемены множителей результат меняется. В книге множители стоят наоборот.
Пост N: 44
Зарегистрирован: 10.05.07
Откуда: Россия, Казань
Рейтинг:
1
Отправлено: 11.03.10 11:08. Заголовок: Обычны в реальных пр..
Обычны в реальных программах придерживаются определенного обхода вершин по или против часовой стрелки, которые указывают переднюю сторону треугольника, что увеличивает частоту кадров, засчет отброса треугольников, которые повернуты к камере задней стороной, что уменьшает число треугольников на конвейере визуализации. Правда это не говорит, что не нужно использовать D3DCULL_NONE, например, при отображении прозрачных объектов, думаю данный параметр пригодится и возможно при рендеринге зеркал
Пост N: 45
Зарегистрирован: 10.05.07
Откуда: Россия, Казань
Рейтинг:
1
Отправлено: 11.03.10 11:10. Заголовок: Kuler пишет: To 8da..
Kuler пишет:
цитата:
To 8daemon. Отлично, так работает. Матрицу преобразования оставил без изменения, а собака порылась в строке return mul(col, color_filter); Это ж матрицы, тут от перемены множителей результат меняется. В книге множители стоят наоборот.
Нет тут как раз надо матрицу транспонировать, попробуй на листке перемножить вектор цвета на матрицу, и поймёшь
Отправлено: 11.03.10 17:12. Заголовок: Ты все правильно гов..
Ты все правильно говоришь.
|ColorFilter| * |Color| :
|Kx Ky Kz 0| |Kx Ky Kz 0| |Kx Ky Kz 0| |0 0 0 1| * | R | | G | | B | | A | = | Kx*R+Ky*G+Kz*B | | Kx*R+Ky*G+Kz*B | | Kx*R+Ky*G+Kz*B | | A |
|Color| * |ColorFilter|T:
|R G B A | * | Kx Kx Kx 0 | | Ky Ky Ky 0 | = | Kx*R+Ky*G+Kz*B Kx*R+Ky*G+Kz*B Kx*R+Ky*G+Kz*B A | | Kz Kz Kz 0 | | 0 0 0 1 |
Результат практически одинаковый, что подтверждается практикой. Но есть нюанс. В настройках пиксельного шейдера нужно выставить свойство, является матрица Row_major или Column_major (по умолчанию). Иначе получается абы что. Когда ставишь Row_major, тогда все ОК. Спасибо за консультацию. Помогло разобраться.
Результат практически одинаковый, что подтверждается практикой. Но есть нюанс. В настройках пиксельного шейдера нужно выставить свойство, является матрица Row_major или Column_major (по умолчанию). Иначе получается абы что. Когда ставишь Row_major, тогда все ОК.
Я насчёт этого уже писал в одном из тем по ДиректХ 11 на данном форуме. Незачто.
Отправлено: 24.03.10 11:48. Заголовок: Да, с примерами гора..
Да, с примерами гораздо проще изучать. О многих деталях в плане значений переменных или настройках программы в тексте ничего нет, а без опыта самостоятельно их подобрать не всегда представляется возможным.
Все даты в формате GMT
3 час. Хитов сегодня: 12
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет