Link clouds props

This commit is contained in:
luboslenco 2019-04-26 09:58:20 +02:00
parent a914014718
commit d8bd7f6972
4 changed files with 24 additions and 30 deletions

View file

@ -81,28 +81,28 @@ float sampleCloudDensity(vec3 p) {
}
vec3 traceClouds(vec3 sky, vec3 dir) {
const int steps = 24;
const float step_size = 0.5 / float(steps);
const float step_size = 0.5 / float(cloudsSteps);
float T = 1.0;
vec4 C = vec4(0.0);
vec2 uv = dir.xy / dir.z * 0.4 + cloudsWind * time * 0.1;
float C = 0.0;
float A = 0.0;
vec2 uv = dir.xy / dir.z * 0.4 * cloudsLower + cloudsWind * time * 0.02;
for (int i = 0; i < steps; ++i) {
float h = float(i) / float(steps);
for (int i = 0; i < cloudsSteps; ++i) {
float h = float(i) / float(cloudsSteps);
float d = sampleCloudDensity(vec3(uv * 0.04, h));
float Ti = exp(-d * step_size);
C.a += (1.0 - Ti) * (1.0 - C.a);
A += (1.0 - Ti) * (1.0 - A);
if (d > 0) {
T *= Ti;
if (T < 0.01) break;
C.rgb += T * exp(h) * d * step_size * 0.6;
C += T * exp(h) * d * step_size * 0.6 * cloudsPrecipitation;
}
if (C.a > 1.0) break;
uv += (dir.xy / dir.z) * step_size;
if (A > 1.0) break;
uv += (dir.xy / dir.z) * step_size * cloudsUpper;
}
C.a = clamp(C.a, 0.00001, 1);
return mix(sky, C.rgb / C.a, C.a);
A = clamp(A, 0.00001, 1);
return mix(sky, vec3(C) / A, A);
}
#endif // _EnvClouds

View file

@ -399,14 +399,12 @@ class ArmRPListItem(bpy.types.PropertyGroup):
arm_voxelgi_range: FloatProperty(name="Range", description="Maximum range", default=2.0, update=assets.invalidate_shader_cache)
arm_voxelgi_aperture: FloatProperty(name="Aperture", description="Cone aperture for shadow trace", default=1.0, update=assets.invalidate_shader_cache)
arm_sss_width: FloatProperty(name="Width", description="SSS blur strength", default=1.0, update=assets.invalidate_shader_cache)
arm_clouds_density: FloatProperty(name="Density", default=1.0, min=0.0, max=1.0, update=assets.invalidate_shader_cache)
arm_clouds_size: FloatProperty(name="Size", default=1.0, min=0.0, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_lower: FloatProperty(name="Lower", default=2.0, min=1.0, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_upper: FloatProperty(name="Upper", default=3.5, min=1.0, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_wind: FloatVectorProperty(name="Wind", default=[0.2, 0.06], size=2, update=assets.invalidate_shader_cache)
arm_clouds_secondary: FloatProperty(name="Secondary", default=0.0, min=0.0, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_precipitation: FloatProperty(name="Precipitation", default=1.0, min=0.0, max=2.0, update=assets.invalidate_shader_cache)
arm_clouds_eccentricity: FloatProperty(name="Eccentricity", default=0.6, min=0.0, max=1.0, update=assets.invalidate_shader_cache)
arm_clouds_lower: FloatProperty(name="Lower", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_upper: FloatProperty(name="Upper", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_wind: FloatVectorProperty(name="Wind", default=[1.0, 0.0], size=2, update=assets.invalidate_shader_cache)
arm_clouds_secondary: FloatProperty(name="Secondary", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_precipitation: FloatProperty(name="Precipitation", default=1.0, min=0.1, max=10.0, update=assets.invalidate_shader_cache)
arm_clouds_steps: IntProperty(name="Steps", default=24, min=1, max=240, update=assets.invalidate_shader_cache)
arm_ocean_base_color: FloatVectorProperty(name="Base Color", size=3, default=[0.1, 0.19, 0.37], subtype='COLOR', min=0, max=1, update=assets.invalidate_shader_cache)
arm_ocean_water_color: FloatVectorProperty(name="Water Color", size=3, default=[0.6, 0.7, 0.9], subtype='COLOR', min=0, max=1, update=assets.invalidate_shader_cache)
arm_ocean_level: FloatProperty(name="Level", default=0.0, update=assets.invalidate_shader_cache)

View file

@ -880,14 +880,12 @@ class ARM_PT_RenderPathWorldPanel(bpy.types.Panel):
layout.prop(rpdat, 'arm_clouds')
col = layout.column()
col.enabled = rpdat.arm_clouds
col.prop(rpdat, 'arm_clouds_density')
col.prop(rpdat, 'arm_clouds_size')
col.prop(rpdat, 'arm_clouds_lower')
col.prop(rpdat, 'arm_clouds_upper')
col.prop(rpdat, 'arm_clouds_precipitation')
col.prop(rpdat, 'arm_clouds_eccentricity')
col.prop(rpdat, 'arm_clouds_secondary')
col.prop(rpdat, 'arm_clouds_wind')
col.prop(rpdat, 'arm_clouds_steps')
layout.prop(rpdat, "rp_ocean")
col = layout.column()
col.enabled = rpdat.rp_ocean

View file

@ -455,14 +455,12 @@ const int shadowmapCascades = """ + str(rpdat.rp_shadowmap_cascades) + """;
""")
if rpdat.arm_clouds:
f.write(
"""const float cloudsDensity = """ + str(round(rpdat.arm_clouds_density * 100) / 100) + """;
const float cloudsSize = """ + str(round(rpdat.arm_clouds_size * 100) / 100) + """;
const float cloudsLower = """ + str(round(rpdat.arm_clouds_lower * 1000)) + """;
const float cloudsUpper = """ + str(round(rpdat.arm_clouds_upper * 1000)) + """;
const vec2 cloudsWind = vec2(""" + str(round(rpdat.arm_clouds_wind[0] * 1000) / 1000) + """, """ + str(round(rpdat.arm_clouds_wind[1] * 1000) / 1000) + """);
const float cloudsSecondary = """ + str(round(rpdat.arm_clouds_secondary * 100) / 100) + """;
"""const float cloudsLower = """ + str(round(rpdat.arm_clouds_lower * 100) / 100) + """;
const float cloudsUpper = """ + str(round(rpdat.arm_clouds_upper * 100) / 100) + """;
const vec2 cloudsWind = vec2(""" + str(round(rpdat.arm_clouds_wind[0] * 100) / 100) + """, """ + str(round(rpdat.arm_clouds_wind[1] * 100) / 100) + """);
const float cloudsPrecipitation = """ + str(round(rpdat.arm_clouds_precipitation * 100) / 100) + """;
const float cloudsEccentricity = """ + str(round(rpdat.arm_clouds_eccentricity * 100) / 100) + """;
const float cloudsSecondary = """ + str(round(rpdat.arm_clouds_secondary * 100) / 100) + """;
const int cloudsSteps = """ + str(rpdat.arm_clouds_steps) + """;
""")
if rpdat.rp_ocean:
f.write(