Skip to content

Commit 6c2bb83

Browse files
committed
v1.30-for-beta21
+ Added OKLCH color space to the color correction filter. + Fixed wrong bounding of the index of color spaces. + Confirmed to work on beta21.
1 parent 4f4e4fa commit 6c2bb83

File tree

4 files changed

+115
-57
lines changed

4 files changed

+115
-57
lines changed

@Basic_S.anm2

Lines changed: 91 additions & 41 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.20 (for beta20) by σ軸
26+
--information:四隅丸め@Basic_S v1.30 (for beta21) by σ軸
2727
--label:Basic_S\クリッピング
2828
--track@radius:半径,0,2000,40,0.01
2929
--check@uniform:半径均一,true
@@ -279,7 +279,7 @@ obj.pixelshader("carve", "object", nil, {
279279
}, "mask");
280280

281281
@背景角丸矩形
282-
--information:背景角丸矩形@Basic_S v1.20 (for beta20) by σ軸
282+
--information:背景角丸矩形@Basic_S v1.30 (for beta21) by σ軸
283283
--label:Basic_S\装飾
284284
--track@pad_X:余白X,-1000,1000,10,1
285285
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -580,7 +580,7 @@ end
580580
obj.cx, obj.cy = obj.cx + (L - R) / 2, obj.cy + (T - B) / 2;
581581

582582
@背景楕円
583-
--information:背景楕円@Basic_S v1.20 (for beta20) by σ軸
583+
--information:背景楕円@Basic_S v1.30 (for beta21) by σ軸
584584
--label:Basic_S\装飾
585585
--track@pad_X:余白X,-1000,1000,10,1
586586
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -691,7 +691,7 @@ obj.effect("背景角丸矩形@Basic_S", "クリッピング", clip,
691691
pad_L, pad_R, pad_T, pad_B, line_x, line_y, back_x, back_y));
692692

693693
@背景菱形
694-
--information:背景菱形@Basic_S v1.20 (for beta20) by σ軸
694+
--information:背景菱形@Basic_S v1.30 (for beta21) by σ軸
695695
--label:Basic_S\装飾
696696
--track@pad_X:余白X,-1000,1000,10,1
697697
--track@pad_Y:余白Y,-1000,1000,10,1
@@ -805,7 +805,7 @@ obj.effect("背景角丸矩形@Basic_S", "クリッピング", clip,
805805
pad_L, pad_R, pad_T, pad_B, line_x, line_y, back_x, back_y));
806806

807807
@透明度適用
808-
--information:透明度適用@Basic_S v1.20 (for beta20) by σ軸
808+
--information:透明度適用@Basic_S v1.30 (for beta21) by σ軸
809809
--label:Basic_S\加工
810810
--track@alpha:透明度,-100,100,0,0.01
811811
--check@apply_former:累積分も適用,false
@@ -824,7 +824,7 @@ if apply_former then obj.alpha, alpha = 1, alpha * obj.alpha end
824824
if alpha ~= 1 then obj.pixelshader("const_alpha", "object", nil, { alpha }, "mask") end
825825

826826
@透明度二値化
827-
--information:透明度二値化@Basic_S v1.20 (for beta20) by σ軸
827+
--information:透明度二値化@Basic_S v1.30 (for beta21) by σ軸
828828
--label:Basic_S\加工
829829
--track@alpha:基準透明度,0,100,50,0.01
830830
--track@buffer:ぼかし幅,0,100,8,0.01
@@ -864,7 +864,7 @@ if alpha > 0 or buffer < 1 then
864864
end
865865

