More tonemapping
This commit is contained in:
parent
39da6198ec
commit
6f8fa8ece0
|
@ -235,13 +235,24 @@ void main() {
|
|||
col.rgb *= compoExposureStrength;
|
||||
#endif
|
||||
|
||||
#ifdef _CTonemap
|
||||
col.rgb = tonemapUncharted2(col.rgb);
|
||||
// col.rgb = tonemapFilmic(col.rgb); // With gamma
|
||||
#ifdef _CToneFilmic
|
||||
col.rgb = tonemapFilmic(col.rgb); // With gamma
|
||||
#endif
|
||||
|
||||
// To gamma
|
||||
#ifdef _CToneFilmic2
|
||||
col.rgb = acesFilm(col.rgb);
|
||||
col.rgb = pow(col.rgb, vec3(1.0 / 2.2));
|
||||
#endif
|
||||
#ifdef _CToneReinhard
|
||||
col.rgb = tonemapReinhard(col.rgb);
|
||||
col.rgb = pow(col.rgb, vec3(1.0 / 2.2));
|
||||
#endif
|
||||
#ifdef _CToneUncharted
|
||||
col.rgb = tonemapUncharted2(col.rgb);
|
||||
col.rgb = pow(col.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
#endif
|
||||
#ifdef _CToneNone
|
||||
col.rgb = pow(col.rgb, vec3(1.0 / 2.2)); // To gamma
|
||||
#endif
|
||||
|
||||
#ifdef _CBW
|
||||
// col.rgb = vec3(clamp(dot(col.rgb, col.rgb), 0.0, 1.0));
|
||||
|
|
|
@ -23,6 +23,16 @@ vec3 tonemapFilmic(const vec3 color) {
|
|||
return (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06);
|
||||
}
|
||||
|
||||
// https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
|
||||
vec3 acesFilm(const vec3 x) {
|
||||
const float a = 2.51;
|
||||
const float b = 0.03;
|
||||
const float c = 2.43;
|
||||
const float d = 0.59;
|
||||
const float e = 0.14;
|
||||
return clamp((x * (a * x + b)) / (x * (c * x + d ) + e), 0.0, 1.0);
|
||||
}
|
||||
|
||||
vec3 tonemapReinhard(const vec3 color) {
|
||||
return color / (color + vec3(1.0));
|
||||
}
|
||||
|
|
|
@ -11,9 +11,6 @@ def parse_defs(node_group):
|
|||
parse_defs.defs = []
|
||||
build_node(node_group, nodes.get_input_node(node_group, rn, 0))
|
||||
|
||||
# Always include tonemap for now
|
||||
add_def('_CompoTonemap')
|
||||
|
||||
# To string
|
||||
s = ''
|
||||
for d in parse_defs.defs:
|
||||
|
|
|
@ -232,6 +232,7 @@ def make_draw_compositor(stage, node_group, node, with_fxaa=False):
|
|||
wrd = bpy.data.worlds['Arm']
|
||||
world_defs = wrd.world_defs + wrd.rp_defs
|
||||
compositor_defs = make_compositor.parse_defs(bpy.data.scenes[0].node_tree) # Thrown in scene 0 for now
|
||||
compositor_defs += '_CTone' + wrd.generate_tonemap
|
||||
# Additional compositor flags
|
||||
compo_depth = False # Read depth
|
||||
# compo_pos = False # Construct position from depth
|
||||
|
|
|
@ -418,6 +418,13 @@ def init_properties():
|
|||
bpy.types.World.generate_fog_color = bpy.props.FloatVectorProperty(name="Color", size=3, subtype='COLOR', default=[0.5, 0.6, 0.7], update=assets.invalidate_shader_cache)
|
||||
bpy.types.World.generate_fog_amounta = bpy.props.FloatProperty(name="Amount A", default=0.25, update=assets.invalidate_shader_cache)
|
||||
bpy.types.World.generate_fog_amountb = bpy.props.FloatProperty(name="Amount B", default=0.5, update=assets.invalidate_shader_cache)
|
||||
bpy.types.World.generate_tonemap = EnumProperty(
|
||||
items=[('None', 'None', 'None'),
|
||||
('Filmic', 'Filmic', 'Filmic'),
|
||||
('Filmic2', 'Filmic2', 'Filmic2'),
|
||||
('Reinhard', 'Reinhard', 'Reinhard'),
|
||||
('Uncharted', 'Uncharted', 'Uncharted')],
|
||||
name='Tonemap', description='Tonemapping operator', default='Filmic', update=assets.invalidate_shader_cache)
|
||||
# Skin
|
||||
bpy.types.World.generate_gpu_skin = bpy.props.BoolProperty(name="GPU Skinning", description="Calculate skinning on GPU", default=True, update=assets.invalidate_shader_cache)
|
||||
bpy.types.World.generate_gpu_skin_max_bones = bpy.props.IntProperty(name="Max Bones", default=50, min=1, max=84, update=assets.invalidate_shader_cache)
|
||||
|
|
|
@ -341,20 +341,21 @@ class WorldPropsPanel(bpy.types.Panel):
|
|||
if wrd.generate_radiance_sky:
|
||||
layout.prop(wrd, 'generate_radiance_sky_type')
|
||||
|
||||
# layout.separator()
|
||||
layout.separator()
|
||||
# TODO: migrate to compositor
|
||||
# layout.label('Compositor')
|
||||
# layout.prop(wrd, 'generate_letterbox')
|
||||
# if wrd.generate_letterbox:
|
||||
# layout.prop(wrd, 'generate_letterbox_size')
|
||||
# layout.prop(wrd, 'generate_grain')
|
||||
# if wrd.generate_grain:
|
||||
# layout.prop(wrd, 'generate_grain_strength')
|
||||
# layout.prop(wrd, 'generate_fog')
|
||||
# if wrd.generate_fog:
|
||||
# layout.prop(wrd, 'generate_fog_color')
|
||||
# layout.prop(wrd, 'generate_fog_amounta')
|
||||
# layout.prop(wrd, 'generate_fog_amountb')
|
||||
layout.label('Compositor (deprecated)')
|
||||
layout.prop(wrd, 'generate_tonemap')
|
||||
layout.prop(wrd, 'generate_letterbox')
|
||||
if wrd.generate_letterbox:
|
||||
layout.prop(wrd, 'generate_letterbox_size')
|
||||
layout.prop(wrd, 'generate_grain')
|
||||
if wrd.generate_grain:
|
||||
layout.prop(wrd, 'generate_grain_strength')
|
||||
layout.prop(wrd, 'generate_fog')
|
||||
if wrd.generate_fog:
|
||||
layout.prop(wrd, 'generate_fog_color')
|
||||
layout.prop(wrd, 'generate_fog_amounta')
|
||||
layout.prop(wrd, 'generate_fog_amountb')
|
||||
|
||||
class ArmoryPlayerPanel(bpy.types.Panel):
|
||||
bl_label = "Armory Player"
|
||||
|
|
Loading…
Reference in a new issue