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)

dsd 11.12.2011 22:28

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

Критикуйте солнце.

Критики не запустившие приложение идите в ад :)

HolyDel 11.12.2011 22:38

Ответ: Странное.
 
в архиве солнца нет

dsd 11.12.2011 22:42

Ответ: Странное.
 
На нвидиях должно работать. Походу ati видеокарты гораздо привередливей к тексту хлсл. На x3000 тоже должно работать.

HolyDel, а облака рисуются? Или просто серое ничто как при ошибке? Можно скрин если не серое?

dsd 11.12.2011 22:56

Ответ: Странное.
 
Походу оно могло не работать из-за деления на ноль.
Вот шейдер, без деления.

HolyDel 11.12.2011 23:05

Ответ: Странное.
 
Вложений: 1
также

dsd 11.12.2011 23:14

Ответ: Странное.
 
О_о косяк с матрицами. Них ж себе. Причем косяк с семантиками, причем не везде. Сквид, походу глюк :)

А с этим?

pozitiffcat 12.12.2011 09:31

Ответ: Странное.
 
Мне одному кажется, что солнце ну ооооооооочень какоето желтое? И вылезающее за облака

mauNgerS 12.12.2011 10:32

Ответ: Странное.
 
Проверил, всё работает. Видяха - нвидия GTX260.
С художественной стороны:
Несоответствие: солнце при восходе или закате, а небо при ясном дне.
Солнце перед облаками. И еще в облаках прослеживается математика (не естественно выглядят).

Зачем делаешь чтобы текстуры так сильно рябили?:4to:
ПС Понравился скрин солнце на чёрном фоне - космос

mauNgerS 12.12.2011 13:45

Ответ: Странное.
 
Проверил на компе из подписи - ситуация как у HolyDel

dsd 12.12.2011 14:21

Ответ: Странное.
 
Значит косяк на атишных видюхах вот в этой строчке:
output.position = mul(input.position, matrixWorldViewProj);
Потому что судя по скрину шейдером меши унесло в неведомую даль, а нигде кроме, как этой строкой позиции вершин у меня не меняются.

Такой оттенок лучше?


twisted firefly

Код:

                float3 pos=normalize(input.pos.xyz);
                float grad=dot(pos,-lightDirection);
               
                float3 sunnycoords=-lightDirection-pos;

                float a=atan2(sunnycoords.x,sunnycoords.y);

                float r=length(sunnycoords.xy)+0.001;
                float b=1.9*sin(r-time-2.0*a);
                b = (0.04125 + 0.01*cos(7.0*a +b*b) )/  r;
                b = 0.57*b*b;
                a=b+0.09 * sin(a + time);
               
                float4 sunc = float4(b,  a,  0.9*a, 1.0);
                if(grad<0.996 && grad>=0.9){sunc=lerp(sunc,float4(0,0,0,0),(0.996-grad)/0.096);}
                if(grad<0.9){sunc=float4(0,0,0,0);}
                // возвращаем результирующий цвет пиксела
                return sunc;


pozitiffcat 12.12.2011 20:37

Ответ: Странное.
 
знаешь как сделай солнце.. так же как на предыдущем скрине где оно очень желтое, но цвет сделай как на этом скрине а то оно тут у тебя черезчур twisted

dsd 13.12.2011 00:35

Ответ: Странное.
 
Есть ли какой-нить способ загрузить в хорс мешку которая модификатором
Physique к костям приделана? А то как-то не охота править Skin, который таки удалось, хвала богам, внутри хорса запустить.


Mr_F_ 13.12.2011 01:20

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

hysique к костям приделана? А то как-то не охота править Skin, который таки удалось, хвала богам, внутри хорса запустить.
ищи плагин physique2skin. такой есть.

dsd 13.12.2011 14:39

Ответ: Странное.
 
под восьмую версию найти не смог, на аутодеске самая ранняя для 9-ой. :(

pozitiffcat 13.12.2011 15:16

Ответ: Странное.
 
А 8 у тебя стоит из-за b3d???

dsd 13.12.2011 15:24

Ответ: Странное.
 
Нет. Просто не глючных и рабочих версий новей 8 нигде в шкафу не завалялось, а качать в лом. Плюс устраивает во всем, тем более, что с 2012 мадбоксом импорт экспорт без лишних телодвижений происходит.

HolyDel 13.12.2011 15:56

Ответ: Странное.
 
Вложений: 1
вот. другое дело!

dsd 13.12.2011 16:47

Ответ: Странное.
 
Значит надо проверять деления на ноль и бесконечность на бесконечность.

Терь понятно зачем операторы isnan(), isinf() и isfinite().
Однака нвидия круче радеонов :)

HolyDel 13.12.2011 17:09

Ответ: Странное.
 
да ладно, я шучу
trollface

это с рабочего компа. тут нвидиа. на ати все по прежнему грустно (

pozitiffcat 13.12.2011 17:12

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

Сообщение от dsd (Сообщение 213803)
Значит надо проверять деления на ноль и бесконечность на бесконечность.

Терь понятно зачем операторы isnan(), isinf() и isfinite().
Однака нвидия круче радеонов :)

Мега плюсую!!!

ps проверил на интеле 4500 все работает норм!!!! вывод делайте сами

SBJoker 13.12.2011 17:50

Ответ: Странное.
 
На самом деле радики не хуже, и проблемы с ними только у скажем так несильно хороших программистов. И вот почему, главное отличие радиков в том что они делают именно так как сказал им программист. А драйвер нвидии имеют кучу защиты от дурака. От переполнения переменных, от вылезания за пределы текстуры и многое другое. Олсо есть особая версия драйвера нвидии для упоротых на скорости вот там проверки отключены и будет так же как на радиках падать в местах ошибок программиста.

dsd 13.12.2011 18:25

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

Текстов же с типичными ошибками в работающих шейдерах мне не попалось ни одного. Либо вау какой крутой шейдер, либо введение в шейдеры, версия для животных.

dsd 13.12.2011 22:58

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


Какая-то адская порнография вместо бега получилась :)
http://rghost.ru/34599221

мыша рулить, w+s или стрелки бежать.

dsd 15.12.2011 01:15

Ответ: Странное.
 
Ни у кого случайно в формате .bip не завалялся бег наподобие как у сталоне в последней рембе, когда он от авиабомбы сваливал? Короче нужен бег как у спринтеров на 100 метров в финале на олимпиаде...

dsd 16.12.2011 01:43

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

Почти бесшовный бег инвалида детства :-D

Почему при наложении шейдера на анимированную мешку у меня получилось добиться результата только при применении шейдера на меш кожи и при умножении мировых координат её точек не на ворлдвиевпрожект матрицу, а на вьюпрожект матрицу? Модельку я отскейлил внутри хорса. Кривая модель или так и надо(получалось, что скейл модели к коже дважды применялся плюс вылезал какой-то косяк с поворотом, оно крутилось также вдвое больше нужного и бегало внутри координат модели)?

зы: Раденоны не удовлетворяют минимальным системным требованиям. Ну и шейдеры 3.0 :)

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

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

.Squid 23.12.2011 12:57

Ответ: Странное.
 
Depth Buffer as Texture

For some rendering schemes (anything with "deferred") or some effects (SSAO, depth of field, volumetric fog, ...) having access to a depth buffer is needed. If native depth buffer can be read as a texture, this saves both memory and a rendering pass or extra output for MRTs.

