Add proper overbrightened 32bit2x lightmap rendering
This commit is contained in:
		
							parent
							
								
									a8b9ce8a54
								
							
						
					
					
						commit
						93488ffc65
					
				|  | @ -99,12 +99,13 @@ public partial class Mission : Node3D | ||||||
| 		if (Dump) DumpTextureList(textureList); | 		if (Dump) DumpTextureList(textureList); | ||||||
| 
 | 
 | ||||||
| 		var wr = (WorldRep)_file.Chunks["WREXT"]; | 		var wr = (WorldRep)_file.Chunks["WREXT"]; | ||||||
| 
 | 		BuildMeshes(wr.Cells, wr.DataHeader.LightmapFormat == 2); | ||||||
| 		BuildMeshes(wr.Cells); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private void BuildMeshes(WorldRep.Cell[] cells) | 	private void BuildMeshes(WorldRep.Cell[] cells, bool lmHdr) | ||||||
| 	{ | 	{ | ||||||
|  | 		GD.Print($"HDR: {lmHdr}"); | ||||||
|  | 
 | ||||||
| 		var packingRects = new List<PackingRectangle>(); | 		var packingRects = new List<PackingRectangle>(); | ||||||
| 		var surfaceDataMap = new Dictionary<int, MeshSurfaceData>(); | 		var surfaceDataMap = new Dictionary<int, MeshSurfaceData>(); | ||||||
| 		var rectDataMap = new Dictionary<int, LightmapRectData>(); | 		var rectDataMap = new Dictionary<int, LightmapRectData>(); | ||||||
|  | @ -151,7 +152,7 @@ public partial class Mission : Node3D | ||||||
| 
 | 
 | ||||||
| 			var mesh = new ArrayMesh(); | 			var mesh = new ArrayMesh(); | ||||||
| 			mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, surface.BuildSurfaceArray()); | 			mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, surface.BuildSurfaceArray()); | ||||||
| 			mesh.SurfaceSetMaterial(0, BuildMaterial(albedoTexture, lightmapTexture)); | 			mesh.SurfaceSetMaterial(0, BuildMaterial(albedoTexture, lightmapTexture, lmHdr)); | ||||||
| 
 | 
 | ||||||
| 			var meshInstance = new MeshInstance3D { Mesh = mesh }; | 			var meshInstance = new MeshInstance3D { Mesh = mesh }; | ||||||
| 			AddChild(meshInstance); | 			AddChild(meshInstance); | ||||||
|  | @ -362,11 +363,12 @@ public partial class Mission : Node3D | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	const string MATERIAL_PATH = "res://project/materials/base.tres"; | 	const string MATERIAL_PATH = "res://project/materials/base.tres"; | ||||||
| 	private static Material BuildMaterial(Texture albedoTexture, Texture lightmapTexture) | 	private static Material BuildMaterial(Texture albedoTexture, Texture lightmapTexture, bool lmHdr) | ||||||
| 	{ | 	{ | ||||||
| 		var material = ResourceLoader.Load<ShaderMaterial>(MATERIAL_PATH).Duplicate() as ShaderMaterial; | 		var material = ResourceLoader.Load<ShaderMaterial>(MATERIAL_PATH).Duplicate() as ShaderMaterial; | ||||||
| 		material.SetShaderParameter("texture_albedo", albedoTexture); | 		material.SetShaderParameter("texture_albedo", albedoTexture); | ||||||
| 		material.SetShaderParameter("lightmap_albedo", lightmapTexture); | 		material.SetShaderParameter("lightmap_albedo", lightmapTexture); | ||||||
|  | 		material.SetShaderParameter("lightmap_2x", lmHdr); | ||||||
| 		return material; | 		return material; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -5,7 +5,7 @@ code = "shader_type spatial; | ||||||
| render_mode blend_mix,depth_draw_opaque,cull_back,unshaded; | render_mode blend_mix,depth_draw_opaque,cull_back,unshaded; | ||||||
| uniform sampler2D texture_albedo : filter_linear_mipmap_anisotropic,repeat_enable; | uniform sampler2D texture_albedo : filter_linear_mipmap_anisotropic,repeat_enable; | ||||||
| uniform sampler2D lightmap_albedo : filter_linear_mipmap_anisotropic,repeat_enable; | uniform sampler2D lightmap_albedo : filter_linear_mipmap_anisotropic,repeat_enable; | ||||||
| uniform float lightmap_modulation; | uniform bool lightmap_2x; | ||||||
| 
 | 
 | ||||||
| float srgb_to_linear_e(float input) { | float srgb_to_linear_e(float input) { | ||||||
| 	float output; | 	float output; | ||||||
|  | @ -28,7 +28,10 @@ vec3 srgb_to_linear(vec3 input) { | ||||||
| 
 | 
 | ||||||
| void fragment() { | void fragment() { | ||||||
| 	vec4 albedo_tex = texture(texture_albedo,UV); | 	vec4 albedo_tex = texture(texture_albedo,UV); | ||||||
| 	vec4 lightmap_tex = texture(lightmap_albedo,UV2) * lightmap_modulation; | 	vec4 lightmap_tex = texture(lightmap_albedo,UV2); | ||||||
|  | 	if (lightmap_2x) { | ||||||
|  | 		lightmap_tex *= 2.0f; | ||||||
|  | 	} | ||||||
| 	ALBEDO = srgb_to_linear((albedo_tex * lightmap_tex).rgb); | 	ALBEDO = srgb_to_linear((albedo_tex * lightmap_tex).rgb); | ||||||
| } | } | ||||||
| " | " | ||||||
|  | @ -36,4 +39,4 @@ void fragment() { | ||||||
| [resource] | [resource] | ||||||
| render_priority = 0 | render_priority = 0 | ||||||
| shader = SubResource("Shader_eumy4") | shader = SubResource("Shader_eumy4") | ||||||
| shader_parameter/lightmap_modulation = 1.0 | shader_parameter/lightmap_2x = null | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue