xiandie/asset/art/tool/inverted_alpha_algo.gd

39 lines
1.3 KiB
GDScript

extends Sprite2D
@export var export_dir = "res://asset/art/ui/inverted_point_light_masks/"
@export var frames = 24
@export var frame_texture_size = Vector2(1000, 600)
func _ready() -> void:
if texture and export_dir:
var image = texture.get_image()
if image:
if DirAccess.dir_exists_absolute(export_dir):
DirAccess.remove_absolute(export_dir)
DirAccess.make_dir_recursive_absolute(export_dir)
for i in range(frames):
var frame_image = Image.create_empty(
frame_texture_size.x, frame_texture_size.y, false, Image.FORMAT_RGBA8
)
frame_image.fill(Color.WHITE)
# 最后一张图片不需要处理,保持全白
if i < frames - 1:
var i_scale = cubic_interpolate(1.0, 0.0, 1.0, 0.0, float(i) / frames)
var i_len = int(frame_texture_size.y * i_scale)
image.resize(i_len, i_len, Image.INTERPOLATE_LANCZOS)
var i_offset = (
Vector2(frame_texture_size.x - i_len, frame_texture_size.y - i_len) * 0.5
)
for y in range(i_len):
for x in range(i_len):
var color = image.get_pixel(x, y)
frame_image.set_pixel(
x + i_offset.x, y + i_offset.y, Color(1.0, 1.0, 1.0, 1.0 - color.r)
)
var export_path = export_dir + str(i).pad_zeros(3) + ".png"
frame_image.save_png(export_path)
print("Exported to: " + export_path)
else:
print("No image found in texture")