50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import bpy | ||
|  | 
 | ||
|  | import lnx | ||
|  | import lnx.material.cycles as cycles | ||
|  | import lnx.material.mat_state as mat_state | ||
|  | import lnx.material.mat_utils as mat_utils | ||
|  | import lnx.material.make_mesh as make_mesh | ||
|  | import lnx.material.make_finalize as make_finalize | ||
|  | import lnx.assets as assets | ||
|  | 
 | ||
|  | if lnx.is_reload(__name__): | ||
|  | 	cycles = lnx.reload_module(cycles) | ||
|  | 	mat_state = lnx.reload_module(mat_state) | ||
|  | 	make_mesh = lnx.reload_module(make_mesh) | ||
|  | 	make_finalize = lnx.reload_module(make_finalize) | ||
|  | 	assets = lnx.reload_module(assets) | ||
|  | else: | ||
|  | 	lnx.enable_reload(__name__) | ||
|  | 
 | ||
|  | 
 | ||
|  | def make(context_id): | ||
|  |     con_refraction_buffer = mat_state.data.add_context({ 'name': context_id, 'depth_write': False, 'compare_mode': 'less', 'cull_mode': 'clockwise' }) | ||
|  | 
 | ||
|  |     lnx_discard = mat_state.material.lnx_discard | ||
|  |     blend = mat_state.material.lnx_blending | ||
|  |     parse_opacity = blend or mat_utils.is_transluc(mat_state.material) or lnx_discard | ||
|  | 
 | ||
|  |     make_mesh.make_base(con_refraction_buffer, parse_opacity) | ||
|  | 
 | ||
|  |     vert = con_refraction_buffer.vert | ||
|  |     frag = con_refraction_buffer.frag | ||
|  | 
 | ||
|  |     frag.add_out('vec4 fragColor') | ||
|  | 
 | ||
|  |     # Remove fragColor = ...; | ||
|  |     frag.main = frag.main[:frag.main.rfind('fragColor')] | ||
|  |     frag.write('\n') | ||
|  | 
 | ||
|  |     if parse_opacity: | ||
|  |         frag.write('fragColor = vec4(ior, opacity, 0.0, 1.0);') | ||
|  |     else: | ||
|  |         frag.write('fragColor = vec4(1.0, 1.0, 0.0, 1.0);') | ||
|  | 
 | ||
|  |     make_finalize.make(con_refraction_buffer) | ||
|  | 
 | ||
|  |     # assets.vs_equal(con_refract, assets.shader_cons['transluc_vert']) # shader_cons has no transluc yet | ||
|  |     # assets.fs_equal(con_refract, assets.shader_cons['transluc_frag']) | ||
|  | 
 | ||
|  |     return con_refraction_buffer |