Skip to content

Commit e7fafb6

Browse files
committed
Added filter to swap color channels.
1 parent d17e539 commit e7fafb6

2 files changed

Lines changed: 139 additions & 27 deletions

File tree

@Basic_S.anm2

Lines changed: 133 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ SOFTWARE.
2323
https://mit-license.org/
2424
]]
2525
@四隅丸め
26-
--information:四隅丸め@Basic_S v1.80-beta1 (for beta29) by σ軸
26+
--information:四隅丸め@Basic_S v1.80-beta2 (for beta29) by σ軸
2727
--label:Basic_S\クリッピング
2828
--filter
2929
--track@radius:半径,0,2000,40,0.01
@@ -282,7 +282,7 @@ obj.pixelshader("carve", "object", nil, {
282282
}, "mask");
283283

284284
@背景角丸矩形
285-
--information:背景角丸矩形@Basic_S v1.80-beta1 (for beta29) by σ軸
285+
--information:背景角丸矩形@Basic_S v1.80-beta2 (for beta29) by σ軸
286286
--label:Basic_S\装飾
287287
--track@pad_X:余白X,-1000,1000,10,1
288288
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -586,7 +586,7 @@ end
586586
obj.cx, obj.cy = obj.cx + (L - R) / 2, obj.cy + (T - B) / 2;
587587

588588
@背景楕円
589-
--information:背景楕円@Basic_S v1.80-beta1 (for beta29) by σ軸
589+
--information:背景楕円@Basic_S v1.80-beta2 (for beta29) by σ軸
590590
--label:Basic_S\装飾
591591
--track@pad_X:余白X,-1000,1000,10,1
592592
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -700,7 +700,7 @@ obj.effect("背景角丸矩形@Basic_S", "クリッピング", clip,
700700
pad_L, pad_R, pad_T, pad_B, line_x, line_y, back_x, back_y));
701701

702702
@背景菱形
703-
--information:背景菱形@Basic_S v1.80-beta1 (for beta29) by σ軸
703+
--information:背景菱形@Basic_S v1.80-beta2 (for beta29) by σ軸
704704
--label:Basic_S\装飾
705705
--track@pad_X:余白X,-1000,1000,10,1
706706
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -817,7 +817,7 @@ obj.effect("背景角丸矩形@Basic_S", "クリッピング", clip,
817817
pad_L, pad_R, pad_T, pad_B, line_x, line_y, back_x, back_y));
818818

819819
@透明度適用
820-
--information:透明度適用@Basic_S v1.80-beta1 (for beta29) by σ軸
820+
--information:透明度適用@Basic_S v1.80-beta2 (for beta29) by σ軸
821821
--label:Basic_S\加工
822822
--filter
823823
--track@alpha:透明度,-100,100,0,0.01
@@ -837,7 +837,7 @@ if apply_former then obj.alpha, alpha = 1, alpha * obj.alpha end
837837
if alpha ~= 1 then obj.pixelshader("const_alpha", "object", nil, { alpha }, "mask") end
838838

839839
@透明度二値化
840-
--information:透明度二値化@Basic_S v1.80-beta1 (for beta29) by σ軸
840+
--information:透明度二値化@Basic_S v1.80-beta2 (for beta29) by σ軸
841841
--label:Basic_S\加工
842842
--filter
843843
--track@alpha:基準透明度,0,100,50,0.01
@@ -879,7 +879,7 @@ if alpha > 0 or buffer < 1 then
879879
end
880880

881881
@色調補正
882-
--information:色調補正@Basic_S v1.80-beta1 (for beta29) by σ軸
882+
--information:色調補正@Basic_S v1.80-beta2 (for beta29) by σ軸
883883
--label:Basic_S\色調整
884884
--filter
885885
--track@add_light:明るさ,0,200,100,0.01
@@ -1169,8 +1169,114 @@ else
11691169
});
11701170
end
11711171

1172+
@色チャンネル入れ替え
1173+
--information:色チャンネル入れ替え@Basic_S v1.80-beta2 (for beta29) by σ軸
1174+
--label:Basic_S\色調整
1175+
--filter
1176+
--select@comp_R:赤適用元=1,0固定=0,赤=1,緑=2,青=3,アルファ=4,赤反転=5,緑反転=6,青反転=7,アルファ反転=8,1固定=9
1177+
--select@comp_G:緑適用元=2,0固定=0,赤=1,緑=2,青=3,アルファ=4,赤反転=5,緑反転=6,青反転=7,アルファ反転=8,1固定=9
1178+
--select@comp_B:青適用元=3,0固定=0,赤=1,緑=2,青=3,アルファ=4,赤反転=5,緑反転=6,青反転=7,アルファ反転=8,1固定=9
1179+
--select@comp_A:アルファ適用元=4,0固定=0,赤=1,緑=2,青=3,アルファ=4,赤反転=5,緑反転=6,青反転=7,アルファ反転=8,1固定=9
1180+
--group:その他,false
1181+
--check@premult:乗算済みα,true
1182+
--value@PI:PI,{}
1183+
--[[pixelshader@premult:
1184+
Texture2D src : register(t0);
1185+
cbuffer constant0 : register(b0) {
1186+
float4 v;
1187+
float4x4 mat;
1188+
};
1189+
float4 premult(float4 pos : SV_Position) : SV_Target
1190+
{
1191+
float4 c = src.Load(int3(pos.xy, 0));
1192+
c = v + mul(mat, c);
1193+
c.a = saturate(c.a);
1194+
c.rgb = clamp(c.rgb, 0, c.a);
1195+
return c;
1196+
}
1197+
]]
1198+
--[[pixelshader@nonmult:
1199+
Texture2D src : register(t0);
1200+
cbuffer constant0 : register(b0) {
1201+
float4 v;
1202+
float4x4 mat;
1203+
};
1204+
float4 nonmult(float4 pos : SV_Position) : SV_Target
1205+
{
1206+
float4 c = src.Load(int3(pos.xy, 0));
1207+
c.rgb = c.a > 0 ? c.rgb / c.a : 0;
1208+
c = saturate(v + mul(mat, c));
1209+
c.rgb *= c.a;
1210+
return c;
1211+
}
1212+
]]
1213+
local obj, math, tonumber, type = obj, math, tonumber, type;
1214+
1215+
-- take parameters.
1216+
--[==[
1217+
PI = {
1218+
comp_R: string?,
1219+
comp_G: string?,
1220+
comp_B: string?,
1221+
premult: boolean|number|nil,
1222+
}
1223+
]==]
1224+
local function as_bool(t, v)
1225+
if type(t) == "boolean" then return t;
1226+
elseif type(t) == "number" then return t ~= 0;
1227+
else return v end
1228+
end
1229+
local name2num = {
1230+
["0固定"] = 0,
1231+
["赤"] = 1, ["緑"] = 2, ["青"] = 3, ["アルファ"] = 4,
1232+
["赤反転"] = 5, ["緑反転"] = 6, ["青反転"] = 7, ["アルファ反転"] = 8,
1233+
["1固定"] = 9,
1234+
};
1235+
if type(PI.comp_R) == "string" then
1236+
comp_R = name2num[PI.comp_R] or comp_R;
1237+
end
1238+
if type(PI.comp_G) == "string" then
1239+
comp_G = name2num[PI.comp_G] or comp_G;
1240+
end
1241+
if type(PI.comp_B) == "string" then
1242+
comp_B = name2num[PI.comp_B] or comp_B;
1243+
end
1244+
if type(PI.comp_A) == "string" then
1245+
comp_A = name2num[PI.comp_A] or comp_A;
1246+
end
1247+
premult = as_bool(PI.premult, premult);
1248+
if comp_R == 1 and comp_G == 2 and comp_B == 3 and comp_A ==4 then return end
1249+
1250+
-- normalize parameters.
1251+
comp_R = math.min(math.max(comp_R, 0), 9);
1252+
comp_G = math.min(math.max(comp_G, 0), 9);
1253+
comp_B = math.min(math.max(comp_B, 0), 9);
1254+
comp_A = math.min(math.max(comp_A, 0), 9);
1255+
1256+
-- further calculations.
1257+
local params = {
1258+
0, 0, 0, 0; -- constant vector.
1259+
0, 0, 0, 0, -- column-major matrix.
1260+
0, 0, 0, 0,
1261+
0, 0, 0, 0,
1262+
0, 0, 0, 0;
1263+
};
1264+
for i, comp in ipairs{ comp_R, comp_G, comp_B, comp_A } do
1265+
local inv = comp >= 5;
1266+
if inv then
1267+
params[i] = 1;
1268+
comp = (comp + 1) % 5;
1269+
end
1270+
if comp > 0 then
1271+
params[4 * comp + i] = inv and -1 or 1;
1272+
end
1273+
end
1274+
1275+
-- apply shader.
1276+
obj.pixelshader(premult and "premult" or "nonmult", "object", "object", params);
1277+
11721278
@回転中心
1173-
--information:回転中心@Basic_S v1.80-beta1 (for beta29) by σ軸
1279+
--information:回転中心@Basic_S v1.80-beta2 (for beta29) by σ軸
11741280
--label:Basic_S\配置
11751281
--track@X:X,-4000,4000,0,0.01
11761282
--track@Y:Y,-4000,4000,0,0.01
@@ -1180,7 +1286,7 @@ obj.cy = obj.cy + Y;
11801286
obj.cz = obj.cz + Z;
11811287

