forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			58 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | #version 450 | ||
|  | 
 | ||
|  | #include "../compiled.inc" | ||
|  | 
 | ||
|  | // Include functions for gbuffer operations (packFloat2() etc.) | ||
|  | #include "../std/gbuffer.glsl" | ||
|  | 
 | ||
|  | // World-space normal from the vertex shader stage | ||
|  | in vec3 wnormal; | ||
|  | 
 | ||
|  | /* | ||
|  | 	The G-Buffer output. Deferred rendering uses the following render target layout: | ||
|  | 
 | ||
|  | 	| Index             | Needs #define   || R            | G            | B               | A                  | | ||
|  | 	+===================+=================++==============+==============+=================+====================+ | ||
|  | 	| GBUF_IDX_0        |                 || normal (XY)                 | roughness       | metallic/matID     | | ||
|  | 	+-------------------+-----------------++--------------+--------------+-----------------+--------------------+ | ||
|  | 	| GBUF_IDX_1        |                 || base color (RGB)                              | occlusion/specular | | ||
|  | 	+-------------------+-----------------++--------------+--------------+-----------------+--------------------+ | ||
|  | 	| GBUF_IDX_2        | _gbuffer2       || velocity (XY)               | ignore radiance | unused             | | ||
|  | 	+-------------------+-----------------++--------------+--------------+-----------------+--------------------+ | ||
|  | 	| GBUF_IDX_EMISSION | _EmissionShaded || emission color (RGB)                          | unused             | | ||
|  | 	+-------------------+-----------------++--------------+--------------+-----------------+--------------------+ | ||
|  | 
 | ||
|  | 	The indices as well as the GBUF_SIZE define are defined in "compiled.inc". | ||
|  | */ | ||
|  | out vec4 fragColor[GBUF_SIZE]; | ||
|  | 
 | ||
|  | void main() { | ||
|  | 	// Pack normals into 2 components to fit into the gbuffer | ||
|  | 	vec3 n = normalize(wnormal); | ||
|  | 	n /= (abs(n.x) + abs(n.y) + abs(n.z)); | ||
|  | 	n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy); | ||
|  | 
 | ||
|  | 	// Define PBR material values | ||
|  | 	vec3 basecol = vec3(1.0); | ||
|  | 	float roughness = 0.0; | ||
|  | 	float metallic = 0.0; | ||
|  | 	float occlusion = 1.0; | ||
|  | 	float specular = 1.0; | ||
|  | 	uint materialId = 0; | ||
|  | 	vec3 emissionCol = vec3(0.0); | ||
|  | 	float ior = 1.450; | ||
|  | 	float opacity = 1.0; | ||
|  | 
 | ||
|  | 	// Store in gbuffer (see layout table above) | ||
|  | 	fragColor[GBUF_IDX_0] = vec4(n.xy, roughness, packFloatInt16(metallic, materialId)); | ||
|  | 	fragColor[GBUF_IDX_1] = vec4(basecol.rgb, packFloat2(occlusion, specular)); | ||
|  | 
 | ||
|  | 	#ifdef _EmissionShaded | ||
|  | 		fragColor[GBUF_IDX_EMISSION] = vec4(emissionCol, 0.0); | ||
|  | 	#endif | ||
|  | 
 | ||
|  | 	#ifdef _SSRefraction | ||
|  | 		fragColor[GBUF_IDX_REFRACTION] = vec4(ior, opacity, 0.0, 0.0); | ||
|  | 	#endif | ||
|  | } |