Add light size to Sky Shaders
This commit is contained in:
parent
30ab5c9baa
commit
7cd2ff309c
8 changed files with 44 additions and 53 deletions
|
|
@ -1784,6 +1784,7 @@ void RasterizerSceneHighEndRD::_setup_lights(RID *p_light_cull_result, int p_lig
|
|||
sky_light_data.color[2] = light_data.color[2];
|
||||
|
||||
sky_light_data.enabled = true;
|
||||
sky_light_data.size = light_data.softshadow_angle;
|
||||
sky_scene_state.directional_light_count++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -655,7 +655,8 @@ void RasterizerSceneRD::_setup_sky(RID p_environment, const Vector3 &p_position,
|
|||
sky_scene_state.directional_lights[i].color[0] != sky_scene_state.last_frame_directional_lights[i].color[0] ||
|
||||
sky_scene_state.directional_lights[i].color[1] != sky_scene_state.last_frame_directional_lights[i].color[1] ||
|
||||
sky_scene_state.directional_lights[i].color[2] != sky_scene_state.last_frame_directional_lights[i].color[2] ||
|
||||
sky_scene_state.directional_lights[i].enabled != sky_scene_state.last_frame_directional_lights[i].enabled) {
|
||||
sky_scene_state.directional_lights[i].enabled != sky_scene_state.last_frame_directional_lights[i].enabled ||
|
||||
sky_scene_state.directional_lights[i].size != sky_scene_state.last_frame_directional_lights[i].size) {
|
||||
light_data_dirty = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -851,18 +852,22 @@ void RasterizerSceneRD::SkyShaderData::set_code(const String &p_code) {
|
|||
actions.usage_flag_pointers["LIGHT0_ENERGY"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT0_DIRECTION"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT0_COLOR"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT0_SIZE"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT1_ENABLED"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT1_ENERGY"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT1_DIRECTION"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT1_COLOR"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT1_SIZE"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT2_ENABLED"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT2_ENERGY"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT2_DIRECTION"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT2_COLOR"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT2_SIZE"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT3_ENABLED"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT3_ENERGY"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT3_DIRECTION"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT3_COLOR"] = &uses_light;
|
||||
actions.usage_flag_pointers["LIGHT3_SIZE"] = &uses_light;
|
||||
|
||||
actions.uniforms = &uniforms;
|
||||
|
||||
|
|
@ -4187,21 +4192,25 @@ RasterizerSceneRD::RasterizerSceneRD(RasterizerStorageRD *p_storage) {
|
|||
actions.renames["QUARTER_RES_COLOR"] = "quarter_res_color";
|
||||
actions.renames["RADIANCE"] = "radiance";
|
||||
actions.renames["LIGHT0_ENABLED"] = "directional_lights.data[0].enabled";
|
||||
actions.renames["LIGHT0_DIRECTION"] = "directional_lights.data[0].direction";
|
||||
actions.renames["LIGHT0_ENERGY"] = "directional_lights.data[0].energy";
|
||||
actions.renames["LIGHT0_COLOR"] = "directional_lights.data[0].color";
|
||||
actions.renames["LIGHT0_DIRECTION"] = "directional_lights.data[0].direction_energy.xyz";
|
||||
actions.renames["LIGHT0_ENERGY"] = "directional_lights.data[0].direction_energy.w";
|
||||
actions.renames["LIGHT0_COLOR"] = "directional_lights.data[0].color_size.xyz";
|
||||
actions.renames["LIGHT0_SIZE"] = "directional_lights.data[0].color_size.w";
|
||||
actions.renames["LIGHT1_ENABLED"] = "directional_lights.data[1].enabled";
|
||||
actions.renames["LIGHT1_DIRECTION"] = "directional_lights.data[1].direction";
|
||||
actions.renames["LIGHT1_ENERGY"] = "directional_lights.data[1].energy";
|
||||
actions.renames["LIGHT1_COLOR"] = "directional_lights.data[1].color";
|
||||
actions.renames["LIGHT1_DIRECTION"] = "directional_lights.data[1].direction_energy.xyz";
|
||||
actions.renames["LIGHT1_ENERGY"] = "directional_lights.data[1].direction_energy.w";
|
||||
actions.renames["LIGHT1_COLOR"] = "directional_lights.data[1].color_size.xyz";
|
||||
actions.renames["LIGHT1_SIZE"] = "directional_lights.data[1].color_size.w";
|
||||
actions.renames["LIGHT2_ENABLED"] = "directional_lights.data[2].enabled";
|
||||
actions.renames["LIGHT2_DIRECTION"] = "directional_lights.data[2].direction";
|
||||
actions.renames["LIGHT2_ENERGY"] = "directional_lights.data[2].energy";
|
||||
actions.renames["LIGHT2_COLOR"] = "directional_lights.data[2].color";
|
||||
actions.renames["LIGHT2_DIRECTION"] = "directional_lights.data[2].direction_energy.xyz";
|
||||
actions.renames["LIGHT2_ENERGY"] = "directional_lights.data[2].direction_energy.w";
|
||||
actions.renames["LIGHT2_COLOR"] = "directional_lights.data[2].color_size.xyz";
|
||||
actions.renames["LIGHT2_SIZE"] = "directional_lights.data[2].color_size.w";
|
||||
actions.renames["LIGHT3_ENABLED"] = "directional_lights.data[3].enabled";
|
||||
actions.renames["LIGHT3_DIRECTION"] = "directional_lights.data[3].direction";
|
||||
actions.renames["LIGHT3_ENERGY"] = "directional_lights.data[3].energy";
|
||||
actions.renames["LIGHT3_COLOR"] = "directional_lights.data[3].color";
|
||||
actions.renames["LIGHT3_DIRECTION"] = "directional_lights.data[3].direction_energy.xyz";
|
||||
actions.renames["LIGHT3_ENERGY"] = "directional_lights.data[3].direction_energy.w";
|
||||
actions.renames["LIGHT3_COLOR"] = "directional_lights.data[3].color_size.xyz";
|
||||
actions.renames["LIGHT3_SIZE"] = "directional_lights.data[3].color_size.w";
|
||||
actions.renames["AT_CUBEMAP_PASS"] = "AT_CUBEMAP_PASS";
|
||||
actions.renames["AT_HALF_RES_PASS"] = "AT_HALF_RES_PASS";
|
||||
actions.renames["AT_QUARTER_RES_PASS"] = "AT_QUARTER_RES_PASS";
|
||||
|
|
@ -4224,7 +4233,7 @@ RasterizerSceneRD::RasterizerSceneRD(RasterizerStorageRD *p_storage) {
|
|||
{
|
||||
// default material and shader for sky shader
|
||||
sky_shader.default_shader = storage->shader_create();
|
||||
storage->shader_set_code(sky_shader.default_shader, "shader_type sky; void fragment() { COLOR = mix(vec3(0.3), vec3(0.2, 0.4, 0.9), smoothstep(0.0, 0.05, EYEDIR.y)); } \n");
|
||||
storage->shader_set_code(sky_shader.default_shader, "shader_type sky; void fragment() { COLOR = vec3(0.0); } \n");
|
||||
sky_shader.default_material = storage->material_create();
|
||||
storage->material_set_shader(sky_shader.default_material, sky_shader.default_shader);
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,9 @@ protected:
|
|||
float direction[3];
|
||||
float energy;
|
||||
float color[3];
|
||||
float size;
|
||||
uint32_t enabled;
|
||||
uint32_t pad[3];
|
||||
};
|
||||
|
||||
struct SkySceneState {
|
||||
|
|
|
|||
|
|
@ -96,9 +96,8 @@ layout(set = 2, binding = 2) uniform texture2D quarter_res;
|
|||
#endif
|
||||
|
||||
struct DirectionalLightData {
|
||||
vec3 direction;
|
||||
float energy;
|
||||
vec3 color;
|
||||
vec4 direction_energy;
|
||||
vec4 color_size;
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -303,18 +303,22 @@ ShaderTypes::ShaderTypes() {
|
|||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT0_DIRECTION"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT0_ENERGY"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT0_COLOR"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT0_SIZE"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT1_ENABLED"] = constt(ShaderLanguage::TYPE_BOOL);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT1_DIRECTION"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT1_ENERGY"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT1_COLOR"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT1_SIZE"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT2_ENABLED"] = constt(ShaderLanguage::TYPE_BOOL);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT2_DIRECTION"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT2_ENERGY"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT2_COLOR"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT2_SIZE"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT3_ENABLED"] = constt(ShaderLanguage::TYPE_BOOL);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT3_DIRECTION"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT3_ENERGY"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT3_COLOR"] = constt(ShaderLanguage::TYPE_VEC3);
|
||||
shader_modes[RS::SHADER_SKY].functions["global"].built_ins["LIGHT3_SIZE"] = constt(ShaderLanguage::TYPE_FLOAT);
|
||||
|
||||
shader_modes[RS::SHADER_SKY].functions["fragment"].built_ins["COLOR"] = ShaderLanguage::TYPE_VEC3;
|
||||
shader_modes[RS::SHADER_SKY].functions["fragment"].built_ins["ALPHA"] = ShaderLanguage::TYPE_FLOAT;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue