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

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

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

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

Ответ
 
Опции темы
Старый 16.12.2011, 17:10   #346
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Предположительно трабла из-за скининга?
(Offline)
 
Ответить с цитированием
Старый 16.12.2011, 17:28   #347
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Скорее всего трабла в модели, моих кривых руках, кривом скининге кривом шейдере и еще раз в моих кривых руках. Ибо нех фришные модельки юзать Там она как оказалось вывернута наизнанку отрицательным скейлом, потом каким-то ректальным волшебством привязана к костям и при этом довольно прилично выглядит и внутри макса никаких проблем, за исключением экспорта в б3д. У меня складывается впечатление, что моделька была смоделена и бесплатно выложена с большим и жирным троллфейсом во всю морду и злым умыслом. Так что попробую че-нить сам намоделить.

Зы: С новой ревизией не прокатывает мое вуду
MATRIX_pWORLD, MATRIX_pVIEW, MATRIX_pPROJ, MATRIX_pVIEWpPROJ, MATRIX_WORLDpVIEWpPROJ, MATRIX_pWORLDpVIEWpPROJ. 'p'-prefix means 'from the previous frame'; новые семантики кульные, ток в справке в семантиках их нет.
(Offline)
 
Ответить с цитированием
Старый 17.12.2011, 23:31   #348
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.



постэффект sepia
// SCENECURRENT semantics is the texture which contains the scene right after the rendering.
// Its size matches the size of the backbuffer.
const texture sceneTexture : SCENECURRENT;

// Texture sampler to get access to texture pixels for shader
sampler sceneSample = sampler_state
{
	// Assing texture to sampler
	Texture   = <sceneTexture>;
	// We always needs clamping for textures
	AddressU  = Clamp;
	AddressV  = Clamp;
	// Linear texture filtering, also you may use "Point" or "None"
	MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};

const float3 LUMINANCE_WEIGHTS = float3(0.27, 0.67, 0.06);
const float3 LightColor = float3(1.0,0.9,0.5);
const float3 DarkColor = float3(0.2,0.05,0.0);



// Pixel shader for uv-offset
float4 PSEffect(float2 texCoords : TEXCOORD0) : COLOR
{
	float3 color = tex2D(sceneSample, texCoords).rgb;
	float lum = dot(LUMINANCE_WEIGHTS,color);
	float3 sepia = DarkColor*(1.0-lum) + LightColor*lum;
	return float4(sepia, 1.0f);
}

// Shaders techniques. Shader must contain at least one technique.
technique MainTechnique
{
	// Sequence of technique passes. This passes will performs on stage.
	pass Sepia
	{
		PixelShader	= compile ps_2_0 PSEffect();
	}
}
чернобелое изображение
// SCENECURRENT semantics is the texture which contains the scene right after the rendering.
// Its size matches the size of the backbuffer.
const texture sceneTexture : SCENECURRENT;

// Texture sampler to get access to texture pixels for shader
sampler sceneSample = sampler_state
{
	// Assing texture to sampler
	Texture   = <sceneTexture>;
	// We always needs clamping for textures
	AddressU  = Clamp;
	AddressV  = Clamp;
	// Linear texture filtering, also you may use "Point" or "None"
	MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};

// Pixel shader for uv-offset
float4 PSEffect(float2 texCoords : TEXCOORD0) : COLOR
{
	float3 color = tex2D(sceneSample, texCoords).rgb;
	float grayscale=0.299*color.r+0.587*color.g+0.114*color.b;
	color=float3(grayscale,grayscale,grayscale);
	return float4(color, 1.0f);
}

// Shaders techniques. Shader must contain at least one technique.
technique MainTechnique
{
	// Sequence of technique passes. This passes will performs on stage.
	pass grayscale
	{
		PixelShader	= compile ps_2_0 PSEffect();
	}
}
float4 ToYUV(float2 texCoords : TEXCOORD0) : COLOR
{
	float3 color = tex2D(sceneSample, texCoords).rgb;
	float y  = (0.257 * color.r) + (0.504 * color.g) + (0.098 * color.b);
	float v =  (0.439 * color.r) - (0.368 * color.g) - (0.071 * color.b);
	float u = -(0.148 * color.r) - (0.291 * color.g) + (0.439 * color.b);
	float3 ctr = float3(0.0627,0.5,0.5);
	return float4(float3(y,u,v)+ctr,1.0f);
}
: SCENECURRENT; - Где можно найти полный список семантик хорса? Ибо ни в шагах ни в документации этой не было.