Depending on hardware, this can be achieved via INTZ, RAWZ, DF16 or DF24 formats:
INTZ is for recent (DX10+) hardware. With recent drivers, all three major IHVs expose this. According to ATI [1], it also allows using stencil buffer while rendering. Also allows reading from depth texture while it's still being used for depth testing (but not depth writing). Looks like this applies to NV & Intel parts as well.
RAWZ is for GeForce 6 & 7 series only. Depth is specially encoded into four channels of returned value.
DF16 and DF24 is for ATI (DF16 for Intel as well) cards, including older cards that don't support INTZ. Unlike INTZ, this does not allow using depth buffer or using the surface for both sampling & depth testing at the same time.
Also useful when using depth textures:
Creating NULL color surface to keep D3D runtime happy and save on video memory.
RESZ allows resolving multisampled depth surfaces into non-multisampled depth textures (result will be sample zero for each pixel).
Caveats:
Using INTZ for both depth/stencil testing and sampling at the same time seems to have performance problems on ATI cards (checked Radeon HD 3xxx to 5xxx, Catalyst 9.10 to 10.5). A workaround is to render to INTZ depth/stencil first, then use RESZ to "blit" it into another surface. Then do sampling from one surface, and depth testing on another.

dsd 23.12.2011 16:34

Ответ: Странное.
 
Господе Иисусе. O_o
Это мне надо сделать в хорсе xCreateDSS() с размерами экрана сделать, а дальше не понимаю как. Мне б хотяб самый минимальный пример. Я так понимаю, что есть возможность к DSS внутри шейдера как-то обратиться или это и будет DEPTHMAP?

.Squid 23.12.2011 18:01

Ответ: Странное.
 
На уровне пользователя движка этот хак реализовать не получится (ну только, если не делать еще один хак самого движка: получать д3д девайс и т.п.).
Для использования DEPTHMAP эти пляски с бубном не нужны. Двиг сам делает рендер в текстуру. Просто я предупредил, что потребуется дополнительный проход, который влияет на произовдительность.

dsd 23.12.2011 18:38

Ответ: Странное.
 
Да черт с ним с проходом. Мне очень интересен текст подобного прохода и как потом из DEPTHMAP получать глубину, и как она(глубина) будет там записана.

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

H@NON 23.12.2011 19:38

Ответ: Странное.
 
А в ксорсе можно как-нибудь рисовать объекты без уже наложенных на них текстур ? просто раз для депф буффера необходим дополнительный проход, то это облегчит рендер

dsd 23.12.2011 20:02

Ответ: Странное.
 
Ну вроде есть более простой способ получить буфер глубины. А вообще в пиксельном шейдере на выход цвет идет. Который получается сначала чтением цвета текущего пикселя из текстуры, потом цвет умножается на косинус угла между нормалью этого пикселя и направлением света. Очевидно, что на выход можно выдать что угодно, лишь бы оно было в формате float4() и каждая часть была от 0 до 1.

Еще есть xTextureBlend(tex,0) выключающий текстуру. Но вообще если рисовать силами шейдера, то это пофигу, что там на объект наложено. Так как это будет уже другой шейдер, который прочитает и отрисует только нужные данные. Тем более, что слои эффектов легко ставятся.

.Squid 23.12.2011 20:07

Ответ: Странное.
 
Вложений: 1
Вот тут показано, как работать с DEPTHMAP
Вложение 15803
Но там есть недочет. На пальму наложена текстура с альфа каналом, которая при рендере в карту глубины не учитывается.

http://forum.boolean.name/showpost.p...&postcount=302
Тут рендер в карту глубины осуществляется вручную.

dsd 23.12.2011 20:10

Ответ: Странное.
 
Спасибо. Если я научусь работать с буфером глубины, то можно будет сочинить пару забавных постэффектов. Те же контуры можно обводить легко.

.Squid 23.12.2011 20:45

Ответ: Странное.
 
http://area.xors3d.com/forums/viewtopic.php?f=21&t=713

dsd 23.12.2011 22:08

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



Код:

float4x4 matProj        : MATRIX_PROJ;
...
float Depth = tex2D( DepthSample, texCoords);
1. Избавляюсь от нормализации.
float nedoZed=Depth*zfar+znear;
2. Нахожу 1/z
float pochtiZed=(nedoZed+matProj[2][2])/matProj[2][3];
3. Глубина текущего пикселя:
float finalZed=1/pochtiZed;
...

