POV-RAY基礎教程 - 光源(4)

回到上一篇 POV-RAY基礎教程 - CSG(3)
在任何光線追蹤場景中,照亮物體及其表面所需的光線必須來自光源。POV-Ray中有多種光源,仔細使用正確的光源可以產生非常令人印象深刻的結果。我們花一點時間來探索一些不同類型的光源及其各種參數。

Pointlight(點光源)

點光源正是名稱所指示的。點光源沒有大小,是不可見的,無論距離光源有多遠,都可以均勻地照亮場景中的所有物體(這種行爲可以改變)。這是最簡單和最基本的光源。只有兩個重要參數,位置和顏色。讓我們設計一個簡單的場景並在其中放置一個點光源。我們創建一個新文件並命名litedemo.pov。我們編輯如下:

  #include "colors.inc"
  #include "textures.inc"
  camera {
    location  <-4, 3, -9>
    look_at   <0, 0, 0>
    angle 48
  }
  plane {
    y, -1
    texture {
      pigment {
        checker
        color rgb<0.5, 0, 0>
        color rgb<0, 0.5, 0.5>
      }
      finish {
        diffuse 0.4
        ambient 0.2
        phong 1
        phong_size 100
        reflection 0.25
      }
    }
  }
  torus {
    1.5, 0.5
    texture { Brown_Agate }
    rotate <90, 160, 0>
    translate <-1, 1, 3>
  }
  box {
    <-1, -1, -1>, <1, 1, 1>
    texture { DMFLightOak }
    translate <2, 0, 2.3>
  }
  cone {
    <0,1,0>, 0, <0,0,0>, 1
    texture { PinkAlabaster }
    scale <1, 3, 1>
    translate <-2, -1, -1>
  }
  sphere {
    <0,0,0>,1
    texture { Sapphire_Agate }
    translate <1.5, 0, -2>
  }

渲染的圖片如下:
圖4-1
現在我們添加一個點光源:

  light_source {
    <2, 10, -3>
    color White
  }

然後我們渲染,得到下圖,大家可以感受一下
圖4-2
渲染後可以看到物體清晰可見,有清晰的陰影。最靠近光源的彎曲物體的側面是最亮的,而遠離光源的區域是最暗的。我們還注意到,方格平面一直均勻地照射到地平線上。

2 Spotlight(聚光燈)

聚光燈是一種非常有用的光源。它們可用於添加高光和照亮功能,因爲攝影師使用斑點來做同樣的事情。要創建聚光燈,只需將spotlight 關鍵字添加到常規點光源即可。聚光燈有幾個參數比聚光燈更多。這是radiusfallofftightnesspoint_atradius參數是完全照明錐體的角度。該falloff參數是本影錐體的角度,其中光線從黑暗中落下。該tightness參數確定光衰減的速率。該point_at參數就是它所說的,聚光燈所指向的位置。讓我們改變場景中的光線如下:

  light_source {
    <0, 10, -3>
    color White
    spotlight
    radius 15
    falloff 20
    tightness 10
    point_at <0, 0, 0>
  }

然後我們渲染,得到下圖,大家可以感受一下
圖4-3
我們渲染它,看到只有物體被照亮。平面的其餘部分和物體的外部部分現在都沒有點亮。有一個廣泛的衰落區域,但陰影仍然是銳利的。讓我們嘗試擺弄其中的一些參數,看看他們做了什麼。我們將衰減值更改爲16(它必須始終大於半徑值)並再次渲染。現在衰減非常狹窄,物體要麼明亮,要麼完全黑暗。現在我們將衰減更改回20並將緊密度值更改爲100(更高更緊)並再次渲染。聚光燈似乎變得更小了,但真正發生的事情是衰減變得如此陡峭,以至於半徑實際上看起來更小了。我們認爲緊密度值10(默認值)和衰減值18對於這個聚光燈是最好的,我們現在想在場景周圍放置一些點以產生效果。除了我們已經擁有的白色之外,讓我們放置一個的藍色和一個紅色的聚光燈光源:

  light_source {
    <10, 10, -1>
    color Red
    spotlight
    radius 12
    falloff 14
    tightness 10
    point_at <2, 0, 0>
  }
  light_source {
    <-12, 10, -1>
    color Blue
    spotlight
    radius 12
    falloff 14
    tightness 10
    point_at <-2, 0, 0>
  }

圖片如下
圖4-4
渲染這個我們看到現在的場景有一種神奇的效果。三個聚光燈全部聚集在物體上,一側爲藍色,另一側爲紅色,中間有足夠的白色以提供平衡。

3 Cylinder(柱狀光源)