11821288
@回転中心アンカー指定
1183-
--information:回転中心アンカー指定@Basic_S v1.80-beta1 (for beta29) by σ軸
1289+
--information:回転中心アンカー指定@Basic_S v1.80-beta2 (for beta29) by σ軸
11841290
--label:Basic_S\配置
11851291
--track0:X,-4000,4000,0,0.01
11861292
--track1:Y,-4000,4000,0,0.01
@@ -1229,7 +1335,7 @@ obj.ox, obj.oy, obj.oz = obj.ox + dx, obj.oy + dy, obj.oz + dz;
12291335
obj.cx,obj.cy,obj.cz = cx, cy, cz;
12301336

12311337
@上下左右揃え
1232-
--information:上下左右揃え@Basic_S v1.80-beta1 (for beta29) by σ軸
1338+
--information:上下左右揃え@Basic_S v1.80-beta2 (for beta29) by σ軸
12331339
--label:Basic_S\配置
12341340
--track@X:左右%,-100,100,0,0.001
12351341
--track@Y:上下%,-100,100,0,0.001
@@ -1252,7 +1358,7 @@ if cx ~= obj.cx or cy ~= obj.cy then
12521358
end
12531359

12541360
@直角回転
1255-
--information:直角回転@Basic_S v1.80-beta1 (for beta29) by σ軸
1361+
--information:直角回転@Basic_S v1.80-beta2 (for beta29) by σ軸
12561362
--label:Basic_S\配置
12571363
--select@rot:方向=0,なし=0,90°時計回り=1,180°反転=2,90°反時計回り=3,左右反転=4,上下反転=5,右上軸反転=6,左上軸反転=7
12581364
--check@move_center:中心の位置を変更,false
@@ -1299,7 +1405,7 @@ obj.copybuffer("object", "tempbuffer");
12991405
if not move_center then obj.cx, obj.cy = obj.cx + (cx - cx0), obj.cy + (cy - cy0) end
13001406

13011407
@XYZ追加回転
1302-
--information:XYZ追加回転@Basic_S v1.80-beta1 (for beta29) by σ軸
1408+
--information:XYZ追加回転@Basic_S v1.80-beta2 (for beta29) by σ軸
13031409
--label:Basic_S\配置
13041410
--track@X:X,-720,720,0,0.01
13051411
--track@Y:Y,-720,720,0,0.01
@@ -1368,7 +1474,7 @@ if angle ~= 0 or draw then
13681474
end
13691475

13701476
@任意軸追加回転
1371-
--information:任意軸追加回転@Basic_S v1.80-beta1 (for beta29) by σ軸
1477+
--information:任意軸追加回転@Basic_S v1.80-beta2 (for beta29) by σ軸
13721478
--label:Basic_S\配置
13731479
--track@angle:角度,-720,720,0,0.01
13741480
--track0:回転軸X,-512,512,0,0.001
@@ -1616,7 +1722,7 @@ else
16161722
end
16171723

16181724
@傾斜
1619-
--information:傾斜@Basic_S v1.80-beta1 (for beta29) by σ軸
1725+
--information:傾斜@Basic_S v1.80-beta2 (for beta29) by σ軸
16201726
--label:Basic_S\変形
16211727
--track@angle:角度,-80,80,0,0.001
16221728
--track@slope:傾き%,-500,500,0,0.001
@@ -1695,7 +1801,7 @@ obj.copybuffer("object", "tempbuffer");
16951801
obj.cx, obj.cy = obj.cx - cx, obj.cy - cy;
16961802

