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

volodyapivo

Участник
Автор темы
51
47
Версия 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 · Просмотры: 15
Последнее редактирование:

volodyapivo

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

tarios1337

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

volodyapivo

Участник
Автор темы
51
47
почему тебе лень было если это делала нейросеть ты просто промты писал чееееел
я бы с такой историей сообщений побоялся чет высирать на бх
1788033048558.png


Why doesn't it work for me?
why my pants are dirty? do u know? give me info about ur samp version, crashlog(if exists), if it isnt crash - give me ur discord, i'll try to help u
 

#Northn

Известный
Всефорумный модератор
2,660
2,613
можно же просто хукнуть вызов на DrawIndexedPrimitive и поставить там D3DPT_LINELIST, вместо шейдера