diff options
author | OmarSquircleArt <omar.squircleart@gmail.com> | 2019-08-21 21:22:24 +0300 |
---|---|---|
committer | OmarSquircleArt <omar.squircleart@gmail.com> | 2019-08-21 21:22:24 +0300 |
commit | e83f0922011243a0085975fe41930ed34bb6c009 (patch) | |
tree | d8708217ccd31e26799b49b1a8678c6eceaa979d /source/blender/gpu | |
parent | 133dfdd704b6a2a4d46337696773b331a44304ea (diff) |
Shading: Add Volume Info node.
The Volume Info node provides the Color, Desnity, Flame, and Temperature
of smoke domains.
Reviewers: brecht
Differential Revision: https://developer.blender.org/D5551
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index df8f9d9457c..5ec24ec7086 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2322,6 +2322,35 @@ void node_attribute_volume_temperature( outcol = vec4(outf, outf, outf, 1.0); } +void node_volume_info(sampler3D densitySampler, + sampler3D flameSampler, + vec2 temperature, + out vec4 outColor, + out float outDensity, + out float outFlame, + out float outTemprature) +{ +#if defined(MESH_SHADER) && defined(VOLUMETRICS) + vec3 p = volumeObjectLocalCoord; +#else + vec3 p = vec3(0.0); +#endif + + vec4 density = texture(densitySampler, p); + outDensity = density.a; + + /* Density is premultiplied for interpolation, divide it out here. */ + if (density.a > 1e-8) { + density.rgb /= density.a; + } + outColor = vec4(density.rgb * volumeColor, 1.0); + + float flame = texture(flameSampler, p).r; + outFlame = flame; + + outTemprature = (flame > 0.01) ? temperature.x + flame * (temperature.y - temperature.x) : 0.0; +} + void node_attribute(vec3 attr, out vec4 outcol, out vec3 outvec, out float outf) { outcol = vec4(attr, 1.0); |