You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
More 3D Work
-=-=-=-=-=- -ESM Shadow Mapping for softer and less glitchy shadows -HDR Pipeline (convert to Linear on texture import, convert to SRGB at the end) -Fix to xml parse bug
This commit is contained in:
@@ -167,6 +167,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* TEXTURE API */
|
||||
|
||||
virtual RID texture_create()=0;
|
||||
@@ -455,6 +456,7 @@ public:
|
||||
virtual int light_instance_get_shadow_passes(RID p_light_instance) const=0;
|
||||
virtual void light_instance_set_shadow_transform(RID p_light_instance, int p_index, const CameraMatrix& p_camera, const Transform& p_transform, float p_split_near=0,float p_split_far=0)=0;
|
||||
virtual int light_instance_get_shadow_size(RID p_light_instance, int p_index=0) const=0;
|
||||
virtual bool light_instance_get_pssm_shadow_overlap(RID p_light_instance) const=0;
|
||||
|
||||
/* SHADOWS */
|
||||
|
||||
|
||||
@@ -1371,6 +1371,12 @@ int RasterizerDummy::light_instance_get_shadow_passes(RID p_light_instance) cons
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool RasterizerDummy::light_instance_get_pssm_shadow_overlap(RID p_light_instance) const {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void RasterizerDummy::light_instance_set_custom_transform(RID p_light_instance, int p_index, const CameraMatrix& p_camera, const Transform& p_transform, float p_split_near,float p_split_far) {
|
||||
|
||||
LightInstance *lighti = light_instance_owner.get( p_light_instance );
|
||||
|
||||
@@ -345,7 +345,7 @@ class RasterizerDummy : public Rasterizer {
|
||||
fx_param[VS::ENV_FX_PARAM_BCS_BRIGHTNESS]=1.0;
|
||||
fx_param[VS::ENV_FX_PARAM_BCS_CONTRAST]=1.0;
|
||||
fx_param[VS::ENV_FX_PARAM_BCS_SATURATION]=1.0;
|
||||
fx_param[VS::ENV_FX_PARAM_GAMMA]=1.0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -628,6 +628,7 @@ public:
|
||||
virtual bool light_instance_assign_shadow(RID p_light_instance);
|
||||
virtual ShadowType light_instance_get_shadow_type(RID p_light_instance) const;
|
||||
virtual int light_instance_get_shadow_passes(RID p_light_instance) const;
|
||||
virtual bool light_instance_get_pssm_shadow_overlap(RID p_light_instance) const;
|
||||
virtual void light_instance_set_custom_transform(RID p_light_instance, int p_index, const CameraMatrix& p_camera, const Transform& p_transform, float p_split_near=0,float p_split_far=0);
|
||||
virtual int light_instance_get_shadow_size(RID p_light_instance, int p_index=0) const { return 1; }
|
||||
|
||||
|
||||
@@ -3970,6 +3970,8 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
|
||||
//float cull_max=p_cull_range.max;
|
||||
|
||||
|
||||
bool overlap = rasterizer->light_instance_get_pssm_shadow_overlap(p_light->light_info->instance);
|
||||
|
||||
float cull_min=p_camera->znear;
|
||||
float cull_max=p_camera->zfar;
|
||||
float max_dist = rasterizer->light_directional_get_shadow_param(p_light->base_rid,VS::LIGHT_DIRECTIONAL_SHADOW_PARAM_MAX_DISTANCE);
|
||||
@@ -3999,7 +4001,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
|
||||
camera_matrix.set_orthogonal(
|
||||
p_camera->size,
|
||||
viewport_rect.width / (float)viewport_rect.height,
|
||||
distances[i],
|
||||
distances[(i==0 || !overlap )?i:i-1],
|
||||
distances[i+1],
|
||||
p_camera->vaspect
|
||||
|
||||
@@ -4011,7 +4013,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc
|
||||
camera_matrix.set_perspective(
|
||||
p_camera->fov,
|
||||
viewport_rect.width / (float)viewport_rect.height,
|
||||
distances[i],
|
||||
distances[(i==0 || !overlap )?i:i-1],
|
||||
distances[i+1],
|
||||
p_camera->vaspect
|
||||
|
||||
|
||||
@@ -165,6 +165,7 @@ void VisualServerWrapMT::finish() {
|
||||
|
||||
|
||||
texture_free_cached_ids();
|
||||
mesh_free_cached_ids();
|
||||
|
||||
thread=NULL;
|
||||
} else {
|
||||
@@ -187,6 +188,7 @@ VisualServerWrapMT::VisualServerWrapMT(VisualServer* p_contained,bool p_create_t
|
||||
draw_thread_up=false;
|
||||
alloc_mutex=Mutex::create();
|
||||
texture_pool_max_size=GLOBAL_DEF("render/thread_textures_prealloc",20);
|
||||
mesh_pool_max_size=GLOBAL_DEF("render/thread_meshes_prealloc",20);
|
||||
if (!p_create_thread) {
|
||||
server_thread=Thread::get_caller_ID();
|
||||
} else {
|
||||
|
||||
@@ -66,6 +66,16 @@ class VisualServerWrapMT : public VisualServer {
|
||||
int texture_pool_max_size;
|
||||
List<RID> texture_id_pool;
|
||||
|
||||
int mesh_pool_max_size;
|
||||
List<RID> mesh_id_pool;
|
||||
|
||||
//#define DEBUG_SYNC
|
||||
|
||||
#ifdef DEBUG_SYNC
|
||||
#define SYNC_DEBUG print_line("sync on: "+String(__FUNCTION__));
|
||||
#else
|
||||
#define SYNC_DEBUG
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
@@ -74,6 +84,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type();\
|
||||
@@ -115,6 +126,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type();\
|
||||
@@ -168,6 +180,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1);\
|
||||
@@ -179,6 +192,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1);\
|
||||
@@ -231,6 +245,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2);\
|
||||
@@ -242,6 +257,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2);\
|
||||
@@ -294,6 +310,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3);\
|
||||
@@ -357,6 +374,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4);\
|
||||
@@ -368,6 +386,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4);\
|
||||
@@ -420,6 +439,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4, p5,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4, p5);\
|
||||
@@ -431,6 +451,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4, p5,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4, p5);\
|
||||
@@ -483,6 +504,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4, p5, p6,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4, p5, p6);\
|
||||
@@ -546,6 +568,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4, p5, p6, p7);\
|
||||
@@ -557,6 +580,7 @@ public:
|
||||
if (Thread::get_caller_ID()!=server_thread) {\
|
||||
m_r ret;\
|
||||
command_queue.push_and_ret( visual_server, &VisualServer::m_type,p1, p2, p3, p4, p5, p6, p7,&ret);\
|
||||
SYNC_DEBUG\
|
||||
return ret;\
|
||||
} else {\
|
||||
return visual_server->m_type(p1, p2, p3, p4, p5, p6, p7);\
|
||||
@@ -691,7 +715,7 @@ public:
|
||||
FUNC1RC(float,fixed_material_get_point_size,RID);
|
||||
|
||||
/* SURFACE API */
|
||||
FUNC0R(RID,mesh_create);
|
||||
FUNCRID(mesh);
|
||||
|
||||
FUNC2(mesh_set_morph_target_count,RID,int);
|
||||
FUNC1RC(int,mesh_get_morph_target_count,RID);
|
||||
@@ -1122,7 +1146,7 @@ public:
|
||||
/* RENDER INFO */
|
||||
|
||||
FUNC1R(int,get_render_info,RenderInfo );
|
||||
FUNC1RC(bool,has_feature,Features );
|
||||
virtual bool has_feature(Features p_feature) const { return visual_server->has_feature(p_feature); }
|
||||
|
||||
FUNC2(set_boot_image,const Image& , const Color& );
|
||||
FUNC1(set_default_clear_color,const Color& );
|
||||
|
||||
@@ -481,6 +481,8 @@ public:
|
||||
LIGHT_PARAM_SHADOW_DARKENING,
|
||||
LIGHT_PARAM_SHADOW_Z_OFFSET,
|
||||
LIGHT_PARAM_SHADOW_Z_SLOPE_SCALE,
|
||||
LIGHT_PARAM_SHADOW_ESM_MULTIPLIER,
|
||||
LIGHT_PARAM_SHADOW_BLUR_PASSES,
|
||||
LIGHT_PARAM_MAX
|
||||
};
|
||||
|
||||
@@ -728,7 +730,7 @@ public:
|
||||
ENV_FX_HDR,
|
||||
ENV_FX_FOG,
|
||||
ENV_FX_BCS,
|
||||
ENV_FX_GAMMA,
|
||||
ENV_FX_SRGB,
|
||||
ENV_FX_MAX
|
||||
};
|
||||
|
||||
@@ -768,7 +770,6 @@ public:
|
||||
ENV_FX_PARAM_BCS_BRIGHTNESS,
|
||||
ENV_FX_PARAM_BCS_CONTRAST,
|
||||
ENV_FX_PARAM_BCS_SATURATION,
|
||||
ENV_FX_PARAM_GAMMA,
|
||||
ENV_FX_PARAM_MAX
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user