rend3-pbr 0.2.2

PBR Render Routine for rend3
Documentation
#

�GLSL.std.450mainm�����������rend3-pbr/shaders/src/depth.vertrend3-pbr/shaders/src/structures.glsl��// OpModuleProcessed entry-point main
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed entry-point main
#line 1
#version 440

#include "structures.glsl"

// TODO: we don't need most of these
layout(location = 0) in vec3 i_position;
layout(location = 1) in vec3 i_normal;
layout(location = 2) in vec3 i_tangent;
layout(location = 3) in vec2 i_coords0;
layout(location = 4) in vec2 i_coords1;
layout(location = 5) in vec4 i_color;
layout(location = 6) in uint i_material;
#ifdef GPU_MODE
layout(location = 7) in uint i_object_idx;
#endif

layout(location = 0) out vec4 o_position;
layout(location = 1) out vec2 o_coords0;
layout(location = 2) out vec4 o_color;
layout(location = 3) flat out uint o_material;

layout(set = 1, binding = 0, std430) readonly buffer ObjectOutputDataBuffer {
    ObjectOutputData object_output[];
};
#ifdef GPU_MODE
layout(set = 2, binding = 0, std430) readonly buffer MaterialBuffer {
    GPUMaterialData materials[];
};
#endif
#ifdef CPU_MODE
layout(set = 2, binding = 10) uniform TextureData {
    CPUMaterialData material;
};
#endif

void main() {
    #ifdef GPU_MODE
    GPUMaterialData material = materials[i_material];
    #endif

    #ifdef CPU_MODE
    uint object_idx = gl_InstanceIndex;
    #else
    uint object_idx = i_object_idx;
    #endif

    ObjectOutputData data = object_output[object_idx];

    vec4 position = data.model_view_proj * vec4(i_position, 1.0);
    o_position = position;
    gl_Position = position;

    o_material = data.material_idx;

    o_color = i_color;

    o_coords0 = i_coords0;
}
�#ifndef SHADER_STRUCTURES_GLSL
#define SHADER_STRUCTURES_GLSL

struct Plane {
    vec4 inner;
};

struct Frustum {
    Plane left;
    Plane right;
    Plane top;
    Plane bottom;
// No far plane
    Plane near;
};

struct ObjectInputData {
    uint start_idx;
    uint count;
    int vertex_offset;
    uint material_idx;
    mat4 transform;
    // xyz position; w radius
    vec4 bounding_sphere;
}; 

/// If you change this struct, change the object output size in culling.rs
struct ObjectOutputData {
    mat4 model_view;
    mat4 model_view_proj;
    mat3 inv_trans_model_view;
    uint material_idx;
};

struct IndirectCall {
    uint vertex_count;
    uint instance_count;
    uint base_index;
    int vertex_offset;
    uint base_instance;
};

#define FLAGS_ALBEDO_ACTIVE       0x0001
#define FLAGS_ALBEDO_BLEND        0x0002
#define FLAGS_ALBEDO_VERTEX_SRGB  0x0004
#define FLAGS_BICOMPONENT_NORMAL  0x0008
#define FLAGS_SWIZZLED_NORMAL     0x0010
#define FLAGS_AOMR_COMBINED       0x0020
#define FLAGS_AOMR_SWIZZLED_SPLIT 0x0040
#define FLAGS_AOMR_SPLIT          0x0080
#define FLAGS_AOMR_BW_SPLIT       0x0100
#define FLAGS_CC_GLTF_COMBINED    0x0200
#define FLAGS_CC_GLTF_SPLIT       0x0400
#define FLAGS_CC_BW_SPLIT         0x0800
#define FLAGS_UNLIT               0x1000
#define FLAGS_NEAREST             0x2000

#define MATERIAL_FLAG(name) bool(material.material_flags & name)

struct GPUMaterialData {
    uint albedo_tex;
    uint normal_tex;
    uint roughness_tex;
    uint metallic_tex;
    // -- 16 --
    uint reflectance_tex;
    uint clear_coat_tex;
    uint clear_coat_roughness_tex;
    uint emissive_tex;
    // -- 16 --
    uint anisotropy_tex;
    uint ambient_occlusion_tex;
    uint _padding0;
    uint _padding1;
    
    // -- 16 --

    mat3 uv_transform0;
    // -- 16 --
    mat3 uv_transform1;
    // -- 16 --
    vec4 albedo;
    // -- 16 --
    vec3 emissive;
    float roughness;
    // -- 16 --
    float metallic;
    float reflectance;
    float clear_coat;
    float clear_coat_roughness;
    // -- 16 --
    float anisotropy;
    float ambient_occlusion;
    float alpha_cutout;
    uint material_flags;
};

struct CPUMaterialData {
    mat3 uv_transform0;
    // -- 16 --
    mat3 uv_transform1;
    // -- 16 --
    vec4 albedo;
    // -- 16 --
    vec3 emissive;
    float roughness;
    // -- 16 --
    float metallic;
    float reflectance;
    float clear_coat;
    float clear_coat_roughness;
    // -- 16 --
    float anisotropy;
    float ambient_occlusion;
    float alpha_cutout;
    uint material_flags;
    
    // -- 16 --
    uint texture_enable;
};

struct UniformData {
    mat4 view;
    mat4 view_proj;
    mat4 inv_view;
    mat4 inv_origin_view_proj;
    Frustum frustum;
    vec4 ambient;
};

struct DirectionalLightBufferHeader {
    uint total_lights;
};

struct DirectionalLight {
    mat4 view_proj;
    vec3 color;
    vec3 direction;
};

#endif

GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemaini_materialmi_object_idxsObjectOutputDatasmodel_viewsmodel_view_proj	sinv_trans_model_viewsmaterial_idxuObjectOutputDataBufferuobject_outputw�i_position�o_position�gl_PerVertex�gl_Position�gl_PointSize�gl_ClipDistance��o_material�o_color�i_color�o_coords0�i_coords0�i_normal�i_tangent�i_coords1GGmHsHs#HsHsHs#@HsHsHs#�HsHs#�Gt�HuHu#GuGw"Gw!G�G�H�H�H�G�G�G�G�G�G�G�G�G�G�! 	 
	
	 + ;;mosootsut vu;vw ys �
;��+	��? �;��+��	��	� ��;�� �;��;�� �;���	 ��;�� ��;��;��;��;�� �o �+�6�,=nm/Ayzwn=A��z�=o��A��z�=��1=
��Q	��Q	��Q	��P���������2>��3A���>��5>��7=��>��9=���>���8