Последний раз редактировалось dsd, 18.12.2011 в 00:35.
(Offline)
 
Ответить с цитированием
Старый 18.12.2011, 00:39   #349
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


простенький блюр
float4 downsample(float2 texCoords : TEXCOORD0) : COLOR
{

   float2 texCoordSample =float2(0.0f,0.0f);
   float3 cOut;
   
   float2 pixelSize =float2( 1.0f/1024, 1.0f/768 );
   texCoordSample.x = texCoords.x - pixelSize.x;
   texCoordSample.y = texCoords.y + pixelSize.y;
   cOut = tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x + pixelSize.x;
   texCoordSample.y = texCoords.y + pixelSize.y;
   cOut += tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x + pixelSize.x;
   texCoordSample.y = texCoords.y - pixelSize.y;
   cOut += tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x - pixelSize.x;
   texCoordSample.y = texCoords.y - pixelSize.y;
   cOut += tex2D(sceneSample, texCoordSample).rgb;
	return float4(0.25*cOut,1.0);
}
float4 gaussian(float2 texCoords : TEXCOORD0) : COLOR
{


   float2 texCoordSample =float2(0.0f,0.0f);
   float3 cOut;
   
   float2 pixelSize =4*float2( 1.0f/1024, 1.0f/768 );
   texCoordSample.x = texCoords.x;
   texCoordSample.y = texCoords.y;
   cOut = 0.5*tex2D(sceneSample, texCoords).rgb;
   
   texCoordSample.x = texCoords.x;
   texCoordSample.y = texCoords.y + pixelSize.y;
   cOut += 0.125*tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x;
   texCoordSample.y = texCoords.y - pixelSize.y;
   cOut += 0.125*tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x - pixelSize.x;
   texCoordSample.y = texCoords.y;
   cOut += 0.125*tex2D(sceneSample, texCoordSample).rgb;
   
   texCoordSample.x = texCoords.x - pixelSize.x;
   texCoordSample.y = texCoords.y;
   cOut += 0.125*tex2D(sceneSample, texCoordSample).rgb;
	return float4(cOut,1.0);
}
(Offline)
 
Ответить с цитированием
Старый 20.12.2011, 22:24   #350
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Вполне достойный блюр нормального качества с легко регулируемым радиусом.

// SCENECURRENT semantics is the texture which contains the scene right after the rendering.
// Its size matches the size of the backbuffer.
const texture sceneTexture : SCENECURRENT;

// Texture sampler to get access to texture pixels for shader
sampler sceneSample = sampler_state
{
	// Assing texture to sampler
	Texture   = <sceneTexture>;
	// We always needs clamping for textures
	AddressU  = Clamp;
	AddressV  = Clamp;
	// Linear texture filtering, also you may use "Point" or "None"
	MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};

const float2 offsets[12] = {
   -0.326212, -0.405805,
   -0.840144, -0.073580,
   -0.695914,  0.457137,
   -0.203345,  0.620716,
    0.962340, -0.194983,
    0.473434, -0.480026,
    0.519456,  0.767022,
    0.185461, -0.893124,
    0.507431,  0.064425,
    0.896420,  0.412458,
   -0.321940, -0.932615,
   -0.791559, -0.597705,
};
// Pixel shader for uv-offset
float4 blur(float2 texCoords : TEXCOORD0) : COLOR
{
   float4 sum = tex2D(sceneSample, texCoords);
   float4 BlurScale=0.0078;

   for (int i = 0; i < 12; i++){
      sum += tex2D(sceneSample, texCoords + BlurScale * offsets[i]);
   }
	return sum/13.0;
}


// Shaders techniques. Shader must contain at least one technique.
technique MainTechnique
{
	// Sequence of technique passes. This passes will performs on stage.
	pass blur
	{
		PixelShader	= compile ps_2_0 blur();
	}

}
BlurScale - меняет радиус.
(Offline)
 
Ответить с цитированием
Старый 21.12.2011, 03:21   #351
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Дам тебе совет, если у тебя уже есть текстура скрина, то создай новый World, создай там камеру с вьюпортом в 2-4 раза меньше оригинального, и примени свой блюр как пост эффект на эту камеру передав текстуру скрина. Рендерь это дело в текстуру.
Таким образом у тебя будет намного большего радиуса блур.

