]> git.tdb.fi Git - libs/gl.git/commitdiff
Add a HDR option in Blender
authorMikko Rasa <tdb@tdb.fi>
Sat, 17 Apr 2021 22:07:31 +0000 (01:07 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 17 Apr 2021 22:10:56 +0000 (01:10 +0300)
blender/io_mspgl/export_scene.py
blender/io_mspgl/properties.py
blender/io_mspgl/scene.py

index fa7ca5e538150f3e1df98f2054ddcf8880609385..78ff3923c35ce59fb1b2ebe4d8783d4d18399174 100644 (file)
@@ -110,6 +110,9 @@ class SceneExporter:
                from .datafile import Resource, Statement
                seq_res = Resource(scene.name+".seq", "sequence")
 
+               if scene.use_hdr:
+                       seq_res.statements.append(Statement("hdr", True))
+
                content = scene
                if scene.background_set:
                        content = resources[scene.name+".wrapper.scene"]
@@ -120,10 +123,16 @@ class SceneExporter:
                ss.sub.append(seq_res.create_reference_statement("scene", content))
                seq_res.statements.append(ss)
 
-               # Add a colorcurve with linear response to convert into sRGB color space
-               ss = Statement("colorcurve")
-               ss.sub.append(Statement("brightness_response", 1.0))
-               ss.sub.append(Statement("srgb"))
-               seq_res.statements.append(ss)
+               if scene.use_hdr:
+                       seq_res.statements.append(Statement("bloom"))
+                       ss = Statement("colorcurve")
+                       ss.sub.append(Statement("srgb"))
+                       seq_res.statements.append(ss)
+               else:
+                       # Add a colorcurve with linear response to convert into sRGB color space
+                       ss = Statement("colorcurve")
+                       ss.sub.append(Statement("brightness_response", 1.0))
+                       ss.sub.append(Statement("srgb"))
+                       seq_res.statements.append(ss)
 
                return seq_res
index 469bc26844f7bea0f8424df45ca21e6f86ab4af1..7fad772bb4fc96669dbba5facef15df16037b1c5 100644 (file)
@@ -148,6 +148,17 @@ class MspGLLightProperties(bpy.types.Panel):
                if light.use_shadow:
                        self.layout.prop(light, "shadow_map_size")
 
+class MspGLWorldProperties(bpy.types.Panel):
+       bl_idname = "WORLD_PT_mspgl_properties"
+       bl_label = "MspGL properties"
+       bl_space_type = "PROPERTIES"
+       bl_region_type = "WINDOW"
+       bl_context = "world"
+
+       def draw(self, context):
+               world = context.scene.world
+               self.layout.prop(world, "use_hdr")
+
 class MspGLUniform(bpy.types.PropertyGroup):
        name: bpy.props.StringProperty(name="Name", description="Name of the uniform variable")
        size: bpy.props.IntProperty(name="Size", description="Number of elements in the uniform", min=1, max=4, default=4)
@@ -164,7 +175,8 @@ class MspGLUniformList(bpy.types.UIList):
                        layout.prop(uniform, "name", text="", emboss=False, icon_value=icon)
                        layout.label(text="({})".format(", ".join("{:.3f}".format(v) for v in uniform.values[:uniform.size])))
 
-classes = [MspGLSceneProperties, MspGLMeshProperties, MspGLObjectProperties, MspGLMaterialProperties, MspGLTextureNodeProperties, MspGLLightProperties, MspGLUniform, MspGLUniformList]
+classes = [MspGLSceneProperties, MspGLMeshProperties, MspGLObjectProperties, MspGLMaterialProperties,
+       MspGLTextureNodeProperties, MspGLLightProperties, MspGLWorldProperties, MspGLUniform, MspGLUniformList]
 
 def register_properties():
        for c in classes:
@@ -180,6 +192,8 @@ def register_properties():
                        ("SCENE", "Scene", "The scene will be exported"),
                        ("SEQUENCE", "Sequence", "The scene will be exported along with a rendering sequence")))
 
+       bpy.types.World.use_hdr = bpy.props.BoolProperty(name="High dynamic range", description="Use a range render target with a floating point format", default=False)
+
        bpy.types.Mesh.winding_test = bpy.props.BoolProperty(name="Winding test", description="Perform winding test to skip back faces")
        bpy.types.Mesh.smoothing = bpy.props.EnumProperty(name="Smoothing", description="Smoothing method to use", default="MSPGL",
                items=(("NONE", "None", "No smoothing"),
index 53d338cb88b05ec625e6f5b044ae99d59df19019..dac43485ae1dec825f1900fa172c0958550db833 100644 (file)
@@ -24,6 +24,10 @@ class Scene:
                self.instances = []
                self.lights = []
 
+               self.use_hdr = False
+               if scene.world:
+                       self.use_hdr = scene.world.use_hdr
+
                objects = scene.objects[:]
                objects.sort(key=lambda o:o.name)
                if obj_filter: