Комментарий к Статье Программирование шейдеров на HLSL
Эта статья знакомит с программированием шейдеров на языке высокого уровня называемого High Level Shading Language. Здесь есть примеры и советы по оптимизации кода. Кроме всего, описываются различные модели освещения, используемые в компьютерной графике, и приведена, конечно же, их реализация при помощи HLSL.
Еще не дочитал, но я так понял это перевод из SDK. Хороший перевод, тока вот встретил опечатку:
step(a,x) Возвращает (x = a) ? 1 : 0.
original: Returns (x >= a) ? 1 : 0.
пошел дальше читать
Aroch
> я так понял это перевод из SDK
Нет, тут сборная солянка.
статья хорошая. наконец появилось хоть что-то по HLSL на русском языке. хотя есть ряд неприятных опечаток, и начинающие могут поиметь
неприятности, не зная о них.
вот, что нашёл беглым взглядом
Чем больше угол β, тем ярче бликовое освещение - по моему наоборот. но это теория, и к HLSL имеет малое отношение.
А вот так компилиться кажется не будет:
D3DVERTEXELEMENT9 decl[]= { //stream, offset, type, method, semantic type {0,0, D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION,0}, {0,12,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_NORMAL, 0}, {0,20,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,0}, {0,32,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TANGENT, 0}, D3DDECL_END() };
struct VS_INPUT_STRUCT { float4 position: POSITION; // Vertex position float3 normal: NORMAL0; // Vertex normal float2 texcoord: TEXCOORD0; // Vertex texcoord float3 tangent: TANGENT; // Tangent ( u ) float3 binormal: BINORMAL; // Binormal( v ) };
/*TANGENTn Тангент.*/
нет такого слова тангент, есть тангенс.
/*Рассмотрим все подробнее, создадим простую модель освещения — равномерное освещение.*/
как то не по русски, может: ... , создав простую модель равномерного освещения.
/*Iambient=ka?Ia
Вершинный шейдер для расчета рассеянной модели освещения:*/
Начали про равномерное освещение, а далее обзываем его рассеянным...
/*Алгоритм для фрагментного шейдера:
1)Рассчитываем вектор искривления линии (Wooble или Skew), который равен суме текстурных координат и цвета из noise текстуры.*/
P.S.
я раньше не разбирался с шейдерами, видюха с ними не дружит, но после такой теории, принимавшим участие в написани статьи большой респект, теперь все стало понятно.
Aroch
>>/*TANGENTn Тангент.*/
>>нет такого слова тангент, есть тангенс.
как здесь уже не раз обсуждалось, по-русски это будет "пространство касательных" :-).
Aroch
>/*TANGENTn Тангент.*/
>нет такого слова тангент, есть тангенс.
нет, согласен. Но это не тангенс, это, можно сказать, касательная, но если так написать, кажется, не будет ясно.
>/*Iambient=ka?Ia
>Вершинный шейдер для расчета рассеянной модели освещения:*/
>Начали про равномерное освещение, а далее обзываем его рассеянным...
Это я прогнал, не всё заменил :)
В целом — спасибо, поправлю.
Хорошая статья.
Тот глюк, которъй упомянул kroll нужно убрать.
Неплохо бъ бъло, для полности, вместо шейдера дерева, дать шейдер вертексной анимации и скелетной анимации. Там есть ньюансъ, того же HLSL, особенно когда надо целочисленнъе индексъ перевадать.
Нигде (imho) не сказано, что для данной семантики можно указать несколько типов, что является оптимизацией именно при передавании целочисленнъх параметров в компонентах вектора, скажем:
struct AppIn { int4 ipos : POSITION0; float4 pos : POSITION0; }; ... int bone = IN.ipos.w; float3 pos = IN.pos.xyz;
Ат блин пацаны, от блин молодцы - МОЙ ВАМ ПОКЛОН. Пускай это будет либо перевод, либо ваше действо, но это КЛАСС. Большое кол-во рисунков, примеров, кода - то что надо нам. Большое спасибо!!!
Zemedelec
Вроде, назревает часть за номером два. Можешь авторам намекнуть, о чём ещё написать :).
Ну, лучше етого места намекнуть нету вроде... :)
authors
Есще: порадует (всех) и пример скажем PCF и post-processing еффектов - там glow, distortion, tv screen, мягкость.
Ети штуки пойдут сразу на пользу местой 'толпъ' юзеров пишуших движки.
И да - в статье, где диффузное освещение есть картинка. Там на картинке никак не диффузное освещение, что в примере, так как теневая сторона 'бублика' должна бъть мрачно черной, из-за clamp-a dot-a в ноль. А там вроде и ambient есть. Ето неточность, но новичка может напугать.
Zemedelec
>>Есще: порадует (всех) и пример скажем PCF и post-processing еффектов - там glow, distortion, tv screen, >>мягкость.
Ну это можно, благо просто сделать. :) А вот с анимацией на шейдерах я не работал, поэтому даже не знаю, но попробовать стоит.
>>Нигде (imho) не сказано, что для данной семантики можно указать несколько типов, что является >>оптимизацией именно...
Хотели во второй части.
p.s. за картинку бить Паронатора.
Респект товаришу Кеше и товарищу Проте.
Ура товарищи ! Всем бухать 3 дня и 3 ночи :-)
Круто, более обстоятельной статьи на русском ещё в жизни не видывал.
На счет tangent. Это просто трансляция на русский.
Я же в статье написал: "tangent space - касательное пространство."
Zamadelec
Да, ты прав, что то непохожо на diffuse,
там просто d_dot_l неправильно считался.
И к тому же там не просто diffuse, а там
diffuse + ambient.
Вот просто diffuse:
xaka,viv
Спасибо.
Ну не обещаю на счет 2-ой части, но можно...
Так как в статье есть туманные вещи, теперь я
их понимаю не туманно.