forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Странное. (http://forum.boolean.name/showthread.php?t=15405)

moka 16.12.2011 17:10

Ответ: Странное.
 
Предположительно трабла из-за скининга?

dsd 16.12.2011 17:28

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

Зы: С новой ревизией не прокатывает мое вуду :)
MATRIX_pWORLD, MATRIX_pVIEW, MATRIX_pPROJ, MATRIX_pVIEWpPROJ, MATRIX_WORLDpVIEWpPROJ, MATRIX_pWORLDpVIEWpPROJ. 'p'-prefix means 'from the previous frame'; новые семантики кульные, ток в справке в семантиках их нет.

dsd 17.12.2011 23:31

Ответ: Странное.
 


постэффект 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:39

Ответ: Странное.
 

простенький блюр
Код:

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);
}


dsd 20.12.2011 22:24

Ответ: Странное.
 

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

Код:

// 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 - меняет радиус.

moka 21.12.2011 03:21

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

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

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

.Squid 21.12.2011 12:53

Ответ: Странное.
 
Цитата:

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

SCENECURRENT2X
SCENECURRENT4X

dsd 21.12.2011 15:12

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

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

Кстати, когда уже выходные в Британии наступят таки?

.Squid 21.12.2011 16:41

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

dsd 21.12.2011 17:07

Ответ: Странное.
 
Название шейдера в рендерманке. Этот шейдер часть сцены делает резкой,а остальные части размывает. Глубина поля, вроде.

moka 21.12.2011 17:36

Ответ: Странное.
 
Цитата:

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

Depth of Field.

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

Цитата:

Кстати, когда уже выходные в Британии наступят таки?
Рождественские? Два дня, понедельник и вторник будет.
Но у меня они уже 2 недели как начались - я уволился с работы, достало, ни развития, ни команды, ещё и босс тупить начал конкретно.

dsd 22.12.2011 23:21

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

Цитата:

Код:

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

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

struct PSOutput
{
float4 color : COLOR0;
float4 normal : COLOR1;
float depth : COLOR2;
};
PSOutput PSMain(VSOutput input)


Как правильно использовать MRT? И как получать доступ к полям? Точно так же как в вершинном? Выдача в постэффекты дополнительной информации кроме цвета, это было бы круто. Но как? если это вообще возможно. Но исходя из того, что дефферед рендер был, это можно, в принципе...

dsd 23.12.2011 00:02

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

const texture sceneTexture : SCENECURRENT;
Это текущая текстура в которой отрисованная сцена, читая из которой функцией tex2D() я получаю COLOR0, как получить COLOR1 ... n ?

.Squid 23.12.2011 00:30

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

dsd 23.12.2011 00:32

Ответ: Странное.
 
А можно подробней про трюк?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot