39 lines
1.3 KiB
GDScript
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")
|