Link clouds props
This commit is contained in:
parent
a914014718
commit
d8bd7f6972
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue