Добавлен
Можно ли как-то сделать молнию в 2д?
и каким образом?
у нас есть текстура самой молнии, которая бесшовная (естественно только с одной стороны) как в варе.
как можно растягивать такую молнию, но чтобы менялся только размер спрайта, а текстура не растягивалась?
вопрос на засыпку: анимация 2д текстуры этой же молнии, как оно делается?

Принятый ответ

Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
0
24
10 лет назад
Отредактирован prog
0
Tiodor, alexprey, RSQR, а нет ли в юнити стандартного шейдерного материала, который использует не фиксированный тайлинг, а свободный - сколько раз текстура влазит на геометрию при заданном масштабе, столько и отрисовуется?
0
24
10 лет назад
0
prog:
Tiodor, alexprey, RSQR, а нет ли в юнити стандартного шейдерного материала, который использует не фиксированный тайлинг, а свободный - сколько раз текстура влазит на геометрию при заданном масштабе, столько и отрисовуется?
стандартных шейдеров там очень мало, особенно бесплатных) Такого шейдера увы нету.
0
29
10 лет назад
0
prog, было б, не было бы проблем)
0
30
10 лет назад
0
я надеюсь, что разработчики будут активно двигаться в сторону 2д. ну надеюсь на это и расширят функционал.
0
24
10 лет назад
Отредактирован prog
0
RSQR, ну, значит, нужно писать - ничего сложного в этом нет.
Например, на соотношении высоты и ширины геометрии считаем вертексным шейдром кол-во тайлов и передаем пиксельному шейдеру, который, в свою очередь, уже выполняет сам тайлинг. Вот добавить анимацию будет чуть сложнее - нужно как-то получить текущее время и выбрать на его основе нужный кадр (читай смещение).
Как вариант - нет ли свободного тайлинга в свойствах материалов/текстур? Часто есть такая возможность, при том, что по умолчанию она не используется.
0
24
10 лет назад
0
Tiodor:
я надеюсь, что разработчики будут активно двигаться в сторону 2д. ну надеюсь на это и расширят функционал.
Ну... функционал-то есть, только этого функционала надо самому добиваться)
Нашёл шейдер, на работоспособность пока не тестил
Shader "Tiles" {

    Properties {

        _MainTex ("Base (RGB)", 2D) = "white" {}

        _gNumTiles ("Number Of Tiles", Range (1,100)) = 1

        _gThreshhold ("Edge Width", Range (0.0,2.0)) = 0.15

        _gEdgeColor ("Color", Color)  = (.5, .5, .5, 1)

    }

    SubShader {

        Tags { "RenderType"="Opaque" }

        LOD 200

        

        CGPROGRAM

        #pragma surface surf Lambert

 

        sampler2D _MainTex;

 

        struct Input {

            float2 uv_MainTex;

        };

        

        float _gNumTiles;

        float _gThreshhold;

        float4 _gEdgeColor;

        

    void surf (Input IN, inout SurfaceOutput o) {

            

        half size = 1.0/_gNumTiles;

        half2 Pbase = IN.uv_MainTex - fmod(IN.uv_MainTex,size.xx);

        half2 PCenter = Pbase + (size/2.0).xx;

        half2 st = (IN.uv_MainTex - Pbase)/size;

        half4 c1 = (half4)0;

        half4 c2 = (half4)0;

        half4 invOff = half4((1-_gEdgeColor.xyz),1);

        if (st.x > st.y) { c1 = invOff; }

        half threshholdB =  1.0 - _gThreshhold;

        if (st.x > threshholdB) { c2 = c1; }

        if (st.y > threshholdB) { c2 = c1; }

        half4 cBottom = c2;

        c1 = (half4)0;

        c2 = (half4)0;

        if (st.x > st.y) { c1 = invOff; }

        if (st.x < _gThreshhold) { c2 = c1; }

        if (st.y < _gThreshhold) { c2 = c1; }

        half4 cTop = c2;

        half4 tileColor = tex2D(_MainTex,PCenter);

        half4 result = tileColor + cTop - cBottom;

        o.Albedo = result.rgb;

        o.Alpha = result.a;

            

        }

        ENDCG

    } 

    FallBack "Diffuse"

}
0
24
10 лет назад
0
RSQR, не годится же - он получает кол-во тайлов в параметрах, а не считает на основе размеров геометрии. А передача параметров в шейдер, вероятно, потребует создания отдельного материала, как и для стандартного. Не то чтобы это было такой проблемой - создание отдельного экземпляра материала динамически это нормально, просто можно ведь в данном конкретном случае обойтись без этого - геометрия молнии проста как пробка (пока не гарантирую работоспособность предложенного мной алгоритма т.к. нет времени попробовать его реализовать на практике, но такой шейдер и мне самому не помешает).
0
14
10 лет назад
0
0
24
10 лет назад
0
ZregerZ, если вы не заметили, здесь обсуждается во-первых юнити, а не XNA, а во-вторых куда более простой эффект, основанный на тайлинге спрайта, а не создании множества сегментов на каждую молнию.
0
14
10 лет назад
Отредактирован ZregerZ
0
prog,
здесь обсуждается во-первых юнити, а не XNA
Note: Although this tutorial is written using C# and XNA, you should be able to use the same techniques and concepts in almost any game development environment.

