В 2021 году в War Thunder проводилось первоапрельское событие под названием «Чудесные виражи», главной особенностью которого были не только фурри-пилоты, но и мультяшная графика, или, как её по-научному называют, cel-shading. После завершения события весь контент, включая самолёты и локацию, были безвозвратно вырезаны из клиента игры. Но сам эффект всё ещё можно включить.
По классике, сразу ограничения:
- Никакого мультиплеера.
- За графику отвечает не файл миссии, а файл локации, поэтому работать эффект будет только на пользовательских локациях.
- Шейдер работает некорректно для всех юнитов, кроме авиации и вертолётов.
Чтобы включить шейдер, нужно открыть файл пользовательской локации, например location_sample.blk, и добавить к нему следующий блок:
shader_vars{
//water_wind 4 0.4 0.4
max_river_width:r=1500
ocean_density:r=0.4
river_density:r=1
toonshading:b = yes /* Конкретно вот эту строчку. */
}Опционально также можно заменить пресет погодных эффектов на кастомный:
weatherPreset:t = "gameData/environments/weather_preset_toon_stylization.blk"
И заменить скайбокс по умолчанию на скайбокс с ивента:
weatherTypes:t = "gameData/environments/weather_types_air_islands.blk"
enableApex:b = yes
mandatoryLandquality:i = 1
z_far:r = 80000
customLevelMap:t="levels\empty_location_map.jpg"
geo{
latitude:r=48
longitude:r=44
year:i=2019
month:i=6
day:i=15
}
mapCoord0:p2 = -20000, -20000 // m
mapCoord1:p2 = 20000, 20000 // m
minAreaSize:p2 = 90000, 90000 // m
aiMapCoord0:p2 = -20000, -20000 // m
aiMapCoord1:p2 = 20000, 20000 // m
numBorderCellsXPos:i = 0
numBorderCellsXNeg:i = 0
numBorderCellsZPos:i = 0
numBorderCellsZNeg:i = 0
mirrorShrinkXPos:r = 0
mirrorShrinkXNeg:r = 0
mirrorShrinkZPos:r = 0
mirrorShrinkZNeg:r = 0
water_level:r=0
levelMapAltOffset:r = 0
vsmAngleThreshold:r = 50//angle, after which vsm disabled. 5degrees - diable evening+, 9degrees - disable morning+, 40 - day+
gridSteps:p2 = 2048, 2048
weatherPreset:t = "gameData/environments/weather_preset_toon_stylization.blk"
weatherTypes:t = "gameData/environments/weather_types_air_islands.blk"
lastclip_horizon:b = yes
earth {
earthWorldEnabled:b = yes
earthWorldMin:p2 = -98304, -32768
earthWorldMax:p2 = 32752, 98304
}
micro_details{
micro_detail:t=microdetail_stone_a_tex_n*
micro_detail:t=microdetail_scan_gravel_a_tex_n*
micro_detail:t=microdetail_sand_a_tex_n*
micro_detail:t=microdetail_soil_a_tex_n*
micro_detail:t=microdetail_generic_granules_a_tex_n*
micro_detail:t=microdetail_grass_a_tex_n*
micro_detail:t=microdetail_forest_floor_a_tex_n*
micro_detail:t=microdetail_fabric_a_tex_n
micro_detail:t=microdetail_wood_b_tex_n
micro_detail:t=microdetail_metal_a_tex_n*
micro_detail:t=microdetail_snow_a_tex_n
micro_detail:t=microdetail_generic_granules_a_tex_n
land_micro_details_uv_scale:r=0.73
}
shader_vars{
//water_wind 4 0.4 0.4
max_river_width:r=1500
ocean_density:r=0.4
river_density:r=1
toonshading:b = yes
}
randomGrass{
guadalcanal_detailed_colormap:t = "guadalcanal_detailed_colormap_scatter_mask"
layer{
maskChannel:p4 = 1, 1, 1, 0
res:t ="grass_fill_a"
density:r = 4
horScale:r = 1.2
horMinScale:r = 0.5
verScale:r = 1.2
verMinScale:r = 0.5
windMul:r = 0.05
include ":/levels/grass_colors/_grass_color_fill_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 1, 0, 0, 0
res:t ="grass_reed_a"
density:r = 0.5
horScale:r = 1.2
horMinScale:r = 0.9
verScale:r = 1.2
verMinScale:r = 0.9
windMul:r = 0.05
radiusMul:r = 0.5
include ":/levels/grass_colors/_grass_color_reed_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 0, 1, 0, 0
res:t ="grass_daisies_a"
density:r = 1
horScale:r = 1.2
horMinScale:r = 0.9
verScale:r = 1.2
verMinScale:r = 0.9
windMul:r = 0.05
radiusMul:r = 0.4
include ":/levels/grass_colors/_grass_color_daisies_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 0, 0, 1, 0
res:t ="grass_heather_a"
density:r = 2
horScale:r = 1.2
horMinScale:r = 0.5
verScale:r = 1.2
verMinScale:r = 0.5
windMul:r = 0.05
radiusMul:r = 0.4
include ":/levels/grass_colors/_grass_color_heather_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 0, 1, 0, 0
res:t ="grass_tulip_a"
density:r = 4
horScale:r = 1.2
horMinScale:r = 0.5
verScale:r = 1.2
verMinScale:r = 0.5
windMul:r = 0.05
radiusMul:r = 0.4
include ":/levels/grass_colors/_grass_color_tulip_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 1, 1, 1, 0
res:t ="grass_sedge_a"
density:r = 7
horScale:r = 1.2
horMinScale:r = 0.9
verScale:r = 1
verMinScale:r = 0.5
windMul:r = 0.05
radiusMul:r = 0.6
include ":/levels/grass_colors/_grass_color_simple_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
layer{
maskChannel:p4 = 1, 1, 0, 0
res:t ="grass_simple_a"
density:r = 3
horScale:r = 1.2
horMinScale:r = 0.9
verScale:r = 1
verMinScale:r = 0.5
windMul:r = 0.05
radiusMul:r = 0.7
include ":/levels/grass_colors/_grass_color_simple_a.blk"
include ":/levels/grass_colors/_grass_color_lightness_warm.blk"
}
}
technicsSkins{
groundSkin:t = "jungle"
groundSkin:t = "default"
}
Я лично, считаю что истребители смотрелись очень неплохо с таким шейдингом. Надеюсь у вас получится найти этому применение.
- Пример локации со включённым cel-shading на Live
- Репозиторий пользователя @VitaliiAndreev, благодаря которому получилось найти недостающие настройки