聚光燈呈錐形,這意味着它們的效果會隨着距離而變化。物體越遠離聚光燈,表觀半徑越大。但是我們可能希望無論聚光燈有多遠,半徑和衰減都是特定的大小。因此,需要圓柱形光源。圓柱形光源就像聚光燈一樣,除了半徑和衰減區域外是相同的,無論我們的物體離光源有多遠。因此,形狀是圓柱而不是圓錐。我們可以通過用spotlight關鍵字替換關鍵字來指定圓柱形光源cylinder 關鍵詞。我們現在嘗試使用我們的場景,用圓柱燈替換所有三個聚光燈並再次渲染。我們看到場景更加暗淡。這是因爲圓柱形約束不會像聚光燈那樣讓光線散開。需要更大的半徑和衰減值來完成這項工作。對於所有三個燈,我們嘗試半徑爲20,衰減爲30。
圖4-5

4 Area(區域光源)

到目前爲止,我們所有的光源都有一個共同點。它們產生銳利的陰影。這是因爲實際光源是無限小的點。物體要麼直接看到光,在這種情況下它們是完全照明的,或者它們不是,在這種情況下它們是完全遮蔽的。在現實生活中,這種鮮明的光影情況只存在於太陽直射光穿透太空黑暗的外太空中。但是在地球上,光在物體周圍彎曲,從物體上反彈,通常光源具有一定的尺寸,這意味着它可以部分地隱藏在視線之外(陰影不再是銳利的)。他們有一種所謂的本影,或者一個模糊的區域,那裏既沒有光照,也沒有光影。爲了模擬這些柔軟 陰影,射線追蹤者必須給它的光源尺寸。POV-Ray通過稱爲區域光的功能實現了這一點。區域燈具有兩個軸的尺寸。這些由區域光源語法中的前兩個向量指定。我們還必須指定陣列中有多少個燈。更多會給我們更乾淨柔和的陰影,但渲染時間會更長。通常3 * 3或5 * 5陣列就足夠了。我們還可以選擇指定自適應值。該 adaptive關鍵字告訴光線跟蹤器它可以適應這種情況並僅發送所需的光線來確定像素的值。如果未使用自適應,則將爲區域光中的每個光發送單獨的光線。這真的可以減緩事情的發展。自適應值越高,本影就越清潔,但痕跡越長。通常,自適應值爲1就足夠了。最後,我們可能應該使用 jitter關鍵詞。這告訴光線追蹤器稍微移動區域光線中每個光線的位置,使陰影看起來真正柔和,而不是給我們一個由緊密帶狀陰影組成的本影。好的,我們來試試吧。我們注意到圓柱燈並添加以下內容:

  light_source {
    <2, 10, -3>
    color White
    area_light <5, 0, 0>, <0, 0, 5>, 5, 5
    adaptive 1
    jitter
  }

圖4-6
這是一個以<2,10,-3>爲中心的白色區域光。它是5個單元(沿x軸)5個單元(沿z軸),其中有25(5 * 5)個燈。我們已經指定了自適應1和抖動。我們渲染並立即注意到兩件事。跟蹤點或聚光燈的軌跡需要相當長的時間,而且陰影不再清晰!他們周圍都有很好的柔軟的umbrae。等等,它變得更好。
聚光燈和圓柱燈也可以是區域燈!還記得我們場景中聚光燈的那些尖銳陰影嗎?使用5 * 5陣列作爲聚光燈是沒有多大意義的,但是較小的陣列可以很好地爲我們提供適當數量的本影聚光燈。我們來試試吧。如下所示:

  light_source {
    <2, 10, -3>
    color White
    spotlight
    radius 15
    falloff 18
    tightness 10
    area_light <1, 0, 0>, <0, 0, 1>, 2, 2
    adaptive 1
    jitter
    point_at <0, 0, 0>
  }
  light_source {
    <10, 10, -1>
    color Red
    spotlight
    radius 12
    falloff 14
    tightness 10
    area_light <1, 0, 0>, <0, 0, 1>, 2, 2
    adaptive 1
    jitter
    point_at <2, 0, 0>
  }
  light_source {
    <-12, 10, -1>
    color Blue
    spotlight
    radius 12
    falloff 14
    tightness 10
    area_light <1, 0, 0>, <0, 0, 1>, 2, 2
    adaptive 1
    jitter
    point_at <-2, 0, 0>
  }

圖片如下
圖4-7
我們現在有三個區域聚光燈,一個單位正方形,由四個(2 * 2)燈組成,三種不同的顏色,都在我們的場景中閃耀。我們渲染它,它似乎完美。我們所有的陰影都有小而緊的本影,就像我們期望在真實聚光燈下的物體上找到的那種。

5 Ambient (環境光)

