SlideShare a Scribd company logo
CCÁÁCCHH SSỬỬ DDỤỤNNGG TTAAGG TTRROONNGG AAEEGGIISSUUBB ĐĐỂỂ TTẠẠOO HHIIỆỆUU ỨỨNNGG
Phần mở đầu
Đây sẽ là hướng dẫn sườn cho các bạn khởi đầu viết karaoke đầu tiên.
Một template code của karaoke đơn giản nên có ba dòng xác định thời gian như sau, tùy độ phức tạp có thể thêm bớt
những cái khác. Tuy chia ra như thế nhưng thời gian của cả 3 line là khớp đầu-cuối với nhau lên tính tổng thể vẫn liên
tục.
Code:
template syl noblank: !retime("start2syl", 0, 0)!
template syl noblank: !retime("syl", 0, 0)!
template syl noblank: !retime("syl2end", 0, 0)!
Giải thích:
+ Chúng ta sử dụng template syl để tạo cho mỗi âm của cả dòng karaoke một line riêng. Các sắp line như thế sẽ không
làm các âm trong dòng kara ấy ảnh hưởng lẫn nhau, dễ tạo các hiệu ứng hơn.
noblank mục đích để loại bỏ những dấu cách, những phần tag k không có chữ để sub nhẹ hơn
+ Phần !retime! chính là phần xác định lại thời gian (re timming) cho line so với thời gian gốc. Cấu trúc của nó là
!retime("vị trí", độ lệch bắt đầu, độ lệch kết thúc)!
!retime("start2syl", 0, 0)! là khoảng thời tính từ đầu line đến đầu của âm (syl), đó là khoảng thời gian chưa hát tới.
Mực lệch ở đây là 0 , nghĩa là không thay đổi gì với kara gốc.
!retime("syl", 0, 0)! là khoảng thời gian của âm đó, tiếng hát sẽ có ở đây. Hiệu ứng nằm ở phần này là chủ yếu.
!retime("syl2end", 0, 0)! là khoảng thời gian tính từ cuối âm đó đến hết line, đó là khoảng thời gian đã hát qua.
Các hiệu ứng kiểu dáng và màu sắc
Giờ tôi sẽ định hướng cho các bạn về dạng này, đầy là dạng hiệu ứng dễ để bắt đầu.
- Đổi đổi màu chữ, viền,...
Đây là hiệu ứng, khi hát tới nơi chữ sẽ có viền lớn hơn và hát xong chữ sẽ trở lại lúc đầu (có thể thấy ở OP Kimi ni
Todoke [Eclipse] khá hợp với video dù hiệu ứng đơn giản)
Code:
template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter, $smiddle)bord1}
template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)bord2}
template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter, $smiddle)bord1}
Giải thích:
- Phần start2syl và syl2end là giống nhau, ở đây sử dụng an5 để các chữ đựng neo ở chính giữa điểm pos(), các hiệu
ứng sẽ được đều về mọi phía. Ví trí đặt chữ ở đây là trung tâm của chữ khi ở line gốc, ta gọi tọa độ ấy ra bằng hai time
số $scenter và $smiddle. an5 và ($scenter, $smiddle) thường đi cũng với nhau.
- Phần từ bắt đầu đến lúc hát đến nơi (start2syl) thì viền của chữ sẽ ở mức 1 nhờ tag bord1.
- Trong khi hát (syl) thì chữ sẽ có mức viền bord2 và giữ nguyên đến hết âm. Ở đây không sử dụng tag biển đổi t()
nên viền của chữ sẽ tăng lên ngay lập tức
- Sau khi qua âm đó đến hết line (syl2end) chữ sẽ lập tức trở về mức viền bord1. Thời gian của line mới giữ nguyên
với line kara gốc
Để đổi thêm màu của chữ, kích thước chữ,... ta có thể cho thêm những tag đó vào.
Code:
layer 0 template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter,
$smiddle)bord1c!line.styleref.color1!}
layer 1 template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter,
$smiddle)bord2c!line.styleref.color2!3c&HFFFFFF&fscx120}
layer 0 template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter,
$smiddle)bord1c!line.styleref.color1!3c&HFFFFFF}
Giải thích:
Đây là phát triển thêm của hiệu ứng trước, các phần cũ không nói thêm
- Ở phần start2syl, thay vì đưa thẳng mã màu vào (cũng chẳng nhớ màu nào) cho tag c, ta dùng tham số
này !line.styleref.color1! để auto4 tự đưa mã màu đã đặt sẵn trong style (ở đây là &H00F4A6FC&) kết quả sẽ được
c&H00F4A6FC&. Ở trong style có 4 ô màu tương tự ở đây sẽ có !line.styleref.color1! đến !line.styleref.color4!.
- Đến phần syl,vẫn với cách tra màu như trên nhưng ta sẽ lấy màu ở ô số 2 trong style nhờ !line.styleref.color2!, như
thế sub sẽ đổi màu (kết quả là c&H00F4A6FC&). Ở đầy màu viền 3c, ta không muốn tra ở trong style nữa mà đặt
hẳn là màu trắng 3c&HFFFFFF&
Ở đây có sử dụng thêm cả tag fscx, mục đích là để chữ sẽ kéo dài ra theo chiều ngang là 120%, trông chữ sẽ to hơn.
Ta có thể sử dụng thêm một số tag khác như fs hay fscy để thu hay phóng kích thước của chữ. Tùy theo an mà chữ
sẽ được co kéo theo chiều nào, an8 chữ sẽ kéo xuống dưới, an6 là sang trái, an2 là lên trên, an4 là sang phải, có
thêm cả với 7, 9, 3, 1)
- Ở phần về cuối line syl2end, chữ sẽ được trả về mức viền như ban đầu bằng bord1 và độ co kéo là fscx100 như
mặc định có trong style. Thêm đó vẫn giữ nguyên màu viền ở đoạn syl là 3c&HFFFFFF& và đổi lại màu
thànhc!line.styleref.color1!.
Lý do tại sao ở đây lại set cho line syl có layer lớn hơn hai line còn lại vì muốn để cho line này nằm trên, khi tăng độ
lớn chữ sẽ không bị chữ nằm cạnh che mất.
Đổi style của chữ một cách từ từ bằng t()
Các hiệu ứng bên trên đều xuất hiện đột ngột chứ không có chuyển đổi dần dần, giờ tôi sẽ hướng dẫn các bạn sử dụng
t() để hiệu ứng được uyển chuyển.
Trước tiên nói về tác dụng và khả năng của t():
Tag t() dùng để biến đổi dần dần từ giá trị này đến giá trị kia của một số tag khác. Chẳng hạn như tăng dần fontsize từ
18 thành 26 làm cho chữ to lên hay tăng/giảm góc lệch làm cho chữ xoay tròn. Vì t() là tag biến đổi dần dần nên nó
chỉ có tác dụng với những tag có nhiều mức độ giá trị khác nhau, như để chuyển font size từ 18 thành 26 nó sẽ đổi font
dần dần trung gian giữa hai mức đó.
Chính vì thế nó không có tác dụng với các tag chỉ có hai giá trị cố định là b, i, u, s, fn, an hay các vector đồ họa.
Với tag tọa độ pos() hiện nay chỉ có thể dùng move() để làm chữ di chuyển.
Code:
template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter,
$smiddle)bord1c!line.styleref.color1!}
template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)t(0,
!0.5*$dur!, bord2c!line.styleref.color2!3c&HFFFFFF&fscy125)}
template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter,
$smiddle)bord23c&HFFFFFF&fscy125t(0, 500,
bord1fscy100c&HFFFFFF&3c!line.styleref.color2!)}
Giải thích
- Ở đây các bạn sẽ thấy ở phần !retime("syl", 0, 0)! chữ không đổi sang màu !line.styleref.color2! và to lên ngay lập
tức mà từ từ, ở đây khác với bên trên là cho chữ giãn ra 125% theo chiều dọc nhờ fscy
Nhờ t() mà trong khoảng thời gian từ 0 tới 50% của tiếng hát (0.5*$dur), $dur chính là thời gian nằm trong k, hiệu
ững chữ đã thay đổi dần dần.
- Trong phần syl2end, phần phía trước t() vẫn giữ nguyên so với của syl, sau đó mới đổi sang màu chữ và viền là
c&HFFFFFF&3c!line.styleref.color2!, thêm nữa giảm độ giãn chiều dọc fscy từ 125% xuống 100% và độ dày của
viền về bord1 trong thời lượng 500 (mili giây - nửa giây)
Hiệu ứng chữ xoay
Code:
template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter,
$smiddle)bord1c!line.styleref.color1!}
template syl noblank: !retime("syl", 0, 0)!{an8pos($scenter,
$stop)c!line.styleref.color2!3c&HFFFFFF&t(0, $dur, bord2frx270)}
template syl noblank: !retime("syl2end", 0, 0)!{an8pos($scenter,
$stop)bord23c&HFFFFFF&frx270t(0, 500, bord1frx360)}
Giải thích
- Với dòng start2syl không hề có gì thay đổi cả, vẫn viền mức 1 và màu chữ ô số 1.
- Với dòng syl tôi đã thay đổi một chút về tọa độ, chuyển phần neo chữ sang an8 do đó cũng chuyển vị trí của syl text
sang pos($scenter, $stop) - chính giữa phía trên để cho chữ không lệch với dòng start2syl. Màu sắc sẽ không dùng
tag t để đổi nữa mà cho đổi màu ngay lập tức, thay vào đó tôi sẽ cho chữ xoay 270 độ nhờ tag góc frx (như lộn xà
đơn) với tâm chính là vị trí pos() (nhờ có neo là an8). Ở đầy thời gian sẽ là cả toàn bộ thời lượng $dur của syl. Dĩ
nhiên 270 độ thì mới được có 3/4 vòng.
- Với phần cuối syl2end giữ nguyên màu viền, màu chữ c theo mặc định sẽ !line.styleref.color1! luôn nên không cần
gõ và đây. Vì ở phần syl chữ mới quay được 270 độ, chưa đủ một vòng nên tôi muốn nó quay tiếp trông liền mạch cần
đặt frx270 trước t() đã. Tiếp đó ta sẽ nhập giá trị cuối cùng muốn chữ xoay tớitrong thời gian 500 ấy - frx360 nghĩa
là đủ một vòng.
Có thể thêm dấu trừ thành frx-270 và frx-360 để đổi chiều xoay. Các bạn có thể dùng với frz để đuổi phương xoay
của chữ thành lăn vòng, hay cả fry
Tính toán thời gian và tọa độ
Giờ chúng ta sẽ nghiên cứu thêm về phần khai báo thời gian retime cho mỗi line template và cách tính tọa độ cơ bản
sau này dùng vào các hiệu ứng di chuyển
Trước tiên nói về syl, line
Có thể coi syl chính là tag k, hay chi tiết hơn là khoảng nội dung giữa tag k này đến tag k tiếp theo. Thời gian của
syl là thời gian đã có ở tag k, như k45 thời gian của syl là 450ms (450 phần nghìn giây). Sự khác biệt ở phần nghìn là
nhỏ nên trong tag chỉ có hai số (phần trăm giây).
Thứ tự của syl - syl index chính là số thứ tự của tag k ấy trong cả line đếm từ trái qua phải (dĩ nhiên), ta tính số tag k
chứ không tính số chữ. Và tổng số tag k gọi là syl number.
Viết tắt của số thứ tự syl có hai cách là: syl.i hoặc $si Tương tự với tổng số syl của một line là syl.n hoặc $syln. Chữ
syl được viết gọn lại thành $s. Khi được viết đầy đủ nó là tên gọi còn khi có dạng $ nó trở thành tham số, cả hai đều có
thể dùng để tra các thông tin về karaoke gốc.
Tương tự với syl là line với cách viết line. và $l
Một số giá trị của karaoke được dùng thường xuyên
Bài viết gốc về variables ở đây
Aegisub/docs/Karaoke_Templater_Reference__Inline_variables.html
- Thời lượng của syl: $dur hoặc $sdur - syl.duration (mặc định nếu không để template line thì hai cái đó là một) và
$skdur
- Thời gian bắt đầu và kết thúc của syl so với cả line: $sstart, $send - syl.start_time, syl.end_time
- Thời gian giữa của syl: $smid (tương đương với vị trí 50% của $sdur)
- Số thứ tự của syl và tổng số syl trong line: $si, $syln - syl.i, syl.n
Code:
{k22}A{k25}o{k43}i {k33}so{k24}ra {k69}ni{k65} {k53}hi{k54}ko{k38}u...
Ở đây có tất cả là 10 tag k tương đương 10 syl, nhưng chỉ có 9 từ để hát vì có hai syl liền nhau
Giờ ta sẽ nói về các tham số tọa độ của syl và line:
- Vị trí chính giữa tính theo trục ngang (trục x): $scenter
- Rìa bên trái của syl: $sleft - syl.left
- Rìa bên phải của syl: $sright - syl.right
- Vị trí giữa tính theo trục dọc (trục y): $smiddle
- Rìa phía trên của syl: $stop - syl.top
- Rìa phía dưới của syl: $sbottom - syl.bottom
- $sx và $sy là giá trị mặc định tính theo style, ít dùng
- Chiều rộng của syl, tính từ bên trái đến bên phải: $swidth - syl.width
- Chiều dài của syl, từ trên xuống dưới: $sheight - syl.height
Vì muốn chữ được nằm đúng vị trí của dòng karaoke gốc nên ta cần sử dụng an và pos();move() cho tương thích.
Chủ yếu vẫn là an5pos($scenter,$smiddle)
Với line ta chỉ cần thay $s bằng $l hay syl. bằng line.
Tính tọa độ và thời gian là phần quan trọng trong việc tạo hiệu ứng về di chuyển, vẽ, cắt. Nó cũng giúp bù bớt đi một
số hạn chế của auto4 và lua, nhất là việc không thể chia chữ thành các điểm nhỏ như python, ta có thể dùng clip để
thay thế.
Chỉnh lại thời gian karaoke bằng retime
Đây là code cho một hiệu ứng hiện chữ rất phổ biến, có thể thấy ở OP Mahoraba [Vi-Anime]
Code:
template syl noblank: !retime("start2syl", -350+($si-1)*30, 0)!{an5move($scenter,
!$smiddle-15!,$scenter, $smiddle, 0, 300)fad(200,0)bord1c!line.styleref.color1!}
template syl noblank: !retime("syl", 0, 0)!{an8pos($scenter,
$stop)c!line.styleref.color2!3c&HFFFFFF&t(0, $dur, bord2frx270)}
template syl noblank: !retime("syl2end", 0, 350-($syln-$si)*30)!{an8pos($scenter,
$stop)bord23c&HFFFFFF&frx270t(0, 500, bord1frx360)fad(0,150)}
Giải thích:
Ở đây chữ sẽ rơi xuống và hiện lên từ trái qua phải nhờ move($scenter, !$smiddle-15! ,$scenter, $smiddle, 0, 300) và
fad(200, 0).
Phần chữ rơi đơn giản là ta cho điểm xuất phát nằm cao hơn 15 ($scenter, !$smiddle-15!) với điểm gốc ($scenter,
$smiddle) là được, phép tính được đặt trong hai dấu chấm than.
Điểm chính ở đây là làm sao để thời gian chữ xuất hiện tăng dần như vậy. Ta biết là số thứ tự của syl $si cũng là một
số tăng dần từ đầu đến cuối line, vậy ta sẽ dùng luôn nó để tạo thời gian tăng dần.
Code:
!retime("start2syl", -350+($si-1)*30, 0)!
Đầu tiên nói về phần ($si-1)*30: đây chính là khoảng thời gian đầu của syl so với đầu của line karaoke gốc. Nó cộng
thêm 30 (mili giây) cho mỗi syl tiếp theo để tăng dần thời gian, do đó làm syl sau xuất hiện muộn hơn syl ở trước
1*30 = 30 => !retime("start2syl", 30, 0)!
2*30 = 60 => !retime("start2syl", 60, 0)!
3*30 = 90 => !retime("start2syl", 90, 0)!
Vậy tại sao lại trừ 1, vì dĩ nhiên thời gian của syl đầu tiên $si = 1 phải là 0 nên ta trừ 1 để khi nhân 30, start_time của
nó là 0.
Còn với phần -350, đây thực ra là khoảng thời gian bù cho việc chữ của syl xuất hiện quá muộn so với lúc bắt đầu của
line gốc. Các khoảng lệch retime bên trên đều mang giá trị dương, ta sẽ trừ đi 350 để nó sớm hơn.
!retime("start2syl", -350+90, 0)! = !retime("start2syl", -240, 0)!
sớm 240 (mili giây) so với thời gian gốc.
Code:
!retime("syl2end", 0, 350-($syln-$si)*30)!
Đây lại là phần tính thời gian kết thúc giảm dần được dùng cho cuối line làm chữ biến mất. Ta lấy tổng số syl trừ đi số
thứ của syl, kết quả sẽ giảm dần cho đến 0.
Một cách biến hóa khác là đổi dấu cộng thành dầu trừ cho thời gian bù thêm, ta sẽ đổi được chiều của hiệu ứng, thay
vì từ trái qua phải lại thành từ phải qua trái. -350+($si-1)*30 thành -350-($si-1)*30 Với cách chỉnh lại thời gian thế
này ta có thể làm được rất nhiều hiệu ứng hiện chữ khi kết hợp với di chuyển và xoay
Trong phần !retime! có thể thay bằng các giá trị khác sẽ được nói sau
Căn chỉnh thời gian cho hiệu ứng
Giờ ta sẽ nói về việc sử dụng tag t cũng một số khác với thời gian của syl. Cái này các bạn có thể tùy ý ra nhiều
Code:
template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)t(0,
!0.3*$dur!, bord2c!line.styleref.color2!3c&HFFFFFF&fscy125fscy125)t(!0.5*$dur!,
$dur, fscx100fscy100)}
template syl noblank: !retime("syl2end", 0, 250)!{an5move($scenter, $smiddle,
!$scenter-20!, !$smiddle+20!, !line.duration-350!,
!line.duration!)bord23c&HFFFFFF&t(0, 500,
bord1c&HFFFFFF&3c!line.styleref.color2!)fad(0, !$dur/2!)}
Giải thích:
!retime("syl", 0, 0)! Vớihaitag t() t(0, !0.3*$dur!) và t(!0.5*$dur!, $dur) ta sẽ chia thời gian hiệu ứng phóng chữ
fscxfscy thành ba phần. Phần đầu từ 0 đến 30% thời lượng của syl thì to lên, sau đó giữ nguyên đến 50% thời lượng
dur mới thu về 100%, và đạt 100% ở cuối dur (syl end).
!retime("syl2end", 0, 250)! Phần này thời lượng được kéo dài thêm so với line gốc 250 (mili giây) để có thời gian
cho chữ rơi xuống, như là đồng loạt với nhau. move($scenter, $smiddle, !$scenter-20!,
!$smiddle+20!,!line.duration-350!, !line.duration!) Với phần di chuyển này, chữ sẽ từ vị trí gốc lùi 20 theo trục x
(!$scenter-20!) và xuống 20 theo trục y (!$smiddle+20!). Cái chú ý ở đây là nó không chạy ngay sau khi hết syl mà là
lúc còn 350 (mili giây) mới chạy để dành chỗ cho line tiếp theo hiện ra. Nó tính ngược với t() ở trên, đây chính là
phần tính thời gian ngược ấy !line.duration-350!, !line.duration! - !line.duration! tổng thời gian của line hiện tại
("syl2end", 0, 250), ở đây là từ cuối syl đến cộng thêm 250 so với lúc kết thúc line gốc.
fad(0, !$dur/2!) Đây là phần làm chữ mờ dần trong thời gian khác với mỗi syl, ta lấy chính thời lượng của syl để làm
thời gian mờ. Có thể thấy nó ở OP Seitokai no Ichizon [Elipse]
Các dạng hàm tính toán
Copy từ bài hướng dẫn dùng lua lập trình game
http://forum.clbgamesvn.com/showthread.php?t=25489
Có nhiều hàm tính toán vậy nhưng được dùng nhiều nhất vẫn là math.random, math.randomseed và math.floor,
math.max/min
math.abs
Trả về giá trị tuyệt đối hoặc giá trị không âm của giá trị nhận vào
> = math.abs(-100)
100
> = math.abs(25.67)
25.67
> = math.abs(0)
0
math.acos, math.asin
Trả về nghịch đảo cos và sin của giá trị đưa vào
> = math.acos(1)
0
> = math.acos(0)
1.5707963267949
> = math.asin(0)
0
> = math.asin(1)
1.5707963267949
math.atan, math.atan2
Trả về nghịch đảo tang. Chúng ta có thể được bằng cách cung cấp y/x sử dụng math.atan hoặc có thể truyền y và x vào
math.atan2
> c, s = math.cos(0.8), math.sin(0.8)
> = math.atan(s/c)
0.8
> = math.atan2(s, c)
0.8
math.atan2 được ưa chuộng hơn, đặc biệt khi chuyển tọa độ vuông góc sang tọa độ có cực. math.atan2 sử dụng dấu
của cả hai tham số để đặt kết quả vào đúng góc phần tư và cũng tạo ra các giá trị đúng khi 1 trong 2 tham số là 0 hoặc
rât gần 0
> = math.atan2(1, 0), math.atan2(-1, 0), math.atan2(0, 1), math.atan2(0, -1)
1.5707963267949 -1.5707963267949 0 3.1415926535898
math.ceil, math.floor (hay dùng)
Trả về số nguyên lớn hơn hoặc nhỏ hơn gần nhất giá trị đưa vào
> = math.floor(0.5)
0
> = math.ceil(0.5)
1
math.cos, math.sin, math.tan
Trả về giá trị cos, sin và tang của giá trị đưa vào dưới dạng radian
> = math.cos(math.pi / 4)
0.70710678118655
> = math.sin(0.123)
0.12269009002432
> = math.tan(5/4)
3.0095696738628
> = math.tan(.77)
0.96966832796149
math.cosh, math.sinh, math.tanh
Trả về giá trị cos, sin và tang hyperbolic từ giá trị đưa vào
> = math.sinh(1)
1.1752011936438
math.deg, math.rad
Chuyển từ radian sang độ và ngược lại
> = math.deg(math.pi)
180
> = math.deg(math.pi / 2)
90
> = math.rad(180)
3.1415926535898
> = math.rad(1)
0.017453292519943
math.exp, math.log
math.exp() trả về giá trị của e mũ giá trị nhập
math.log() trả về giá trị logarithm cơ số e của giá trị nhập vào
> = math.exp(0)
1
> = math.exp(1)
2.718281828459
> = math.exp(27)
532048240601.8
> = math.log(532048240601)
26.999999999998
> = math.log(3)
1.0986122886681
math.log10
Trả về logarithm bậc 10 của 1 số. Số nhập vào phải dương
> = math.log10(100)
2
> = math.log10(256)
2.4082399653118
> = math.log10(-1)
-1.#IND
math.pow, x^y
math.pow() trả về giá trị của x mũ y, tương tự với toán tử ^. math.pow(x,y) == x^y
> = math.pow(100,0)
1
> = math.pow(7,2)
49
> = math.pow(2,8)
256
> = math.pow(3,2.7)
19.419023519771
> = 5 ^ 2
25
> = 2^8
256
math.min, math.max (hay dùng)
Trả về giá trị nhỏ nhất hay lớn nhất từ các tham số truyền vào.
> = math.min(1,2)
1
> = math.min(1.2, 7, 3)
1.2
> = math.min(1.2, -7, 3)
-7
> = math.max(1.2, -7, 3)
3
> = math.max(1.2, 7, 3)
7
math.modf
Trả về phần nguyên và phần thập phân của số nhập vào.
> = math.modf(5)
5 0
> = math.modf(5.3)
5 0.3
> = math.modf(-5.3)
-5 -0.3
math.sqrt
Trả về giá trị căn bậc 2 của số nhập vào. Chỉ cho phép số không âm
> = math.sqrt(100)
10
> = math.sqrt(1234)
35.128336140501
> = math.sqrt(-7)
-1.#IND
math.random, math.randomseed (đây là cái sử dụng nhiều nhất)
math.random() tạo ra những số ngẫu nhiên. Những tham số truyền vào sẽ thay đổi giá trị xuất:
math.random() không có tham số sẽ tạo ra 1 số thực nằm trong khoảng 0 và 1.
math.random(upper) tạo ra các số nguyên lớn hơn 1.
math.random(lower, upper) tạo ra các số nguyên nằm trong khoảng giữa lower và upper
> = math.random()
0.0012512588885159
> = math.random()
0.56358531449324
> = math.random(100)
20
> = math.random(100)
81
> = math.random(70,80)
76
> = math.random(70,80)
75
upper và lower phải là số nguyên
Hàm math.randomseed() đặt một seed cho việc tạo số ngẫu nhiên. Các seed bằng nhau sẽ cho các chuỗi số bằng nhau.
- Chọn số đẹp
> math.randomseed(1234)
> = math.random(), math.random(), math.random()
0.12414929654836 0.0065004425183874 0.3894466994232
> math.randomseed(1234)
> = math.random(), math.random(), math.random()
0.12414929654836 0.0065004425183874 0.3894466994232
Một seed tốt là os.time(), nhưng phải chờ 1 giây trước khi gọi hàm để thu được 1 trình từ khác! Để lấy được số ngẫu
nhiên đẹp dùng
math.randomseed(os.time())
math.frexp, math.ldexp
Đây là những hàm chuẩn hóa. Hàm math.frexp() được sử dụng để tách giá trị số thành 1 phần nguyên chuẩn và 1 số
mũ. 2 giá trị được trả về: giá trị đầu nằm trong khoảng ½ đến 1 và giá trị thứ 2 là một số mũ. Hàm math.ldexp() lấy 1
giá trị chuẩn và trả về biểu hiện chấm động. đây là giá trị được nhân cho 2 mũ số mũ
> = math.frexp(2)
0.5 2
> = math.frexp(3)
0.75 2
> = math.frexp(128)
0.5 8
> = math.frexp(3.1415927)
0.785398175 2
> = math.ldexp(0.785,2)
3.14
> = math.ldexp(0.5,8)
128
math.huge
math.huge là 1 hằng số, biểu diễn +vô cực.
> = math.huge
Inf
> = math.huge / 2
inf> = -math.huge
-inf
> = math.huge/math.huge – indeterminate
Nan
> = math.huge * 0 – indeterminate
Nan
> = 1/0
Inf
> = (math.huge == math.huge)
True
> = (1/0 == math.huge)
True
Chú ý rằng một số toán tử trên math.huge trả về giá trị đặc biệt không phải là 1 số được biểu diễn là nan. Nan là 1 kiểu
số, khác các kiểu số khác
> = type(math.huge * 0)
Number
math.pi
Đây là hằng số PI
> = math.pi
3.1415926535898
Hardsub cho những phần dùng tag mới (typeset + karaoke), nếu softsub máy nào không có bản mod sẽ không xem
được các tag này.
(Đây là phiên bản không chính thức, nhóm phát triển hiện chưa chấp nhận tuy nhiên nó bổ sung rất nhiều tag mới mà
bản hiện có không đáp ứng được)
Mọi thông tin về cập nhập, sửa chữa hay hướng dẫn và download tại trang chủ của project này
http://code.google.com/p/vsfiltermod/
hoặc ở đây (v2.39 MODv1.0 14/04/2010)
http://www.mediafire.com/?yftwwdutujm
Cách cài:
Copy file VSFilterMod.dll vào hai thư mục Aegisubcsri và AviSynth 2.5Plugins (cũng tùy vào vị trí đã cài hai soft
đó)
Với Aegisub
Code:
C:Program FilesAegisubcsri
Sau đó, mở Aegisub lên. Vào menu ViewOption (Alt + O), chọn nhãn Video ở bên trái. Đổi Subtitle
provider từ csri/vsfilter_textsub thành csri/vsfiltermod_textsub.
.
Với avisynth
Code:
C:Program FilesAviSynth 2.5Plugins
Trong nội dung file avs, đơn giản chỉ cần gõ từ TextSub() sang TextsubMod() để hardsub.
Với DirectShow (xem video softsub) (Không nên dùng)
Bật hộp Run (Ctrl + R) lên và gõ nội dung này vào và enter để đăng ký cho window biết
Code:
regsvr32 "C:Program FilesAviSynth 2.5PluginsVSFilterMod.dll"
để gỡ bỏ
regsvr32 u "C:Program FilesAviSynth 2.5PluginsVSFilterMod.dll"
Với VirtualDub (load sub qua avs thì cái này không cần thiết)
Copy VSFilterMod.dll vào thư mục plugins của VirtualDub và đổi tên file VSFilterMod.dll thành VSFilterMod.vdf.
Chọn filter này giống như chọn bản VSFilter (textsub) trước)
Danh sách tag mới
Co kéo cỡ chữ (Font scale)
fsc<phần trăm> - Đây là gộp gọn lại của hai tag cũ fscx<scale>fscy<scale>. Sử dụng tương tự, cái này không có gì
đặc biệt. Dùng được với t()
fsc200 = fscx200fscy200.
Dẫn hướng (Leading)
fsvp<số> Đổi hướng và độ cao của chữ (chưa rõ), giá trị là các số. Dùng được với t() t(fsvp10)
Nghiêng chữ theo hàng (Baseline obliquity).frs<góc> Xoay các chữ cái theo một một đường thẳng, giống như các
tag frxfrzfry nó cũng phụ thuộc vào an. Dùng được với t(). {an6t(frs-15frz25)pos(306,239)} - đu quay
Tọa độ z (Z coordinate)
z<số> Đặt thêm tọa độ của trục z cho chữ, thay vì chỉ có ngang dọc (x, y) như hiện giờ. Đặt giá trị dương để chữ lùi
ra xa, đặt âm để làm chữ lại gần (gần giống scale) Dùng được với t()
Vặn chữ (Distortion)
distort(u1,v1,u2,v2,u3,v3) Cáinày mạnh hơn fax và fay. Vặn xoắn chữ đến các mức độ đã định, đặt giá trị âm dương
như với fax và fay . Dùng được với t(). t(distort(1, 1, 1, 0, 0, 1)) xoắn lò xo.
Làm méo viền chữ (Boundaries deforming)
rnd<arg> rndx<arg> rndy<arg> rndz<arg> Co kéo viền của chữ theo pixel làm nó bị uốn éo như sóng nước.
Dùng được với t() Cái này rất hay
Lan màu và mức trong suốt
1vc(màu góc trái-trên, màu góc phải trên, màu góc trái dưới, màu góc phải dưới), 2vc(), 3vc(), 4vc() Nó sẽ cho
màu lan dần từ cạnh này sang cạnh kia của chữ, bốn màu ấy có thể giống nhau. Với bản kia, tạo hiệu ứng này phức tạp
và khác nặng máy
1vc(&HFFFFFF&,&HFFFFFF&,&H1675EC&, &H1675EC&)
1va(mức alpha góc trái-trên,mức alpha góc phải trên, mức alpha góc trái dưới, mức alpha góc phải dưới), 2va(),
3va(), 4va() Giống như trên, các giá trị cũng đặt như với 1a, 2a,...
1va(&HFF&,&H00&,&H00&, &HFF&)
Thay màu chữ, hình vẽ bằng ảnh nền
1img(đường dẫn file png[,xoffset,yoffset]), 2img(), 3img, 4img() Cái này thích hợp với typeset logo hơn.
{3vc(&HFF00FF&,&HFFFF00&,&H00FFFF&,&HFFFFFF&)1img(Z:/subs/as.png,0,0)pos(300,250)bord10p1}m
-150 0 b -150 -80 -80 -150 0 -150 80 -150 150 -80 150 -1 150 80 80 150 4 150 -80 150 -150 80 -150 0{p0}
org(x1, x2, x2, y2 [,t1, t2]) Dịch chuyển tọa độ của tâm
{an5org(100, 200, 700, 200)fs50shad0frz0t(frz360)pos(400,200)}foo bar
Move có điểm neo và xoay (Polar move)
mover(x1,y1,x2,y2,angle1,angle2,radius1,radius2[,t1,t2]) Có thể di chuyển theo các đường lượn.
angle1,angle2,radius1,radius2 Góc lệch và vị trí lệch (đang mò)
mover(10,10,60,60,0,0,0,0) — it's equivalent to move(10,10,60,60). mover(0,0,0,0,-90,0,150,150) — moves
relatively to upper left screen corner along an arc of a circle (-90,0) with radius 150 points.
Move theo đường cong (Spline-move)
moves3(x1,x2,x2,y2,x3,y3[,t1,t2]) moves4(x1,x2,x2,y2,x3,y3,x4,y4[,t1,t2])
Đây là đường đi của chữ cong theo bốn điểm đã định
Chữ rung rung (Shaking)
jitter(left,right,up,down,period[,seed]) Rung chữ theo các hướng, fifth parameter sets shaking period in milliseconds,
sixth parameter sets the initial seed for random number generator so the form shaking will not change upon calls.
Animatable by t
{an5shad0fs30jitter(1,1,1,1,1,0)}
Moveable vector clip
movevc(x1,y1)
movevc(x1,y1,x2,y2[,t1,t2]) Di chuyển vị trí clip bằng vetor.
Một số hiệu ứng di chuyển
Sử dụng các phép tính math hoặc cho trượt trên một vòng tròn cực lớn
Chữ tách ra thành từng chữ cái riêng
Đây là phần cho syl, phần start2syl đến lead in (dẫn chữ vào) thế nào cùng được.
Code:
template noblank char: !retime("syl", 0, 1000)!{an5bord2c&HFFFFFF&t(0, $dur,
c&HFFAA00&bord1)move($scenter, $smiddle, !$scenter-math.random(-5, 35)!,
!$smiddle+math.random(-5, 30)!, $dur, !line.duration!)}
Không xoay
Code:
template noblank char: !retime("syl", 0, 1000)!{an5bord2c&HFFFFFF&t(0, $dur,
c&HFFAA00&bord1)move($scenter, $smiddle, !$scenter-math.random(-5, 35)!,
!$smiddle+math.random(-5, 30)!, $dur, !line.duration!)t($dur, !line.duration!,
frz!math.random(-45, 90)!fry!math.random(-45, 90)!frx!math.random(-90,
90)!)fad(0,500)}
Xoay và mờ dần
Giải thích: Cái chính ở đây là template char, khi dùng template char hiệu ứng sẽ được áp dụng cho từng chữ cái của
karaoke, nếu không có nó, ta sẽ thấy chữ vẫn dính vào nhau.
Để có thể di chuyển chữ ra xung quanh như thế ta dùng math.random để nhặt số ngẫu nhiên rồi cộng nó với tọa độ
cũ, math.random(-5, 30) là nhặt ra các số từ khoảng -5 đến 30, $dur, !line.duration! khoảng thời gian này là từ khi hết
âm rồi chữ mới tách ra, tương đương với độ dài 1000 ở phần retime.
Nếu muốn chữ trong khi di chuyển có thể xoay nữa ta dùng thêm các tag góc như frz, frx hay fry đặt trong
t(). frz!math.random(-45, 90)![/B] Ở đây chữ sẽ xoay nghiêng theo một góc nào đó từ -45 đến 90 nhờ math.random,
nhờ thế tạo được vẻ tự nhiên.
Đổi ngược thời gian và vị trí lại ta có chữ lắp ráp
Code:
template noblank char: !retime("start2syl", -300,
0)!{an5bord1c&HFFFFFF&frz!math.random[/B](-45, 90)!fry!math.random(-45,
90)!frx!math.random(-90, 90)!t(0, 300, bord2frz0fry0frx0)move(!$scenter-
math.random(-5, 35)!, !$smiddle+math.random(-5, 30)!, $scenter, $smiddle, 0, 300)}
Hiệu ứng chữ nhảy
Để tạo hiệu ứng này có một số cách, như là move lên rồi move xuống, một cách khác nữa là cho chữ trượt một quãng
ngắn trên một vòng tròn cực lớn, nhìn giống như chạy thẳng. Các nữa cho bản VsfilterMod là sử dụng tag fsvp rất
đơn giản và có thể vừa nhảy vừa xoay
Chia thời gian ra là 2 đoạn bằng retime, thường là dùng sylpct (mức phần trăm của mỗi syl)
Code:
template noblank: !retime("sylpct", 0, 50)!{an5move($scenter, $smiddle, $scenter,
!$smiddle-15!)}
template noblank: !retime("sylpct", 50, 100)!{an5move($scenter, !$smiddle-15!,
$scenter $smiddle)}
Giải thích:
!retime("sylpct", 0, 50)! là từ 0% đến 50% của thời lượng syl, tương đương với !retime("syl", 0, -0.5*$dur)! hay
!retime("presyl", 0, 0.5*$dur)!. Khi đó chữ sẽ chạy lên 15 pixel.
Sau đó phần !retime("sylpct", 50, 100)! là từ 50% còn lại đến 100% của thời lượng syl, tương đương với !retime("syl",
0.5*$dur, 0)! hay !retime("presyl", 0.5*$dur, $dur)! chữ sẽ từ mức 15 pixel kia chạy xuống vị trí gốc.
Làm cách này nếu để chữ nhảy qua trái hay phải (trừ hay cộng thêm vào $scenter) sẽ trông như đường rích rắc, không
được mượt nên ta sẽ dùng một cách khác là cho chữ trượt trên đường tròn thật to.
Code:
template noblank: !retime("syl", 0, 0)!{an5move($scenter, $smiddle, !$scenter-15!,
$smiddle, 0, !$dur*0.80!)org(-10000, $smiddle)t(0, !$dur*0.50!, frz-
0.05)t(!$dur*0.60!, $dur, frz0)}
Chữ sẽ xoay theo đường tròn có tâm ở tận tọa độ (-10000, $smiddle) với một góc rất nhỏ chỉ 0.05 độ nên tạo cảm giác
như chạy thẳng, đừng đặt quá to nếu không chữ sẽ biến mất khỏi màn hình đấy. Trong khi nhảy nên nó còn chạy sang
trái một đoạn 15 pixel như thể nhảy xa. Nhược điểm của kiểu này là vì có đặt tâm ở xa nên ta không thể dùng các tag
xoay khác như frx và fry với giá trị lớn, nó sẽ khiến chữ bị xoay theo chiều x và y rất loạn. Nếu muốn chữ lắc lư có
thể đổi vị trí của tâm thay vì nằm ngang tầm mà lại nằm bên trên hoặc bên dưới org($scenter, -10000) nó sẽ xoay qua
trái phải. Xem trong OP Minami-ke [Vi-Anime] để thấy hiệu ứng là sử dụng rất đẹp

