Jump to content

Ultimate Sky and Clouds lua script


Recommended Posts

I have tried several lua scripts to get my Xplane11 environment the way I like it, but I wanted to consolidate all of them with my modifications into one script that uses the default Xplane11 sky and cloud bitmaps and maximized performance on systems with low VRAM, like mine, which only has 3GB VRAM below I am pasting the result for forum members and Xplane11 simmers. I have uploaded the same script to the Flightsim.com file library, but it has not been posted there yet, so I am also making it available here. I have used the coding and logic suggested by the lua experts, but I found some challenges, especially cloud shadows that were too faint.


I have corrected those challenges, and also have changed the haze settings to be less sharp at a distance, closer to an average flight world wide rather than a flight with pristine conditions. I am also including a link to an almost 30 minute youtube video I made on 9-26-19 to show how the environment looked on the quite stormy day we had in Arizona yesterday, with building mesocyclones, one of which I almost got nailed by as I was walking home with my arms full of groceries--the heavy rain and thunder you will hear reported in the ATC background swept in from east of Sky Harbor and hit my part of the city hard, for a full week of Hurricane Lorena leftovers including a Tornado Monday night.




--Hello! Welcome to John Cillis's combined lua tweaks! It's pretty extensive, so it may conflict with similar luas, that is why I have made it one script. Please scroll down and have a read, there's some important notes to be had shared by other lua experts:


