Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 21.10.2011, 21:23   #1
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Нубошоу по шейдерам.

struct VSOutput
{
float4 position : POSITION;
float4 position2 : TEXCOORD2;
float3 normal : TEXCOORD1;
float2 texCoords : TEXCOORD0;
};
Вставляю в вывод вершинного шейдера выделенную строку и шейдер перестает исполнятся, хотя из:
В качестве результата своей работы, вершинные шейдер помет возвращать сле-дующие данные:

POSITION0 – трансформированная позиция вершины.

COLOR[n] – значение цвета, стоит отметить, что записывать именно цвет сюда вовсе необязательно, например, в случае если необходимо передать в пиксельный шейдер позицию, ее спокойно можно поместить в любое поле с семантикой COLOR или TEXCOORD.

TEXCOORD[n] – текстурные координаты. Не обязательно float2 зна-чение, может быть любым в зависимости от ваших нужд (например, для передачи нормали можно использовать float3).

FOG – float значения тумана для данной вершины.

PSIZE – размер точки. Действует только на точечные спрайты (системы частиц).
Например, если нам необходимо рассчитать попиксельное
struct VSOutput
{
float4 position : POSITION;
float4 position2 : TEXCOORD1;
float3 normal : TEXCOORD2;
float2 texCoords0 : TEXCOORD0;
};
Т.к. в качестве входных данных пиксельный шейдер может принимать только цвет и текстурные координаты (т.е. поля можно объявлять только с семантиками COLOR и TEXCOORD), для передачи в пиксельный шейдер позиции вершины и ее нормали необходимо записать их в поля с семантиками текстурных координат.
Однако, вполне допустимо использовать выходную структуру вершинного шей-дера в качестве входной пиксельного, но только до тех пор пока в пиксельном шей-дере не происходит обращения к полям с недопустимой семантикой (например POSITION), что вызовет ошибку компиляции шейдера.
следует, что такая структура допустима.
Где я не прав? Мне почему-то кажется, что стандартный шейдер из шагов с таким изменением вывода вершинного шейдера должен работать. Или шаги уже устарели?
(Offline)
 
Ответить с цитированием
Старый 21.10.2011, 21:41   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

шейдер перестает исполнятся
компилятор должен написать причину ошибки.
в том числе вроде как компиляция фейлится если ты не до конца заполнил выходящую структуру.
т.е. просто добавил в структуру поле, но не закидал в него данные в VS.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (21.10.2011)
Старый 21.10.2011, 22:01   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Нубошоу по шейдерам.

float2?
(Offline)
 
Ответить с цитированием
Старый 21.10.2011, 22:01   #4
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Нубошоу по шейдерам.

Извольте включить логгирование, сударь: xCreateLog(). В созданном html-файле Вы обнаружите крайне полезную для Вас информацию.
__________________

(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
Colossus (23.10.2011), dsd (21.10.2011), L-ee-X (25.10.2011), moka (21.10.2011), Reizel (22.10.2011)
Старый 21.10.2011, 22:10   #5
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

Да. Круто. Спасибо.
(Offline)
 
Ответить с цитированием
Старый 22.10.2011, 23:43   #6
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.


Подобные косяки с освещением лечатся попиксельным освещением(как-нибудь еще но тоже шейдером) или нужно ковырять модель?

float4 ambient : COLOR_AMBIENT;
...
float4 color=saturate(diffuse * lit * lightColor+diffuse*ambient);
...
Ambientcolor надо так учитывать или по другому?
(Offline)
 
Ответить с цитированием
Старый 23.10.2011, 00:05   #7
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

Подобные косяки с освещением лечатся попиксельным освещением(как-нибудь еще но тоже шейдером) или нужно ковырять модель?
проверь попиксельное - делов то. если не пофиксится, то хз.
Ambientcolor надо так учитывать или по другому?
так у тебя пересветится всё может.
мне больше нравится такой вариант:
lit = saturate(dot(normal,lightDir));
float4 color = diffuse * lerp(ambientColor,lightColor,lit) * 2;

"*2" позволяет делать цвета диффуза ярче оригинала. собстсвенно, формула diff*lit*2, это бленд Multiply2, который есть в блице например, и юзается во всех играх для лайтмапов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (23.10.2011)
Старый 23.10.2011, 00:13   #8
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

На уровне модели это вылечить можно запретив нормалям вершин на углах клеток одновременно наклоняться к диагонали. Но это сортировать и сравнивать надо командой наподобие dot

lit = saturate(dot(normal,lightDir);
На мой взгляд тут saturate как козе баян, косинус не будет больше 1, а эта команда если я не ошибаюсь возвращает косинус угла между векторами, но может я и гоню. Наврал. Там еще на длины векторов умножается.
(Offline)
 
Ответить с цитированием
Старый 23.10.2011, 00:21   #9
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

На мой взгляд тут saturate как козе баян
в lerp будет разница
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (23.10.2011)
Старый 23.10.2011, 01:42   #10
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Нубошоу по шейдерам.

Сообщение от dsd Посмотреть сообщение
На мой взгляд тут saturate как козе баян, косинус не будет больше 1
Сударь, Вы не учли тот случай, при котором косинус меньше ноля.
__________________

(Offline)
 
Ответить с цитированием
Старый 23.10.2011, 14:51   #11
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Нубошоу по шейдерам.

Оу, какая познавательная тема!
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 20:20   #12
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

У меня глупый вопрос: как я могу создать текстуру шейдером? В том смысле, что создать шейдер, который будет рисовать в текстуру. Пытался гуглить, но не смог.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 21:37   #13
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

в ксорсе вроде как создаёшь текстуру, делаешь xSetBuffer(xTextureBuffer(texture)), и будет рисоваться в неё.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 21:50   #14
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Нубошоу по шейдерам.

писать напрямую в текстуру из шейдера можно только на SM 5.0.
однако никто не мешает задать текстуру как рендертаргет и рисовать в нее фуллтекссайзквад. с нужным шейдером.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
dsd (25.10.2011), Mr_F_ (25.10.2011)
Старый 26.10.2011, 13:26   #15
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Нубошоу по шейдерам.

Сообщение от HolyDel Посмотреть сообщение
писать напрямую в текстуру из шейдера можно только на SM 5.0.
однако никто не мешает задать текстуру как рендертаргет и рисовать в нее фуллтекссайзквад. с нужным шейдером.
Ото матерится по учёному)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:43.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com