More Related Content

What's hot

Giáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng AutocadGiáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng Autocad
Đàm Tài Cap
 
Luận văn: Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
Luận văn:  Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần ThơLuận văn:  Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
Luận văn: Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
Dịch vụ viết thuê Khóa Luận - ZALO 0932091562
 
Công thức Vật lý đại cương III
Công thức Vật lý đại cương IIICông thức Vật lý đại cương III
Công thức Vật lý đại cương III
Vũ Lâm
 
Bản chất ngữ âm
Bản chất ngữ âmBản chất ngữ âm
Bản chất ngữ âmBích Phương
 
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sởĐề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Viết thuê trọn gói ZALO 0934573149
 
DẫN LuậN NgôN Ngữ nhóm 4 phần 2
DẫN LuậN NgôN Ngữ nhóm 4 phần 2DẫN LuậN NgôN Ngữ nhóm 4 phần 2
DẫN LuậN NgôN Ngữ nhóm 4 phần 2atcak11
 
Làm quen với Scratch
Làm quen với ScratchLàm quen với Scratch
Làm quen với Scratch
Bùi Việt Hà
 
Ielts speaking-vocab
Ielts speaking-vocabIelts speaking-vocab
Ielts speaking-vocab
Bui Loi
 
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
jackjohn45
 
