本文章最後由 羽hane 於 2012-5-9 15:48 編輯
所謂ASS字幕可以是濾鏡的一種 當然功能強大 拿來做字幕太可惜
所以這一次教大家如何製照下雪的濾鏡
想像每個個雪花 都是一個一個字幕 組成的 那麼就可以製造雪花
雪的性質是~每個雪花都會下到地上 而 雪是不斷的再漂動 以接近垂直的角度下到地板上
所以當然 雪在移動過程中需要 \move 語法 作移動
而雪是白色的 如果是圓白的雪粒 可用 \blur3 做模糊的效果
再加上\bord0\shad0 去掉邊框陰影
由於一個畫面雪花有很多片 不可能一個一個去調整 這樣會死人 ><
所以只好寫腳本吧~
本篇所需要的語法 set_temp函數 來紀錄雪花產生的位置 做調整 其他方面還有時間的設置 後面再說吧
1.每片雪花出現的位置不定 假設我設的 字幕解析度為 640,360
那雪花 初始位置大概在 x=0~640 y=0~360 之後出現的地方可能為 y<0 的位置
\fs 是指字體大小 在這邊是用來控制雪花大小
所以先寫一段雛形
效果:template pre-line loop 100
- {\move(!math.random(650)!,!math.random(365)!,!math.random(650)!,370)\blur3\bord0\shad0\1c&HFFFFFF&\fs!math.random(5,10)!}●
複製代碼看起來類似雪花 但就是怪怪的
函數 math.random(a,b) 或 math.random(a)
意思是從 a 到 b之間隨機取一個數字 而後面則是在0 到 a 隨機取一個數字
a,b都為整數
2.加上自定意 set_temp 函數
set_temp通常會搭配math.random使用 簡單來說就是建立一個暫存的變數來放math.random的結果
由於暫存的變數不一定有一個 所以通常會把temp設為一個 陣列(array)
做字幕特效者 也常常碰這一類型的函數
效果:code once
先定義temp為空的陣列(array) 意思類似要寄放東西時 得先找個空間讓東西可以寄放
然後建立 set_temp 函數
效果:code once
- function set_temp(ref,val) temp[ref] = val; return val; end
複製代碼這兩行要一定同時出現...缺一不可
在lua語法中 定義一個函數為
function 函數名(輸入值l) 函數內容 return 輸出值 end(結束該函數)
所以從語法看來
set_temp這函數的意思 就是 定義一個temp[ref]的值 為 val 並返回 val
這時可以定義 temp 這個陣列的元素來使用
3.使用maxloop製造源源不絕的雪
maxloop(loop次數)
其中這邊 loop次數 =雪花的種數
時間越長 下下來的雪花就越多 所以和時間成正比
一行字幕的時間為$ldur在乘上密度就是 所有雪花的總數
!maxloop($ldur*密度)!
這邊密度我設為1/10 其中密度也影響每片進來的時間間隔
兩邊成反比的狀況
然後我們在設定雪花的一片一片近來 和 下到最底下的時間
這裡用 retime中 line的參數
!retime("line",該行開始時間調整,該行結束時間調整)!
j*10 雪出現的時間 該行開始後 每0.01秒下一片雪 該時間與密度成反比
math.random(1000,5000) <= 雪花下下來所需要的時間
密度請不要調太大 因為真的很恐怖 電腦當機不關我的事
maxloop()這語法使用時也請格外小心...
~雪花範例01~ 先貼出語法 之後在解說 腳本請勿隨便流出~
效果:code once
效果:code once
- function set_temp(ref,val) temp[ref] = val; return val; end
複製代碼效果:template pre-line
- !maxloop($ldur/10)!!retime("line",j*10,-$ldur+j*10+math.random(1000,5000))!{\move(!set_temp("x",math.random(650))!,!math.random(-10,0)!,!temp.x+math.random(-10,10)!,370)\blur3\bord0\shad0\1c&HFFFFFF&\fs!math.random(5,10)!}●
複製代碼範例01 解釋
j為loop的次數~loop1第一次時j=1 之後 loop1第二次 j=2....
結果預覽:
腳本使用方法:
請不要一次開太多行字幕/時間調很長 產生太多行 造成電腦/程式當掉自行負責
MAXLOOP這語法 亂玩的話 有可能造成造成電腦/程式當掉
感覺起來雪直直下下來 沒有漂的感覺~
所以就可以加入\frx 和 \frz製作 雪飄的感覺
在語法上再加上
或把雪花的運動範圍變廣 這時可以參考範例02
~雪花範例02~
set_temp函數請看前面
效果:template pre-line
- !maxloop($ldur/10)!!retime("line",j*10,-$ldur+j*10+math.random(2000,5000))!{\move(!set_temp("x",math.random(650))!,!set_temp("y",math.random(-10,0))!,!temp.x+math.random(-80,80)!,370)\blur3\bord0\shad0\1c&HFFFFFF&\fs!math.random(5,10)!\t(\frx!math.random(-1200,1200)!\fry!math.random(-1200,1200)!)}●
複製代碼4.製造不同的雪花
首先要有雪花字型 網站上有免費的可以抓
你也可以用ASSDraw慢慢畫 如果你厲害的話
原理:先建立一個序列
snow = {"a","b","c","d","e"....} <=該英文字元 必須對應你雪花字型中雪花的部分
然後就可以用
!snow[math.random(1,n)]! n為看你放的雪花種類做決定
以下參考範例03
~雪花範例03~
(待補)
[延伸課題]
這部分我不公佈語法 也沒特定的答案
1."下雨"的濾鏡
2."落花"的濾鏡
3."櫻吹雪"的濾鏡
原理類似~可以試試看 有做出來的話 歡迎討論
後面待續~~