Тема: Странное.
Показать сообщение отдельно
Старый 11.12.2011, 21:33   #319
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

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


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

// пиксельный шейдер
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;
}
А также починил чудовищно разноцветные края облачков и еще кой-чо.
(Offline)
 
Ответить с цитированием