Báo cáo thảo luận nhóm 14
Báo cáo thảo luận nhóm 14Báo cáo thảo luận nhóm 14
Báo cáo thảo luận nhóm 14huongdangyeu91
 
Qui tắc phát âm căn bản
Qui tắc phát âm căn bảnQui tắc phát âm căn bản
Qui tắc phát âm căn bản
Công Ty Cổ Phần Đào Tạo Universe
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++ANHMATTROI
 
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptxNGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
binhtrang0702
 
Part time job among vietnamese
Part time job among vietnamesePart time job among vietnamese
Part time job among vietnamese
Q&Me Vietnam Market Research
 
Bài giải nguyên lý kế toán trường đh kinh tế tphcm
Bài giải nguyên lý kế toán trường đh kinh tế tphcmBài giải nguyên lý kế toán trường đh kinh tế tphcm
Bài giải nguyên lý kế toán trường đh kinh tế tphcmphamvietquoc
 

What's hot (20)

Giáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng AutocadGiáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng Autocad
 
Luận văn: Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
Luận văn:  Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần ThơLuận văn:  Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
Luận văn: Kỹ năng giao tiếp của sinh viên Sư phạm trường Cao đẳng Cần Thơ
 
văn hóa kinh doanh
văn hóa kinh doanhvăn hóa kinh doanh
văn hóa kinh doanh
 
