|
Xors3D Графический движок с поддержкой DirectX9 |
16.12.2011, 17:10
|
#346
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Предположительно трабла из-за скининга?
|
(Offline)
|
|
16.12.2011, 17:28
|
#347
|
Мастер
Регистрация: 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
|
Мастер
Регистрация: 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
|
Мастер
Регистрация: 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
|
Мастер
Регистрация: 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
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Дам тебе совет, если у тебя уже есть текстура скрина, то создай новый World, создай там камеру с вьюпортом в 2-4 раза меньше оригинального, и примени свой блюр как пост эффект на эту камеру передав текстуру скрина. Рендерь это дело в текстуру.
Таким образом у тебя будет намного большего радиуса блур.
Да и у тебя видно сильное не качество, сделай лучше так:
два шейдера, один проход горизонтальный (тупо слева направо).
И вторую технику вертикальный.
Далее примени сперва первый рендеря в текстуру, затем второй уже используя эту текстуру.
Если нужно ещё сильнее, либо увеличь проходов в техниках, либо ещё дважды пройдись (но лучше проходов добавить).
Длина шага должна равняться ширине текселя.
Таким образом будет намного мягче и качественней блур, и при этом шустрее в разы, чем если блурить фуллскрин картинку притом вот таким методом как ты.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
21.12.2011, 12:53
|
#352
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Странное.
Сообщение от MoKa
Дам тебе совет, если у тебя уже есть текстура скрина, то создай новый World, создай там камеру с вьюпортом в 2-4 раза меньше оригинального
|
SCENECURRENT2X
SCENECURRENT4X
__________________
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
|
21.12.2011, 15:12
|
#353
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Мока, а твой блюр не пинг-понг называется, а?
Этот блюр я выдрал из адванседдепсоффилд. Там правда скэил зависел от разницы межу глубиной пикселя и глубиной на которую фокус. Но я пока не знаю как получить глубину и в чем она меряется. Так, что пока это просто блюр.
Кстати, когда уже выходные в Британии наступят таки?
|
(Offline)
|
|
21.12.2011, 16:41
|
#354
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Странное.
Мока посоветовал как раз самый канонический блюр.
адванседдепсоффилд - это что такое?
__________________
|
(Offline)
|
|
21.12.2011, 17:07
|
#355
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
Название шейдера в рендерманке. Этот шейдер часть сцены делает резкой,а остальные части размывает. Глубина поля, вроде.
|
(Offline)
|
|
21.12.2011, 17:36
|
#356
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Странное.
Сообщение от dsd
Название шейдера в рендерманке. Этот шейдер часть сцены делает резкой,а остальные части размывает. Глубина поля, вроде.
|
Depth of Field.
И делается он иначе, конечно можно и подобным способом, но это слишком ресурсоёмко, проще взять полностью разблуренный скрин, карту долготы, и по карте долготы сделать маску (простая математика), и смешать нормальный скрин с разблуренным по альфа маске полученной ранее. Это намного шустрее и результат нормальный. Один минус будет это на переходах не очень выглядит, и на резких переменах долготы будут обрезки, но это мелочь.
Кстати, когда уже выходные в Британии наступят таки?
|
Рождественские? Два дня, понедельник и вторник будет.
Но у меня они уже 2 недели как начались - я уволился с работы, достало, ни развития, ни команды, ещё и босс тупить начал конкретно.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
22.12.2011, 23:21
|
#357
|
Мастер
Регистрация: 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
|
Мастер
Регистрация: 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
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Странное.
MRT так не заюзаешь.
Доступ к буферу глубины через семантику DEPTHMAP. Но он требует дополнительный проход, т.к. в ДХ9 без трюков к буферу глубины доступ получить нельзя.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.12.2011, 00:32
|
#360
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Странное.
А можно подробней про трюк?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:51.
|