...:::Welcome to SOFT4 Entertainment:::...
HAPPY NEW YEAR 2012
| Chào mừng đã đến với forum ooOo Soft4 oOoo. Bạn chưa đăng kí (hoặc chưa đăng nhập) nên quyền lợi của bạn sẽ bị hạn chế. Việc đăng kí làm thành viên hoàn toàn miễn phí, sau khi đăng kí bạn có thể post bài, tham gia thảo luận, liên lạc với các thành viên khác qua hệ thống tin nhắn riêng, yêu cầu soft/music... và rất nhiều quyền lợi khác. Thủ tục đăng kí rất nhanh chóng và đơn giản, hãy Đăng Kí Làm Thành Viên! Nếu bạn quên mật khẩu, xin nhấn vào đây. Nếu bạn gặp trục trặc trong vấn đề đăng kí hoặc không thể đăng nhập, hãy liên hệ với chúng tôi. |
| Hướng Dẫn Viết KARA effect | |
|---|---|
| Tweet Topic Started: Sunday Oct 31 2010, 02:48 PM (3,369 Views) | |
| pota282 | Sunday Oct 31 2010, 02:48 PM Post #1 |
![]()
Administrator
![]()
|
Đầu tiên các bạn phải nắm các tag trong các bài trước. Sau khi nắm rõ rồi, ta sẽ bắt tay vào việc bào chế cho mình 1 effect kara đơn giản. Do trong kara việc tính toán các phần tử chữ rất quan trọng, nó giúp ta định vị các hiệu ứng mong muốn. Do đó cũng cần biết về các hàm tính toán sau, chỉ cần biết, k cần nhớ(nhớ thì tốt hơn). 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
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 [/color] |
|
__________________ Bạn muốn cuộc sống có vài điều thay đổi ? Đừng quan tâm nó sẽ theo chiều hướng nào! YOU Don't think about it.We'll Do it. Hãy chung tay xây dựng S4 ngày 1 lớn mạnh bạn nhé! ![]() | |
|
|
| pota282 | Sunday Oct 31 2010, 02:51 PM Post #2 |
![]()
Administrator
![]()
|
Tính toán thời gian và tọa độ 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à \an5\pos($scenter,$smiddle) Với line ta chỉ cần thay $s bằng $l hay syl. bằng line. 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)!{\an5\move($scenter, !$smiddle-15!,$scenter, $smiddle, 0, 300)\fad(200,0)\bord1\c!line.styleref.color1!} template syl noblank: !retime("syl", 0, 0)!{\an8\pos($scenter, $stop)\c!line.styleref.color2!\3c&HFFFFFF&\t(0, $dur, \bord2\frx270)} template syl noblank: !retime("syl2end", 0, 350-($syln-$si)*30)!{\an8\pos($scenter, $stop)\bord2\3c&HFFFFFF&\frx270\t(0, 500, \bord1\frx360)\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. Edited by pota282, Sunday Oct 31 2010, 02:53 PM.
|
|
__________________ Bạn muốn cuộc sống có vài điều thay đổi ? Đừng quan tâm nó sẽ theo chiều hướng nào! YOU Don't think about it.We'll Do it. Hãy chung tay xây dựng S4 ngày 1 lớn mạnh bạn nhé! ![]() | |
|
|
| pota282 | Sunday Oct 31 2010, 02:52 PM Post #3 |
![]()
Administrator
![]()
|
Căn chỉnh thời gian cho hiệu ứng Giải thích: !retime("syl", 0, 0)! Với hai tag \t() \t(0, !0.3*$dur!) và \t(!0.5*$dur!, $dur) ta sẽ chia thời gian hiệu ứng phóng chữ \fscx\fscy 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] |
|
__________________ Bạn muốn cuộc sống có vài điều thay đổi ? Đừng quan tâm nó sẽ theo chiều hướng nào! YOU Don't think about it.We'll Do it. Hãy chung tay xây dựng S4 ngày 1 lớn mạnh bạn nhé! ![]() | |
|
|
| mori90 | Friday Nov 5 2010, 11:50 AM Post #4 |
|
SUPER STAFF S4
![]()
|
Đã làm dc =))))) Edited by pota282, Friday Nov 5 2010, 12:14 PM.
|
![]() | |
|
|
| pota282 | Friday Nov 5 2010, 12:11 PM Post #5 |
![]()
Administrator
![]()
|
Chưa xem xong thì đã hết. há há , nhưng như vậy cũng có thể làm kara được rồi.
Edited by pota282, Friday Nov 5 2010, 12:19 PM.
|
|
__________________ Bạn muốn cuộc sống có vài điều thay đổi ? Đừng quan tâm nó sẽ theo chiều hướng nào! YOU Don't think about it.We'll Do it. Hãy chung tay xây dựng S4 ngày 1 lớn mạnh bạn nhé! ![]() | |
|
|
| mori90 | Friday Nov 5 2010, 01:07 PM Post #6 |
|
SUPER STAFF S4
![]()
|
demo thôi...phần hay còn ở bản full .. Đón xem =)) |
![]() | |
|
|
| pota282 | Tuesday Nov 9 2010, 10:02 AM Post #7 |
![]()
Administrator
![]()
|
Mau tung lên trước khi nó hạ nhiệt.... Mà hình như qua Haloween nên mv đó cũng ra đi rồi, keke. Đây MV mới nhất của nhóm nhạc mới nhất Kpop. |
|
__________________ Bạn muốn cuộc sống có vài điều thay đổi ? Đừng quan tâm nó sẽ theo chiều hướng nào! YOU Don't think about it.We'll Do it. Hãy chung tay xây dựng S4 ngày 1 lớn mạnh bạn nhé! ![]() | |
|
|
| hoangdepzai | Wednesday Jul 11 2012, 11:37 PM Post #8 |
![]()
|
ai viết hộ mình cái effect có 1 dòng màu tím chạy xuyên suốt giữa dòng sub, làm cho cái dòng màu tím nó chuyển động nhé được ko vậy. effect kara nhé bạn. ai làm được mình xin cám ơn |
|
|
| 1 user reading this topic (1 Guest and 0 Anonymous) | |
| « Previous Topic · SUB TEAM S4 · Next Topic » |










, nhưng như vậy cũng có thể làm kara được rồi.
