Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 26.04.2014, 13:56   #106
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Ссылка битая
(Offline)
 
Ответить с цитированием
Старый 26.04.2014, 15:44   #107
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Сообщение от Izunad Посмотреть сообщение
Ссылка битая
Недавно сайт окончательно сдох. А самая первая ссылка ещё раньше.
Shaders in Xors3d Engine. First steps (RU).pdf
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Izunad (26.04.2014)
Старый 26.04.2014, 19:18   #108
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

первый и последний
(Offline)
 
Ответить с цитированием
Старый 27.04.2014, 00:17   #109
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Первый шейдер, добавляет зеленный оттенок текстуре =)
static float4 Colorka : COLOR0;
texture diffuseTexture : TEXTURE_0;

sampler diffuseSampler = sampler_state
{
	Texture = <diffuseTexture>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

struct PSInput 
{
	float2 texCoords : TEXCOORD0; 
};

struct PSOutput 
{
	float4 color : COLOR; 
};

PSOutput PSMain (PSInput input)
{
	PSOutput output;
	Colorka = float4(0,0.1,0,0);
	output.color.rgba = tex2D(diffuseSampler, input.texCoords).rgba+Colorka;
	return output;
}

technique MainTechnique
{
	pass p
	{
		PixelShader	= compile ps_2_0 PSMain();
	}
}
(Offline)
 
Ответить с цитированием
Старый 27.04.2014, 00:30   #110
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

А вот еще. Заменяет зеленые оттенки на синие.
static float4 Colorka : COLOR0;
static float Bconst: COLOR1;
texture diffuseTexture : TEXTURE_0;

sampler diffuseSampler = sampler_state
{
	Texture = <diffuseTexture>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

struct PSInput 
{
	float2 texCoords : TEXCOORD0; 
};

struct PSOutput 
{
	float4 color : COLOR; 
};

PSOutput PSMain (PSInput input)
{
	PSOutput output;
	Colorka = tex2D(diffuseSampler, input.texCoords).rgba;
	Bconst = Colorka.b;
	Colorka.b = Colorka.g;
	Colorka.g = Bconst;
	output.color.rgba = Colorka;
	return output;
}

technique MainTechnique
{
	pass p
	{
		PixelShader	= compile ps_2_0 PSMain();
	}
}
А можно сделать так? Спроектировать от нормали по оси У вверх вектор, который проверит пересекает вектор какую либо полигон. Если да, то закрасить пиксель в тень.

Последний раз редактировалось Izunad, 27.04.2014 в 14:03.
(Offline)
 
Ответить с цитированием
Старый 28.04.2014, 22:38   #111
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Izunad Гугли Shadowmap

Ну или моя поделка http://gcup.ru/board/com/active/xors...ading/1-1-0-22
(Offline)
 
Ответить с цитированием
Старый 29.04.2014, 14:05   #112
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Кстати использовал два готовых примера shader-теней.
В последний момент решил воспользоваться alpha и transparent текстурами.

До обработки они прозрачны, после затенения - не прозрачные но с тенями.
(ну я решил прозрачные меши рендерить отдельно от теней)

А так, например как в Blender картинке:


Или например травы..

Просто я с шейдерами никогда не связывался.
В общем стандартные прозрачности исчезают после обработки.
(Offline)
 
Ответить с цитированием
Старый 01.05.2014, 04:04   #113
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Забей на alpha канал и тени, даже пока не суйся туда, лучше займись более важными вещами с шейдерами.
(Offline)
 
Ответить с цитированием
Старый 01.05.2014, 21:19   #114
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

А вотя мой шейдер воды

//КОД ШЕЙДЕРА
static float4 Colorka : COLOR0;
const float UPSTimer;
texture diffuseTexture : TEXTURE_0;
texture diffuseTexture1 : TEXTURE_1;
float3 PosCamera;

sampler diffuseSampler = sampler_state
{
	Texture = <diffuseTexture>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

sampler diffuseSampler1 = sampler_state
{
	Texture = <diffuseTexture1>;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
	MinFilter = ANISOTROPIC;
	MagFilter = ANISOTROPIC;
	MipFilter = ANISOTROPIC;
	MaxAnisotropy = 4;
};

struct PSInput 
{
	float2 texCoords : TEXCOORD0; 
};

struct PSOutput 
{
	float4 color : COLOR; 
};

PSOutput PSMain (PSInput input)
{
	PSOutput output;
	Colorka =(tex2D(diffuseSampler, input.texCoords+float2(0,UPSTimer))+tex2D(diffuseSampler1, input.texCoords-float2(UPSTimer,UPSTimer))+tex2D(diffuseSampler1, input.texCoords-float2(UPSTimer,-UPSTimer)));
	Colorka.a = Colorka.r;
	if (Colorka.a > 0.75f)
		{
			Colorka.r=(1-Colorka.r)/4+Colorka.r;
			Colorka.g=(1-Colorka.g)/4+Colorka.g;
			Colorka.b=(1-Colorka.b)/4+Colorka.b;
		}
	if (Colorka.a > 0.90f)
		{
			Colorka.r=1;
			Colorka.g=1;
			Colorka.b=1;
		}
	Colorka.a = Colorka.a;
	Colorka.b = Colorka.b*2;
	Colorka.g = Colorka.b;
	Colorka.rgb=Colorka.rgb/4;
	output.color.rgba = Colorka;
	return output;
}

technique MainTechnique
{
	pass p
	{
		AlphaBlendEnable= true;
		PixelShader	= compile ps_2_0 PSMain();
	}
}
На стороне кода игры
Define tModel=xLoadMesh("Resurse\Models\Water\Model.b3d");Плоскость
Define tShader = xLoadFXFile("Resurse\Shaders\Water2.fx")
Define tTextureDiffuse.i=xLoadTexture("Resurse\Shaders\W1.png")
Define tTextureDiffuse1.i=xLoadTexture("Resurse\Shaders\W2.png")
xSetEntityEffect(tModel,tShader)
xSetEffectTechnique(tModel,"MainTechnique")
xSetEffectTexture(tModel,	"diffuseTexture",tTextureDiffuse)
xSetEffectTexture(tModel,	"diffuseTexture1",tTextureDiffuse1)
Define UPSTimer.f=0

;В цикле пишем
UPSTimer=UPSTimer+0.00025
xSetEffectFloat(tModel,		"UPSTimer",UPSTimer)
Нам также понадобится две текстуры W1 W2. В примерах Xors3D есть два png изображения Fire_NormalF.png и Fire_NormalS.png. Меняем их в редакторе, придавая оттенки серого.

(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Izunad за это полезное сообщение:
FREE MAN (03.05.2014), H@NON (02.05.2014), LLI.T.A.L.K.E.R. (02.05.2014), moka (02.05.2014), pepel (05.09.2014), Randomize (02.05.2014)
Старый 02.05.2014, 02:16   #115
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Водичку нужно в анимации смотреть

Советую не использовать условия в шейдерах - они очень медленные.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Izunad (02.05.2014)
Старый 02.05.2014, 02:24   #116
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Советую не использовать условия в шейдерах - они очень медленные.
необязательно.
варианта два - компилятор решает какой выбрать:
1. то что в ифе выполняется в любом случае, а потом умножается на маску условия.
2. происходит реальный бранч. в этом случае, надо иметь в виду, что видюха обрабатывает много пикселей параллельно - в квадратных блоках (4х4 пикселя вроде обычно).
если один пиксель в блоке выполняет длинный бранч, а другие не выполняют - другим все равно придётся ждать этот один пиксель, как будто иф сработал на них всех.
если зоны с разными бранчами чётко отделены на экране, а не шумно перемешаны - то будет норм работать.
также, в бранчах не работает tex2D - но работает tex2Dlod/tex2Dgrad.

нормальные бранчи пашут только в sm 3.0 и выше.
компилер выбирает их если внутри нет tex2D и код более менее не однострочный вроде как.

код выше по хорошему должен компильнуться в вариант 1

----
if (Colorka.a > 0.75f)
{
Colorka.r=(1-Colorka.r)/4+Colorka.r;
Colorka.g=(1-Colorka.g)/4+Colorka.g;
Colorka.b=(1-Colorka.b)/4+Colorka.b;
}
if (Colorka.a > 0.90f)
{
Colorka.r=1;
Colorka.g=1;
Colorka.b=1;
}
Colorka.a = Colorka.a;
Colorka.b = Colorka.b*2;
Colorka.g = Colorka.b;
Colorka.rgb=Colorka.rgb/4;
output.color.rgba = Colorka;
кстати, нафиг по компонентам так расписывать - ты же можешь с векторами сразу работать:

Colorka.rgb = Colorka.a>0.75? (1-Colorka.rgb)/4+Colorka.rgb : Colorka.rgb;
Colorka.rgb = Colorka.a>0.9?    1 : Colorka.rgb;
Colorka.abg = Colorka.abb;
Colorka.b *= 2;
Colorka.rgb /= 4;
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
H@NON (02.05.2014), HolyDel (02.05.2014), Izunad (02.05.2014), pax (02.05.2014), tirarex (02.05.2014)
Старый 02.05.2014, 09:32   #117
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Объясните пожалуйста басяцким языком что такое вектор Бинормали и Тангент?
(Offline)
 
Ответить с цитированием
Старый 02.05.2014, 11:50   #118
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо tirarex за это полезное сообщение:
Izunad (02.05.2014), moka (03.05.2014)
Старый 03.05.2014, 04:22   #119
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Нормаль обычно перпендикулярна поверхности.
Тангент перпендикулярен нормали и бинормали, и паралелен Y координате в текстурных координатах.
Бинормаль, перпендикулярен нормали и тангенту, и паралелен X координате в текстурных координатах.

Это нужно для того чтобы взять нормал карту (текстуру), извлечь из неё X и Y смещение, но оно же локально на текстуре, и далее используя нормаль, тангент и бинормаль, повернуть этот полученный вектор смещения из локального пространства в мировое.
Чтобы можно было уже далее использовать эти данные с другими, например вектором луча света от источника света, который тоже в мировом пространстве.

Любые операции над любыми данными, нужно производить в одном пространстве, это может быть локальное (local), мировое (world) или экранное (screen). Если какие-то данные в другом пространстве, то нужно их трансформировать в нужное, и для этого порой хватает только матрицы трансформации (local > world), проекционной матрицы (world > screen), а для текстурных, таких как нормал карта, нужны tbn (tanget, binormal, normal)
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
Arton (03.05.2014), Izunad (03.05.2014), tirarex (03.05.2014)
Старый 03.05.2014, 17:17   #120
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Xors3D. Шейдеры. Урок первый

Мой семпл BPCM (Box Projected Cube Map)


Автогенератор нормалей (Приятная мелочь)


float3 AutoNormalGen(sampler2D sample,float2 texCoord) {
float off = 1.0 / 512;
float4 lightness = float4(0.2,0.59,0.11,0);
// Take all neighbor samples
float4 s00 = tex2D(sample, texCoord + float2(-off, -off));
float4 s01 = tex2D(sample, texCoord + float2( 0, -off));
float4 s02 = tex2D(sample, texCoord + float2( off, -off));

float4 s10 = tex2D(sample, texCoord + float2(-off, 0));
float4 s12 = tex2D(sample, texCoord + float2( off, 0));

float4 s20 = tex2D(sample, texCoord + float2(-off, off));
float4 s21 = tex2D(sample, texCoord + float2( 0, off));
float4 s22 = tex2D(sample, texCoord + float2( off, off));

// Slope in X direction
float4 sobelX = s00 + 2 * s10 + s20 - s02 - 2 * s12 - s22;
// Slope in Y direction
float4 sobelY = s00 + 2 * s01 + s02 - s20 - 2 * s21 - s22;

// Weight the slope in all channels, we use grayscale as height
float sx = dot(sobelX, lightness);
float sy = dot(sobelY, lightness);

// Compose the normal
float3 normal = normalize(float3(sx, sy, 1));

// Pack [-1, 1] into [0, 1]
return normal * 0.5 + 0.5;
}
Вложения
Тип файла: rar BPCM.rar (232.7 Кб, 511 просмотров)
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо tirarex за это полезное сообщение:
FREE MAN (03.05.2014), Izunad (03.05.2014), jfkkk (04.05.2014), moka (03.05.2014)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шейдеры pax Наш форум 14 25.10.2009 22:16
Xors шейдеры Spy4433 Xors3D 3 28.08.2009 17:27
Типа шейдеры... :-) L.D.M.T. 3D-программирование 1 14.02.2009 13:19
Урок Фауста Magus Болтовня 0 13.07.2007 02:03
Ashadow & Шейдеры DRAG 3D-программирование 16 10.01.2007 22:21


Часовой пояс GMT +4, время: 03:53.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com