Да и у тебя видно сильное не качество, сделай лучше так:
два шейдера, один проход горизонтальный (тупо слева направо).
И вторую технику вертикальный.
Далее примени сперва первый рендеря в текстуру, затем второй уже используя эту текстуру.
Если нужно ещё сильнее, либо увеличь проходов в техниках, либо ещё дважды пройдись (но лучше проходов добавить).
Длина шага должна равняться ширине текселя.

Таким образом будет намного мягче и качественней блур, и при этом шустрее в разы, чем если блурить фуллскрин картинку притом вот таким методом как ты.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
dsd (21.12.2011), Mr_F_ (21.12.2011)
Старый 21.12.2011, 12:53   #352
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Странное.

Сообщение от MoKa Посмотреть сообщение
Дам тебе совет, если у тебя уже есть текстура скрина, то создай новый World, создай там камеру с вьюпортом в 2-4 раза меньше оригинального
SCENECURRENT2X
SCENECURRENT4X
__________________

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
dsd (21.12.2011), H@NON (21.12.2011), moka (21.12.2011)
Старый 21.12.2011, 15:12   #353
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Мока, а твой блюр не пинг-понг называется, а?

Этот блюр я выдрал из адванседдепсоффилд. Там правда скэил зависел от разницы межу глубиной пикселя и глубиной на которую фокус. Но я пока не знаю как получить глубину и в чем она меряется. Так, что пока это просто блюр.

Кстати, когда уже выходные в Британии наступят таки?
(Offline)
 
Ответить с цитированием
Старый 21.12.2011, 16:41   #354
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Странное.

Мока посоветовал как раз самый канонический блюр.
адванседдепсоффилд - это что такое?
__________________

(Offline)
 
Ответить с цитированием
Старый 21.12.2011, 17:07   #355
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Название шейдера в рендерманке. Этот шейдер часть сцены делает резкой,а остальные части размывает. Глубина поля, вроде.
(Offline)
 
Ответить с цитированием
Старый 21.12.2011, 17:36   #356
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Название шейдера в рендерманке. Этот шейдер часть сцены делает резкой,а остальные части размывает. Глубина поля, вроде.
Depth of Field.

И делается он иначе, конечно можно и подобным способом, но это слишком ресурсоёмко, проще взять полностью разблуренный скрин, карту долготы, и по карте долготы сделать маску (простая математика), и смешать нормальный скрин с разблуренным по альфа маске полученной ранее. Это намного шустрее и результат нормальный. Один минус будет это на переходах не очень выглядит, и на резких переменах долготы будут обрезки, но это мелочь.

Кстати, когда уже выходные в Британии наступят таки?
Рождественские? Два дня, понедельник и вторник будет.
Но у меня они уже 2 недели как начались - я уволился с работы, достало, ни развития, ни команды, ещё и босс тупить начал конкретно.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
dsd (21.12.2011), SBJoker (21.12.2011)
Старый 22.12.2011, 23:21   #357
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Чтобы заиметь в постэффекте буфер глубины его по любому придется рисовать в текстуру?

Т.к. обычно пиксельный шейдер возвращает одно значение цвета, используется следующее определение:

float4 PSMain(VSOutput input) : COLOR0
{
...
}
В случае использования MRT, используется способ аналогичный вершинным шейдерам:

struct PSOutput
{
float4 color : COLOR0;
float4 normal : COLOR1;
float depth : COLOR2;
};
PSOutput PSMain(VSOutput input)
Как правильно использовать MRT? И как получать доступ к полям? Точно так же как в вершинном? Выдача в постэффекты дополнительной информации кроме цвета, это было бы круто. Но как? если это вообще возможно. Но исходя из того, что дефферед рендер был, это можно, в принципе...
(Offline)
 
Ответить с цитированием
Старый 23.12.2011, 00:02   #358
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Допустим я смог шейдером на объекте нарисовать в COLOR0 и в COLOR1;

const texture sceneTexture : SCENECURRENT;
Это текущая текстура в которой отрисованная сцена, читая из которой функцией tex2D() я получаю COLOR0, как получить COLOR1 ... n ?
(Offline)
 
Ответить с цитированием
Старый 23.12.2011, 00:30   #359
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Странное.

MRT так не заюзаешь.
Доступ к буферу глубины через семантику DEPTHMAP. Но он требует дополнительный проход, т.к. в ДХ9 без трюков к буферу глубины доступ получить нельзя.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (23.12.2011)
Старый 23.12.2011, 00:32   #360
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

А можно подробней про трюк?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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