866866
@色調補正
867-
--information:色調補正@Basic_S v1.20 (for beta20) by σ軸
867+
--information:色調補正@Basic_S v1.30 (for beta21) by σ軸
868868
--label:Basic_S\色調整
869869
--track@add_light:明るさ,0,200,100,0.01
870870
--track@contrast:コントラスト,0,200,100,0.01
@@ -873,7 +873,7 @@ end
873873
--check@rev_light:輝度反転,false
874874
--track@mul_sat:彩度,0,200,100,0.01
875875
--check@saturate:飽和する,false
876-
--select@space:色空間=4,XYZ(sRGB)=0,YUV(BT.601)=1,YUV(BT.709)=2,YUV(BT.2020)=3,HSV(円柱)=4,HSV(円錐)=5,HSL(円柱)=6,HSL(双円錐)=7
876+
--select@space:色空間=5,XYZ(sRGB)=0,OKLCH=1,YUV(BT.601)=2,YUV(BT.709)=3,YUV(BT.2020)=4,HSV(円柱)=5,HSV(円錐)=6,HSL(円柱)=7,HSL(双円錐)=8
877877
--value@PI:PI,{}
878878
--[[pixelshader@by_xyz:
879879
Texture2D src : register(t0);
@@ -901,6 +901,43 @@ float4 by_xyz(float4 pos : SV_Position) : SV_Target
901901
return c;
902902
}
903903
]]
904+
--[[pixelshader@by_oklab:
905+
Texture2D src : register(t0);
906+
cbuffer constant0 : register(b0) {
907+
float3x3 mat;
908+
float add_light, sat;
909+
};
910+
static const float3x3 m1_rgb = {
911+
0.41222146, 0.53633255, 0.051445995,
912+
0.2119035, 0.6806995, 0.10739696,
913+
0.08830246, 0.28171885, 0.6299787
914+
}, m1_rgb_i = {
915+
4.0767417,-3.3077116,0.23096994,
916+
-1.268438,2.6097574,-0.34131938,
917+
-0.0041960864,-0.7034186,1.7076147
918+
};
919+
float3 to_lms_gamma(float3 c)
920+
{
921+
static const float4 K = { 0.055, 1 / 1.055, 1 / 12.92, 0.04045 };
922+
c = mul(m1_rgb, abs(c) <= K.w ? K.z * c : sign(c) * pow((abs(c) + K.x) * K.y, 2.4));
923+
return sign(c) * pow(abs(c), 1 / 3.0);
924+
}
925+
float3 from_lms_gamma(float3 c)
926+
{
927+
c = mul(m1_rgb_i, c * c * c);
928+
static const float4 K = { 0.055, 1.055, 12.92, 0.0031308 };
929+
return abs(c) <= K.w ? K.z * c : sign(c) * (K.y * pow(abs(c), 1 / 2.4) - K.x);
930+
}
931+
float4 by_oklab(float4 pos : SV_Position) : SV_Target
932+
{
933+
float4 c = src.Load(int3(pos.xy, 0));
934+
c.rgb = to_lms_gamma(c.a > 0 ? c.rgb / c.a : 0);
935+
c.rgb = mul(mat, c.rgb) + add_light;
936+
c.rgb = c.a * from_lms_gamma(c.rgb);
937+
if (sat > 0) c.rgb = clamp(c.rgb, 0, c.a);
938+
return c;
939+
}
940+
]]
904941
--[[pixelshader@by_yuv:
905942
Texture2D src : register(t0);
906943
cbuffer constant0 : register(b0) {
@@ -998,8 +1035,9 @@ mul_sat = tonumber(PI.mul_sat) or mul_sat;
9981035
saturate = as_bool(PI.saturate, saturate);
9991036
if type(PI.space) == "string" then
10001037
space = ({
1001-
["XYZ(sRGB)"] = 0, ["YUV(BT.601)"] = 1, ["YUV(BT.709)"] = 2, ["YUV(BT.2020)"] = 3,
1002-
["HSV(円柱)"] = 4, ["HSV(円錐)"] = 5, ["HSL(円柱)"] = 6, ["HSL(双円錐)"] = 7,
1038+
["XYZ(sRGB)"] = 0, ["OKLCH"] = 1,
1039+
["YUV(BT.601)"] = 2, ["YUV(BT.709)"] = 3, ["YUV(BT.2020)"] = 4,
1040+
["HSV(円柱)"] = 5, ["HSV(円錐)"] = 6, ["HSL(円柱)"] = 7, ["HSL(双円錐)"] = 8,
10031041
})[PI.space] or space;
10041042
end
10051043

@@ -1009,7 +1047,7 @@ contrast = math.max(contrast / 100, 0);
10091047
angle = angle % 360;
10101048
mul_light = math.max(mul_light / 100, 0);
10111049
mul_sat = math.max(mul_sat / 100, 0);
1012-
space = math.min(math.max(math.floor(0.5 + space), 0), 6);
1050+
space = math.min(math.max(math.floor(0.5 + space), 0), 8);
10131051

10141052
-- further calculations.
10151053
if rev_light then add_light, mul_light = add_light + 1, -mul_light end
@@ -1021,7 +1059,7 @@ add_light, mul_light, mul_sat =
10211059
if add_light == 0 and angle == 0 and mul_light == 1 and mul_sat == 1
10221060
and not saturate then return end
10231061

1024-
if space < 4 then
1062+
if space < 5 then
10251063
local mat_conv = space == 0 and {{
10261064
-- (scaled (YZX minus white) <- sRGB, sRGB <- scaled (YZX minus white))-pair.
10271065
-- minus white is to move the white point onto the line Z = X = 0.
@@ -1033,7 +1071,15 @@ if space < 4 then
10331071
1, -0.86948282117431, 2.0882435025828;
10341072
1, 0.072396115773113, -0.62437430170414;
10351073
1, 1.8431349831126, 0.035899334206509;
1036-
}} or space == 1 and {{ -- BT.601.
1074+
}} or space == 1 and {{ -- OKLAB.
1075+
0.2104542553, 0.7936177850, -0.0040720468;
1076+
1.9779984951, -2.4285922050, 0.4505937099;
1077+
0.0259040371, 0.7827717662, -0.8086757660;
1078+
}, {
1079+
0.99999999845052,0.39633779217377,0.21580375806076;
1080+
1.0000000088818,-0.10556134232366,-0.063854174771706;
1081+
1.0000000546724,-0.089484182094966,-1.2914855378641;
1082+
}} or space == 2 and {{ -- BT.601.
10371083
-- (YUV <- RGB, RGB <- YUV)-pairs.
10381084
0.299, 0.587, 0.114;
10391085
-0.16873589164786, -0.33126410835214, 0.5;
@@ -1042,7 +1088,7 @@ if space < 4 then
10421088
1, 0, 1.402;
10431089
1, -0.34413628620102, -0.71413628620102;
10441090
1, 1.772, 0;
1045-
}} or space == 2 and {{ -- BT.709.
1091+
}} or space == 3 and {{ -- BT.709.
10461092
0.2126, 0.7152, 0.0722;
10471093
-0.11457210605734, -0.38542789394266, 0.5;
10481094
0.5, -0.45415290830582, -0.045847091694183;
@@ -1085,25 +1131,29 @@ if space < 4 then
10851131
end
10861132

10871133
-- apply shader.
1088-
obj.pixelshader(space == 0 and "by_xyz" or "by_yuv", "object", "object", {
1089-
M[1], M[4], M[7], 0;
1090-
M[2], M[5], M[8], 0;
1091-
M[3], M[6], M[9];
1092-
add_light;
1093-
saturate and 1 or 0;
1094-
});
1134+
obj.pixelshader(
1135+
space == 0 and "by_xyz" or
1136+
space == 1 and "by_oklab" or
1137+
"by_yuv",
1138+
"object", "object", {
1139+
M[1], M[4], M[7], 0;
1140+
M[2], M[5], M[8], 0;
1141+
M[3], M[6], M[9];
1142+
add_light;
1143+
saturate and 1 or 0;
1144+
});
10951145
else
10961146
-- apply shader.
10971147
obj.pixelshader("by_hsvl", "object", "object", {
10981148
1, mul_sat, mul_light, 0;
10991149
angle / 360, 0, add_light;
1100-
space - 4;
1150+
space - 5;
11011151
saturate and 1 or 0;
11021152
});
11031153
end
11041154

11051155
@回転中心
1106-
--information:回転中心@Basic_S v1.20 (for beta20) by σ軸
1156+
--information:回転中心@Basic_S v1.30 (for beta21) by σ軸
11071157
--label:Basic_S\配置
11081158
--track@X:X,-4000,4000,0,0.01
11091159
--track@Y:Y,-4000,4000,0,0.01
@@ -1113,7 +1163,7 @@ obj.cy = obj.cy + Y;
11131163
obj.cz = obj.cz + Z;
11141164

11151165
@回転中心アンカー指定
1116-
--information:回転中心アンカー指定@Basic_S v1.20 (for beta20) by σ軸
1166+
--information:回転中心アンカー指定@Basic_S v1.30 (for beta21) by σ軸
11171167
--label:Basic_S\配置
11181168
--track0:X,-4000,4000,0,0.01
11191169
--track1:Y,-4000,4000,0,0.01
@@ -1161,7 +1211,7 @@ obj.ox, obj.oy, obj.oz = obj.ox + dx, obj.oy + dy, obj.oz + dz;
11611211
obj.cx,obj.cy,obj.cz = cx, cy, cz;
11621212

11631213
@上下左右揃え
1164-
--information:上下左右揃え@Basic_S v1.20 (for beta20) by σ軸
1214+
--information:上下左右揃え@Basic_S v1.30 (for beta21) by σ軸
11651215
--label:Basic_S\配置
11661216
--track@X:左右%,-100,100,0,0.001
11671217
--track@Y:上下%,-100,100,0,0.001
@@ -1183,7 +1233,7 @@ if cx ~= obj.cx or cy ~= obj.cy then
11831233
end
11841234

11851235
@直角回転
1186-
--information:直角回転@Basic_S v1.20 (for beta20) by σ軸
1236+
--information:直角回転@Basic_S v1.30 (for beta21) by σ軸
11871237
--label:Basic_S\配置
11881238
--select@rot:方向=0,なし=0,90°時計回り=1,180°反転=2,90°反時計回り=3,左右反転=4,上下反転=5,右上軸反転=6,左上軸反転=7
11891239
--check@move_center:中心の位置を変更,false
@@ -1230,7 +1280,7 @@ obj.copybuffer("object", "tempbuffer");
12301280
if not move_center then obj.cx, obj.cy = obj.cx + (cx - cx0), obj.cy + (cy - cy0) end
12311281

12321282
@XYZ追加回転
1233-
--information:XYZ追加回転@Basic_S v1.20 (for beta20) by σ軸
1283+
--information:XYZ追加回転@Basic_S v1.30 (for beta21) by σ軸
12341284
--label:Basic_S\配置
12351285
--track@X:X,-720,720,0,0.01
12361286
--track@Y:Y,-720,720,0,0.01
@@ -1297,7 +1347,7 @@ if angle ~= 0 or draw then
12971347
end
12981348

12991349
@任意軸追加回転
1300-
--information:任意軸追加回転@Basic_S v1.20 (for beta20) by σ軸
1350+
--information:任意軸追加回転@Basic_S v1.30 (for beta21) by σ軸
13011351
--label:Basic_S\配置
13021352
--track@angle:角度,-720,720,0,0.01
13031353
--track0:回転軸X,-512,512,0,0.001
@@ -1543,7 +1593,7 @@ else
15431593
end
15441594

15451595
@傾斜
1546-
--information:傾斜@Basic_S v1.20 (for beta20) by σ軸
1596+
--information:傾斜@Basic_S v1.30 (for beta21) by σ軸
15471597
--label:Basic_S\変形
15481598
--track@angle:角度,-80,80,0,0.001
15491599
--track@slope:傾き%,-500,500,0,0.001
@@ -1621,7 +1671,7 @@ obj.copybuffer("object", "tempbuffer");
16211671
obj.cx, obj.cy = obj.cx - cx, obj.cy - cy;
16221672

16231673
@XY軸変形
1624-
--information:XY軸変形@Basic_S v1.20 (for beta20) by σ軸
1674+
--information:XY軸変形@Basic_S v1.30 (for beta21) by σ軸
16251675
--label:Basic_S\変形
16261676
--value@axis_X:X軸,{100,0}
16271677
--check@stretch_X:X長さ変更,false
@@ -1676,7 +1726,7 @@ obj.drawpoly(
16761726
obj.copybuffer("object", "tempbuffer");
16771727

16781728
@領域サイズ変更
1679-
--information:領域サイズ変更@Basic_S v1.20 (for beta20) by σ軸
1729+
--information:領域サイズ変更@Basic_S v1.30 (for beta21) by σ軸
16801730
--label:Basic_S\クリッピング
16811731
--track@T:上,-4000,4000,0,1
16821732
--track@B:下,-4000,4000,0,1
@@ -1763,7 +1813,7 @@ end
17631813
obj.cx, obj.cy = cx, cy;
17641814

17651815
@領域割合サイズ変更
1766-
--information:領域割合サイズ変更@Basic_S v1.20 (for beta20) by σ軸
1816+
--information:領域割合サイズ変更@Basic_S v1.30 (for beta21) by σ軸
17671817
--label:Basic_S\クリッピング
17681818
--track@T:上%,-100,100,0,0.001
17691819
--track@B:下%,-100,100,0,0.001
@@ -1817,7 +1867,7 @@ if L ~= 0 or R ~= 0 or T ~= 0 or B ~= 0 then
18171867
end
18181868

18191869
@領域サイズ指定
1820-
--information:領域サイズ指定@Basic_S v1.20 (for beta20) by σ軸
1870+
--information:領域サイズ指定@Basic_S v1.30 (for beta21) by σ軸
18211871
--label:Basic_S\クリッピング
18221872
--track0:X,-4000,4000,0,0.1
18231873
--track1:Y,-4000,4000,0,0.1
@@ -1911,7 +1961,7 @@ elseif L ~= 0 or R ~= 0 or T ~= 0 or B ~= 0 then
19111961
end
19121962

19131963
@カットずらし
1914-
--information:カットずらし@Basic_S v1.20 (for beta20) by σ軸
1964+
--information:カットずらし@Basic_S v1.30 (for beta21) by σ軸
19151965
--label:Basic_S\クリッピング
19161966
--track0:ずれX,-4000,4000,40,1
19171967
--track1:ずれY,-4000,4000,0,1
@@ -2120,7 +2170,7 @@ if not move_center then
21202170
end
21212171

21222172
@中抜きクリッピング
2123-
--information:中抜きクリッピング@Basic_S v1.20 (for beta20) by σ軸
2173+
--information:中抜きクリッピング@Basic_S v1.30 (for beta21) by σ軸
21242174
--label:Basic_S\クリッピング
21252175
--track0:X,-4000,4000,0,0.1
21262176
--track1:Y,-4000,4000,0,0.1
@@ -2220,7 +2270,7 @@ else
22202270
end
22212271

22222272
@小数ぼかし
2223-
--information:小数ぼかし@Basic_S v1.20 (for beta20) by σ軸
2273+
--information:小数ぼかし@Basic_S v1.30 (for beta21) by σ軸
22242274
--label:Basic_S\ぼかし
22252275
--track@range:範囲,0,1000,5,0.01
22262276
--track@aspect:縦横比,-100,100,0,0.001
@@ -2363,7 +2413,7 @@ if luma_weight > 0 then
23632413
end
23642414

23652415
@縁取りα
2366-
--information:縁取りα@Basic_S v1.20 (for beta20) by σ軸
2416+
--information:縁取りα@Basic_S v1.30 (for beta21) by σ軸
23672417
--label:Basic_S\装飾
23682418
--track@size:サイズ,-500,500,5,1
23692419
--track@blur:ぼかし,0,100,5,1
@@ -2540,7 +2590,7 @@ elseif alpha_front > 0 then
25402590
end
25412591

25422592
@四角縁取り
2543-
--information:四角縁取り@Basic_S v1.20 (for beta20) by σ軸
2593+
--information:四角縁取り@Basic_S v1.30 (for beta21) by σ軸
25442594
--label:Basic_S\装飾
25452595
--track@size:サイズ,-500,500,5,0.01
25462596
--track@aspect:縦横比,-100,100,0,0.001
@@ -2782,7 +2832,7 @@ else
27822832
end
27832833

27842834
@内側シャドウ
2785-
--information:内側シャドウ@Basic_S v1.20 (for beta20) by σ軸
2835+
--information:内側シャドウ@Basic_S v1.30 (for beta21) by σ軸
27862836
--label:Basic_S\装飾
27872837
--track@X:X,-1000,1000,-40,0.01
27882838
--track@Y:Y,-1000,1000,24,0.01
@@ -2940,7 +2990,7 @@ obj.copybuffer("object", "tempbuffer");
29402990
obj.pixelshader("identity", "object", cache_name, nil, "mask");
29412991

29422992
@画像ファイル合成
2943-
--information:画像ファイル合成 v1.20 (for beta20) by σ軸
2993+
--information:画像ファイル合成 v1.30 (for beta21) by σ軸
29442994
--label:Basic_S\加工
29452995
--file@file:画像ファイル
29462996
--track0:X,-4000,4000,0,0.01
@@ -3206,7 +3256,7 @@ obj.ox, obj.oy, obj.oz, obj.cx, obj.cy, obj.cz, obj.rx, obj.ry, obj.rz, obj.sx,
32063256
obj.cx, obj.cy = obj.cx + dcx, obj.cy + dcy;
32073257

32083258
@動画ファイル合成
3209-
--information:動画ファイル合成 v1.20 (for beta20) by σ軸
3259+
--information:動画ファイル合成 v1.30 (for beta21) by σ軸
32103260
--label:Basic_S\加工
32113261
--file@file:動画ファイル
32123262
--track@start:再生開始秒,0,3600,0,0.001

0 commit comments

Comments
 (0)