xlat-code
> Анимация процедурной текстуры на поверхности модели Plane.
могу отдать свой вариант
> 1. Сам шейдер(нужен будет только пиксельный) взять отсюда https://www.shadertoy.com
есть
> 2. В Урхе в рендерпас добавить пас P.
лишнее
> 3. В технику Т добавить пас P.
лишнее
> 4. В общий шейдер добавить дефайн для паса P.
лишнее
> 5. В материал добавить технику Т.
угу
>6. В апдейт-ивенте в материал не забыть передать текущее время(float).
угу
Итог: 1, 5, 6 только нужны
Salamandr
> могу отдать свой вариант
ок,
давайте код, я переделаю на AS + какой-нить шейдер с шадертоя.
будет здорово если код такой же по объёму малый, как оно на ролике.
xlat-code
> Например, элементарная задача
я поверял shadertoy.com шейдеры на SFML,
чтобы адаптировать там у меня ушло всего 5 минут на разобраться,
блин, это было просто бомба, ибо я даже так и неожидал.
удивительно то, что они отлично работают на моём тестовом ноуте 2011 года с ogl 2.1
Salamandr
> > 4. В общий шейдер добавить дефайн для паса P.
> лишнее
а чтобы управлять на вкл\выкл нужно добавлять параметр bool в материал?
я так думал, что бы добавить код шейдера на выполнение
его нужно обрамить дефайном
и включать и выключать через пасы...
ок, короче, ушёл читать Ёж'а и смотреть ссылки ...
HLSL
в Diffuse идёт смешанная текстура, 1 канал (шум) основная, 2ой канал маска
то есть текстура в R-канале, G-для маски, B-свободный (RGB)
cMatDiffColor представляет Materials\M_MyParticle.xml
Techiques\T_MyParticleEffect.xml
перед VS и PS
#ifdef COMPILEPS uniform float cTime; uniform float cZoom; #endif
в VS ничего не меняем
в PS
#ifdef DIFFMAP float2 coord1 = float2( (iTexCoord.x - cTime) * cZoom, (iTexCoord.y - cTime) * cZoom); float2 coord2 = float2( (iTexCoord.x + cTime) * cZoom, (iTexCoord.y - cTime) * cZoom); float4 color1 = Sample2D(DiffMap, coord1); float4 color2 = Sample2D(DiffMap, coord2); float4 diffMask = Sample2D(DiffMap, iTexCoord); //float4 diffInput = float4(color1.r, color1.r, color1.r, color1.r * color2.r); float rgb = (color1.r*color2.r)-(diffMask.g*2); float4 diffInput = cMatDiffColor * rgb; //diffInput.a = diffInput.r - diffMask.g; #ifdef ALPHAMASK if (diffInput.a < 0.5) discard; #endif float4 diffColor = diffInput; #else float4 diffColor = cMatDiffColor; #endif
текстура Textures\voronoi.png
в приложении Create где нить
Node box = Scene.CreateChild("Box"); box.Position = new Vector3(0,3,0); box.SetScale(1); var boxModel = box.CreateChild("Model").CreateComponent<StaticModel>(); boxModel.SetModel(cache.GetResource<Model>("Models/Box.mdl")); boxMaterial = cache.GetResource<Material>("Materials/M_MyParticle.xml"); boxModel.SetMaterial(boxMaterial);
в методе Update:
if (timer < 4f) { timer += deltaTime/10f; boxMaterial.SetShaderParameter("Time", timer); } else { timer = 0f; }
float timer ..
если где то заблудишься то пиши, а это полные файлы (я так то всё описал, кроме исходника шейдера, вот он там)
rbfx vfx
Salamandr
> HLSL
интересно на андроиде они работают?
я так понимаю, раз Урха это кросс, то надо юзать ОГЛ с GLSL,
или, неужто, разницы нет?
xlat-code
> ОГЛ с GLSL
скорее всего, но думаю переделать проще всего именно с рабочего и готового варианта.
нет опыта с Android на Urho3d, так, только демки запускал.
Не знаю как дела сейчас в Urho3D, а в её форке rbfx, теперь есть универсальные шейдеры именно на GLSL. То есть пишешь в v2, а он его транслирует куда надо (хоть в HLSL, хоть в GLSL)
Salamandr
> rbfx vfx
архив приятно выглядит: с чистым содержанием - внутри ничего лишнего)
ёж
Salamandr
большое спасибо, ваша помощь не оценима)
по урхошейдерам лёд тронулся,
> Анимация процедурной текстуры на поверхности модели Plane:
с шадертоя я взял ранее написанный свой шейдер:
https://www.shadertoy.com/view/7sy3zW
но пойдёт любой.
я так напряжённо думал, как сделать демку с МИНИМУМ УСИЛИЙ, что аж вспотел)))
Работает даже с такими вводными:
<material> <technique name="Salamandr/Techniques/ttest.xml"/> <texture name="Salamandr/Textures/123.dds"/> </material>
<technique vs="LitParticle_my" ps="LitParticle_my" psdefines="DIFFMAP"> <pass name="litbase" psdefines="MYTESTPASS" /> </technique> В файл LitParticle_my.glsl добавил сам код шейдера обрамлённый MYTESTPASS
любопытно.. кажется я увидел тот самый недостающий пазл. попробую как появится возможность.
Тема в архиве.