Перейти к контенту

Поиск в системе

Результаты поиска по тегам 'reflections'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Категории

  • Правки для ОП-2.2
  • Вопросы по правкам / настройке ОП-2.1
  • ЧаВо по форуму
  • Шпаргалка AMK: Основы
  • Шпаргалка AMK: Ковыряние
  • Шпаргалка AMK: Оптимизация
  • Шпаргалка AMK: Работа с консолью
  • Справочник вылетов (Line 1 - Line 100)
  • Справочник вылетов (Line 101 - Line 200)
  • Справочник вылетов (Line 201 - Line 400)
  • Справочник вылетов (Line 401 -)
  • [CoP] Библиотека моделей оружия

Форумы

  • S.T.A.L.K.E.R.
    • AMK мод
    • Школа моддинга
    • Мастерская ТЧ
    • Мастерская ЧН
    • Мастерская ЗП
    • AMK English Version
  • S.T.A.L.K.E.R. Unreal Engine
    • ТЧ на UE5
  • S.T.A.L.K.E.R. 2
    • Предрелизный раздел S.T.A.L.K.E.R. 2
  • Общий форум
    • Флейм
    • AMK Склад
    • Административный раздел
  • Сетевые баталии
    • Сетевые баталии
  • Metro 2033 и Metro: Last Light
  • Другие игры
    • FPS / Action
    • RPG / RTS / TBS
    • Гонки / Симуляторы
    • Квесты/Аркады
    • Онлайн игры
    • Разное
    • Консоли
  • Форум клуба Клуб "Звуковиков"
  • Форум клуба Клуб Бункер Бобра
  • Общая тема Клуб разработчиков
  • Torque 3D Клуб разработчиков
  • NeoAxis 3D Клуб разработчиков
  • Unity Клуб разработчиков
  • Unreal Engine Клуб разработчиков
  • CryEngine Клуб разработчиков
  • OGRE 3D Клуб разработчиков
  • Свободная вкладка Клуб разработчиков
  • Blender Клуб разработчиков
  • Lumberyard Клуб разработчиков
  • Приемный покой Клуб "Безумный Психиатр"
  • Форум клуба Клуб "TEXCOORDN;"
  • Темы 'Фанат Отчуждения'

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


Звание


Карта банка


BTC (Bitcoin)


ETH (Ethereum)


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Реальное имя


Город


Интересы

Найдено 1 результат

  1. Как и обещал, разбор полётов по SSLR и создание луж под ногами от всех этих махинаций. Такс, для начала создадим новый рендер таргет формата D3DFMT_A8R8G8B8 с размерами экранного квада, этого нам будет достаточно. Ага, сделали мы уже много, а отражений всё ещё нет. Будем разбираться почему же так. В данный РТ'шник мы будем писать/записывать/зачитывать/засовывать результат работы нашего SSLR шейдера. Начнём, напишем основу шейдера: #include "common.h" // подключим стандартную библиотеку с ощими функциями struct v_SQ // обычная simple quad структура с позицией и текстурными координатами // с учётом того что мы рендерим без вертексного шейдера { float4 hpos:POSITION; float2 tc0:TEXCOORD0; }; float4 main(v_SQ inst):COLOR { return float4(1,0,0,1);// пока что возвратим красный цвет } Для расчёта вектора отражения нам нужно найти вектор взгляда на позицию пикселя и найти отражение этого вектора от нормали. И так, сначала будем искать позицию пикселя в ворлд спейсе float3 pos = tex2D(s_position,inst.tc0); return float4(pos,1); //return float4(1,0,0,1); Так не канает, ведь нам нужна позиция пикселя в ворлд спейсе, а не скрин спейсе. Для этого я состряпал такую функцию float3 getWSpos(float2 tc)//текстурные координаты { float3 VSpos = tex2D(s_position,tc); // скрин спейс позиция пикселя float3 WSpos = mul(m_inverse_view,float4(VSpos,1)); // умножаем на иверсную матрицу вида проекции и получаем позицию в мировом пространстве return WSpos;// отдаём } Теперь попробуем её //float3 pos = tex2D(s_position,inst.tc0); float3 pos = getWSpos(inst.tc0); return float4(pos,1); //return float4(1,0,0,1); Посмотрим Вот так интереснее. Теперь найдём вектор взгляда на этот пиксель float3 eye_vec = normalize(pos-eye_position);//сразу же нормализуем этот вектор Теперь для расчёта вектора отражения нам нужно найти мировую нормаль, не буду таить и сразу выкачу функцию которая так же преобразует сс нормаль в вс float3 getWSnorm(float2 tc) { float posZ = tex2D(s_position,tc).z;//определим глубину float3 VSnorm = tex2D(s_normal,tc);//сс нормаль float3 WSnorm = mul(m_inverse_view,float4(VSnorm,0));//находим таким же способом вс нормалю WSnorm.y *= clamp(posZ,sslr_params.x,sslr_params.y);//кое-где сгладим нормаль в зависимости от расстояния WSnorm=normalize(WSnorm);//нормализуем return WSnorm;//отдадим } sslr_params.xy - факторы расстояния Всё, находим вектор отражения float3 norm = getWSnorm(inst.tc0); float3 refl_vec = normalize(reflect(eye_vec,norm)); Заранее объявим несколько переменных float2 refl_tc = float2(0,0);//текстурные координаты отражённой геометрии float L = sslr_params.z;// начальная длина луча Всё пускаем в бой тяжёлую артиллерию, а именно, цикл for(int i = 0; i < 6; i++)// как показали тесты 6 проходов вполне достаточно для получения приемлимого результата { float3 new_pos = pos.xyz + refl_vec*L; // получаем новую позицию float4 new_pos_proj = mul(m_VP,float4(new_pos,1));//переводим её в скрин спейс new_pos_proj.xyz /= new_pos_proj.w; //нормализуем float2 sample_tc = float2(0,0);// создаём новую переменную в теле цикла, куда будем толкать новые текстурные координаты //мы получаем позицию пикселя в диапазоне от -1 до 1, это дело нам как то нужно перевести в диапазон от 0 до 1 //вот так sample_tc.x = (new_pos_proj.x+1)*0.5; sample_tc.y = 1-((new_pos_proj.y+1)*0.5); float3 hit_pos = getWSpos(sample_tc);//каждый проход цикла мы будем получать позицию, но уже с новыми текстурными координатами L=length(Hpos-pos); refl_tc=sample_tc;//отправим полученные текстурные координаты на выход } Почти всё, осталось только вывести отражённую геометрию float3 refl_img=tex2D(s_image,refl_tc); return float4(refl_img,1); Я объяснил базовую реализацию SSLR, улучшать технику можно сколько угодно и это в ваших руках. О реализации луж, чуть позже, как только соберётся время. Пока можете посмотреть сурсы с базовой реализацией SSLR и лужами вот тут SSLR https://github.com/Baryshev194/x-ray1.0007/commit/b07e191b9f545dc47d71d457a12817b7ced87a82 SSLR blur https://github.com/Baryshev194/x-ray1.0007/commit/8408d0c04e6980cf476e526739c8551b11d4c3f0 Wetness buffer + Puddles effect https://github.com/Baryshev194/x-ray1.0007/commit/0b9d9975711a86c0cc14c9236c2bd318eb5da65b

AMK-Team.ru

×
×
  • Создать...