- 50
- 45
- Версия SA-MP
-
- Любая
WireFrame (каркас или полигональная сетка) —
это режим отображения или тип модели, который состоит исключительно из линий (ребер) и точек (вершин), описывающих форму трехмерного объекта.
В этом режиме у объекта нет видимых поверхностей, текстур или объема — он выглядит абсолютно прозрачным, словно сделанным из тонкой светящейся проволоки.
Работает АБСОЛЮТНО везде, в том числе на Amazing Online.
Не зависит от версии SAMP.
Вообще не жрет FPS, который в наших реалиях нужен всегда.
Красит ТОЛЬКО LocalPed, ибо тебя, других не красит, дабы администрация не подумала чего лишнего, да и впринципе я писал для себя, а мне хотелось чтобы такой красивый был я и только я.
Очевидно, что к такому новому плагину нужна небольшая инструкция, так вот:
1. Закиньте все файлы из архива в корневую папку (или в папку asi на Amazing Online (переименовав в .dll)).
У вас будет .ini файл, в котором обозначается шейдер вашего WireFrame, КОТОРЫЙ ВЫ МОЖЕТЕ СДЕЛАТЬ САМИ, логично не без помощи нейросети ибо нехуй учить hlsl в 2026 то году.
В данном .ini пишете название шейдера из доступных в папке WireFrame, которую вы распакуете.
2. Заходите в игру, наслаждаетесь.
3. Если хотите поменять шейдер - нужно перезайти в игру, увы, пока что мне было ОЧЕНЬ лениво это фиксить, как и небольшой баг с просвечиванием текстур, пока что довольствуйтесь тем, что есть.
Для разработчиков, увы, исходный код не дам, скажу одно, что папку шейдеров и .ini файл ищет рядом с .dll а не рядом с гташкой.
Как написать сделать свой шейдер?:
Удачи в использовании, буду дорабатывать как будет время, ради приличия, если качаете - напишите чет в теме или поставьте лайк.
это режим отображения или тип модели, который состоит исключительно из линий (ребер) и точек (вершин), описывающих форму трехмерного объекта.
В этом режиме у объекта нет видимых поверхностей, текстур или объема — он выглядит абсолютно прозрачным, словно сделанным из тонкой светящейся проволоки.
Работает АБСОЛЮТНО везде, в том числе на Amazing Online.
Не зависит от версии SAMP.
Вообще не жрет FPS, который в наших реалиях нужен всегда.
Красит ТОЛЬКО LocalPed, ибо тебя, других не красит, дабы администрация не подумала чего лишнего, да и впринципе я писал для себя, а мне хотелось чтобы такой красивый был я и только я.
Очевидно, что к такому новому плагину нужна небольшая инструкция, так вот:
1. Закиньте все файлы из архива в корневую папку (или в папку asi на Amazing Online (переименовав в .dll)).
У вас будет .ini файл, в котором обозначается шейдер вашего WireFrame, КОТОРЫЙ ВЫ МОЖЕТЕ СДЕЛАТЬ САМИ, логично не без помощи нейросети ибо нехуй учить hlsl в 2026 то году.
В данном .ini пишете название шейдера из доступных в папке WireFrame, которую вы распакуете.
2. Заходите в игру, наслаждаетесь.
3. Если хотите поменять шейдер - нужно перезайти в игру, увы, пока что мне было ОЧЕНЬ лениво это фиксить, как и небольшой баг с просвечиванием текстур, пока что довольствуйтесь тем, что есть.
Для разработчиков, увы, исходный код не дам, скажу одно, что папку шейдеров и .ini файл ищет рядом с .dll а не рядом с гташкой.
Как написать сделать свой шейдер?:
Для начала возьмите какую-то ИИшку, по типу ChatGPT (все базовые шейдеры написала мне именно она).
После чего используйте этот, заготовленный для самых ленивых, промт:
Привет! Напиши мне шейдер для WireFrame на hlsl для ps_3_0, direct3d 9.
[описываете параметры своего шейдера]
Вот все доступные параметры:
float4 TimeData : register(c0);
float4 ScreenData : register(c1);
float4 Color0 : register(c2);
float4 Color1 : register(c3);
float4 Color2 : register(c4);
float4 Color3 : register(c5);
float4 AnimationData : register(c6);
float4 User0 : register(c7);
float4 User1 : register(c8);
float4 User2 : register(c9);
float4 User3 : register(c10);
float4 User4 : register(c11);
float4 User5 : register(c12);
float4 User6 : register(c13);
float4 User7 : register(c14);
float4 DrawData : register(c15);
float4 IndexedData : register(c16);
float4 PassData : register(c17);
float4 WireData : register(c18);
float4 DepthData : register(c19);
float4 FogData : register(c20);
float4 LightDir : register(c21);
float4 LightColor : register(c22);
float4 LightData : register(c23);
float4 Position0 : register(c24);
float4 Position1 : register(c25);
float4 Position2 : register(c26);
float4 Position3 : register(c27);
float4 Extra0 : register(c28);
float4 Extra1 : register(c29);
float4 Extra2 : register(c30);
float4 Extra3 : register(c31);
Пример рабочего шейдера с анимацией и использованием параметров, указанных выше:
// ============================================================================
// NEURAL NETWORK / SYNAPTIC WIREFRAME
// Direct3D 9 / Pixel Shader 3.0
// ============================================================================
float4 TimeData : register(c0);
float4 ScreenData : register(c1);
float4 Color0 : register(c2);
float4 Color1 : register(c3);
float4 Color2 : register(c4);
float4 Color3 : register(c5);
float4 AnimationData : register(c6);
float4 User0 : register(c7);
float4 User1 : register(c8);
float4 User2 : register(c9);
float4 User3 : register(c10);
float4 User4 : register(c11);
float4 User5 : register(c12);
float4 User6 : register(c13);
float4 User7 : register(c14);
float4 DrawData : register(c15);
float4 IndexedData : register(c16);
float4 PassData : register(c17);
float4 WireData : register(c18);
float4 DepthData : register(c19);
float4 FogData : register(c20);
float4 LightDir : register(c21);
float4 LightColor : register(c22);
float4 LightData : register(c23);
float4 Position0 : register(c24);
float4 Position1 : register(c25);
float4 Position2 : register(c26);
float4 Position3 : register(c27);
float4 Extra0 : register(c28);
float4 Extra1 : register(c29);
float4 Extra2 : register(c30);
float4 Extra3 : register(c31);
// ============================================================================
// HASH FUNCTIONS
// ============================================================================
float hash1(float n)
{
return frac(
sin(n * 127.1) * 43758.5453
);
}
float hash2(float2 p)
{
return frac(
sin(
dot(
p,
float2(127.1, 311.7)
)
) * 43758.5453
);
}
float hash3(float2 p)
{
return frac(
sin(
dot(
p,
float2(269.5, 183.3)
)
) * 43758.5453
);
}
// ============================================================================
// SMOOTH PULSE
// ============================================================================
float softPulse(
float x,
float center,
float width
)
{
return saturate(
1.0 -
abs(x - center) /
max(width, 0.0001)
);
}
// ============================================================================
// SYNAPSE
// ============================================================================
float synapse(
float2 p,
float time,
float seed
)
{
float phase =
frac(
time * (0.12 + seed * 0.22) +
seed
);
float axis =
frac(
p.x * (3.0 + seed * 5.0) +
p.y * (2.0 + seed * 4.0)
);
float distance =
abs(
axis - phase
);
distance =
min(
distance,
1.0 - distance
);
return saturate(
1.0 -
distance * 18.0
);
}
// ============================================================================
// MAIN
// ============================================================================
float4 main(
float4 position : SV_POSITION,
float2 uv : TEXCOORD0
) : COLOR
{
// ========================================================================
// TIME
// ========================================================================
float time =
TimeData.x;
float slow =
time * 0.22;
float medium =
time * 0.58;
float fast =
time * 1.35;
// ========================================================================
// SCREEN COORDINATES
// ========================================================================
float2 p =
uv;
float aspect =
ScreenData.x /
max(ScreenData.y, 1.0);
float2 centered =
p - 0.5;
centered.x *= aspect;
// ========================================================================
// LARGE NEURAL REGIONS
// ========================================================================
float2 region =
floor(
p * 5.0
);
float regionSeed =
hash2(
region
);
float regionSeed2 =
hash3(
region
);
// Each region gets its own activation phase.
float localTime =
time +
regionSeed * 9.0;
// ========================================================================
// NEURAL ACTIVITY
// ========================================================================
float activity =
sin(
localTime * 0.8 +
regionSeed * 6.283
);
activity =
activity * 0.5 +
0.5;
// Some regions are sleeping.
float sleeping =
step(
0.38,
regionSeed2
);
activity *=
sleeping;
// ========================================================================
// NETWORK LAYERS
// ========================================================================
float n1 =
synapse(
p,
slow,
regionSeed
);
float n2 =
synapse(
p.yx,
medium,
regionSeed2
);
float n3 =
synapse(
p * 1.7,
fast,
regionSeed * 2.7
);
float neuralFlow =
n1 * 0.65 +
n2 * 0.45 +
n3 * 0.30;
neuralFlow =
saturate(
neuralFlow
);
// ========================================================================
// BRANCHING STRUCTURE
// ========================================================================
float branch1 =
sin(
p.x * 17.0 +
sin(p.y * 8.0) * 2.5 +
slow * 4.0
);
float branch2 =
sin(
p.y * 23.0 +
sin(p.x * 11.0) * 3.0 -
medium * 3.0
);
float branch3 =
sin(
(p.x + p.y) * 31.0 +
fast * 2.0
);
branch1 =
abs(branch1);
branch2 =
abs(branch2);
branch3 =
abs(branch3);
branch1 =
1.0 -
smoothstep(
0.05,
0.28,
branch1
);
branch2 =
1.0 -
smoothstep(
0.05,
0.25,
branch2
);
branch3 =
1.0 -
smoothstep(
0.04,
0.20,
branch3
);
float branches =
saturate(
branch1 * 0.42 +
branch2 * 0.36 +
branch3 * 0.22
);
// ========================================================================
// MOVING SYNAPTIC PULSES
// ========================================================================
float pulse1 =
sin(
p.x * 8.0 -
slow * 7.0 +
regionSeed * 12.0
);
float pulse2 =
sin(
p.y * 11.0 +
medium * 9.0 +
regionSeed2 * 14.0
);
float pulse3 =
sin(
(p.x - p.y) * 14.0 -
fast * 11.0
);
pulse1 =
pulse1 * 0.5 +
0.5;
pulse2 =
pulse2 * 0.5 +
0.5;
pulse3 =
pulse3 * 0.5 +
0.5;
// Sharpen them into small electrical packets.
pulse1 =
smoothstep(
0.76,
0.96,
pulse1
);
pulse2 =
smoothstep(
0.80,
0.97,
pulse2
);
pulse3 =
smoothstep(
0.84,
0.98,
pulse3
);
float electricalPulse =
pulse1 * 0.65 +
pulse2 * 0.40 +
pulse3 * 0.25;
electricalPulse =
saturate(
electricalPulse
);
// ========================================================================
// RANDOM SYNAPTIC FIRING
// ========================================================================
float firingClock =
floor(
time * 1.8
);
float firing =
hash2(
region +
firingClock
);
float firingEvent =
step(
0.82,
firing
);
float firingPhase =
frac(
time * 1.8 +
firing
);
float firingPulse =
1.0 -
smoothstep(
0.0,
0.32,
firingPhase
);
firingPulse *=
firingEvent;
// ========================================================================
// SYNAPSE NODES
// ========================================================================
float2 nodeGrid =
floor(
p * 12.0
);
float nodeRandom =
hash2(
nodeGrid
);
float nodes =
step(
0.965,
nodeRandom
);
// Nodes brighten when their region fires.
nodes *=
0.45 +
firingPulse * 1.5;
// ========================================================================
// COLOR PALETTE
// ========================================================================
float3 cyan =
float3(
0.00,
0.55,
1.00
);
float3 electricBlue =
float3(
0.12,
0.42,
1.00
);
float3 violet =
float3(
0.30,
0.55,
1.00
);
float3 pink =
float3(
0.72,
0.86,
1.00
);
// ========================================================================
// COLOR BY REGION
// ========================================================================
float colorPhase =
frac(
regionSeed +
slow * 0.18
);
float3 regionColor;
if (colorPhase < 0.25)
{
regionColor =
lerp(
cyan,
electricBlue,
colorPhase * 4.0
);
}
else if (colorPhase < 0.50)
{
regionColor =
lerp(
electricBlue,
violet,
(colorPhase - 0.25) * 4.0
);
}
else if (colorPhase < 0.75)
{
regionColor =
lerp(
violet,
pink,
(colorPhase - 0.50) * 4.0
);
}
else
{
regionColor =
lerp(
pink,
cyan,
(colorPhase - 0.75) * 4.0
);
}
// ========================================================================
// SECONDARY COLOR FIELD
// ========================================================================
float secondaryPhase =
frac(
regionSeed2 +
medium * 0.11
);
float3 secondaryColor =
lerp(
cyan,
pink,
secondaryPhase
);
// ========================================================================
// NEURAL COLOR MIX
// ========================================================================
float3 color =
regionColor;
color =
lerp(
color,
secondaryColor,
neuralFlow * 0.42
);
// ========================================================================
// ELECTRICAL PULSES CHANGE COLOR
// ========================================================================
color =
lerp(
color,
cyan,
pulse1 * 0.55
);
color =
lerp(
color,
pink,
pulse2 * 0.50
);
color =
lerp(
color,
violet,
pulse3 * 0.42
);
// ========================================================================
// DARK BASE
// ========================================================================
float3 darkBase =
float3(
0.004,
0.012,
0.030
);
float visibility =
0.22 +
branches * 0.28 +
neuralFlow * 0.48 +
electricalPulse * 0.65 +
firingPulse * 0.90 +
nodes * 0.85;
visibility =
saturate(
visibility
);
color =
lerp(
darkBase,
color,
visibility
);
// ========================================================================
// GLOW
// ========================================================================
float glow =
neuralFlow * 0.35 +
electricalPulse * 0.75 +
firingPulse * 0.85 +
nodes * 1.15;
glow =
saturate(
glow
);
color +=
cyan *
glow *
0.25;
// ========================================================================
// FIRING SYNAPSE FLASH
// ========================================================================
color +=
secondaryColor *
firingPulse *
0.48;
// ========================================================================
// SMALL RANDOM PIXEL SPARKS
// ========================================================================
float sparkRandom =
hash3(
floor(p * 75.0) +
firingClock
);
float sparks =
step(
0.985,
sparkRandom
);
sparks *=
0.35 +
electricalPulse;
color +=
cyan *
sparks *
0.75;
// ========================================================================
// DISTANCE VIGNETTE
// ========================================================================
float vignette =
saturate(
1.0 -
length(centered) * 0.38
);
color *=
0.72 +
vignette * 0.28;
// ========================================================================
// CONTRAST
// ========================================================================
color =
color /
(
1.0 +
color * 0.22
);
color =
saturate(
color
);
// ========================================================================
// ALPHA
// ========================================================================
float alpha =
WireData.x;
if (alpha <= 0.001)
alpha = 1.0;
// Only show our effect during wireframe pass.
alpha *=
PassData.x;
// ========================================================================
// OUTPUT
// ========================================================================
return float4(
color,
saturate(alpha)
);
}
После чего используйте этот, заготовленный для самых ленивых, промт:
Привет! Напиши мне шейдер для WireFrame на hlsl для ps_3_0, direct3d 9.
[описываете параметры своего шейдера]
Вот все доступные параметры:
float4 TimeData : register(c0);
float4 ScreenData : register(c1);
float4 Color0 : register(c2);
float4 Color1 : register(c3);
float4 Color2 : register(c4);
float4 Color3 : register(c5);
float4 AnimationData : register(c6);
float4 User0 : register(c7);
float4 User1 : register(c8);
float4 User2 : register(c9);
float4 User3 : register(c10);
float4 User4 : register(c11);
float4 User5 : register(c12);
float4 User6 : register(c13);
float4 User7 : register(c14);
float4 DrawData : register(c15);
float4 IndexedData : register(c16);
float4 PassData : register(c17);
float4 WireData : register(c18);
float4 DepthData : register(c19);
float4 FogData : register(c20);
float4 LightDir : register(c21);
float4 LightColor : register(c22);
float4 LightData : register(c23);
float4 Position0 : register(c24);
float4 Position1 : register(c25);
float4 Position2 : register(c26);
float4 Position3 : register(c27);
float4 Extra0 : register(c28);
float4 Extra1 : register(c29);
float4 Extra2 : register(c30);
float4 Extra3 : register(c31);
Пример рабочего шейдера с анимацией и использованием параметров, указанных выше:
// ============================================================================
// NEURAL NETWORK / SYNAPTIC WIREFRAME
// Direct3D 9 / Pixel Shader 3.0
// ============================================================================
float4 TimeData : register(c0);
float4 ScreenData : register(c1);
float4 Color0 : register(c2);
float4 Color1 : register(c3);
float4 Color2 : register(c4);
float4 Color3 : register(c5);
float4 AnimationData : register(c6);
float4 User0 : register(c7);
float4 User1 : register(c8);
float4 User2 : register(c9);
float4 User3 : register(c10);
float4 User4 : register(c11);
float4 User5 : register(c12);
float4 User6 : register(c13);
float4 User7 : register(c14);
float4 DrawData : register(c15);
float4 IndexedData : register(c16);
float4 PassData : register(c17);
float4 WireData : register(c18);
float4 DepthData : register(c19);
float4 FogData : register(c20);
float4 LightDir : register(c21);
float4 LightColor : register(c22);
float4 LightData : register(c23);
float4 Position0 : register(c24);
float4 Position1 : register(c25);
float4 Position2 : register(c26);
float4 Position3 : register(c27);
float4 Extra0 : register(c28);
float4 Extra1 : register(c29);
float4 Extra2 : register(c30);
float4 Extra3 : register(c31);
// ============================================================================
// HASH FUNCTIONS
// ============================================================================
float hash1(float n)
{
return frac(
sin(n * 127.1) * 43758.5453
);
}
float hash2(float2 p)
{
return frac(
sin(
dot(
p,
float2(127.1, 311.7)
)
) * 43758.5453
);
}
float hash3(float2 p)
{
return frac(
sin(
dot(
p,
float2(269.5, 183.3)
)
) * 43758.5453
);
}
// ============================================================================
// SMOOTH PULSE
// ============================================================================
float softPulse(
float x,
float center,
float width
)
{
return saturate(
1.0 -
abs(x - center) /
max(width, 0.0001)
);
}
// ============================================================================
// SYNAPSE
// ============================================================================
float synapse(
float2 p,
float time,
float seed
)
{
float phase =
frac(
time * (0.12 + seed * 0.22) +
seed
);
float axis =
frac(
p.x * (3.0 + seed * 5.0) +
p.y * (2.0 + seed * 4.0)
);
float distance =
abs(
axis - phase
);
distance =
min(
distance,
1.0 - distance
);
return saturate(
1.0 -
distance * 18.0
);
}
// ============================================================================
// MAIN
// ============================================================================
float4 main(
float4 position : SV_POSITION,
float2 uv : TEXCOORD0
) : COLOR
{
// ========================================================================
// TIME
// ========================================================================
float time =
TimeData.x;
float slow =
time * 0.22;
float medium =
time * 0.58;
float fast =
time * 1.35;
// ========================================================================
// SCREEN COORDINATES
// ========================================================================
float2 p =
uv;
float aspect =
ScreenData.x /
max(ScreenData.y, 1.0);
float2 centered =
p - 0.5;
centered.x *= aspect;
// ========================================================================
// LARGE NEURAL REGIONS
// ========================================================================
float2 region =
floor(
p * 5.0
);
float regionSeed =
hash2(
region
);
float regionSeed2 =
hash3(
region
);
// Each region gets its own activation phase.
float localTime =
time +
regionSeed * 9.0;
// ========================================================================
// NEURAL ACTIVITY
// ========================================================================
float activity =
sin(
localTime * 0.8 +
regionSeed * 6.283
);
activity =
activity * 0.5 +
0.5;
// Some regions are sleeping.
float sleeping =
step(
0.38,
regionSeed2
);
activity *=
sleeping;
// ========================================================================
// NETWORK LAYERS
// ========================================================================
float n1 =
synapse(
p,
slow,
regionSeed
);
float n2 =
synapse(
p.yx,
medium,
regionSeed2
);
float n3 =
synapse(
p * 1.7,
fast,
regionSeed * 2.7
);
float neuralFlow =
n1 * 0.65 +
n2 * 0.45 +
n3 * 0.30;
neuralFlow =
saturate(
neuralFlow
);
// ========================================================================
// BRANCHING STRUCTURE
// ========================================================================
float branch1 =
sin(
p.x * 17.0 +
sin(p.y * 8.0) * 2.5 +
slow * 4.0
);
float branch2 =
sin(
p.y * 23.0 +
sin(p.x * 11.0) * 3.0 -
medium * 3.0
);
float branch3 =
sin(
(p.x + p.y) * 31.0 +
fast * 2.0
);
branch1 =
abs(branch1);
branch2 =
abs(branch2);
branch3 =
abs(branch3);
branch1 =
1.0 -
smoothstep(
0.05,
0.28,
branch1
);
branch2 =
1.0 -
smoothstep(
0.05,
0.25,
branch2
);
branch3 =
1.0 -
smoothstep(
0.04,
0.20,
branch3
);
float branches =
saturate(
branch1 * 0.42 +
branch2 * 0.36 +
branch3 * 0.22
);
// ========================================================================
// MOVING SYNAPTIC PULSES
// ========================================================================
float pulse1 =
sin(
p.x * 8.0 -
slow * 7.0 +
regionSeed * 12.0
);
float pulse2 =
sin(
p.y * 11.0 +
medium * 9.0 +
regionSeed2 * 14.0
);
float pulse3 =
sin(
(p.x - p.y) * 14.0 -
fast * 11.0
);
pulse1 =
pulse1 * 0.5 +
0.5;
pulse2 =
pulse2 * 0.5 +
0.5;
pulse3 =
pulse3 * 0.5 +
0.5;
// Sharpen them into small electrical packets.
pulse1 =
smoothstep(
0.76,
0.96,
pulse1
);
pulse2 =
smoothstep(
0.80,
0.97,
pulse2
);
pulse3 =
smoothstep(
0.84,
0.98,
pulse3
);
float electricalPulse =
pulse1 * 0.65 +
pulse2 * 0.40 +
pulse3 * 0.25;
electricalPulse =
saturate(
electricalPulse
);
// ========================================================================
// RANDOM SYNAPTIC FIRING
// ========================================================================
float firingClock =
floor(
time * 1.8
);
float firing =
hash2(
region +
firingClock
);
float firingEvent =
step(
0.82,
firing
);
float firingPhase =
frac(
time * 1.8 +
firing
);
float firingPulse =
1.0 -
smoothstep(
0.0,
0.32,
firingPhase
);
firingPulse *=
firingEvent;
// ========================================================================
// SYNAPSE NODES
// ========================================================================
float2 nodeGrid =
floor(
p * 12.0
);
float nodeRandom =
hash2(
nodeGrid
);
float nodes =
step(
0.965,
nodeRandom
);
// Nodes brighten when their region fires.
nodes *=
0.45 +
firingPulse * 1.5;
// ========================================================================
// COLOR PALETTE
// ========================================================================
float3 cyan =
float3(
0.00,
0.55,
1.00
);
float3 electricBlue =
float3(
0.12,
0.42,
1.00
);
float3 violet =
float3(
0.30,
0.55,
1.00
);
float3 pink =
float3(
0.72,
0.86,
1.00
);
// ========================================================================
// COLOR BY REGION
// ========================================================================
float colorPhase =
frac(
regionSeed +
slow * 0.18
);
float3 regionColor;
if (colorPhase < 0.25)
{
regionColor =
lerp(
cyan,
electricBlue,
colorPhase * 4.0
);
}
else if (colorPhase < 0.50)
{
regionColor =
lerp(
electricBlue,
violet,
(colorPhase - 0.25) * 4.0
);
}
else if (colorPhase < 0.75)
{
regionColor =
lerp(
violet,
pink,
(colorPhase - 0.50) * 4.0
);
}
else
{
regionColor =
lerp(
pink,
cyan,
(colorPhase - 0.75) * 4.0
);
}
// ========================================================================
// SECONDARY COLOR FIELD
// ========================================================================
float secondaryPhase =
frac(
regionSeed2 +
medium * 0.11
);
float3 secondaryColor =
lerp(
cyan,
pink,
secondaryPhase
);
// ========================================================================
// NEURAL COLOR MIX
// ========================================================================
float3 color =
regionColor;
color =
lerp(
color,
secondaryColor,
neuralFlow * 0.42
);
// ========================================================================
// ELECTRICAL PULSES CHANGE COLOR
// ========================================================================
color =
lerp(
color,
cyan,
pulse1 * 0.55
);
color =
lerp(
color,
pink,
pulse2 * 0.50
);
color =
lerp(
color,
violet,
pulse3 * 0.42
);
// ========================================================================
// DARK BASE
// ========================================================================
float3 darkBase =
float3(
0.004,
0.012,
0.030
);
float visibility =
0.22 +
branches * 0.28 +
neuralFlow * 0.48 +
electricalPulse * 0.65 +
firingPulse * 0.90 +
nodes * 0.85;
visibility =
saturate(
visibility
);
color =
lerp(
darkBase,
color,
visibility
);
// ========================================================================
// GLOW
// ========================================================================
float glow =
neuralFlow * 0.35 +
electricalPulse * 0.75 +
firingPulse * 0.85 +
nodes * 1.15;
glow =
saturate(
glow
);
color +=
cyan *
glow *
0.25;
// ========================================================================
// FIRING SYNAPSE FLASH
// ========================================================================
color +=
secondaryColor *
firingPulse *
0.48;
// ========================================================================
// SMALL RANDOM PIXEL SPARKS
// ========================================================================
float sparkRandom =
hash3(
floor(p * 75.0) +
firingClock
);
float sparks =
step(
0.985,
sparkRandom
);
sparks *=
0.35 +
electricalPulse;
color +=
cyan *
sparks *
0.75;
// ========================================================================
// DISTANCE VIGNETTE
// ========================================================================
float vignette =
saturate(
1.0 -
length(centered) * 0.38
);
color *=
0.72 +
vignette * 0.28;
// ========================================================================
// CONTRAST
// ========================================================================
color =
color /
(
1.0 +
color * 0.22
);
color =
saturate(
color
);
// ========================================================================
// ALPHA
// ========================================================================
float alpha =
WireData.x;
if (alpha <= 0.001)
alpha = 1.0;
// Only show our effect during wireframe pass.
alpha *=
PassData.x;
// ========================================================================
// OUTPUT
// ========================================================================
return float4(
color,
saturate(alpha)
);
}
Удачи в использовании, буду дорабатывать как будет время, ради приличия, если качаете - напишите чет в теме или поставьте лайк.
Вложения
Последнее редактирование: