Module: Rendering::PostProcessingEffect
- Defined in:
- lib/engine/rendering/post_processing/post_processing_effect.rb
Class Method Summary collapse
- .add(effect) ⇒ Object
- .add_all(effects_array) ⇒ Object
- .apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer = nil, start_index: 0) ⇒ Object
- .bloom(threshold: 0.7, intensity: 1.0, blur_passes: 2, blur_scale: 1.0) ⇒ Object
- .clear ⇒ Object
- .depth_debug ⇒ Object
- .depth_of_field(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0) ⇒ Object
- .depth_texture ⇒ Object
- .effects ⇒ Object
- .normal_texture ⇒ Object
- .remove(effect) ⇒ Object
- .ssao(kernel_size: 16, radius: 0.5, bias: 0.025, power: 2.0, blur_size: 2, depth_threshold: 1000.0) ⇒ Object
- .ssr(max_steps: 64, max_ray_distance: 50.0, thickness: 0.5, ray_offset: 2.0) ⇒ Object
-
.tint(color: [1.0, 1.0, 1.0], intensity: 0.5) ⇒ Object
Built-in effects.
Class Method Details
.add(effect) ⇒ Object
6 7 8 9 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 6 def add(effect) effects << effect effect end |
.add_all(effects_array) ⇒ Object
11 12 13 14 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 11 def add_all(effects_array) effects_array.each { |effect| add(effect) } effects_array end |
.apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer = nil, start_index: 0) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 24 def apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer = nil, start_index: 0) @depth_texture = render_texture_a.depth_texture @normal_texture = normal_buffer || render_texture_a.normal_texture enabled_effects = effects.select(&:enabled) textures = [render_texture_a, render_texture_b] return textures[start_index] if enabled_effects.empty? current_index = start_index enabled_effects.each do |effect| input_rt = textures[current_index] output_rt = textures[1 - current_index] stage_name = "pp:#{effect.class.name.split('::').last}" result_rt = GpuTimer.measure(stage_name) do effect.apply(input_rt, output_rt, screen_quad) end current_index = 1 - current_index if result_rt == output_rt end textures[current_index] end |
.bloom(threshold: 0.7, intensity: 1.0, blur_passes: 2, blur_scale: 1.0) ⇒ Object
73 74 75 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 73 def bloom(threshold: 0.7, intensity: 1.0, blur_passes: 2, blur_scale: 1.0) BloomEffect.new(threshold: threshold, intensity: intensity, blur_passes: blur_passes, blur_scale: blur_scale) end |
.clear ⇒ Object
20 21 22 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 20 def clear @effects = [] end |
.depth_debug ⇒ Object
69 70 71 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 69 def depth_debug DepthDebugEffect.new end |
.depth_of_field(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0) ⇒ Object
65 66 67 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 65 def depth_of_field(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0) DepthOfFieldEffect.new(focus_distance: focus_distance, focus_range: focus_range, blur_amount: blur_amount, near: near, far: far) end |
.depth_texture ⇒ Object
47 48 49 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 47 def depth_texture @depth_texture end |
.effects ⇒ Object
55 56 57 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 55 def effects @effects ||= [] end |
.normal_texture ⇒ Object
51 52 53 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 51 def normal_texture @normal_texture end |
.remove(effect) ⇒ Object
16 17 18 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 16 def remove(effect) effects.delete(effect) end |
.ssao(kernel_size: 16, radius: 0.5, bias: 0.025, power: 2.0, blur_size: 2, depth_threshold: 1000.0) ⇒ Object
81 82 83 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 81 def ssao(kernel_size: 16, radius: 0.5, bias: 0.025, power: 2.0, blur_size: 2, depth_threshold: 1000.0) SSAOEffect.new(kernel_size: kernel_size, radius: radius, bias: bias, power: power, blur_size: blur_size, depth_threshold: depth_threshold) end |
.ssr(max_steps: 64, max_ray_distance: 50.0, thickness: 0.5, ray_offset: 2.0) ⇒ Object
77 78 79 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 77 def ssr(max_steps: 64, max_ray_distance: 50.0, thickness: 0.5, ray_offset: 2.0) SSREffect.new(max_steps: max_steps, max_ray_distance: max_ray_distance, thickness: thickness, ray_offset: ray_offset) end |
.tint(color: [1.0, 1.0, 1.0], intensity: 0.5) ⇒ Object
Built-in effects
61 62 63 |
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 61 def tint(color: [1.0, 1.0, 1.0], intensity: 0.5) TintEffect.new(color: color, intensity: intensity) end |