[Godot] 블룸의 적용 방법

13867 단어 Godot
개요
이 글에서 Godot Engine에 Bloom을 적용하는 방법에 관한 글을 쓰겠습니다.
브룸은 아래와 같이 밝은 부분을 펼치면서 밝은 부분을 강조하면서 흐릿하게 밝아지는 고급스러움을 느낀다.

하지만 자주 사용하면 너무 힘을 주면 게임 재생에 지장을 줄 수 있으므로 눈에 띄고 싶은 대상에게만 적용하거나 살짝 적용하는 것이 좋다.
브룸의 실현
이미지 등록
이번 소재로 다음과 같은 이미지를 사용합니다.이름을 "bg.png"으로 저장합니다.

이미지 정렬
장면을 만들고 이미지를 구성합니다.
장소는 어디든 상관없습니다.
World Environment 추가
다음에 추가WorldEnvironment합니다.

이분WorldEnvironment은 매우 우수하여 다음과 같은 기능을 가지고 있습니다.

  • Depth of Field Blur: 촬영 화면 깊이 = 흐림

  • Glow: 밝기 조절

  • Tonemap(Auto Exposure): 색상 그래프(자동 노출)

  • Adjustments:조정
  • 예를 들어 "Depth of Field Blur"는 단순히 흐려짐을 구현할 수 있습니다.또한 Adjustments는 밝기, 대비 및 색상을 조정할 수 있습니다.
    다음 GIF 애니메이션은 Adjustments > Saturation의 채도 조정입니다.회색조(회색)와 채도가 높은 작은 색상을 사용할 수 있습니다.

    Environment 추가WorldEnvironment 추가된 상태에서는 다음 경고가 표시됩니다.

    추가Environment가 없기 때문이다.
    검사기에서 추가Environment.
    단계별로 WorldEnvironment > Environment > [空]를 클릭하여 새 Environment를 선택합니다.
    Environment > Background > Mode가 "Canvas"로 변경되었습니다.

    그리고 체크Glow > Enabled를 하면 Glow > Bloom의 값을 바꾸어 브룸을 칠 수 있다.

    블룸의 사용법이 약하다고 생각하면... Glow > Blend Mode'소프트라이트'(약등)에서'어디딕티브(Addictive·가산)'까지 블룸의 사용이 강화된다.


    면도기로 설치하다
    공식 샘플을 봤다면 면도기에 휘광을 구현한 예가 있으니 함께 소개해 드리겠습니다.
  • godotengine/godot-demo-projects: Demonstration and Template Projects
  • shader_type canvas_item;
    render_mode blend_premul_alpha;
    
    uniform float radius : hint_range(2, 5);
    uniform float amount : hint_range(0, 5);
    
    void fragment() {
        float r = radius;
        vec2 ps = TEXTURE_PIXEL_SIZE;
        vec4 col = texture(TEXTURE, UV);
        vec4 glow = col;
    
        glow += texture(TEXTURE, UV + vec2(-r, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(-r, 0.0) * ps);
        glow += texture(TEXTURE, UV + vec2(-r, r) * ps);
        glow += texture(TEXTURE, UV + vec2(0.0, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(0.0, r) * ps);
        glow += texture(TEXTURE, UV + vec2(r, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(r, 0.0) * ps);
        glow += texture(TEXTURE, UV + vec2(r, r) * ps);
    
        r *= 2.0;
        glow += texture(TEXTURE, UV + vec2(-r, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(-r, 0.0) * ps);
        glow += texture(TEXTURE, UV + vec2(-r, r) * ps);
        glow += texture(TEXTURE, UV + vec2(0.0, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(0.0, r) * ps);
        glow += texture(TEXTURE, UV + vec2(r, -r) * ps);
        glow += texture(TEXTURE, UV + vec2(r, 0.0) * ps);
        glow += texture(TEXTURE, UV + vec2(r, r) * ps);
    
        glow /= 17.0;
        glow *= amount;
        col.rgb *= col.a;
    
        COLOR = glow + col;
    }
    
    참고 자료
  • Godot Docs » Godot API » Environment
  • 좋은 웹페이지 즐겨찾기