Công thức Vật lý đại cương III
Công thức Vật lý đại cương IIICông thức Vật lý đại cương III
Công thức Vật lý đại cương III
 
Bản chất ngữ âm
Bản chất ngữ âmBản chất ngữ âm
Bản chất ngữ âm
 
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sởĐề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
Đề tài: Tác động của mạng xã hội Facebook đối với học sinh trung học cơ sở
 
DẫN LuậN NgôN Ngữ nhóm 4 phần 2
DẫN LuậN NgôN Ngữ nhóm 4 phần 2DẫN LuậN NgôN Ngữ nhóm 4 phần 2
DẫN LuậN NgôN Ngữ nhóm 4 phần 2
 
Làm quen với Scratch
Làm quen với ScratchLàm quen với Scratch
Làm quen với Scratch
 
Ielts speaking-vocab
Ielts speaking-vocabIelts speaking-vocab
Ielts speaking-vocab
 
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
Chuyên đề khảo sát và đánh giá thực trạng đạo đức, lối sống sinh viên trường ...
 
Prezi
PreziPrezi
Prezi
 
Báo cáo thảo luận nhóm 14
Báo cáo thảo luận nhóm 14Báo cáo thảo luận nhóm 14
Báo cáo thảo luận nhóm 14
 
Qui tắc phát âm căn bản
Qui tắc phát âm căn bảnQui tắc phát âm căn bản
Qui tắc phát âm căn bản
 
Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++Mot so ham do hoa trong c c++
Mot so ham do hoa trong c c++
 
Bài tổng hợp
Bài tổng hợpBài tổng hợp
Bài tổng hợp
 
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptxNGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
NGHIỆP VỤ HOÁN ĐỔI (SWAP).pptx
 
Biên bản họp nhóm
Biên bản họp nhómBiên bản họp nhóm
Biên bản họp nhóm
 
Part time job among vietnamese
Part time job among vietnamesePart time job among vietnamese
Part time job among vietnamese
 
Bài giải nguyên lý kế toán trường đh kinh tế tphcm
Bài giải nguyên lý kế toán trường đh kinh tế tphcmBài giải nguyên lý kế toán trường đh kinh tế tphcm
Bài giải nguyên lý kế toán trường đh kinh tế tphcm
 
Kỹ thuật số
Kỹ thuật sốKỹ thuật số
Kỹ thuật số
 

More from Nhân Quả Công Bằng

THIẾT KẾ MẪU 2
THIẾT KẾ MẪU 2THIẾT KẾ MẪU 2
THIẾT KẾ MẪU 2
Nhân Quả Công Bằng
 
Bài giảng THIẾT BỊ MAY
Bài giảng THIẾT BỊ MAYBài giảng THIẾT BỊ MAY
Bài giảng THIẾT BỊ MAY
Nhân Quả Công Bằng
 
Đề cương Quản Lý Đơn Hàng Ngành May
Đề cương Quản Lý Đơn Hàng Ngành MayĐề cương Quản Lý Đơn Hàng Ngành May
Đề cương Quản Lý Đơn Hàng Ngành May
Nhân Quả Công Bằng
 
Mỹ Thuật Trang Phục
Mỹ Thuật Trang PhụcMỹ Thuật Trang Phục
Mỹ Thuật Trang Phục
Nhân Quả Công Bằng
 
Kỹ Thuật In Thêu
Kỹ Thuật In ThêuKỹ Thuật In Thêu
Kỹ Thuật In Thêu
Nhân Quả Công Bằng
 
