Перейти к содержанию

Necrys

Пустынные рейнджеры
  • Постов

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

  • Посещение

Репутация

59 Послушник

Информация о Necrys

  • День рождения 12.11.1986

Информация

  • Откуда:
    Нижний Новгород
  • Пол:
    Мужчина (male)
  1. Есть mirror - текстура повторяется но зеркально есть bordercolor, там тупо цвет идёт, за пределами текстуры, надо сам цвет ещё в семплер задавать. На память писал. И естественно накосячил. Должно быть так: float4 result_color = base_color * (1.0f - icon_color.a) + icon_color * icon_color.a;
  2. Ну, да, скорей всего tickcount даёт какую-то цифру времени прошедшего со старта игры. В некоторых тиках. Цифра условная, но постоянно растёт. Беда в том, что мы непосредственно в шейдере не можем сохранить данные на будущие вызовы, т.е. не можем замерить время между вызовами и поменять прозрачность относительно этого. Поэтому ручное управление из скрипта подходит больше. Здесь Blur() - это название функции - точки входа шейдера. Своеобразный main(). называться такая функция может как угодно. Главное чтобы она была в файле и была прописана в пассе. В этом шейдере кстати обрати внимание, несколько пассов, каждый делает blur, кроме последнего. Каждый пасс - проход рендера картинки, в первом пассе s0 - просто отрисованная сцена, в каждом последующем - в s0 лежит результат предыдущего пасса. То есть работает это так. В пассе делаются вызовы для всех пикселей экрана, получается некоторый результат. Он складывается в текстуру, и отрисованный результат предыдущего пасса можно получить из s0. И так далее. Да, точно, уменьшили в 3 раза. Ошибся. Да, к s2. Короче к тому семплеру, который берёт из текстуры со значком. Когда ничего не задаётся целенаправленно - используется настройка по умолчанию. Тут по умолчанию видимо стоит wrap. Придётся заморочиться. У тебя на входе шейдера есть float2 tex : TEXCOORD0. Изначально - это координаты для выборки из s0. В диапазоне (0.0, 0.0) - (1.0, 1.0). Зная разрешение экрана и эти координаты, мы можем вычислить - для какого пикселя на экране сделан вызов шейдера и относительно этих данных, прикинуть, какие текстурные координаты нам надо выдернуть из s2. Далее распишу на примерных числах, дальше сам подгонишь. // позиция иконки в экранных координатах const float2 icon_position = {32, 32}; // размер иконки в экранных координатах const float2 icon_size = {64, 64}; // разрешение экрана - подаём из скрипта float2 screen_resolution; float4 ps_main(float2 tex : TEXCOORD0) : COLOR0 { // коэффециент преобразования из экранных координат в текстурные float2 ratio = 1.0f / screen_resolution; // сдвиг текстурных координат иконки float2 shift = icon_position * ratio; // масштабирование текстурных координат иконки float2 scale_factor = icon_size * ratio; // берём цвет из уже отрисованной сцены float4 base_color = tex2D(s0, tex); // берём цвет из текстуры иконки float4 icon_color = tex2D(s2, (tex - shift) / scale_factor); // считаем итоговый цвет по формуле аддитивного блендинга float4 result_color = icon_color * (1.0f - icon_color.a) + base_color * icon_color.a; return float4(saturate(result_color.rgb), 1.0f); } Чёто так вроде. Вообще говоря, оптимизируя - ratio, shift и scale_factor лучше посчитать предварительно, ещё в скрипте и в шейдер уже подать готовые значения. icon_position и icon_size соответственно тоже можешь подать из скрипта, а не забивать их константами. Вот эта хреновина (tex - shift) / scale_factor в выборке из s2 - и есть вот этот пересчёт - как из текстурных координат tex получить координаты в s2.
  3. Ну как, управляя прозрачностью - можно. Это я так понимаю, можно сделать управляя из скрипта, параметром multi. Насколько я вижу, это всё использует интерфейсы DirectX 9. Техника в данном случае - набор пассов, каждый пасс - рендер сцены с шейдером, с каким - указано внутри пасса. Опять же я не знаю, насколько гибко сделан sfall, возможно у пользователя нет возможности управлять техниками и пассами и здесь это - чистая формальность. В первом случае просто создаётся двумерный вектор с заданными значениями. В дальнейшем он используется для сдвига текстурных координат. Тут надо расплыться текстом про текстурные координаты и вообще выборку. Выборка цвета из текстурки берётся по координатам вот таким макаром по координатам (0.0, 0.0) берётся верхний левый угол текстуры, по координатам (1.0, 1.0) - нижний правый. Промежуточные значения - соответственно где-то в середине текстуры. Если значения координат поданные в tex2D выходят за эти рамки - выборка регулируется вот этими параметрами в семплере: addressu=wrap; addressv=wrap; В данном случае написано, чтобы текстура повторялась. Так же возможно значение clamp - при выходе за границы - будет взято пограничное значение. mirror - текстура будет повторяться, но зеркально. В конечном итоге, физический смысл при расчётах далее float2 y={0.342, 0.940} - сдвиг координат на треть по горизонтали и почти на целую текстуру по вертикали. Тут у нас берётся зелёная компонента цвета, рассчитанного здесь float3 r2=tex2D(s2, tex*tscale-y)*tex2D(s1, tex)*multi; Чо это всё значит. tex2D(s2, tex*tscale-y) в этой части, берётся цвет из семплера s2, который соответствует текстуре string texname2 = ""; <- кстати - где путь? texture tex2; Цвет берётся по координатам tex*tscale-y - вектор tex покомпонентно умножен на число tscale, и из него вычтен вектор y. Физически это значит что картинку увеличили в 3 раза и сдвинули (см выше - как) Смотри, про семплер вообще говоря. Семплер - это не текстура сама по себе, это некоторая фигня, которая делает выборку цвета из текстуры (семплит, ага). У неё есть настройки - вот эти addressu, addressv, ещё есть другие вещи, типа фильтрации, мипмэпинга, но это потом, если понадобится, в 2D вообще говоря плохо применимо. Про значения этих addressu я написал выше. И есть настройка texture - вот это собственно текстура. Семплер s0 вероятно захардкожен и в нём всегда текстура, содержащая уже отрисованную основную сцену. Когда ты потом в коде шейдера пишешь tex2D(s1, tex) - это значит - "семплер s1, дай мне цвет из своей texture по координатам tex" Скорей всего, тебе чтобы рисовать без маски, т.е. чтобы текстура не повторялась - достаточно будет применить в семплере s1 параметры addressu = clamp; addressv = clamp; а s2 и соответственно выборку из неё вообще убрать нафиг. Здесь взяли значения x и y компонент вектора Tex, создали из этого 2-мерный вектор, который используется как координаты при выборке из текстуры. И тут кстати надо рассказать про то насколько тут шейдерный язык удобен в некоторых моментах. Например, у тебя есть вектор float4 myVector = {1.0, 2.0, 3.0, 4.0}; т.е. тут создан вектор где x = 1.0, y = 2.0, z = 3.0, w = 4.0 и ты можешь где-нибудь потом написать float2 my2DVector = myVector.xy; и будет создан 2-мерный вектор, у которого x = myVector.x, y = myVector.y более того, можно написать следующую несусветицу float2 my2DVector = myVector.yx; и будет вектор с x = myVector.y, y = myVector.x такие дела. Нифигасе портянка получилась...
  4. Ну, я про параметры и говорил. То есть например, нам нужен будет некий параметр контролирующий уровень прозрачности твоего HUD. Для более сложной анимации, сопряжённой например с переключениями кадров анимации - шейдер не годится. Наверное такое лучше делать из скрипта. Разобраться в системе шейдеров конечно мне как уже знающему человеку, кажется довольно просто. Задавай вопросы, попробую на них тебе ответить. Я сейчас прокапитаню базовые вещи, наверное они тебе известны. В базе - пиксельный (иногда называемый - фрагментный) шейдер - некая программа, отвечающая за цвет пикселя при отрисовке. В простейшем виде - за цвет пикселя на экране. Если у нас экран с разрешением 1920х1080, получаем 2073600 пикселей, соответственно столько раз будет вызван шейдер - по разу на пиксель. На вход пиксельного шейдера подаются данные с конвейера (в твоём примере - float2 tex : TEXCOORD0) - они вообще говоря могут иметь самый разный смысл, но в твоём случае - это текстурные координаты - т.е. указание - из какой части текстуры взять данные о цвете. Плюс, из шейдера есть доступ к глобальным данным - т.н. uniforms. У тебя это tickcount, multi, speed. Я так понимаю, их в sfall можно подать из скрипта? Дальше, чего ты там хочешь со всей этой ботвой, то и делаешь. Любая математика. Главное что на выходе шейдера ты получаешь некоторый вектор float4, обозначающий интенсивность цветовых компонентов пикселя. (r, g, b, a). Цифры должны находиться в диапазоне [0.0; 1.0], 0.0 - нулевая интенсивность, 1.0 - полная интенсивность. Цифры за пределами этих диапазонов имеют смысл только при промежуточных расчётах, либо при наличии HDR (чего в sfall врядли есть).
  5. Исходники то как бы вот: https://github.com/nadult/FreeFT Инструкции по сборке и ипользованию вроде есть. Правда как я вижу с апреля как минимум нет комитов, проект застыл. В насколько завершённом виде конечно, ещё понять бы.
  6. Написать шейдер можно, если знать, что мы можем получить из движка. Я с sfall не знаком просто. Вот этот вот шейдер в #1 например, он вообще о чём?
  7. Ну, скажем так, особая версия сохранений для движка пишется левой пяткой за день. Даже без изменения структуры сериализованных данных, просто например введением дополнительного фильтра данных перед сохранением, ну там, битики поинвертировать. После этого поправленная версия вбрасывается на торенты. Кроме этого как правило конечно делается ещё ряд закладок, тут работы конечно больше дня, но великих трудозатрат так же нет - ломать не строить. Прецеденты были.
  8. Не обязательно. Облако опционально.
  9. А я знаю где взять пару хазматов поближе. Но я не скажу. И вообще там нужен взлом уровня Master.
  10. Да, вопрос был про это. Я не развлекался, но хочу попользовать эту штуку для своего стелс-пихотного билда в следующее прохождение.
  11. Некоторые из названных тут вещей - просто переименованная стандартная пушка с аффиксом, и парой стандартных модов. Тот же Kellog’s Pistol
  12. О, слушай,правда. Ещё Junk Jet. Почему-то я забыл о них. Всё, снимаю вопрос.
  13. Не припоминаю, можешь напомнить? Из того что могло бы быть уникальным - пистолет Келлога, или там лазерная винтовка, которую выдаёт стальной браток при первой встрече - на поверку это оказываются довольно обычные стволы с аффиксом и некоторым набором обычных модификаций. Кстати почему бы не добавить легендарные модификации, которые нельзя произвести.
  14. Weilard, я это как раз о том, что модель игр Bethesda она не нова. Я не играл к своему позору в Daggerfall, но по крайней мере с эпохи Morrowind, эта компания проповедует свой подход к построению игрового мира и игрового опыта. Примерно в то же время была такая игра как Готика, и холивары Morrowind vs Готика стояли по всему интернету. И вот Готика проповедовала более детальную ручную проработку, и ведение игрока за нос по игре. А Bethesda уже тогда сделала игру с более медитативным геймплеем, ставящим во главу угла эксплоринг и личный игровой опыт игрока, нежели опыт, напрямую контролируемый геймдизайнером. С тех пор эта концепция радикально не меняется. Да, есть упрощение, нам добавили маркеров, фасттревел, это некоторая дань времени, дань оказуаливанию. И упрощённое колесо диалогов оттуда же. Но основной посыл остаётся - игрок сам придумывает чем себя развлечь. И вот, когда F попал в руки Bethesda, если бы я был таким же осведомлённым в делах игропрома, как сейчас, я бы сразу сказал, что получится то что мы имеем. (Хехе, легко говорить с высоты человека знающего, что уже вышло). Очевидно, что у игроков, которые знакомы с традиционным геймплеем Fallout, и не знакомы с концепцией Bethesda или неприемлют эту концепцию, начались попросту фантомные боли - ведь у них отрубили изометрию, пошаговый бой, и веру в человечество. Про тенденции... У Bethesda есть устойчивый костяк фанатов, достаточно массовый. И не думаю что стоит говорить тут о тенденциях, видя продажи и реакцию на Skyrim и Fallout 4. А вот тенденция на упрощение или даже обеднение игровой математики это да. Из негативных впечатлений, наверное уже писали, но в пылу сражений, потерялось - из игры исчезла реальная легендарность оружия. Подход Diablo-Borderlands с аффиксами в целом неплох (если откинуть некоторые недоразумения), но даже у них есть вручную прописанные и тщательно разложенные по игре легендарки. А так Bethesda в данной схеме сделали Common-вещи и Blue-вещи, от силы Rare. Но ничем реально легендарным тут не пахнет. Даже в некотором виде можно говорить о сетах (покраска PA). Лутая локацию мы находим гору химикатов, патроны, крышки и очередной обвешаный причиндалами пулемёт.
  15. Я не знаю, к чему эти сравнения классики и игр Bethesda. В пределе, можно попытаться сравнить классику и New Vegas, но с F3/4 эти сравнения не совсем корректны. Ну это примерно как пытаться сравнить борщ и жареную картошку с грибами, это разные продукты, с разными качествами. И там и там, есть свои плюсы и минусы. Для разных людей плюсы одной полусерии игры превалируют над плюсами другой полусерии. Из этого исходит взаимонепонимание. Мне нравится и борщ, и картоха с грибами. Это не значит что я как-то недостаточно глубоко оцениваю вкусовые качества борща, или намеренно пытаюсь не замечать, что в жаренной картохе нет свёклы и мяса, потому что я заплатил за грибы кучу денег и ищу чем же мне всё это понравилось. Нет, мне просто это всё нравится. -- Всё вышенаписанное конечно же строгое ИМХО, не претендует на абсолютную правду, и не имеет цели кого-либо оскорбить или задеть. Weilard, суть в том, что для многих - выстраивание таких вот ограничений, так сказать - быть самому себе DM'ом - вещь непозволительная. Ну, я такой вывод делаю, из того что здесь и во многих других местах обсуждается. Вроде хочешь сказать, что строительство и фермерство - части игры, которых можно не касаться, если они вам так не нравятся, но ответ один, почти под копирку - "Как же это, вот он элемент игры, значит нас заставляют пользоваться". То же будет касаться и выстраиваемых искусственно ограничений. Это такой подход, не буду говорить, плохой он или хороший, не мне судить, но он имеет место быть, и эта категория людей, с таким подходом, очень страдает от игр Bethesda каждый раз, не очень понимая, что в действительности предлагает Bethesda, и ожидая каждый раз от них шаги в сторону более классического геймплея, основанного на более строгих правилах игры. В их ожиданиях есть смысл, строго проработанные игры хорошие, взять тот же недавний Pillars of Eternity, да и много раз вспомненный здесь Ведьмак, но это точно не то, чего они дождутся от Bethesda. Эти ожидания настолько же наивны, насколько наивно от Beth ждать появления изометрического движка и честного пошагового боя. Увы это так. Чорт, стена текста неделимая получилась. Вынужденный перерыв тут.
×
×
  • Создать...