во-вторых куда более простой эффект, основанный на тайлинге спрайта а не создании множества сегментов на каждую молнию.
Можно ли как-то сделать молнию в 2д?
и каким образом?
0
24
10 лет назад
0
ZregerZ, а прочитать дальше не судьба?
у нас есть текстура самой молнии, которая бесшовная (естественно только с одной стороны) как в варе.
как можно растягивать такую молнию, но чтобы менялся только размер спрайта, а текстура не растягивалась?
вопрос на засыпку: анимация 2д текстуры этой же молнии, как оно делается?
Не говоря уже о комментариях, где автор вопроса конкретно пояснил что его интересует:
Tiodor:
вот. у нас есть текстура молнии как сверху слева.
и в зависимости от расстояния она тайлится + анимация текстуры от начала к концу. то есть текстура движется.
1
14
10 лет назад
Отредактирован ZregerZ
1
prog, Молнии в варкрафте - ужасные.
Стоя в комнате с кучей дверей и попытавшись открыть одну из них, что разумнее: продолжить биться головой в эту дверь в надежде, что она выломается или попробовать открыть другие двери?
Вопрос состоит из 3 (не считая того что на засыпку) Можно ли? Если да то как? Мы придумали, что можно так, но сделать не можем, как нам сделать так как мы придумали?
Я ответил на 1 и 2 вопросы т.к. с юнити не знаком поэтому не ответил на 3й.
return 0;
0
30
10 лет назад
0
Молнии в варкрафте - ужасные.
а при чем тут молнии в варе? о_О
а за ссылку спс

есть костыльная идея сделать 2-3 варианта молнии: короткая, средняя, длинная и в зависимости от расстояния рисовать разные молнии, растягивая спрайт в определенных пределах
0
29
10 лет назад
Отредактирован alexprey
0
Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
Принятый ответ
0
21
10 лет назад
0
А что, если я вам скажу, что если вы будете изменять параметры материала отдельно для каждого обьекта в Апдейте, то эти самые параметры в итоге отобразятся у всех разные? С цветом у меня так работало. Думаю, с тайлингом тоже сработает.
Таким образом мы считаем расстояние между двумя точками, посл чего это число вставляем в показатель тайлинга по икс. Для каждой молнии отдельно, да.
Тадам.
Немного затратно, но терпимо.
анимацию можно сделать через статическую функцию, которая будет менять тайл молнии с одного кадра на другой, учитывая, что все анимы на одной текстуре.
alexprey:
Tiodor, возможно. Но самый замечательный вариант это сгенерировать мэш с правильными текстурными координатами. И тогда ничего хитрого не надо придумывать. Поэтому надо курить генерацию мэша
еще более затратно, чем мой вариант
0
24
10 лет назад
0
ehnaton, это ОЧЕНЬ затратно т.к. происходит перекомпиляция материала/шейдера при каждой такой операции. Плюс еще и все вычисления ложатся на CPU - нихт харашо. Уж лучше пожертвовать памятью и использовать различные материалы для каждой группы молний одинаковой длины.
Ну и про кеширование не забыть.
0
21
10 лет назад
Отредактирован ehnaton
0
prog, Происходит, но особо затратно это не получается. Я таким способом уже пользовался. Работоспособность в целом была хорошей.
Четвертые пни около нескольких десятков таких обьектов тянули хорошо. Вот сотню уже с трудом.
1
24
10 лет назад
1
ehnaton:
prog, Происходит, но особо затратно это не получается. Я таким способом уже пользовался. Работоспособность в целом была хорошей.
Четвертые пни около нескольких десятков таких обьектов тянули хорошо. Вот сотню уже с трудом.
А если это мобильное устройство?
1
21
10 лет назад
1
RSQR, а мобильны устройства уже помощнее 4ыъ пней будут..
0
29
10 лет назад
0
ehnaton, а у кого то мобилки и за 2к есть с последним андроидом. Им тоже хочется поиграть <_<
0
21
10 лет назад
0
alexprey, это те, на которых злые птицы лагают? :3
0
29
10 лет назад
0
ehnaton, не знаю не пробовал
Чтобы оставить комментарий, пожалуйста, войдите на сайт.