Dựng Hình Cơ Thể Người
Dựng Hình Cơ Thể NgườiDựng Hình Cơ Thể Người
Dựng Hình Cơ Thể Người
Nhân Quả Công Bằng
 
Đồ Họa Trang Phục
Đồ Họa Trang PhụcĐồ Họa Trang Phục
Đồ Họa Trang Phục
Nhân Quả Công Bằng
 
Bài giảng Tạo Mẫu Thời Trang
Bài giảng Tạo Mẫu Thời TrangBài giảng Tạo Mẫu Thời Trang
Bài giảng Tạo Mẫu Thời Trang
Nhân Quả Công Bằng
 
【 Giáo Trình 】Tài Liệu Nhập Môn Blender
【 Giáo Trình 】Tài Liệu Nhập Môn Blender【 Giáo Trình 】Tài Liệu Nhập Môn Blender
【 Giáo Trình 】Tài Liệu Nhập Môn Blender
Nhân Quả Công Bằng
 
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
Nhân Quả Công Bằng
 
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
Nhân Quả Công Bằng
 
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
Nhân Quả Công Bằng
 
CẮT MAY CĂN BẢN – VÕ THÀNH PHƯƠNG
CẮT MAY CĂN BẢN  – VÕ THÀNH PHƯƠNGCẮT MAY CĂN BẢN  – VÕ THÀNH PHƯƠNG
CẮT MAY CĂN BẢN – VÕ THÀNH PHƯƠNG
Nhân Quả Công Bằng
 
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚITÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
Nhân Quả Công Bằng
 
TỪ ĐIỂN DỆT MAY ANH VIỆT - Phần 3
TỪ ĐIỂN DỆT MAY ANH  VIỆT - Phần 3TỪ ĐIỂN DỆT MAY ANH  VIỆT - Phần 3
TỪ ĐIỂN DỆT MAY ANH VIỆT - Phần 3
Nhân Quả Công Bằng
 
VẬT LIỆU DỆT MAY – Trần Thủy Bình
VẬT LIỆU DỆT MAY – Trần Thủy BìnhVẬT LIỆU DỆT MAY – Trần Thủy Bình
VẬT LIỆU DỆT MAY – Trần Thủy Bình
Nhân Quả Công Bằng
 
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
Nhân Quả Công Bằng
 
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤNVẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
Nhân Quả Công Bằng
 
Giáo Trình Vật Liệu May – Trường ĐTDN
Giáo Trình Vật Liệu May – Trường ĐTDNGiáo Trình Vật Liệu May – Trường ĐTDN
Giáo Trình Vật Liệu May – Trường ĐTDN
Nhân Quả Công Bằng
 
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
Nhân Quả Công Bằng
 

More from Nhân Quả Công Bằng (20)

THIẾT KẾ MẪU 2
THIẾT KẾ MẪU 2THIẾT KẾ MẪU 2
THIẾT KẾ MẪU 2
 
Bài giảng THIẾT BỊ MAY
Bài giảng THIẾT BỊ MAYBài giảng THIẾT BỊ MAY
Bài giảng THIẾT BỊ MAY
 
Đề cương Quản Lý Đơn Hàng Ngành May
Đề cương Quản Lý Đơn Hàng Ngành MayĐề cương Quản Lý Đơn Hàng Ngành May
Đề cương Quản Lý Đơn Hàng Ngành May
 
Mỹ Thuật Trang Phục
Mỹ Thuật Trang PhụcMỹ Thuật Trang Phục
Mỹ Thuật Trang Phục
 
Kỹ Thuật In Thêu
Kỹ Thuật In ThêuKỹ Thuật In Thêu
Kỹ Thuật In Thêu
 
Dựng Hình Cơ Thể Người
Dựng Hình Cơ Thể NgườiDựng Hình Cơ Thể Người
Dựng Hình Cơ Thể Người
 
Đồ Họa Trang Phục
Đồ Họa Trang PhụcĐồ Họa Trang Phục
Đồ Họa Trang Phục
 
Bài giảng Tạo Mẫu Thời Trang
Bài giảng Tạo Mẫu Thời TrangBài giảng Tạo Mẫu Thời Trang
Bài giảng Tạo Mẫu Thời Trang
 
【 Giáo Trình 】Tài Liệu Nhập Môn Blender
【 Giáo Trình 】Tài Liệu Nhập Môn Blender【 Giáo Trình 】Tài Liệu Nhập Môn Blender
【 Giáo Trình 】Tài Liệu Nhập Môn Blender
 
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
【NHẬN THỨC VỀ THỦ DÂM: TÁC HẠI & QUẢ BÁO】
 
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
[GIÁO TRÌNH] THIẾT BỊ TRONG CÔNG NGHIỆP MAY – NGUYỄN TRỌNG HÙNG
 
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
[GIÁO TRÌNH] THIẾT BỊ MAY CÔNG NGHIỆP VÀ BẢO TRÌ – TẠ THỊ NGỌC DUNG
 
CẮT MAY CĂN BẢN – VÕ THÀNH PHƯƠNG
CẮT MAY CĂN BẢN  – VÕ THÀNH PHƯƠNGCẮT MAY CĂN BẢN  – VÕ THÀNH PHƯƠNG
CẮT MAY CĂN BẢN – VÕ THÀNH PHƯƠNG
 
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚITÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
TÀI LIỆU KỸ THUẬT MAY MẶC - TÚI ỐP, TÚI MỔ, NẮP TÚI
 
TỪ ĐIỂN DỆT MAY ANH VIỆT - Phần 3
TỪ ĐIỂN DỆT MAY ANH  VIỆT - Phần 3TỪ ĐIỂN DỆT MAY ANH  VIỆT - Phần 3
TỪ ĐIỂN DỆT MAY ANH VIỆT - Phần 3
 
VẬT LIỆU DỆT MAY – Trần Thủy Bình
VẬT LIỆU DỆT MAY – Trần Thủy BìnhVẬT LIỆU DỆT MAY – Trần Thủy Bình
VẬT LIỆU DỆT MAY – Trần Thủy Bình
 
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
VẬT LIỆU DỆT MAY Phần 2 – VÕ PHƯỚC TẤN (Hết)
 
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤNVẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
VẬT LIỆU DỆT MAY Phần 1 – VÕ PHƯỚC TẤN
 
Giáo Trình Vật Liệu May – Trường ĐTDN
Giáo Trình Vật Liệu May – Trường ĐTDNGiáo Trình Vật Liệu May – Trường ĐTDN
Giáo Trình Vật Liệu May – Trường ĐTDN
 
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
NHẢY SIZE ÁO JACKET, VESTON, QUẦN TÂY, ÁO SƠ MI (NHÀ BÈ)
 