用於模擬間漫反射的效果。如果沒有相互漫反射,則所有未被光源直接照射的區域將完全變暗。POV-Ray使用ambient關鍵字來確定來自環境光源的光被表面反射的光量。默認情況下,環境光源在任何地方向所有方向發光,都是純白色(rgb <1,1,1>)。改變顏色可用於創造有趣的效果。首先,可以輕鬆調整場景的整體亮度。不是改變每個表面處理中的所有環境值,而是僅修改環境光源。通過分配不同的顏色,我們可以創建出色的效果,如喜怒無常的微紅色環境照明。以下是紅色環境光源的示例。

global_settings {ambient_light rgb <1,0,0>}

效果圖:
圖4-8
有關詳細信息,請參閱環境光。

6 其他特殊光源屬性
6.1 shadowless

可以爲光源分配shadowless關鍵字,並且由於其存在於場景中而不會投射陰影。有時候,使用我們選擇照亮物體的燈光很難正確照亮場景。將較高的環境值應用於場景中每個對象的紋理是不切實際且不現實的。相反,我們會在場景周圍放置幾個補光燈。填充燈只是調光燈,其shadowless關鍵字用於增強場景中可能無法點亮的其他區域的照明。讓我們嘗試在我們的場景中使用一個。添加以下內容:

  light_source {
    <0, 20, 0>
    color Gray50
    shadowless
  }

效果圖:
圖4-9
在場景中心,這是一個相當暗淡的20個單位。它將爲所有對象(包括背景中的平面)提供昏暗的照明。我們渲染它並看到。

6.2 給光源加個形狀

光源是看不見的。它們只是燈光來自的地方。它們沒有真正的尺寸或形狀。如果我們希望我們的光源是可見的形狀,我們可以使用looks_like 關鍵字。我們可以指定我們的光源看起來像我們選擇的任何對象。當我們使用時looks_like,則no_shadow自動應用於對象。這樣做是爲了使物體不會阻擋來自光源的任何照明。如果我們想要發生一些阻塞(如在燈罩中),最好簡單地使用一個聯合來做同樣的事情。讓我們將這樣的對象添加到場景中。這是我們爲此目的製作的一個燈泡:

  #declare Lightbulb = union {
    merge {
      sphere { <0,0,0>,1 }
      cylinder {
        <0,0,1>, <0,0,0>, 1
        scale <0.35, 0.35, 1.0>
        translate  0.5*z
      }
      texture {
        pigment {color rgb <1, 1, 1>}
        finish {ambient .8 diffuse .6}
      }
    }
    cylinder {
      <0,0,1>, <0,0,0>, 1
      scale <0.4, 0.4, 0.5>
      texture { Brass_Texture }
      translate  1.5*z
    }
    rotate -90*x
    scale .5
  }

現在我們添加光源:

  light_source {
    <0, 2, 0>
    color White
    looks_like { Lightbulb }
  }

效果圖:
圖4-10
渲染這個我們看到一個相當可信的燈泡現在照亮了場景。但是,如果我們沒有指定高環境值,則燈泡不會被光源點亮。從好的方面來看,所有的陰影都會遠離燈泡,就像在真實情況下一樣。陰影是銳利的,所以讓我們的燈泡成爲一個區域:

  light_source {
    <0, 2, 0>
    color White
    area_light <1, 0, 0>, <0, 1, 0>, 2, 2
    adaptive 1
    jitter
    looks_like { Lightbulb }
  }

效果圖:
圖4-11
我們注意到我們已將此區域放置在xy平面而不是xz平面上。我們還注意到燈泡的實際外觀不受光源的任何影響。燈泡必須由其他光源照明,或者在這種情況下,由高環境值照明。

6.3 光線fading

在現實生活中,光線在行進時會散射,因此它會降低物體從其光源進一步照射的能力。爲了模擬這一點,POV-Ray允許我們使用兩個關鍵字:fade_distance,其指定實現完全照明的距離,以及指定fade_power衰減的實際速率的指數值。我們將這些關鍵字應用於我們的補光燈。首先,我們通過更改 Gray50爲使填充光更亮一些Gray75。現在我們按如下方式更改補光燈:

  light_source {
    <0, 20, 0>
    color Gray75
    fade_distance 5
    fade_power 1
    shadowless
  }

效果圖:
圖4-12
這意味着填充光的全部值將在距光源5個單位的距離處實現。衰落功率爲1意味着衰減將是線性的(光以恆定速率下降)。我們渲染這個以查看結果。絕對有效!
現在讓我們嘗試2的衰落功率和10的淡入淡出距離。再次,這很好用。衰落功率更快,衰減功率爲2,因此我們不得不將衰落距離提高到10。
效果圖:
圖4-13
小結:光源種類較多,屬性較多,一些渲染區別不是很明顯,建議大家自己動手試驗。

繼續閱讀下一篇 POV-RAY基礎教程 - 簡單貼圖/紋理設置(5)

發佈了38 篇原創文章 · 獲贊 43 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章