Module: Rendering::PostProcessingEffect

Defined in:
lib/engine/rendering/post_processing/post_processing_effect.rb

Class Method Summary collapse

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

.clearObject



20
21
22
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 20

def clear
  @effects = []
end

.depth_debugObject



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_textureObject



47
48
49
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 47

def depth_texture
  @depth_texture
end

.effectsObject



55
56
57
# File 'lib/engine/rendering/post_processing/post_processing_effect.rb', line 55

def effects
  @effects ||= []
end

.normal_textureObject



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