SA:MP ASI Графика WireFrame.asi - чамсы как в r_drawothermodels 2 в Counter-Strike

volodyapivo

Участник
Автор темы
50
45
Версия SA-MP
  1. Любая
WireFrame (каркас или полигональная сетка)
это режим отображения или тип модели, который состоит исключительно из линий (ребер) и точек (вершин), описывающих форму трехмерного объекта.
В этом режиме у объекта нет видимых поверхностей, текстур или объема — он выглядит абсолютно прозрачным, словно сделанным из тонкой светящейся проволоки.
Работает АБСОЛЮТНО везде, в том числе на Amazing Online.
Не зависит от версии SAMP.
Вообще не жрет FPS, который в наших реалиях нужен всегда.

Красит ТОЛЬКО LocalPed, ибо тебя, других не красит, дабы администрация не подумала чего лишнего, да и впринципе я писал для себя, а мне хотелось чтобы такой красивый был я и только я.


1787941354344.png

1787941393552.png
07.17.53.jpg




Очевидно, что к такому новому плагину нужна небольшая инструкция, так вот:

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.rar
    34.5 KB · Просмотры: 7
Последнее редактирование:

volodyapivo

Участник
Автор темы
50
45
  • Нравится
Реакции: 0x18d036

tarios1337

Новичок
8
0
почему тебе лень было если это делала нейросеть ты просто промты писал чееееел