diff options
Diffstat (limited to 'source/blender/gpu/shaders')
3 files changed, 18 insertions, 55 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_attribute.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_attribute.glsl index faf37db3ea6..2ae53b35b3f 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_attribute.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_attribute.glsl @@ -1,3 +1,17 @@ + +void node_attribute_color(vec4 attr, out vec4 out_attr) +{ + out_attr = attr_load_color_post(attr); +} + +void node_attribute_temperature(vec4 attr, out vec4 out_attr) +{ + out_attr.x = attr_load_temperature_post(attr.x); + out_attr.y = 0.0; + out_attr.z = 0.0; + out_attr.w = 1.0; +} + void node_attribute( vec4 attr, out vec4 outcol, out vec3 outvec, out float outf, out float outalpha) { diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_volume_info.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_volume_info.glsl deleted file mode 100644 index 464cf5227b4..00000000000 --- a/source/blender/gpu/shaders/material/gpu_shader_material_volume_info.glsl +++ /dev/null @@ -1,51 +0,0 @@ - -/* Uniforms to convert smoke grid values into standard range. */ -uniform vec3 volumeColor = vec3(1.0); -uniform vec2 volumeTemperature = vec2(0.0); - -/* Generic volume attribute. */ -void node_attribute_volume(sampler3D tex, mat4 transform, vec3 cos, out vec3 outvec) -{ - /* Optional per-grid transform. */ - if (transform[3][3] != 0.0) { - cos = (transform * vec4(cos, 1.0)).xyz; - } - - outvec = texture(tex, cos).rgb; -} - -/* Special color attribute for smoke. */ -void node_attribute_volume_color(sampler3D tex, mat4 transform, vec3 cos, out vec3 outvec) -{ - /* Optional per-grid transform. */ - if (transform[3][3] != 0.0) { - cos = (transform * vec4(cos, 1.0)).xyz; - } - - /* Density is premultiplied for interpolation, divide it out here. */ - vec4 value = texture(tex, cos).rgba; - if (value.a > 1e-8) { - value.rgb /= value.a; - } - - outvec = value.rgb * volumeColor; -} - -/* Special temperature attribute for smoke. */ -void node_attribute_volume_temperature(sampler3D tex, mat4 transform, vec3 cos, out float outf) -{ - /* Optional per-grid transform. */ - if (transform[3][3] != 0.0) { - cos = (transform * vec4(cos, 1.0)).xyz; - } - - float value = texture(tex, cos).r; - if (volumeTemperature.x < volumeTemperature.y) { - outf = (value > 0.01) ? - volumeTemperature.x + value * (volumeTemperature.y - volumeTemperature.x) : - 0.0; - } - else { - outf = value; - } -} diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_volume_principled.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_volume_principled.glsl index 1127c34b3ac..21c4aba0ffe 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_volume_principled.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_volume_principled.glsl @@ -10,9 +10,9 @@ void node_volume_principled(vec4 color, vec4 blackbody_tint, float temperature, float weight, - float density_attribute, + vec4 density_attribute, vec4 color_attribute, - float temperature_attribute, + vec4 temperature_attribute, sampler1DArray spectrummap, float layer, out Closure result) @@ -25,7 +25,7 @@ void node_volume_principled(vec4 color, density = max(density, 0.0); if (density > 1e-5) { - density = max(density * density_attribute, 0.0); + density = max(density * density_attribute.x, 0.0); } if (density > 1e-5) { @@ -47,7 +47,7 @@ void node_volume_principled(vec4 color, if (blackbody_intensity > 1e-3) { /* Add temperature from attribute. */ - float T = max(temperature * max(temperature_attribute, 0.0), 0.0); + float T = max(temperature * max(temperature_attribute.x, 0.0), 0.0); /* Stefan-Boltzman law. */ float T2 = T * T; |