Правильно?

zfar и znear можно получить семантикой? Или таки надо передавать из хорса руками?

dsd 23.12.2011 23:50

Ответ: Странное.
 
Барабанная дробь...

Моя глубина поля :)


Правда я обошелся одним проходом. Из-за чего, наверное, и есть гало вокруг "резких" объектов




Интересно, а у всех кто хоть чу-чуть выучил с++ глаза автоматически прилипают к :: встречающимся в произвольном тексте, вообще не имеющему отношения к программированию?

moka 24.12.2011 03:40

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

dsd 26.12.2011 19:51

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


Простенькая процедурная анимация выстрела из лазёрной турели :)

внутри исходники есть :)
Выстрел по пробелу.

varIIkon 27.12.2011 03:41

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

dsd 27.12.2011 18:04

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

Сообщение от varIIkon (Сообщение 215360)
Почему xors3d?

А чем плох xors3d? Ну кроме того, что в нем шейдеры только 3.0. Или где-то там есть волшебный двиг за пользование которым разрабы еще и денег доплачивают?

HolyDel 28.12.2011 15:00

Ответ: Странное.
 
такую хрень, кстати, очень неплохо было бы делать на GS. по крайней мере виток. или хотябы цилиндрование вокруг линии.

dsd 28.12.2011 15:15

Ответ: Странное.
 
Что такое GS?

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

HolyDel 28.12.2011 15:35

Ответ: Странное.
 
Geometry Shaders. чтобы не гонять по шине все вершины, а только ключевые, а новые генерировать на основе ключевых.

dsd 28.12.2011 18:33

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

Запилил своему кривому корыту перед.

dsd 14.01.2012 22:03

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


От этой картинки я радуюсь. Черное впадины.


Научить это еще заполнять впадины и можно будет переходить к простому. К расстановке и анимации полигонов.

dsd 29.01.2012 01:55

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

очередная хрень. На встроенной в хорс физике шарики летают в пустоте и притягиваются друг к другу, столкновения почти упругие. При удалении от центра массы на 200 для удалившегося шара сила гравитации сильно вырастает по линейной зависимости.

Мышалево кинуть шар, мышаправо кинуть десять шар. фцыв перемещение. мыша вертеть камера. Пробел остановить все шарики. ентер взорвать центр масс.

Порой получаются у некоторых кусков стабильные траектории если накидать шаров с отдаления.
два класса один математика, второй рулит шариками.

tormoz 29.01.2012 18:28

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

Сообщение от dsd (Сообщение 218049)

очередная хрень. На встроенной в хорс физике шарики летают в пустоте и притягиваются друг к другу, столкновения почти упругие. При удалении от центра массы на 200 для удалившегося шара сила гравитации сильно вырастает по линейной зависимости.

Мышалево кинуть шар, мышаправо кинуть десять шар. фцыв перемещение. мыша вертеть камера. Пробел остановить все шарики. ентер взорвать центр масс.

Порой получаются у некоторых кусков стабильные траектории если накидать шаров с отдаления.
два класса один математика, второй рулит шариками.

Вселенная v 0.011 ?
Когда будешь отделять тьму от света, не забудь магические хаки встроить.:-D

dsd 29.01.2012 19:31

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

Сообщение от tormoz (Сообщение 218074)
Вселенная v 0.011 ?
Когда будешь отделять тьму от света, не забудь магические хаки встроить.:-D

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

dsd 31.01.2012 22:54

Ответ: Странное.
 
Мой первый макрос :)
Вроде работает, вроде удобно :)
Код:

char msgBuffer[129];
#define text(a,b,c,d) \
sprintf(msgBuffer,c,d);\
xText(a,b,msgBuffer)

text(120,120,"current FPS is: %d",xGetFPS());

и сразу же второй :)
Код:

#define b_for(a,b) for(int a=0;a<b;a++)


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

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