【 Hướng dẫn 】Sử dụng tags viết một số dạng hiệu ứng trong Aegisub

  • 1. CCÁÁCCHH SSỬỬ DDỤỤNNGG TTAAGG TTRROONNGG AAEEGGIISSUUBB ĐĐỂỂ TTẠẠOO HHIIỆỆUU ỨỨNNGG Phần mở đầu Đây sẽ là hướng dẫn sườn cho các bạn khởi đầu viết karaoke đầu tiên. Một template code của karaoke đơn giản nên có ba dòng xác định thời gian như sau, tùy độ phức tạp có thể thêm bớt những cái khác. Tuy chia ra như thế nhưng thời gian của cả 3 line là khớp đầu-cuối với nhau lên tính tổng thể vẫn liên tục. Code: template syl noblank: !retime("start2syl", 0, 0)! template syl noblank: !retime("syl", 0, 0)! template syl noblank: !retime("syl2end", 0, 0)! Giải thích: + Chúng ta sử dụng template syl để tạo cho mỗi âm của cả dòng karaoke một line riêng. Các sắp line như thế sẽ không làm các âm trong dòng kara ấy ảnh hưởng lẫn nhau, dễ tạo các hiệu ứng hơn. noblank mục đích để loại bỏ những dấu cách, những phần tag k không có chữ để sub nhẹ hơn + Phần !retime! chính là phần xác định lại thời gian (re timming) cho line so với thời gian gốc. Cấu trúc của nó là !retime("vị trí", độ lệch bắt đầu, độ lệch kết thúc)! !retime("start2syl", 0, 0)! là khoảng thời tính từ đầu line đến đầu của âm (syl), đó là khoảng thời gian chưa hát tới. Mực lệch ở đây là 0 , nghĩa là không thay đổi gì với kara gốc. !retime("syl", 0, 0)! là khoảng thời gian của âm đó, tiếng hát sẽ có ở đây. Hiệu ứng nằm ở phần này là chủ yếu. !retime("syl2end", 0, 0)! là khoảng thời gian tính từ cuối âm đó đến hết line, đó là khoảng thời gian đã hát qua. Các hiệu ứng kiểu dáng và màu sắc Giờ tôi sẽ định hướng cho các bạn về dạng này, đầy là dạng hiệu ứng dễ để bắt đầu. - Đổi đổi màu chữ, viền,... Đây là hiệu ứng, khi hát tới nơi chữ sẽ có viền lớn hơn và hát xong chữ sẽ trở lại lúc đầu (có thể thấy ở OP Kimi ni Todoke [Eclipse] khá hợp với video dù hiệu ứng đơn giản) Code: template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter, $smiddle)bord1} template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)bord2} template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter, $smiddle)bord1} Giải thích: - Phần start2syl và syl2end là giống nhau, ở đây sử dụng an5 để các chữ đựng neo ở chính giữa điểm pos(), các hiệu ứng sẽ được đều về mọi phía. Ví trí đặt chữ ở đây là trung tâm của chữ khi ở line gốc, ta gọi tọa độ ấy ra bằng hai time số $scenter và $smiddle. an5 và ($scenter, $smiddle) thường đi cũng với nhau. - Phần từ bắt đầu đến lúc hát đến nơi (start2syl) thì viền của chữ sẽ ở mức 1 nhờ tag bord1. - Trong khi hát (syl) thì chữ sẽ có mức viền bord2 và giữ nguyên đến hết âm. Ở đây không sử dụng tag biển đổi t() nên viền của chữ sẽ tăng lên ngay lập tức - Sau khi qua âm đó đến hết line (syl2end) chữ sẽ lập tức trở về mức viền bord1. Thời gian của line mới giữ nguyên với line kara gốc Để đổi thêm màu của chữ, kích thước chữ,... ta có thể cho thêm những tag đó vào. Code:
  • 2. layer 0 template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter, $smiddle)bord1c!line.styleref.color1!} layer 1 template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)bord2c!line.styleref.color2!3c&HFFFFFF&fscx120} layer 0 template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter, $smiddle)bord1c!line.styleref.color1!3c&HFFFFFF} Giải thích: Đây là phát triển thêm của hiệu ứng trước, các phần cũ không nói thêm - Ở phần start2syl, thay vì đưa thẳng mã màu vào (cũng chẳng nhớ màu nào) cho tag c, ta dùng tham số này !line.styleref.color1! để auto4 tự đưa mã màu đã đặt sẵn trong style (ở đây là &H00F4A6FC&) kết quả sẽ được c&H00F4A6FC&. Ở trong style có 4 ô màu tương tự ở đây sẽ có !line.styleref.color1! đến !line.styleref.color4!. - Đến phần syl,vẫn với cách tra màu như trên nhưng ta sẽ lấy màu ở ô số 2 trong style nhờ !line.styleref.color2!, như thế sub sẽ đổi màu (kết quả là c&H00F4A6FC&). Ở đầy màu viền 3c, ta không muốn tra ở trong style nữa mà đặt hẳn là màu trắng 3c&HFFFFFF& Ở đây có sử dụng thêm cả tag fscx, mục đích là để chữ sẽ kéo dài ra theo chiều ngang là 120%, trông chữ sẽ to hơn. Ta có thể sử dụng thêm một số tag khác như fs hay fscy để thu hay phóng kích thước của chữ. Tùy theo an mà chữ sẽ được co kéo theo chiều nào, an8 chữ sẽ kéo xuống dưới, an6 là sang trái, an2 là lên trên, an4 là sang phải, có thêm cả với 7, 9, 3, 1) - Ở phần về cuối line syl2end, chữ sẽ được trả về mức viền như ban đầu bằng bord1 và độ co kéo là fscx100 như mặc định có trong style. Thêm đó vẫn giữ nguyên màu viền ở đoạn syl là 3c&HFFFFFF& và đổi lại màu thànhc!line.styleref.color1!. Lý do tại sao ở đây lại set cho line syl có layer lớn hơn hai line còn lại vì muốn để cho line này nằm trên, khi tăng độ lớn chữ sẽ không bị chữ nằm cạnh che mất. Đổi style của chữ một cách từ từ bằng t() Các hiệu ứng bên trên đều xuất hiện đột ngột chứ không có chuyển đổi dần dần, giờ tôi sẽ hướng dẫn các bạn sử dụng t() để hiệu ứng được uyển chuyển. Trước tiên nói về tác dụng và khả năng của t(): Tag t() dùng để biến đổi dần dần từ giá trị này đến giá trị kia của một số tag khác. Chẳng hạn như tăng dần fontsize từ 18 thành 26 làm cho chữ to lên hay tăng/giảm góc lệch làm cho chữ xoay tròn. Vì t() là tag biến đổi dần dần nên nó chỉ có tác dụng với những tag có nhiều mức độ giá trị khác nhau, như để chuyển font size từ 18 thành 26 nó sẽ đổi font dần dần trung gian giữa hai mức đó. Chính vì thế nó không có tác dụng với các tag chỉ có hai giá trị cố định là b, i, u, s, fn, an hay các vector đồ họa. Với tag tọa độ pos() hiện nay chỉ có thể dùng move() để làm chữ di chuyển. Code: template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter, $smiddle)bord1c!line.styleref.color1!} template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)t(0, !0.5*$dur!, bord2c!line.styleref.color2!3c&HFFFFFF&fscy125)} template syl noblank: !retime("syl2end", 0, 0)!{an5pos($scenter, $smiddle)bord23c&HFFFFFF&fscy125t(0, 500, bord1fscy100c&HFFFFFF&3c!line.styleref.color2!)} Giải thích
  • 3. - Ở đây các bạn sẽ thấy ở phần !retime("syl", 0, 0)! chữ không đổi sang màu !line.styleref.color2! và to lên ngay lập tức mà từ từ, ở đây khác với bên trên là cho chữ giãn ra 125% theo chiều dọc nhờ fscy Nhờ t() mà trong khoảng thời gian từ 0 tới 50% của tiếng hát (0.5*$dur), $dur chính là thời gian nằm trong k, hiệu ững chữ đã thay đổi dần dần. - Trong phần syl2end, phần phía trước t() vẫn giữ nguyên so với của syl, sau đó mới đổi sang màu chữ và viền là c&HFFFFFF&3c!line.styleref.color2!, thêm nữa giảm độ giãn chiều dọc fscy từ 125% xuống 100% và độ dày của viền về bord1 trong thời lượng 500 (mili giây - nửa giây) Hiệu ứng chữ xoay Code: template syl noblank: !retime("start2syl", 0, 0)!{an5pos($scenter, $smiddle)bord1c!line.styleref.color1!} template syl noblank: !retime("syl", 0, 0)!{an8pos($scenter, $stop)c!line.styleref.color2!3c&HFFFFFF&t(0, $dur, bord2frx270)} template syl noblank: !retime("syl2end", 0, 0)!{an8pos($scenter, $stop)bord23c&HFFFFFF&frx270t(0, 500, bord1frx360)} Giải thích - Với dòng start2syl không hề có gì thay đổi cả, vẫn viền mức 1 và màu chữ ô số 1. - Với dòng syl tôi đã thay đổi một chút về tọa độ, chuyển phần neo chữ sang an8 do đó cũng chuyển vị trí của syl text sang pos($scenter, $stop) - chính giữa phía trên để cho chữ không lệch với dòng start2syl. Màu sắc sẽ không dùng tag t để đổi nữa mà cho đổi màu ngay lập tức, thay vào đó tôi sẽ cho chữ xoay 270 độ nhờ tag góc frx (như lộn xà đơn) với tâm chính là vị trí pos() (nhờ có neo là an8). Ở đầy thời gian sẽ là cả toàn bộ thời lượng $dur của syl. Dĩ nhiên 270 độ thì mới được có 3/4 vòng. - Với phần cuối syl2end giữ nguyên màu viền, màu chữ c theo mặc định sẽ !line.styleref.color1! luôn nên không cần gõ và đây. Vì ở phần syl chữ mới quay được 270 độ, chưa đủ một vòng nên tôi muốn nó quay tiếp trông liền mạch cần đặt frx270 trước t() đã. Tiếp đó ta sẽ nhập giá trị cuối cùng muốn chữ xoay tớitrong thời gian 500 ấy - frx360 nghĩa là đủ một vòng. Có thể thêm dấu trừ thành frx-270 và frx-360 để đổi chiều xoay. Các bạn có thể dùng với frz để đuổi phương xoay của chữ thành lăn vòng, hay cả fry Tính toán thời gian và tọa độ Giờ chúng ta sẽ nghiên cứu thêm về phần khai báo thời gian retime cho mỗi line template và cách tính tọa độ cơ bản sau này dùng vào các hiệu ứng di chuyển Trước tiên nói về syl, line Có thể coi syl chính là tag k, hay chi tiết hơn là khoảng nội dung giữa tag k này đến tag k tiếp theo. Thời gian của syl là thời gian đã có ở tag k, như k45 thời gian của syl là 450ms (450 phần nghìn giây). Sự khác biệt ở phần nghìn là nhỏ nên trong tag chỉ có hai số (phần trăm giây). Thứ tự của syl - syl index chính là số thứ tự của tag k ấy trong cả line đếm từ trái qua phải (dĩ nhiên), ta tính số tag k chứ không tính số chữ. Và tổng số tag k gọi là syl number. Viết tắt của số thứ tự syl có hai cách là: syl.i hoặc $si Tương tự với tổng số syl của một line là syl.n hoặc $syln. Chữ syl được viết gọn lại thành $s. Khi được viết đầy đủ nó là tên gọi còn khi có dạng $ nó trở thành tham số, cả hai đều có thể dùng để tra các thông tin về karaoke gốc. Tương tự với syl là line với cách viết line. và $l Một số giá trị của karaoke được dùng thường xuyên Bài viết gốc về variables ở đây Aegisub/docs/Karaoke_Templater_Reference__Inline_variables.html
  • 4. - Thời lượng của syl: $dur hoặc $sdur - syl.duration (mặc định nếu không để template line thì hai cái đó là một) và $skdur - Thời gian bắt đầu và kết thúc của syl so với cả line: $sstart, $send - syl.start_time, syl.end_time - Thời gian giữa của syl: $smid (tương đương với vị trí 50% của $sdur) - Số thứ tự của syl và tổng số syl trong line: $si, $syln - syl.i, syl.n Code: {k22}A{k25}o{k43}i {k33}so{k24}ra {k69}ni{k65} {k53}hi{k54}ko{k38}u... Ở đây có tất cả là 10 tag k tương đương 10 syl, nhưng chỉ có 9 từ để hát vì có hai syl liền nhau Giờ ta sẽ nói về các tham số tọa độ của syl và line: - Vị trí chính giữa tính theo trục ngang (trục x): $scenter - Rìa bên trái của syl: $sleft - syl.left - Rìa bên phải của syl: $sright - syl.right - Vị trí giữa tính theo trục dọc (trục y): $smiddle - Rìa phía trên của syl: $stop - syl.top - Rìa phía dưới của syl: $sbottom - syl.bottom - $sx và $sy là giá trị mặc định tính theo style, ít dùng - Chiều rộng của syl, tính từ bên trái đến bên phải: $swidth - syl.width - Chiều dài của syl, từ trên xuống dưới: $sheight - syl.height Vì muốn chữ được nằm đúng vị trí của dòng karaoke gốc nên ta cần sử dụng an và pos();move() cho tương thích. Chủ yếu vẫn là an5pos($scenter,$smiddle) Với line ta chỉ cần thay $s bằng $l hay syl. bằng line. Tính tọa độ và thời gian là phần quan trọng trong việc tạo hiệu ứng về di chuyển, vẽ, cắt. Nó cũng giúp bù bớt đi một số hạn chế của auto4 và lua, nhất là việc không thể chia chữ thành các điểm nhỏ như python, ta có thể dùng clip để thay thế. Chỉnh lại thời gian karaoke bằng retime Đây là code cho một hiệu ứng hiện chữ rất phổ biến, có thể thấy ở OP Mahoraba [Vi-Anime] Code: template syl noblank: !retime("start2syl", -350+($si-1)*30, 0)!{an5move($scenter, !$smiddle-15!,$scenter, $smiddle, 0, 300)fad(200,0)bord1c!line.styleref.color1!} template syl noblank: !retime("syl", 0, 0)!{an8pos($scenter, $stop)c!line.styleref.color2!3c&HFFFFFF&t(0, $dur, bord2frx270)} template syl noblank: !retime("syl2end", 0, 350-($syln-$si)*30)!{an8pos($scenter, $stop)bord23c&HFFFFFF&frx270t(0, 500, bord1frx360)fad(0,150)}
  • 5. Giải thích: Ở đây chữ sẽ rơi xuống và hiện lên từ trái qua phải nhờ move($scenter, !$smiddle-15! ,$scenter, $smiddle, 0, 300) và fad(200, 0). Phần chữ rơi đơn giản là ta cho điểm xuất phát nằm cao hơn 15 ($scenter, !$smiddle-15!) với điểm gốc ($scenter, $smiddle) là được, phép tính được đặt trong hai dấu chấm than. Điểm chính ở đây là làm sao để thời gian chữ xuất hiện tăng dần như vậy. Ta biết là số thứ tự của syl $si cũng là một số tăng dần từ đầu đến cuối line, vậy ta sẽ dùng luôn nó để tạo thời gian tăng dần. Code: !retime("start2syl", -350+($si-1)*30, 0)! Đầu tiên nói về phần ($si-1)*30: đây chính là khoảng thời gian đầu của syl so với đầu của line karaoke gốc. Nó cộng thêm 30 (mili giây) cho mỗi syl tiếp theo để tăng dần thời gian, do đó làm syl sau xuất hiện muộn hơn syl ở trước 1*30 = 30 => !retime("start2syl", 30, 0)! 2*30 = 60 => !retime("start2syl", 60, 0)! 3*30 = 90 => !retime("start2syl", 90, 0)! Vậy tại sao lại trừ 1, vì dĩ nhiên thời gian của syl đầu tiên $si = 1 phải là 0 nên ta trừ 1 để khi nhân 30, start_time của nó là 0. Còn với phần -350, đây thực ra là khoảng thời gian bù cho việc chữ của syl xuất hiện quá muộn so với lúc bắt đầu của line gốc. Các khoảng lệch retime bên trên đều mang giá trị dương, ta sẽ trừ đi 350 để nó sớm hơn. !retime("start2syl", -350+90, 0)! = !retime("start2syl", -240, 0)! sớm 240 (mili giây) so với thời gian gốc. Code: !retime("syl2end", 0, 350-($syln-$si)*30)! Đây lại là phần tính thời gian kết thúc giảm dần được dùng cho cuối line làm chữ biến mất. Ta lấy tổng số syl trừ đi số thứ của syl, kết quả sẽ giảm dần cho đến 0. Một cách biến hóa khác là đổi dấu cộng thành dầu trừ cho thời gian bù thêm, ta sẽ đổi được chiều của hiệu ứng, thay vì từ trái qua phải lại thành từ phải qua trái. -350+($si-1)*30 thành -350-($si-1)*30 Với cách chỉnh lại thời gian thế này ta có thể làm được rất nhiều hiệu ứng hiện chữ khi kết hợp với di chuyển và xoay Trong phần !retime! có thể thay bằng các giá trị khác sẽ được nói sau Căn chỉnh thời gian cho hiệu ứng Giờ ta sẽ nói về việc sử dụng tag t cũng một số khác với thời gian của syl. Cái này các bạn có thể tùy ý ra nhiều Code: template syl noblank: !retime("syl", 0, 0)!{an5pos($scenter, $smiddle)t(0, !0.3*$dur!, bord2c!line.styleref.color2!3c&HFFFFFF&fscy125fscy125)t(!0.5*$dur!, $dur, fscx100fscy100)} template syl noblank: !retime("syl2end", 0, 250)!{an5move($scenter, $smiddle, !$scenter-20!, !$smiddle+20!, !line.duration-350!, !line.duration!)bord23c&HFFFFFF&t(0, 500, bord1c&HFFFFFF&3c!line.styleref.color2!)fad(0, !$dur/2!)}
  • 6. Giải thích: !retime("syl", 0, 0)! Vớihaitag t() t(0, !0.3*$dur!) và t(!0.5*$dur!, $dur) ta sẽ chia thời gian hiệu ứng phóng chữ fscxfscy thành ba phần. Phần đầu từ 0 đến 30% thời lượng của syl thì to lên, sau đó giữ nguyên đến 50% thời lượng dur mới thu về 100%, và đạt 100% ở cuối dur (syl end). !retime("syl2end", 0, 250)! Phần này thời lượng được kéo dài thêm so với line gốc 250 (mili giây) để có thời gian cho chữ rơi xuống, như là đồng loạt với nhau. move($scenter, $smiddle, !$scenter-20!, !$smiddle+20!,!line.duration-350!, !line.duration!) Với phần di chuyển này, chữ sẽ từ vị trí gốc lùi 20 theo trục x (!$scenter-20!) và xuống 20 theo trục y (!$smiddle+20!). Cái chú ý ở đây là nó không chạy ngay sau khi hết syl mà là lúc còn 350 (mili giây) mới chạy để dành chỗ cho line tiếp theo hiện ra. Nó tính ngược với t() ở trên, đây chính là phần tính thời gian ngược ấy !line.duration-350!, !line.duration! - !line.duration! tổng thời gian của line hiện tại ("syl2end", 0, 250), ở đây là từ cuối syl đến cộng thêm 250 so với lúc kết thúc line gốc. fad(0, !$dur/2!) Đây là phần làm chữ mờ dần trong thời gian khác với mỗi syl, ta lấy chính thời lượng của syl để làm thời gian mờ. Có thể thấy nó ở OP Seitokai no Ichizon [Elipse] Các dạng hàm tính toán Copy từ bài hướng dẫn dùng lua lập trình game http://forum.clbgamesvn.com/showthread.php?t=25489 Có nhiều hàm tính toán vậy nhưng được dùng nhiều nhất vẫn là math.random, math.randomseed và math.floor, math.max/min math.abs Trả về giá trị tuyệt đối hoặc giá trị không âm của giá trị nhận vào > = math.abs(-100) 100 > = math.abs(25.67) 25.67 > = math.abs(0) 0 math.acos, math.asin Trả về nghịch đảo cos và sin của giá trị đưa vào > = math.acos(1) 0 > = math.acos(0) 1.5707963267949 > = math.asin(0) 0 > = math.asin(1) 1.5707963267949 math.atan, math.atan2 Trả về nghịch đảo tang. Chúng ta có thể được bằng cách cung cấp y/x sử dụng math.atan hoặc có thể truyền y và x vào math.atan2 > c, s = math.cos(0.8), math.sin(0.8) > = math.atan(s/c)
  • 7. 0.8 > = math.atan2(s, c) 0.8 math.atan2 được ưa chuộng hơn, đặc biệt khi chuyển tọa độ vuông góc sang tọa độ có cực. math.atan2 sử dụng dấu của cả hai tham số để đặt kết quả vào đúng góc phần tư và cũng tạo ra các giá trị đúng khi 1 trong 2 tham số là 0 hoặc rât gần 0 > = math.atan2(1, 0), math.atan2(-1, 0), math.atan2(0, 1), math.atan2(0, -1) 1.5707963267949 -1.5707963267949 0 3.1415926535898 math.ceil, math.floor (hay dùng) Trả về số nguyên lớn hơn hoặc nhỏ hơn gần nhất giá trị đưa vào > = math.floor(0.5) 0 > = math.ceil(0.5) 1 math.cos, math.sin, math.tan Trả về giá trị cos, sin và tang của giá trị đưa vào dưới dạng radian > = math.cos(math.pi / 4) 0.70710678118655 > = math.sin(0.123) 0.12269009002432 > = math.tan(5/4) 3.0095696738628 > = math.tan(.77) 0.96966832796149 math.cosh, math.sinh, math.tanh Trả về giá trị cos, sin và tang hyperbolic từ giá trị đưa vào > = math.sinh(1) 1.1752011936438 math.deg, math.rad Chuyển từ radian sang độ và ngược lại > = math.deg(math.pi) 180 > = math.deg(math.pi / 2) 90 > = math.rad(180) 3.1415926535898 > = math.rad(1) 0.017453292519943 math.exp, math.log math.exp() trả về giá trị của e mũ giá trị nhập math.log() trả về giá trị logarithm cơ số e của giá trị nhập vào > = math.exp(0)
  • 8. 1 > = math.exp(1) 2.718281828459 > = math.exp(27) 532048240601.8 > = math.log(532048240601) 26.999999999998 > = math.log(3) 1.0986122886681 math.log10 Trả về logarithm bậc 10 của 1 số. Số nhập vào phải dương > = math.log10(100) 2 > = math.log10(256) 2.4082399653118 > = math.log10(-1) -1.#IND math.pow, x^y math.pow() trả về giá trị của x mũ y, tương tự với toán tử ^. math.pow(x,y) == x^y > = math.pow(100,0) 1 > = math.pow(7,2) 49 > = math.pow(2,8) 256 > = math.pow(3,2.7) 19.419023519771 > = 5 ^ 2 25 > = 2^8 256 math.min, math.max (hay dùng) Trả về giá trị nhỏ nhất hay lớn nhất từ các tham số truyền vào. > = math.min(1,2) 1 > = math.min(1.2, 7, 3) 1.2 > = math.min(1.2, -7, 3) -7 > = math.max(1.2, -7, 3) 3
  • 9. > = math.max(1.2, 7, 3) 7 math.modf Trả về phần nguyên và phần thập phân của số nhập vào. > = math.modf(5) 5 0 > = math.modf(5.3) 5 0.3 > = math.modf(-5.3) -5 -0.3 math.sqrt Trả về giá trị căn bậc 2 của số nhập vào. Chỉ cho phép số không âm > = math.sqrt(100) 10 > = math.sqrt(1234) 35.128336140501 > = math.sqrt(-7) -1.#IND math.random, math.randomseed (đây là cái sử dụng nhiều nhất) math.random() tạo ra những số ngẫu nhiên. Những tham số truyền vào sẽ thay đổi giá trị xuất: math.random() không có tham số sẽ tạo ra 1 số thực nằm trong khoảng 0 và 1. math.random(upper) tạo ra các số nguyên lớn hơn 1. math.random(lower, upper) tạo ra các số nguyên nằm trong khoảng giữa lower và upper > = math.random() 0.0012512588885159 > = math.random() 0.56358531449324 > = math.random(100) 20 > = math.random(100) 81 > = math.random(70,80) 76 > = math.random(70,80) 75 upper và lower phải là số nguyên Hàm math.randomseed() đặt một seed cho việc tạo số ngẫu nhiên. Các seed bằng nhau sẽ cho các chuỗi số bằng nhau. - Chọn số đẹp > math.randomseed(1234) > = math.random(), math.random(), math.random() 0.12414929654836 0.0065004425183874 0.3894466994232 > math.randomseed(1234)
  • 10. > = math.random(), math.random(), math.random() 0.12414929654836 0.0065004425183874 0.3894466994232 Một seed tốt là os.time(), nhưng phải chờ 1 giây trước khi gọi hàm để thu được 1 trình từ khác! Để lấy được số ngẫu nhiên đẹp dùng math.randomseed(os.time()) math.frexp, math.ldexp Đây là những hàm chuẩn hóa. Hàm math.frexp() được sử dụng để tách giá trị số thành 1 phần nguyên chuẩn và 1 số mũ. 2 giá trị được trả về: giá trị đầu nằm trong khoảng ½ đến 1 và giá trị thứ 2 là một số mũ. Hàm math.ldexp() lấy 1 giá trị chuẩn và trả về biểu hiện chấm động. đây là giá trị được nhân cho 2 mũ số mũ > = math.frexp(2) 0.5 2 > = math.frexp(3) 0.75 2 > = math.frexp(128) 0.5 8 > = math.frexp(3.1415927) 0.785398175 2 > = math.ldexp(0.785,2) 3.14 > = math.ldexp(0.5,8) 128 math.huge math.huge là 1 hằng số, biểu diễn +vô cực. > = math.huge Inf > = math.huge / 2 inf> = -math.huge -inf > = math.huge/math.huge – indeterminate Nan > = math.huge * 0 – indeterminate Nan > = 1/0 Inf > = (math.huge == math.huge) True > = (1/0 == math.huge) True Chú ý rằng một số toán tử trên math.huge trả về giá trị đặc biệt không phải là 1 số được biểu diễn là nan. Nan là 1 kiểu số, khác các kiểu số khác > = type(math.huge * 0) Number
  • 11. math.pi Đây là hằng số PI > = math.pi 3.1415926535898 Hardsub cho những phần dùng tag mới (typeset + karaoke), nếu softsub máy nào không có bản mod sẽ không xem được các tag này. (Đây là phiên bản không chính thức, nhóm phát triển hiện chưa chấp nhận tuy nhiên nó bổ sung rất nhiều tag mới mà bản hiện có không đáp ứng được) Mọi thông tin về cập nhập, sửa chữa hay hướng dẫn và download tại trang chủ của project này http://code.google.com/p/vsfiltermod/ hoặc ở đây (v2.39 MODv1.0 14/04/2010) http://www.mediafire.com/?yftwwdutujm Cách cài: Copy file VSFilterMod.dll vào hai thư mục Aegisubcsri và AviSynth 2.5Plugins (cũng tùy vào vị trí đã cài hai soft đó) Với Aegisub Code: C:Program FilesAegisubcsri Sau đó, mở Aegisub lên. Vào menu ViewOption (Alt + O), chọn nhãn Video ở bên trái. Đổi Subtitle provider từ csri/vsfilter_textsub thành csri/vsfiltermod_textsub. . Với avisynth Code: C:Program FilesAviSynth 2.5Plugins Trong nội dung file avs, đơn giản chỉ cần gõ từ TextSub() sang TextsubMod() để hardsub. Với DirectShow (xem video softsub) (Không nên dùng) Bật hộp Run (Ctrl + R) lên và gõ nội dung này vào và enter để đăng ký cho window biết Code: regsvr32 "C:Program FilesAviSynth 2.5PluginsVSFilterMod.dll"
  • 12. để gỡ bỏ regsvr32 u "C:Program FilesAviSynth 2.5PluginsVSFilterMod.dll" Với VirtualDub (load sub qua avs thì cái này không cần thiết) Copy VSFilterMod.dll vào thư mục plugins của VirtualDub và đổi tên file VSFilterMod.dll thành VSFilterMod.vdf. Chọn filter này giống như chọn bản VSFilter (textsub) trước) Danh sách tag mới Co kéo cỡ chữ (Font scale) fsc<phần trăm> - Đây là gộp gọn lại của hai tag cũ fscx<scale>fscy<scale>. Sử dụng tương tự, cái này không có gì đặc biệt. Dùng được với t() fsc200 = fscx200fscy200. Dẫn hướng (Leading) fsvp<số> Đổi hướng và độ cao của chữ (chưa rõ), giá trị là các số. Dùng được với t() t(fsvp10) Nghiêng chữ theo hàng (Baseline obliquity).frs<góc> Xoay các chữ cái theo một một đường thẳng, giống như các tag frxfrzfry nó cũng phụ thuộc vào an. Dùng được với t(). {an6t(frs-15frz25)pos(306,239)} - đu quay Tọa độ z (Z coordinate) z<số> Đặt thêm tọa độ của trục z cho chữ, thay vì chỉ có ngang dọc (x, y) như hiện giờ. Đặt giá trị dương để chữ lùi ra xa, đặt âm để làm chữ lại gần (gần giống scale) Dùng được với t() Vặn chữ (Distortion) distort(u1,v1,u2,v2,u3,v3) Cáinày mạnh hơn fax và fay. Vặn xoắn chữ đến các mức độ đã định, đặt giá trị âm dương như với fax và fay . Dùng được với t(). t(distort(1, 1, 1, 0, 0, 1)) xoắn lò xo.
  • 13. Làm méo viền chữ (Boundaries deforming) rnd<arg> rndx<arg> rndy<arg> rndz<arg> Co kéo viền của chữ theo pixel làm nó bị uốn éo như sóng nước. Dùng được với t() Cái này rất hay Lan màu và mức trong suốt 1vc(màu góc trái-trên, màu góc phải trên, màu góc trái dưới, màu góc phải dưới), 2vc(), 3vc(), 4vc() Nó sẽ cho màu lan dần từ cạnh này sang cạnh kia của chữ, bốn màu ấy có thể giống nhau. Với bản kia, tạo hiệu ứng này phức tạp và khác nặng máy 1vc(&HFFFFFF&,&HFFFFFF&,&H1675EC&, &H1675EC&) 1va(mức alpha góc trái-trên,mức alpha góc phải trên, mức alpha góc trái dưới, mức alpha góc phải dưới), 2va(), 3va(), 4va() Giống như trên, các giá trị cũng đặt như với 1a, 2a,... 1va(&HFF&,&H00&,&H00&, &HFF&)
  • 14. Thay màu chữ, hình vẽ bằng ảnh nền 1img(đường dẫn file png[,xoffset,yoffset]), 2img(), 3img, 4img() Cái này thích hợp với typeset logo hơn. {3vc(&HFF00FF&,&HFFFF00&,&H00FFFF&,&HFFFFFF&)1img(Z:/subs/as.png,0,0)pos(300,250)bord10p1}m -150 0 b -150 -80 -80 -150 0 -150 80 -150 150 -80 150 -1 150 80 80 150 4 150 -80 150 -150 80 -150 0{p0} org(x1, x2, x2, y2 [,t1, t2]) Dịch chuyển tọa độ của tâm {an5org(100, 200, 700, 200)fs50shad0frz0t(frz360)pos(400,200)}foo bar Move có điểm neo và xoay (Polar move) mover(x1,y1,x2,y2,angle1,angle2,radius1,radius2[,t1,t2]) Có thể di chuyển theo các đường lượn. angle1,angle2,radius1,radius2 Góc lệch và vị trí lệch (đang mò) mover(10,10,60,60,0,0,0,0) — it's equivalent to move(10,10,60,60). mover(0,0,0,0,-90,0,150,150) — moves relatively to upper left screen corner along an arc of a circle (-90,0) with radius 150 points. Move theo đường cong (Spline-move) moves3(x1,x2,x2,y2,x3,y3[,t1,t2]) moves4(x1,x2,x2,y2,x3,y3,x4,y4[,t1,t2]) Đây là đường đi của chữ cong theo bốn điểm đã định Chữ rung rung (Shaking) jitter(left,right,up,down,period[,seed]) Rung chữ theo các hướng, fifth parameter sets shaking period in milliseconds, sixth parameter sets the initial seed for random number generator so the form shaking will not change upon calls. Animatable by t {an5shad0fs30jitter(1,1,1,1,1,0)} Moveable vector clip movevc(x1,y1) movevc(x1,y1,x2,y2[,t1,t2]) Di chuyển vị trí clip bằng vetor.
  • 15. Một số hiệu ứng di chuyển Sử dụng các phép tính math hoặc cho trượt trên một vòng tròn cực lớn Chữ tách ra thành từng chữ cái riêng Đây là phần cho syl, phần start2syl đến lead in (dẫn chữ vào) thế nào cùng được. Code: template noblank char: !retime("syl", 0, 1000)!{an5bord2c&HFFFFFF&t(0, $dur, c&HFFAA00&bord1)move($scenter, $smiddle, !$scenter-math.random(-5, 35)!, !$smiddle+math.random(-5, 30)!, $dur, !line.duration!)} Không xoay Code: template noblank char: !retime("syl", 0, 1000)!{an5bord2c&HFFFFFF&t(0, $dur, c&HFFAA00&bord1)move($scenter, $smiddle, !$scenter-math.random(-5, 35)!, !$smiddle+math.random(-5, 30)!, $dur, !line.duration!)t($dur, !line.duration!, frz!math.random(-45, 90)!fry!math.random(-45, 90)!frx!math.random(-90, 90)!)fad(0,500)} Xoay và mờ dần Giải thích: Cái chính ở đây là template char, khi dùng template char hiệu ứng sẽ được áp dụng cho từng chữ cái của karaoke, nếu không có nó, ta sẽ thấy chữ vẫn dính vào nhau. Để có thể di chuyển chữ ra xung quanh như thế ta dùng math.random để nhặt số ngẫu nhiên rồi cộng nó với tọa độ cũ, math.random(-5, 30) là nhặt ra các số từ khoảng -5 đến 30, $dur, !line.duration! khoảng thời gian này là từ khi hết âm rồi chữ mới tách ra, tương đương với độ dài 1000 ở phần retime. Nếu muốn chữ trong khi di chuyển có thể xoay nữa ta dùng thêm các tag góc như frz, frx hay fry đặt trong t(). frz!math.random(-45, 90)![/B] Ở đây chữ sẽ xoay nghiêng theo một góc nào đó từ -45 đến 90 nhờ math.random, nhờ thế tạo được vẻ tự nhiên. Đổi ngược thời gian và vị trí lại ta có chữ lắp ráp Code: template noblank char: !retime("start2syl", -300, 0)!{an5bord1c&HFFFFFF&frz!math.random[/B](-45, 90)!fry!math.random(-45, 90)!frx!math.random(-90, 90)!t(0, 300, bord2frz0fry0frx0)move(!$scenter- math.random(-5, 35)!, !$smiddle+math.random(-5, 30)!, $scenter, $smiddle, 0, 300)} Hiệu ứng chữ nhảy Để tạo hiệu ứng này có một số cách, như là move lên rồi move xuống, một cách khác nữa là cho chữ trượt một quãng ngắn trên một vòng tròn cực lớn, nhìn giống như chạy thẳng. Các nữa cho bản VsfilterMod là sử dụng tag fsvp rất đơn giản và có thể vừa nhảy vừa xoay
  • 16. Chia thời gian ra là 2 đoạn bằng retime, thường là dùng sylpct (mức phần trăm của mỗi syl) Code: template noblank: !retime("sylpct", 0, 50)!{an5move($scenter, $smiddle, $scenter, !$smiddle-15!)} template noblank: !retime("sylpct", 50, 100)!{an5move($scenter, !$smiddle-15!, $scenter $smiddle)} Giải thích: !retime("sylpct", 0, 50)! là từ 0% đến 50% của thời lượng syl, tương đương với !retime("syl", 0, -0.5*$dur)! hay !retime("presyl", 0, 0.5*$dur)!. Khi đó chữ sẽ chạy lên 15 pixel. Sau đó phần !retime("sylpct", 50, 100)! là từ 50% còn lại đến 100% của thời lượng syl, tương đương với !retime("syl", 0.5*$dur, 0)! hay !retime("presyl", 0.5*$dur, $dur)! chữ sẽ từ mức 15 pixel kia chạy xuống vị trí gốc. Làm cách này nếu để chữ nhảy qua trái hay phải (trừ hay cộng thêm vào $scenter) sẽ trông như đường rích rắc, không được mượt nên ta sẽ dùng một cách khác là cho chữ trượt trên đường tròn thật to. Code: template noblank: !retime("syl", 0, 0)!{an5move($scenter, $smiddle, !$scenter-15!, $smiddle, 0, !$dur*0.80!)org(-10000, $smiddle)t(0, !$dur*0.50!, frz- 0.05)t(!$dur*0.60!, $dur, frz0)} Chữ sẽ xoay theo đường tròn có tâm ở tận tọa độ (-10000, $smiddle) với một góc rất nhỏ chỉ 0.05 độ nên tạo cảm giác như chạy thẳng, đừng đặt quá to nếu không chữ sẽ biến mất khỏi màn hình đấy. Trong khi nhảy nên nó còn chạy sang trái một đoạn 15 pixel như thể nhảy xa. Nhược điểm của kiểu này là vì có đặt tâm ở xa nên ta không thể dùng các tag xoay khác như frx và fry với giá trị lớn, nó sẽ khiến chữ bị xoay theo chiều x và y rất loạn. Nếu muốn chữ lắc lư có thể đổi vị trí của tâm thay vì nằm ngang tầm mà lại nằm bên trên hoặc bên dưới org($scenter, -10000) nó sẽ xoay qua trái phải. Xem trong OP Minami-ke [Vi-Anime] để thấy hiệu ứng là sử dụng rất đẹp