瀏覽代碼

Make visibility range alpha fade smoother

`smoothstep()` avoids the sudden transparency jump when entering or
leaving an object's alpha fade margin distance. This in turn helps
make opacity transitions less noticeable to the player, as it's
less likely to catch the player's eye.
Hugo Locurcio 3 年之前
父節點
當前提交
20464fd103
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp

+ 3 - 2
servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp

@@ -969,10 +969,11 @@ void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, con
 
 		if (inst->fade_near || inst->fade_far) {
 			float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin);
+			// Use `smoothstep()` to make opacity changes more gradual and less noticeable to the player.
 			if (inst->fade_far && fade_dist > inst->fade_far_begin) {
-				fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
+				fade_alpha = Math::smoothstep(0.0f, 1.0f, 1.0f - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
 			} else if (inst->fade_near && fade_dist < inst->fade_near_end) {
-				fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
+				fade_alpha = Math::smoothstep(0.0f, 1.0f, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
 			}
 		}