Показать сообщение отдельно
Старый 24.09.2013, 07:22   #53
Gregory_777
Тестер
 
Аватар для Gregory_777
 
Регистрация: 03.12.2007
Адрес: Москва
Сообщений: 3,668
Вы сказали Спасибо: 880
Поблагодарили 3,815 раз(а) в 874 сообщениях
Gregory_777 хороший собеседник
Отправить сообщение для Gregory_777 с помощью ICQ
По умолчанию

Написал короткий туториал, как сделать небо бесшовным и без "клякс Роршаха". Кстати может быть и трейнзерам пригодится, а то там это дело постоянное.

Текстуру надо сохранить в формате 32bit .TGA (без компрессии), переименовать в Clouds01.tga и поместить в диреткорию /Content симулятора ("родной" Clouds01.tga можно переименовать в Clouds01.bak например) - в OpenRails пока нет менеджера небес, и те, что включены в состав роутов, он тоже пока не понимает.

Потом ищем файл SkyShader.fx, находим в нём шейдер PSClouds и заменяем строчку, в которой вычисляется координата пикселя небесной сферы:

Код:
float2 TexCoord = float2(In.TexCoord.x * 4 + WindDisplacement.x * wind, In.TexCoord.y * 4 + WindDisplacement.y * wind);
На следующие строки:

Код:
	int tile = 4;
	float wind = 0.0;
	float2 TexCoord = float2(In.TexCoord.x * tile + WindDisplacement.x * wind, In.TexCoord.y * tile + WindDisplacement.y * wind);
Теперь в игре будет штиль, и облака не будут бешено свистеть по небу, как в Trainz (что, кстати, благоприятно сказывается на производительности в том числе). Захотите включить ветер - измените переменную wind в диапазоне от 0.0 до 1.0.

Переменная tile отвечает за количество тайлов текстуры на небесной полусфере. Оптимальное значение - 4. При значении 1 облака получаются слишком уж "размазанными", а при 16 становятся заметны повторы.

Я вообще переписал весь шейдер:

Скрытый текст:
Код:
float4 PSClouds(VERTEX_OUTPUT In) : COLOR
{
	// Get the color information for the current pixel
	// Cloud map is tiled. Tiling factor: 4
	// Move cloud map to suit wind conditions
	int tile = 4;
	float wind = 0.2;
	float2 TexCoord = float2(In.TexCoord.x * tile + WindDisplacement.x * wind, In.TexCoord.y * tile + WindDisplacement.y * wind);
	float4 cloudColor = tex2D(CloudMapSampler, TexCoord);
	float alpha = cloudColor.a;

        // Adjust amount of overcast by adjusting alpha
	alpha *= Overcast.x * 1.1;

	// Adjust cloud color brightness for time of day
	cloudColor *= CloudColor;
	cloudColor.a = alpha;
	return cloudColor;
}

Вот пара готовых текстурок на всякий случай.

__________________

Последний раз редактировалось Gregory_777; 24.09.2013 в 08:51.
Gregory_777 вне форума   Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо Gregory_777 за это полезное сообщение:
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА