diff --git a/korman/exporter/mesh.py b/korman/exporter/mesh.py index 9812352..43e7cb4 100644 --- a/korman/exporter/mesh.py +++ b/korman/exporter/mesh.py @@ -342,6 +342,11 @@ class MeshConverter(_MeshManager): if not bm.use_shadows: geospan.props |= plGeometrySpan.kPropNoShadow + # Attach a FogEnvironment if it's non-default + fogenv = mods.fogenv.environment + if fogenv and fogenv != bpy.context.scene.world: + geospan.fogEnvironment = self._mgr.find_create_key(plFogEnvironment, bl=bo, name=fogenv.name) + # Harvest lights permaLights, permaProjs = self._exporter().light.find_material_light_keys(bo, bm) for i in permaLights: diff --git a/korman/properties/modifiers/render.py b/korman/properties/modifiers/render.py index 6debded..a7a864e 100644 --- a/korman/properties/modifiers/render.py +++ b/korman/properties/modifiers/render.py @@ -280,6 +280,39 @@ class PlasmaFadeMod(PlasmaModifierProperties): return self.fader_type == "FadeOpacity" +fog_types = { + "none": plFogEnvironment.kNoFog, + "linear": plFogEnvironment.kLinearFog, + "exp2": plFogEnvironment.kExp2Fog +} + +class PlasmaFogEnvMod(PlasmaModifierProperties): + pl_id = "fogenv" + + bl_category = "Render" + bl_label = "Fog Environment" + bl_description = "Adjust per-object fog settings" + bl_icon = "MAT_SPHERE_SKY" + + environment = PointerProperty(name="Environment", + description="Environment defining the fog settings for this object", + type=bpy.types.World) + + def export(self, exporter, bo, so): + if self.environment is None or self.environment == bpy.context.scene.world: + # Don't generate a FogEnv for the default Age FNI fog + return + + fe = exporter.mgr.find_create_object(plFogEnvironment, bl=bo, name=self.environment.name) + env = self.environment.plasma_fni + + fe.type = fog_types[env.fog_method] + fe.color = hsColorRGBA(env.fog_color.r, env.fog_color.g, env.fog_color.b, 1.0) + fe.start = env.fog_start + fe.end = env.fog_end + fe.density = env.fog_density + + class PlasmaFollowMod(idprops.IDPropObjectMixin, PlasmaModifierProperties): pl_id = "followmod" diff --git a/korman/ui/modifiers/render.py b/korman/ui/modifiers/render.py index 3ae24ac..1dd6328 100644 --- a/korman/ui/modifiers/render.py +++ b/korman/ui/modifiers/render.py @@ -168,6 +168,27 @@ def fademod(modifier, layout, context): # Warn the user that the values are not recommended. layout.label("Distance values must be equal or increasing!", icon="ERROR") +def fogenv(modifier, layout, context): + row = layout.row() + row.label("Environment") + row.template_ID(modifier, "environment", new="world.new") + + if modifier.environment: + fni = modifier.environment.plasma_fni + box = layout.box() + + split = box.split() + col = split.column() + col.prop(fni, "fog_color", text="") + + col = split.column() + col.prop(fni, "fog_method", text="") + if fni.fog_method == "linear": + col.prop(fni, "fog_start") + if fni.fog_method != "none": + col.prop(fni, "fog_end") + col.prop(fni, "fog_density") + def followmod(modifier, layout, context): layout.row().prop(modifier, "follow_mode", expand=True) layout.prop(modifier, "leader_type")