![]() |
Ответ: Нубошоу по шейдерам.
Вот так я в хорсе пытаюсь передать в шейдер матрицу от камеры с которой отрисована текстура с расстоянием от света до поверхности.
xSetEffectMatrix(entity,"v_proj",xGetViewProjMatri x(shadecam),0); в шейдере я добавил: В выходных данных вершинного float2 shtexcoors : TEXCOORD4; а матрица: float4x4 v_proj; потом я записываю их так в вершинном float4 pos=mul(input.position, v_proj); output.shtexcoors = float2((pos.x/pos.w+1)/2,(pos.y/pos.w-1)/2); и наконец в пиксельном: float4 shade=tex2D(shadeSampler,input.shtexcoors*0.25); float4 color=0.75*shade+0.25*(diffuse * lit * lightColor+diffuse*ambient); return color; Я как бы добавляю 75% к обычному цвету от спроецированной текстуры. Но оно мне рисует на всей поверхности только одну точку из текстуры. Хотя когда я использую передаваемую хорсом матрицу все происходит как надо. float4 pos=mul(input.position, matrixWorldViewProj); Как мне передать из хорса в шейдер matrixWorldViewProj другой камеры? |
Ответ: Нубошоу по шейдерам.
Цитата:
|
Ответ: Нубошоу по шейдерам.
Да.
На глаз получается, что текстурные координаты не зависят от позиции пикселя, я так понимаю это от того, что вместо матрицы из хорса пришло ничто, нули и поэтому выбирается только одна точка. Т.е. косяк скорей всего в моем коде внутри хорса, но как правильно это сделать я не знаю. |
Ответ: Нубошоу по шейдерам.
хз, я юзал xGetViewProjMatrix чтобы проецировать декали из камер, так что в ксорсе в этом плане всё должно быть ок.
-- а, хотя нет. я юзал castermatrix=xGetProjectionMatrix(castercamera) castermatrix2=xGetViewMatrix(castercamera) |
Ответ: Нубошоу по шейдерам.
Захотелось мне свой бамп сочинить.
Вот есть у меня нормаль. И есть нормаль из нормалмапы vec3 norm = normalize(texture2D(texture1,fragmentuv).xyz*2-1.0); Как мне сбацать из нормали матрицу поворота на которую умножить надо нормаль из нормалмапы? |
Ответ: Нубошоу по шейдерам.
Цитата:
ну есть бомжарский способ через ddx/ddy, но качество будет страдать. |
Ответ: Нубошоу по шейдерам.
зачем?
если у тебя нормалкарта в объектспейсе, то просто бери значение нормали из нее. если у тебя нормалкарта в тангентспейсе, то тебе нужно перевести источник света в тангент спейс как то так: Код:
"vec3 n = normalize(normalmatrix * normal);\n" Цитата:
|
Ответ: Нубошоу по шейдерам.
Цитата:
-- Цитата:
для нормали результат может выглядеть так: http://www.gamedev.net/topic/599518-directx-ddxddy/ ну и собсно это можно юзать в некоторых случаях в качве TBN, имея только N, но гранёность будет. есть на основе этого ещё более хитрозавёрнутый метод бампа через одноканальную карту высот и без TBN и без гранёности (но вблизи артефактово или медленно это фиксить): http://jbit.net/~sparky/sfgrad_bump/mm_sfgrad_bump.pdf http://www.rorydriscoll.com/2012/01/11/derivative-maps/ |
Ответ: Нубошоу по шейдерам.
Хочу на свой меш ландшафта бамп и потом тесселяцию со смещением по картам сделать. Так что кроме нормали и текстурных координат у меня нет ничего и вообще слов то таких про тангентспейс я не знаю :))
Но ведь нормаль можно смотреть как (cos кИкс * sin кЗед; соs кИгрек * sin кЗед; cos кЗед) А карта у меня сделана для отклонения нормали (0,1,0) вот я и считал что можно из нормали организовать матрицу поворота :dontknow: ибо вроде косинусы с синусами туда нужны, а их есть у меня. |
Часовой пояс GMT +4, время: 03:32. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot