Софт Cleo Shader API

Статус
В этой теме нельзя размещать новые ответы.

Dark_Knight

Me, me and me.
Автор темы
Друг
4,062
2,077
CLEO Shader API - пишите и используйте HLSL шрейдеры при помощи Клео скриптов.

CLEO Shader API базируется на классе Shader. Его интерфейс имеет следующие методы:
Load("FileName%v")
Загружает шрейдер(эффект) с файла и возращает его хендл.
Draw("Shader%h" "Technique%v" "Left%f" "Top%f" "Right%f" "Bottom%f")
Рисует прямоугольник с указанным шрейдером.
DrawHudElement("Shader%h" "Technique%v" "Left%f" "Top%f" "Right%f" "Bottom%f")
Рисует прямоугольник с указанным шрейдером на худ рендеринге.
SetFloat("Shader%h" "ParamName%v" "Value%f")
Устанавнивает дробный параметр.
SetInt("Shader%h" "ParamName%v" "Value%i")
Устанавливает целосный параметр.
SetBool("Shader%h" "ParamName%v" "Value%b")
Устанавливает булевой параметр.
SetVector("Shader%h" "ParamName%v" "X%f" "Y%f" "Z%f" "W%f")
Устанавливает векторный параметр.
SetMatrix("Shader%h" "ParamName%v" "Matrix%h")
Устанавливает матричный параметр. Второй параметр - это поинтер на D3DMATRIX структуру.
SetTexture("Shader%h" "ParamName%v" "TextureName%v")
Устанавливает параметр текстуры. Второй параметр - это имя загруженной текстуры при помощи метода LoadTexture().
SetRwTexture("Shader%h" "ParamName%v" "Texture%h")
Устанавливает параметр текстуры. Второй параметр - это поинтер на обьект RwTexture.
LoadTexture("Name%v" "FileName%v")
Загружает текстуру с файла.
UnloadTexture("Name%v")
Выгружает текстуру из памяти.

Особенности
Семантика:
Вы можете использовать некоторые параметры по умолчанию, без передачи их в CLEO скрипты. Они отмечены как семантики. CLEO Shader API поддерживает такую ​​семантику:
Тип Имя синтематика Описание
texture SCREEN_TEX frame buffer texture
texture DEPTH_TEX z-buffer texture
float3 SUN_CORONA_COL sun's corona color
float3 SUN_CORE_COL sun's core color
float3 SKY_TOP_COL
float3 SKY_BOTTOM_COL
float3 AMBIENT_COL
float2 SUN_POSN sun position (screen-space coordinates)
float SUN_SIZE
float DAYNIGHT_STATE
float WEATHER_FOGGYNESS
float WEATHER_CLOUD_COVERAGE
float WEATHER_RAIN
float WEATHER_UNDER_WATERNESS
int MULTISAMPLE_LEVELS AA level in game menu
bool NIGHT_VISION
bool INFRARED_VISION
bool HEAT_VISUALS

При определении переменной для такого параметра, хранятся в общем спецификаторе:
Код:
shared float2 sunPosn : SUN_POSN;
Константы размера экрана
Используйте следующий параметр, если вы хотите привлечь полный / эффекта половина экрана:
SCREEN_BASE_X
SCREEN_BASE_Y
SCREEN_SIZE_X
SCREEN_SIZE_Y
SCREEN_HALF_X
SCREEN_HALF_Y
Пример
Блюр шрейдер
Код:
shared texture screen : SCREEN_TEX;
float dist;
 
sampler2D screenSampler = sampler_state
{
    Texture = <screen>;
};
 
float4 PS_screen(float2 tex: TEXCOORD0): COLOR
{
    float4 color;
    color =  tex2D(screenSampler, tex);
    color += tex2D(screenSampler, tex + dist);
    color += tex2D(screenSampler, tex - dist);
    return color / 3;
}
 
technique ShowScreen
{
    pass P0
    {
        PixelShader  = compile ps_2_0 PS_screen();
    }
}
Cleo-скрипт для этого шрейдера
Код:
{$CLEO}
{$I shaderApi}
 
var
    0@: shader
end
 
if
    0@ = shader.Load("CLEO\blur.txt")