--Add -- before set( to disable effects


--Go down to the DSF section for an important note for anyone using VR!



--overdraw_control affects how many clouds are drawn. Higher numbers mean less cloud puffs but better performance.

--plot_radius affects size of cloud puffs, reduce this if you encounter clipping issues. My personal sweet spot is 1.25

--Suggested overdraw_control value is 0.5, will give you more puffs than default, and should cost less in performance than the initial value

--Lua was designed around the Default XP11 Clouds, your mileage may vary with different textures

--Custom Values for cloud type start at 3 and end at 5, default has first res set at 0


set( "sim/private/controls/clouds/ambient_gain", 1.155)

set( "sim/private/controls/clouds/diffuse_gain", 0.8)

set( "sim/private/controls/clouds/first_res_3d", 3)

set( "sim/private/controls/clouds/last_res_3d", 5)

set( "sim/private/controls/clouds/overdraw_control", 0.5)

set( "sim/private/controls/clouds/plot_radius", 1.5)

set( "sim/private/controls/clouds/cloud_shadow_lighten_ratio", .99)

set( "sim/private/controls/clouds/shad_radius", 1.0)

set( "sim/private/controls/clouds/limit_far", 0.1)

set( "sim/private/controls/clouds/shadow_size", 4096)

set("sim/private/controls/shadow/cockpit_near_adjust", 2.0)

set("sim/private/controls/shadow/cockpit_near_proxy", 2.0)



--I've honestly forgotten what this does, but if you toy around with it I'm sure you'll be able to find out.

--I think the default value for the first is 13? I wrote this part a fair while back, but I believe it has something to do with the fullness of the colours, I.E a less thin horizon, for instance.


set( "sim/private/controls/atmo/atmo_scale_raleigh", 10)

set( "sim/private/controls/atmo/inscatter_gain_raleigh", 2)



--Higher Number = More Fog, contrary to the name of the value


set( "sim/private/controls/fog/fog_be_gone", 0.8)



--Controls distance cars are visible and...Don't know what lod_hdr does, but it saved me frames being lower and I saw no visible difference.

--Default value for both is 20000


set( "sim/private/controls/cars/lod_min", 7000.000000)

set( "sim/private/controls/cars/lod_hdr", 2000.000000)



--The first value controls the minimum view distance of the Distant Scenery textures.

--These settings below have a small performance impact in particular. If your FPS is hit, lower the min_dsf_vis_ever value. Default is 20000

--If you have a VR setup, it would be wise to comment out the first value, as others reported issues when it was active.



set( "sim/private/controls/skyc/min_dsf_vis_ever", 15000)

set( "sim/private/controls/skyc/max_dsf_vis_ever", 100000)

set( "sim/private/controls/skyc/dsf_fade_ratio", 0.75)

set( "sim/private/controls/skyc/dsf_cutover_scale", 1)



--Controls the angle shadows are visible. Not typically necessary as lots of people use shadow tweaks already. Add a -- in front of both of the settings if you are one of those people. Default values are 15 and 5 respectively

--The Cam size controls shadow resolution, may affect FPS. Disable to get more jaggy shadows but possibly more performance


set( "sim/private/controls/skyc/max_shadow_angle",-89)

set( "sim/private/controls/skyc/min_shadow_angle",-90)

set( "sim/private/controls/fbo/shadow_cam_size", 8192)


--White Out Inside Clouds

--This is seperate because I haven't tested this value enough yet. It seems to work fine, and visibility changes appear to still happen regularly going through many cloud layers, but there could be unforseen issues. If there are any, leave a comment on the .org or PM me on X-Pilot


set( "sim/private/controls/skyc/white_out_in_clouds", 0)


--X-Visibility Plugin

--For X-Plane 11.25+

--Developed by: ChinNoobonic & SNowblind7

xvis_version = "1.0.2"

xvis_build = "2018-09-23"



xvis_plugin_on = true --enable plugin

xvis_debug_info = false --show debug info

xvis_atmoTop_visibility = 30480 --elevation to apply the max visibility, default is 30480 m

xvis_minFog_value = 0.6 --minimum fog value. Recommending values 0.0-1.0, default is 0.6

xvis_atmoTop_Fog = 1.5 --fog value after passing atmoTop_visibility

xvis_highAltFogMult = 1 --reduce to 0.5 or 0.25 if you feel the haze at higher altitude is too strong, default is 1



--INTERNAL VARIABLES (Don´t change!)

dataref("gnd_imm_max","sim/private/controls/skyc/gnd_imm_max", "writable")

dataref("lit_imm_max","sim/private/controls/skyc/lit_imm_max", "writable")

dataref("lit_imm_min","sim/private/controls/skyc/lit_imm_min", "writable")

dataref("sky_imm_max","sim/private/controls/skyc/sky_imm_max", "writable")

dataref("sky_imm_min","sim/private/controls/skyc/sky_imm_min", "writable")

dataref("cld_imm_max","sim/private/controls/skyc/cld_imm_max", "writable")

dataref("cld_imm_min","sim/private/controls/skyc/cld_imm_min", "writable")

dataref("visibility_reported_m","sim/weather/visibility_reported_m", "readonly")


dataref("view_y_meters", "sim/graphics/view/view_y", "readonly", 0)

dataref("fog_be_gone", "sim/private/controls/fog/fog_be_gone", "writable")

dataref("vis_graphical","sim/private/stats/skyc/fog/far_fog_cld", "readonly")


gnd_imm_max = 20

cld_imm_max = -1

cld_imm_min = 0

local fog_threshold = 1



function change_visbility()

if xvis_plugin_on then


local fog_Ratio = (vis_graphical * xvis_highAltFogMult)/visibility_reported_m


if xvis_minFog_value > fog_threshold then

fog_threshold = xvis_minFog_value



if visibility_reported_m >= 9000 then

sky_imm_max = -1

sky_imm_min = 0

lit_imm_max = 1

lit_imm_min = 0

elseif visibility_reported_m

sky_imm_max = 20

sky_imm_min = -2

lit_imm_max = -1

lit_imm_min = -34



if fog_Ratio > fog_threshold+0.1 and view_y_meters

if fog_be_gone

fog_be_gone = fog_be_gone + realFrame_time * fog_Ratio


fog_be_gone = fog_Ratio


elseif math.floor(view_y_meters+.5) >= xvis_atmoTop_visibility then

if fog_be_gone >= xvis_atmoTop_Fog+0.1 then

fog_be_gone = fog_be_gone - realFrame_time * fog_be_gone


fog_be_gone = xvis_atmoTop_Fog



if fog_be_gone >= xvis_minFog_value+0.1 then

fog_be_gone = fog_be_gone - realFrame_time * fog_be_gone


fog_be_gone = xvis_minFog_value








function draw_debug()

local infoBox_x = 40

local infoBox_y = 600

local line_pos = 0

graphics.set_color( 1, 1, 0)


line_pos = line_pos-12

draw_string_Helvetica_12( infoBox_x, infoBox_y+line_pos, "reported_vis:" .. visibility_reported_m )

line_pos = line_pos-12

draw_string_Helvetica_12( infoBox_x, infoBox_y+line_pos, "calculated_vis:" .. vis_graphical )

line_pos = line_pos-12

draw_string_Helvetica_12( infoBox_x, infoBox_y+line_pos, "fog_be_gone:" .. fog_be_gone )

line_pos = line_pos-12

draw_string_Helvetica_12( infoBox_x, infoBox_y+line_pos, "view_y_meters:" .. view_y_meters )



if xvis_debug_info then






Ultimate Sky and Clouds Environment.txt

Link to comment
Share on other sites

  • 4 weeks later...
Looks Like a pretty good script. Will give it a try.

Intel i-9 13900KF @ 6.0 Ghz Cpu, MSI RTX 4090 Suprim Liquid X 24GB Videocard, MSI MAG CORELIQUID C360 Water Cooler, MSI Z790 A-PRO WIFI Motherboard, MSI MPG A1000G 1000W Power Supply, G.SKILL 48Gb Ram @76000 MHz DDR5 Ram, MSI SPATIUM M480 PCIe 4.0 NVMe M.2 2TB Drive, Windows 11 Pro Ghost Spectre x64


Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...