16971803
@XY軸変形
1698-
--information:XY軸変形@Basic_S v1.80-beta1 (for beta29) by σ軸
1804+
--information:XY軸変形@Basic_S v1.80-beta2 (for beta29) by σ軸
16991805
--label:Basic_S\変形
17001806
--value@axis_X:X軸,{100,0}
17011807
--check@stretch_X:X長さ変更,false
@@ -1751,7 +1857,7 @@ obj.drawpoly(
17511857
obj.copybuffer("object", "tempbuffer");
17521858

17531859
@領域サイズ変更
1754-
--information:領域サイズ変更@Basic_S v1.80-beta1 (for beta29) by σ軸
1860+
--information:領域サイズ変更@Basic_S v1.80-beta2 (for beta29) by σ軸
17551861
--label:Basic_S\クリッピング
17561862
--track@T:上,-4000,4000,0,1
17571863
--track@B:下,-4000,4000,0,1
@@ -1839,7 +1945,7 @@ end
18391945
obj.cx, obj.cy = cx, cy;
18401946

18411947
@領域割合サイズ変更
1842-
--information:領域割合サイズ変更@Basic_S v1.80-beta1 (for beta29) by σ軸
1948+
--information:領域割合サイズ変更@Basic_S v1.80-beta2 (for beta29) by σ軸
18431949
--label:Basic_S\クリッピング
18441950
--track@T:上%,-100,100,0,0.001
18451951
--track@B:下%,-100,100,0,0.001
@@ -1894,7 +2000,7 @@ if L ~= 0 or R ~= 0 or T ~= 0 or B ~= 0 then
18942000
end
18952001

18962002
@領域サイズ指定
1897-
--information:領域サイズ指定@Basic_S v1.80-beta1 (for beta29) by σ軸
2003+
--information:領域サイズ指定@Basic_S v1.80-beta2 (for beta29) by σ軸
18982004
--label:Basic_S\クリッピング
18992005
--track0:X,-4000,4000,0,0.1
19002006
--track1:Y,-4000,4000,0,0.1
@@ -1991,7 +2097,7 @@ elseif L ~= 0 or R ~= 0 or T ~= 0 or B ~= 0 then
19912097
end
19922098

19932099
@カットずらし
1994-
--information:カットずらし@Basic_S v1.80-beta1 (for beta29) by σ軸
2100+
--information:カットずらし@Basic_S v1.80-beta2 (for beta29) by σ軸
19952101
--label:Basic_S\クリッピング
19962102
--track0:ずれX,-4000,4000,40,1
19972103
--track1:ずれY,-4000,4000,0,1
@@ -2202,7 +2308,7 @@ if not move_center then
22022308
end
22032309

22042310
@中抜きクリッピング
2205-
--information:中抜きクリッピング@Basic_S v1.80-beta1 (for beta29) by σ軸
2311+
--information:中抜きクリッピング@Basic_S v1.80-beta2 (for beta29) by σ軸
22062312
--label:Basic_S\クリッピング
22072313
--track0:X,-4000,4000,0,0.1
22082314
--track1:Y,-4000,4000,0,0.1
@@ -2305,7 +2411,7 @@ else
23052411
end
23062412

23072413
@小数ぼかし
2308-
--information:小数ぼかし@Basic_S v1.80-beta1 (for beta29) by σ軸
2414+
--information:小数ぼかし@Basic_S v1.80-beta2 (for beta29) by σ軸
23092415
--label:Basic_S\ぼかし
23102416
--filter
23112417
--track@range:範囲,0,1000,5,0.01
@@ -2452,7 +2558,7 @@ if luma_weight > 0 then
24522558
end
24532559

24542560
@縁取りα
2455-
--information:縁取りα@Basic_S v1.80-beta1 (for beta29) by σ軸
2561+
--information:縁取りα@Basic_S v1.80-beta2 (for beta29) by σ軸
24562562
--label:Basic_S\装飾
24572563
--track@size:サイズ,-500,500,5,1
24582564
--track@blur:ぼかし,0,100,5,1
@@ -2631,7 +2737,7 @@ elseif alpha_front > 0 then
26312737
end
26322738

26332739
@四角縁取り
2634-
--information:四角縁取り@Basic_S v1.80-beta1 (for beta29) by σ軸
2740+
--information:四角縁取り@Basic_S v1.80-beta2 (for beta29) by σ軸
26352741
--label:Basic_S\装飾
26362742
--track@size:サイズ,-500,500,5,0.01
26372743
--track@aspect:縦横比,-100,100,0,0.001
@@ -2875,7 +2981,7 @@ else
28752981
end
28762982

28772983
@内側シャドウ
2878-
--information:内側シャドウ@Basic_S v1.80-beta1 (for beta29) by σ軸
2984+
--information:内側シャドウ@Basic_S v1.80-beta2 (for beta29) by σ軸
28792985
--label:Basic_S\装飾
28802986
--filter
28812987
--track@X:X,-1000,1000,-40,0.01
@@ -3030,7 +3136,7 @@ obj.copybuffer("object", "tempbuffer");
30303136
obj.pixelshader("identity", "object", cache_name, nil, "mask");
30313137

30323138
@画像ファイル合成
3033-
--information:画像ファイル合成@Basic_S v1.80-beta1 (for beta29) by σ軸
3139+
--information:画像ファイル合成@Basic_S v1.80-beta2 (for beta29) by σ軸
30343140
--label:Basic_S\加工
30353141
--filter
30363142
--file@file:画像ファイル
@@ -3333,7 +3439,7 @@ obj.ox, obj.oy, obj.oz, obj.cx, obj.cy, obj.cz, obj.rx, obj.ry, obj.rz, obj.sx,
33333439
obj.cx, obj.cy = obj.cx + dcx, obj.cy + dcy;
33343440

33353441
@動画ファイル合成
3336-
--information:動画ファイル合成@Basic_S v1.80-beta1 (for beta29) by σ軸
3442+
--information:動画ファイル合成@Basic_S v1.80-beta2 (for beta29) by σ軸
33373443
--label:Basic_S\加工
33383444
--filter
33393445
--file@file:動画ファイル
@@ -3654,7 +3760,7 @@ obj.ox, obj.oy, obj.oz, obj.cx, obj.cy, obj.cz, obj.rx, obj.ry, obj.rz, obj.sx,
36543760
obj.cx, obj.cy = obj.cx + dcx, obj.cy + dcy;
36553761

36563762
@別レイヤー同期
3657-
--information:別レイヤー同期@Basic_S v1.80-beta1 (for beta29) by σ軸
3763+
--information:別レイヤー同期@Basic_S v1.80-beta2 (for beta29) by σ軸
36583764
--label:Basic_S\配置
36593765
--select@index_base:レイヤー位置=1,絶対指定=0,相対指定=1
36603766
--value@index:番号,-1

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ Although, usage documentations for this script in languages other than Japanese
154154
155155
:arrow_right: [\[詳細\]](https://github.com/sigma-axis/aviutl2_script_Basic_S/wiki/色調補正)
156156

157+
### 色チャンネル入れ替え
158+
159+
各ピクセルの色成分,赤・緑・青・アルファ値を別の成分に差し替えたり,個別に反転したりできます.
160+
157161
### 回転中心
158162

159163
オブジェクトの回転中心を移動します.標準のフィルタ効果の「座標」の回転中心版です.
@@ -469,6 +473,8 @@ https://github.com/user-attachments/assets/65a2eb86-3b2a-406d-829b-ccdbaa29f123
469473
- 「画像ファイル合成」「動画ファイル合成」のパラメタ「モード」に「前方から合成(クリッピング)」「後方から合成(クリッピング)」を追加.
470474
- 背景となる画像のアルファ値でマスクして合成します.元画像の透明度を保ったままグランジ素材を合成するなどの使い方ができます.
471475

476+
- フィルタ効果「色チャンネル入れ替え」を追加.
477+
472478
- **v1.76 (for beta28a)** (2026-01-16)
473479

474480
- 簡体字中国語翻訳ファイルの更新.Updated the Simplified Chinese translation file. Thanks to @nsYW. (#3)

0 commit comments

Comments
 (0)