then
    while true
        wait 0
        068D: get_camera_position_to 4@ 5@ 6@
        050A: 7@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@
        7@ *= 0.0008
        068D: get_camera_position_to 1@ 2@ 3@
        0@.SetFloat("dist", 7@)
        0@.Draw("ShowScreen", SCREEN_BASE_X, SCREEN_BASE_Y, SCREEN_SIZE_X, SCREEN_SIZE_Y)
       
    end
end
0A93: end_custom_thread
Скачать
Ссылка на тему gtaforums.com
 

Dark_Knight

Me, me and me.
Автор темы
Друг
4,062
2,077
Примеры.
Inverted colors
228364aze.png
Код:
shared texture screen : SCREEN_TEX;

sampler2D screenSampler = sampler_state
{
    Texture = <screen>;
};
 

float4 PS_invcolor(float2 uv: TEXCOORD) : COLOR
{
 float4 color = tex2D( screenSampler, uv );
 float4 invertedColor = float4(color.a - color.rgb, color.a);
 return invertedColor;
}
Emboss
16kc83o.jpg
Код:
shared texture screen : SCREEN_TEX;


sampler2D screenSampler = sampler_state
{
    Texture = <screen>;
};



float4 PS_emboss(float2 uv: TEXCOORD) : COLOR
{

 float4 color = tex2D( screenSampler, uv.xy); 
 color -= tex2D(screenSampler , uv.xy-0.0005)*2.7f;
 color += tex2D(screenSampler , uv.xy+0.0005)*2.7f;
 color.rgb = (color.r+color.g+color.b)/3.0f;
 
 return color;
}
Photocopy
2i6gvhl.jpg
Код:
shared texture screen : SCREEN_TEX;


sampler2D screenSampler = sampler_state
{
    Texture = <screen>;
};



float4 PS_photocopy(float2 uv: TEXCOORD) : COLOR
{

 float4 color = tex2D( screenSampler, uv.xy); 
color -= tex2D(screenSampler , uv.xy)*2.7f;
color += tex2D(screenSampler , uv.xy)*2.7f;
color.rgb = (color.r+color.g+color.b)/2.0f;

 if (color.r<0.2 || color.r>0.9) color.r = 0; else color.r = 1.0f;
if (color.g<0.2 || color.g>0.9) color.g = 0; else color.g = 1.0f;
if (color.b<0.2 || color.b>0.9) color.b = 0; else color.b = 1.0f;
 
 return color;
}
Toon Shading
15rbm7d.jpg
Код:
shared texture screen : SCREEN_TEX;


sampler2D screenSampler = sampler_state
{
    Texture = <screen>;
};



float4 PS_toon(float2 uv: TEXCOORD) : COLOR
{

    //float4 color = tex2D(screenSampler, uv.xy); 
	float4 color = tex2D(screenSampler, uv);

	color.r = round(color.r*16.0)/16.0;
	color.g = round(color.g*16.0)/16.0;
	color.b = round(color.b*16.0)/16.0;
	
	const float threshold = 0.2;

	const int NUM = 9;
	const float2 c[NUM] =
	{
		float2(-0.0078125, 0.0078125), 
		float2( 0.00 ,     0.0078125),
		float2( 0.0078125, 0.0078125),
		float2(-0.0078125, 0.00 ),
		float2( 0.0,       0.0),
		float2( 0.0078125, 0.007 ),
		float2(-0.0078125,-0.0078125),
		float2( 0.00 ,    -0.0078125),
		float2( 0.0078125,-0.0078125),
	};	

	int i;
	float3 col[NUM];
	for (i=0; i < NUM; i++)
	{
		col[i] = tex2D(screenSampler, uv.xy + 0.2*c[i]);
	}
	
	float3 rgb2lum = float3(0.30, 0.59, 0.11);
	float lum[NUM];
	for (i = 0; i < NUM; i++)
	{
		lum[i] = dot(col[i].xyz, rgb2lum);
	}
	float x = lum[2]+  lum[8]+2*lum[5]-lum[0]-2*lum[3]-lum[6];
	float y = lum[6]+2*lum[7]+  lum[8]-lum[0]-2*lum[1]-lum[2];
	float edge =(x*x + y*y < threshold)? 1.0:0.0;
	
	color.rgb *= edge;

	return color;
}
 
  • Нравится
Реакции: Slamdunk

Dark_Knight

Me, me and me.
Автор темы
Друг
4,062
2,077
Можно ENB на клео написать? o_O

Выходит, что да. Погугливши HLSL шрейдеры то он используется активно в Unity. Это значит что уроков дохрена. Самое главное это разобратся с D3DMATRIX и RwObject. Когда глянул гтафорумс то там есть интересные темки. К примеру, Молдова кажется, кидал темку где можно изменить цвет обьекта.
 
  • Нравится
Реакции: Slamdunk

SR_team

like pancake
BH Team
4,720
6,368
Выходит, что да. Погугливши HLSL шрейдеры то он используется активно в Unity. Это значит что уроков дохрена. Самое главное это разобратся с D3DMATRIX и RwObject. Когда глянул гтафорумс то там есть интересные темки. К примеру, Молдова кажется, кидал темку где можно изменить цвет обьекта.

лучше с ошибкой помоги разобраться http://prntscr.com/3rr4oe . В classes.db все добавил, а он все равно выебывается
Я нуб. Забыл в начале шейдер написать
 

Dark_Knight

Me, me and me.
Автор темы
Друг
4,062
2,077
Автор не дал их. Все что было интересное выложил сюда.
 
  • Нравится
Реакции: Slamdunk

Vikktor

Известный
25
1
Дай клео для последнего шейдера из примеров

Код:
const
SCREEN_BASE_X=1
SCREEN_BASE_Y=2
SCREEN_SIZE_X=3
SCREEN_SIZE_Y=4
SCREEN_HALF_X=5
SCREEN_HALF_Y=6
end
 
 
if
    0DF0: 0@ = load_shader_from_file "cleo\toon.txt"
then
    while true
        wait 0
        0DF1: draw_shader 0@ technique "ShowScreen" at SCREEN_BASE_X SCREEN_BASE_Y SCREEN_SIZE_X SCREEN_SIZE_Y
    end
end
 

Michael Fun

Новичок
1
2
Per-pixel lighting with CLEO Shader Api.

EJFyk2Cm.png



Y6ADOOMm.png
Код:
{$CLEO}
{$I shaderApi}
 
var
    0@: shader    4@: shader    5@: shader end
 
if and
    0@ = shader.Load("CLEO\pointlight.txt") // stupid, but ShaderApi can't draw one shader with different params in one frame
    4@ = shader.Load("CLEO\pointlight.txt")
    5@ = shader.Load("CLEO\pointlight.txt")
then
    while true        wait 0
        04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 3.0 1.0
        0@.SetVector("light", 1@, 2@, 3@, 25.0)
        0@.SetVector("lightColor", 1.0, 0.0, 0.0, 0.0)
        0@.Draw("Light", SCREEN_BASE_X, SCREEN_BASE_Y, SCREEN_SIZE_X, SCREEN_SIZE_Y)
        04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset -3.0 0.0 1.0
        4@.SetVector("light", 1@, 2@, 3@, 25.0)
        4@.SetVector("lightColor", 0.0, 1.0, 0.0, 0.0)
        4@.Draw("Light", SCREEN_BASE_X, SCREEN_BASE_Y, SCREEN_SIZE_X, SCREEN_SIZE_Y)
        04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 3.0 0.0 1.0
        5@.SetVector("light", 1@, 2@, 3@, 25.0)
        5@.SetVector("lightColor", 1.0, 1.0, 0.0, 0.0)
        5@.Draw("Light", SCREEN_BASE_X, SCREEN_BASE_Y, SCREEN_SIZE_X, SCREEN_SIZE_Y)
    end
else
    0A93: end_custom_thread end
http://gtaforums.com/topic/703763-relcleo-shader-api
 
  • Нравится
Реакции: SR_team и itsLegend

SilaShrederow

Новичок
1
0
Твоей головой по лестничной площадке прошлись? Какие нахуй шредеры? Ты не бетмен, иди нахуй
5cba46cb9e22x.jpg
 
Статус
В этой теме нельзя размещать новые ответы.