В 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, благодаря которому получилось найти недостающие настройки