From 0567fa34a6b86fc66c6389879a2d98a0519442dc Mon Sep 17 00:00:00 2001 From: Fabio Date: Fri, 16 Aug 2024 22:22:42 +0200 Subject: [PATCH] add crt shader from godot shaders --- gmtk_2024/Throne_Hall_Background.png | Bin 0 -> 11598 bytes gmtk_2024/Throne_Hall_Background.png.import | 34 ++++++++ gmtk_2024/canvas_layer.tscn | 28 +++++++ gmtk_2024/shaders/crt.gdshader | 87 ++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 gmtk_2024/Throne_Hall_Background.png create mode 100644 gmtk_2024/Throne_Hall_Background.png.import create mode 100644 gmtk_2024/canvas_layer.tscn create mode 100644 gmtk_2024/shaders/crt.gdshader diff --git a/gmtk_2024/Throne_Hall_Background.png b/gmtk_2024/Throne_Hall_Background.png new file mode 100644 index 0000000000000000000000000000000000000000..b31d7d847f1a6b945ddea95219d6af892ba38ae6 GIT binary patch literal 11598 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 HW!V1!VfN^U literal 0 HcmV?d00001 diff --git a/gmtk_2024/Throne_Hall_Background.png.import b/gmtk_2024/Throne_Hall_Background.png.import new file mode 100644 index 0000000..7d7b390 --- /dev/null +++ b/gmtk_2024/Throne_Hall_Background.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kfqpb7ld704r" +path="res://.godot/imported/Throne_Hall_Background.png-40c61316a331b1da8d03a470d9696b64.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Throne_Hall_Background.png" +dest_files=["res://.godot/imported/Throne_Hall_Background.png-40c61316a331b1da8d03a470d9696b64.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/gmtk_2024/canvas_layer.tscn b/gmtk_2024/canvas_layer.tscn new file mode 100644 index 0000000..1ad89a5 --- /dev/null +++ b/gmtk_2024/canvas_layer.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=3 uid="uid://cxbalfjqtp06t"] + +[ext_resource type="Texture2D" uid="uid://kfqpb7ld704r" path="res://Throne_Hall_Background.png" id="1_87jyn"] +[ext_resource type="Shader" path="res://shaders/crt.gdshader" id="2_wxq0n"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_c8ly2"] +shader = ExtResource("2_wxq0n") +shader_parameter/crt_curve = 0.02 +shader_parameter/crt_scan_line_color = 0.347 +shader_parameter/aperture_grille_rate = 0.4 +shader_parameter/rf_switch_esque_blur = 1.0 +shader_parameter/white_noise_rate = 0.0 + +[node name="CanvasLayer" type="CanvasLayer"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("1_87jyn") +centered = false +region_enabled = true +region_rect = Rect2(0, 0, 1152, 648) + +[node name="ColorRect" type="ColorRect" parent="."] +material = SubResource("ShaderMaterial_c8ly2") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/gmtk_2024/shaders/crt.gdshader b/gmtk_2024/shaders/crt.gdshader new file mode 100644 index 0000000..4dc8b9a --- /dev/null +++ b/gmtk_2024/shaders/crt.gdshader @@ -0,0 +1,87 @@ +/* + CRT shader for Godot Engine by Yui Kinomoto @arlez80 +*/ +shader_type canvas_item; + +// 画面 +uniform sampler2D screen_texture : hint_screen_texture; + +// ブラウン管のガラスの曲がり具合(フラットなやつは0.0でいいかな) +uniform float crt_curve : hint_range( 0.0, 1.0 ) = 0.02; +// 走査線の濃さ +uniform float crt_scan_line_color : hint_range( 0.0, 1.0 ) = 0.347; +// 光量 +uniform float aperture_grille_rate : hint_range( 0.0, 1.0 ) = 0.4; +// RFスイッチ的ブラー +uniform float rf_switch_esque_blur : hint_range( 0.0, 1.0 ) = 1.0; +// 白色ノイズ +uniform float white_noise_rate : hint_range( 0.0, 1.0 ) = 0.0; + +float random( vec2 pos ) +{ + return fract(sin(dot(pos, vec2(12.9898,78.233))) * 43758.5453); +} + +void fragment( ) +{ + // ガラスの曲がり具合 + vec2 crt_curve_shift = ( vec2( 1.0, 1.0 ) - sin( UV.yx * PI ) ) * crt_curve; + vec2 crt_curve_scale = vec2( 1.0, 1.0 ) + crt_curve_shift * 2.0; + vec2 texture_fixed_uv = UV * crt_curve_scale - crt_curve_shift; + vec2 fixed_uv = SCREEN_UV * crt_curve_scale - crt_curve_shift; + // 範囲外を消す + float enable_color = float( 0.0 <= texture_fixed_uv.x && texture_fixed_uv.x <= 1.0 && 0.0 <= texture_fixed_uv.y && texture_fixed_uv.y <= 1.0 ); + + // ガラスの曲がり具合から元色を取得 + RFスイッチ的ブラー + COLOR.rgb = ( + ( + texture( screen_texture, fixed_uv ).rgb + * ( 1.0 - rf_switch_esque_blur * 0.5 ) + ) + + ( + ( + texture( screen_texture, fixed_uv + vec2( -SCREEN_PIXEL_SIZE.x * 3.1, 0.0 ) ).rgb + + texture( screen_texture, fixed_uv + vec2( SCREEN_PIXEL_SIZE.x * 3.1, 0.0 ) ).rgb + ) + * ( rf_switch_esque_blur * 0.25 ) // (RFノイズ)0.5 * (テクスチャから読んだ2箇所を半分にしたい)0.5 + ) + ) * enable_color; + COLOR.a = 1.0; + + // ------------------------------------------------ + // 以下はアパーチャグリル上の1ピクセルごとの処理 + vec2 aperture_grille_pixel = vec2( floor( ( fixed_uv.x / SCREEN_PIXEL_SIZE.x ) / 3.0 ) * 3.0, fixed_uv.y ); + + // 白色ノイズ + float white_noise = random( aperture_grille_pixel + vec2( sin( TIME * 0.543254 ), cos( TIME * 0.254323563 ) ) ); + COLOR.rgb = mix( + COLOR.rgb + , vec3( white_noise, white_noise, white_noise ) + , white_noise_rate * enable_color + ); + + // アパーチャグリル再現 + float aperture_grille_point = mod( ( ( SCREEN_UV.x * crt_curve_scale.x ) - crt_curve_shift.x ) / SCREEN_PIXEL_SIZE.x, 3.0 ); + float aperture_grille_r_rate = clamp( 1.0 - aperture_grille_point, 0.0, 1.0 ) + clamp( aperture_grille_point - 2.0, 0.0, 1.0 ); + float aperture_grille_g_rate = clamp( 1.0 - abs( 1.0 - aperture_grille_point ), 0.0, 1.0 ); + float aperture_grille_b_rate = 1.0 - aperture_grille_r_rate - aperture_grille_g_rate; + COLOR = clamp( + COLOR * vec4( + normalize( vec3( + clamp( aperture_grille_r_rate, aperture_grille_rate, 1.0 ) + , clamp( aperture_grille_g_rate, aperture_grille_rate, 1.0 ) + , clamp( aperture_grille_b_rate, aperture_grille_rate, 1.0 ) + ) ) + , 1.0 + ) + , vec4( 0.0, 0.0, 0.0, 0.0 ) + , vec4( 1.0, 1.0, 1.0, 1.0 ) + ); + + // 走査線 + COLOR = mix( + COLOR + , vec4( 0.0, 0.0, 0.0, 1.0 ) + , float( 0 == int( fixed_uv.y / SCREEN_PIXEL_SIZE.y ) % 2 ) * crt_scan_line_color + ); +}