You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			GDScript
		
	
| 
											2 years ago
										 | var properties = null; | ||
|  | var material: StandardMaterial3D = null; | ||
|  | 
 | ||
|  | var type: | ||
|  | 	get: | ||
|  | 		return properties.get("_type", "diffuse"); | ||
|  | 
 | ||
|  | var weight: | ||
|  | 	get: | ||
|  | 		return float(properties.get("_weight", 0)); | ||
|  | 
 | ||
|  | var specular: | ||
|  | 	get: | ||
|  | 		return float(properties.get("spec")); | ||
|  | 
 | ||
|  | var roughness: | ||
|  | 	get: | ||
|  | 		return float(properties.get("rough")); | ||
|  | 
 | ||
|  | var flux: | ||
|  | 	get: | ||
|  | 		return float(properties.get("flux")); | ||
|  | 
 | ||
|  | var refraction: | ||
|  | 	get: | ||
|  | 		return float(properties.get("ior")); | ||
|  | 
 | ||
|  | func _init(properties): | ||
|  | 	self.properties = properties; | ||
|  | 
 | ||
|  | func is_glass(): | ||
|  | 	return self.type == "_glass"; | ||
|  | 
 | ||
|  | func get_material(color: Color): | ||
|  | 	if (material != null): return material; | ||
|  | 	 | ||
|  | 	material = StandardMaterial3D.new(); | ||
|  | 	material.vertex_color_is_srgb = true; | ||
|  | 	material.vertex_color_use_as_albedo = true; | ||
|  | 	 | ||
|  | 	match (self.type): | ||
|  | 		"_metal": | ||
|  | 			material.metallic = self.weight; | ||
|  | 			material.metallic_specular = self.specular; | ||
|  | 			material.roughness = self.roughness; | ||
|  | 		"_emit": | ||
|  | 			material.emission_enabled = true; | ||
|  | 			material.emission = Color(color.r, color.g, color.b, self.weight); | ||
|  | 			material.emission_energy = self.flux; | ||
|  | 		"_glass": | ||
|  | 			material.flags_transparent = true; | ||
|  | 			material.albedo_color = Color(1, 1, 1, 1 - self.weight); | ||
|  | 			material.refraction_enabled = true; | ||
|  | 			material.refraction_scale = self.refraction * 0.01; | ||
|  | 			material.roughness = self.roughness; | ||
|  | 		"_diffuse", _: | ||
|  | 			material.roughness = 1; | ||
|  | 	return material; |