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)

pozitiffcat 08.12.2011 13:39

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

Сообщение от Reizel (Сообщение 213005)
у позиффиката мания запилить все в свой движок\обертку xD

Почему бы и нет.. но я имел ввиду писать самому с нуля ))

dsd 10.12.2011 20:48

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


PHP код:

float4 PSMain(VSOutput input) : COLOR0
{

        
float height=pow((200-input.viewVec.y)/200,2);
        
//цвет у горизонта 222 251 255
        //цвет в зените 87 124 179
        
float red=(87+135*height)/255;
        
float green=(124+127*height)/255;
        
float blue=(179+76*height)/255;
        
float4 diffuse =float4(red,green,blue,1);
        
//the sun
        
float3 sunpos=lightDirection;
        
        
float3 pos=normalize(input.viewVec.xyz);
        
        
float grad=dot(pos,-sunpos);
        
        
        
float4 sunc=float4(0,0,0,0);
        if(
grad>0.998){sunc=float4(1,0,0,0);}
        
//**********************************
              
float3 ntexcoor=normalize(input.viewVec.xyz);
        
float leng=length(ntexcoor.xz);
            
        
float2 textcoor ntexcoor.xz*(1.4-ntexcoor.y)+0.03*float2(time,time);
                
//**********************************
        //читаю из текстуры облакаж
        
float4 cloud=pow(1.35*tex2D(diffuseSampler,textcoor),4);
        
float mixfactor=2*frac(time/50);
        if(
mixfactor<=1){red=0.7*lerp(cloud.x,cloud.y,mixfactor);}
        if(
mixfactor>1){red=0.7*lerp(cloud.x,cloud.y,2-mixfactor);}

        if(
leng>0.949){red=lerp(1,red,20*(0.999-leng));}
        if(
leng>0.999){red=1;}
        
float4 cloud1=float4(1,1,1,1)-min(float4(red,red,red,0),diffuse);
        
        
        
        
float4 result=max(cloud1,diffuse);
        
// возвращаем результирующий цвет пиксела
        
return result+2*sunc;
(
output.viewVec=input.position;)


Прикольные текстурные координаты создающие впечатление плоскости при рисовании на сфере.

moka 11.12.2011 01:15

Ответ: Странное.
 
Там странный переход заметен, угол такой..

dsd 11.12.2011 21:33

Ответ: Странное.
 
Там градиент неба рисовался исходя из абсолютной высоты на меше, а не как следует.


Первая попытка внедрения менталрэйвских кусков шейдера в мое творение.

Код:

// пиксельный шейдер
float4 PSMain(VSOutput input) : COLOR0
{
                float3 ntexcoor=normalize(input.viewVec.xyz);
                float height=pow((ntexcoor.y),2);
                //цвет у горизонта 150 179 209
                //цвет в зените 66 88 135
                float red=(150-84*height)/255;
                float green=(179-91*height)/255;
                float blue=(209-74*height)/255;
                float4 diffuse =float4(red,green,blue,1);
       
               
                float leng=length(ntexcoor.xz);
                float2 textcoor = ntexcoor.xz*(1.5-ntexcoor.y)+0.01*float2(time,time);
                //читаю из текстуры облакаж
                float4 cloud=pow(1.3*tex2D(diffuseSampler,textcoor),4);
                float mixfactor=pow(abs(sin(time/20.0)),3);
                red=lerp(cloud.x,cloud.y,mixfactor);
                float4 cloud1=float4(1,1,1,1)-abs(min(float4(red,red,red,red),diffuse));
                if(leng>0.949){cloud1=lerp(0,cloud1,20*(0.999-leng));}
                cloud1=pow(cloud1,4.07);
                if(cloud1.r>cloud1.g+cloud1.b){cloud1.r=cloud1.g;}
                cloud1.r=cloud1.b;
                cloud1.g=cloud1.b;

                float4 result=lerp(diffuse,sqrt(cloud1),pow(cloud1.r,4));


                //the sun
                float3 sunpos=lightDirection;
                float3 pos=normalize(input.viewVec.xyz);
                float grad=dot(pos,-sunpos);
                float4 sunc=float4(0,0,0,0);
                if(grad>0.998){sunc=float4(1,0,0,0);}
               
                //injection of be cool shader
          // Be Cool
                  float a = acos(grad);
                  float r = 150*(1-grad);
               
                  float b = 1.9 * sin(8.0 * r - time - 2.0 * a);
                  b = 0.3125 / r + cos(7.0 * a + b * b) / (100.0 * r);
                  b *= smoothstep(0.2, 0.8, b);
               
                  sunc = float4(b, 0.67 * b + 0.1 * sin(a + time), 0.0, 1.0);
                // возвращаем результирующий цвет пиксела
                return result+2*sunc;
}

А также починил чудовищно разноцветные края облачков и еще кой-чо.

dsd 11.12.2011 21:50

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

Только солнце :) Теперь края почти запустились :)

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;



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

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