4.6 Special Effects (Particle, Texture animation, Light)

 

特效種類
  • Particle Effects 粒子效果
    • 粒子是指 prims 的特性
    • 每一個 prim 只能擁有一個有效的粒子系統
    • FunctionllParticleSystem()
      • 基本上用此函數就能夠設定粒子系統 包含煙火 彩虹 風箏字串等
  • Texture Animation 材質動畫
    • 材質動畫模式
    • 當上傳材質比製作特效成本低時
    • Function: llSetTextureAnim()
      • 讓物體表面的材質進行移動
    • Constants: PING_PONG (來回播放)、ROTATE (旋轉)...
      • 利用2D呈現3D效果: 轉換角度
  • Scale, Rotate, Smooth 縮放、旋轉、平滑
    • 圖片畫格效果: 製造出把身上的材質輪流套用在目前物件上的效果
    • ex: Picture Frame 圖片框架
  • Light 光
    • Creating light 創造光
    • Spotlight 聚光燈
    • Filtered Light 濾鏡光
  • Reflecting light 反射光
    • 尚未提供

光的實現原理
  • 真實世界的光
    • 產生光的物體
    • 光源: 位於產生光的物體
    • Cone of Light
    • 被照射的Prim
    • 產生影子
  • 第二人生的光
    • 產生光的物體
    • 光源: 位於被照射的prim
    • Cone of Light: 想像體
    • 被照射的Prim
    • 影子腳本

程式範例

● Particle Effects(粒子效果)
llParticleSystem( [
PSYS_PART_FLAGS, PSYS_PART_INTERP_COLOR_MASK |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_FOLLOW_VELOCITY_MASK,
//外表
PSYS_PART_START_SCALE, < 0.1, 1.0, 0.0 >, // 粒子噴射起點
PSYS_PART_END_SCALE, < 1.0, 1.0, 0.0 >, // 粒子噴射終點
PSYS_PART_START_COLOR, < 1.0, 0.0, 0.0 >,// 粒子起點顏色
PSYS_PART_END_COLOR, < 0.0, 0.0, 1.0 >,// 粒子終點顏色
PSYS_PART_START_ALPHA, 1.00, // 粒子起點顏透明度
PSYS_PART_END_ALPHA, 0.25, // 粒子終點顏透明度
PSYS_SRC_TEXTURE, "", // 粒子使用紋理
//流動
PSYS_SRC_MAX_AGE, 0.0, // 發射源粒子產生後存在多久
PSYS_PART_MAX_AGE, 3.00, // 其他部分粒子產生後存在多久
PSYS_SRC_BURST_RATE, 0.50, // 粒子噴射速率
PSYS_SRC_BURST_PART_COUNT, 50, // 噴射粒子數
//放置點
PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE, //粒子形式 在這裡設為爆炸(放射型)形式
PSYS_SRC_BURST_RADIUS, 0.00, //粒子噴射半徑
PSYS_SRC_ANGLE_BEGIN, 0.00, //粒子開始噴射角度
PSYS_SRC_ANGLE_END, 0.00, //粒子結束噴射角度
PSYS_SRC_OMEGA, < 0.00, 0.00, 0.00 >, //粒子噴射角速度
//移動
PSYS_SRC_BURST_SPEED_MIN, 5.00, // 粒子噴射最小速度
PSYS_SRC_BURST_SPEED_MAX, 10.00, // 粒子噴射最大速度
PSYS_SRC_ACCEL, < 0.0, 0.0, -1.0 >, // 粒子噴射加速度
PSYS_SRC_TARGET_KEY, llGetKey() // 粒子噴向目標 因為在這裡llGetKey()是傳回自己物件的KEY 所以是噴向自己
]);
中間那些PSYS開頭的都是他的屬性 啟動這項函數後就會改變該prim的屬性 使他出現這些效果

● Texture Animation(紋理動畫)
llSetTextureAnim(ANIM_ON | LOOP, // 動畫開啟且循環
ALL_SIDES, // 物體所有面都套用這個設定
4, 4, // x軸和y軸的畫格數
0, 0, // 起點的畫格 和延升畫格的長度
4); // 畫格更新速率

● Scale, Rotate, Smooth(比例 旋轉和滑順的效果)
integer gNumTexture ;//宣告一個整數表示目前套用的素材編號
把以下這些程式放在time事件裡面
string s = llGetInventoryName( INVENTORY_TEXTURE, gNumTexture );自倉庫中取得當前編號的素材
key id = llGetInventoryKey( s);//讀取該素材KEY出來
用vector size = llGetScale()*HOLLOW_SIZE;//改變大小
llMessageLinked(LINK_ALL_OTHERS, gWhichFrame, (string)size, id);//有了KEY和大小後 就可以把素材套用在上面
gCurrentTexture++; //換下一個素材
另外可以設當i=最大數量的時候再設為0就可以無限循環

● Light(光源)
Spotlight(點光源)
Filtered Light(濾光)
基本設定光源的函數如下
llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, color//物件採用color顏色的點光源
, INTENSITY //光源強度
, RADIUS //光源半徑
, FALLOFF,光源衰減度
PRIM_COLOR, ALL_SIDES, color, 0.0]);//物件每面的顏色和透明度