六.材質設計

Surfaces

Surfaces這部分能定義你要render物件的表面特性。例如:color、reflectivity(反
射)、和texture(材質)....等。它也允許多個物件使用同一個Surfaces、只要在 Surfaces下直接接著物件即可。
  surface {
      diffuse r g b   //物體受光所顯示的顏色
      ambient r g b   //物體不受光的面
      specular r g b   //物體反光所混合出的顏色
      shine pow    //光照度
      transparent r g b //透射率
      ior num    //折射率
      fuzz magnitude  //絨毛狀的效果
      no_antialias   //不要有鋸齒
      }


Bump mapping

一般做出的影像希望給人有很真實的印象,所以有時我們不需要光滑的表面
,反而要有粗糙或有坑有洞的表面時,就需要用到bump 。 bump定義在surface下,如下所示:
  surface {
      diffuse white
      bump {
         ......
         }
      }

一個簡單的有波動的範例:
  bump {
     wave {
        center 1 2 3
        wavlength 2
        amplitude 0.2
        damping 0.9 // 預設值為 1.0
        phase 0.0  // 預設值為 0.0
                }
             }


Textured surfaces

表面材質

要做出精彩的圖片,有個很重要的一環,就是材質的部份,如果材質設計不當,
那麼再精彩的模型也不會好看,所以要好好地設計,才能做出栩栩如生的圖片或是 一些特殊效果。

材質設計有三種的形式,checker,spherical,和noise,利用這三種不同特性,就
可以設計出各種不同的材質。

  1. 【Checker棋盤】
    這個checker形式會產生3D的棋盤,也就是一格一格的的盤子,其中格子的
    大小由scale參數設定,如果xyz中的某一軸為0時,代表不改變沿著此軸的單位 長度。格子的材質、顏色分別由兩個surface來定義。舉例來說,我們做個簡單 的西洋棋盤,格子顏色是一黑一白,格子大小為2個單位的正方形。另外,此形 式的盤子會沿著Z軸無限地延伸。
    surface {
       texture {
           pattern checker
           scale 2 2 0
           offset 0 0 0   // default
           fuzz 0     // default
           blend 0    // default
                    surface { diff black }
                    surface { diff white }
                    }
                 }

  2. 【spherical球形】
    此球形形式會在物體的表面產生互相交替的同心圓,我們通常使用此形式
    來做木頭的材質。我們需要設定兩個半徑,分別用在兩個surface上。例: surface {
       texture {
           pattern spherical
           scale 2 2 0
           radius 1
           radius 2
           surface { diff black }
           surface { diff white }
           }
        }

  3. 【noise亂點】
    此形式會在兩材質之間亂數地產生一些斑點,通常我們利用此來製作類似
    花崗石的材質,也可以使用不同的XYZ軸比例來做出長形的條紋,像是加上土 黃色及咖啡色來做出木頭的紋路。

    下面是一個簡單的noise形式材質的格式:
    surface {
       texture {
           pattern noise
           terms 4
           scale x y z
           surface { diff white }
           surface { diff brown }
                   }
                }

    另外,我們可以再加上fuzz和blend指令來使兩材質間的邊緣看起來更柔軟 滑順。
    • blend設定兩材質間有多大的區域要用fuzz去使得有融合在一起的感覺。(設 定值在0至1之間)G。
    • fuzz設定其霧化的程度,除了可使兩材質間更柔和外是,還可以應用在粗糙 、班紋等效果。(設定值在0至1之間)


Image Textures圖片材質

或許我們想要將一些圖片放進或貼在物體表面上,這些圖片可能是來自掃描器
或攝影機掃描抓取下來的圖,也可能是自己用繪圖軟體所繪製的圖,或是想將以前 用BOB所render的圖放在新作品中,我們只要將圖片檔案轉成.IMG的格式,依下列指 令將圖片如壁紙般貼在物件的表面上,格式如下:
  surf {
    diff {
       image test.img /*用test.img的圖來作貼圖
       position x y z /* 設定貼圖的位置
       across x y z
       normal x y z  /* 設定將圖片貼在物體表面的法線
       scale n    /* 設定所貼圖片的大小
      }
    }

當設定scale指令為1時,表示從最上面的邊緣量一個單位貼一張圖,一張640*480
的.IMG檔,在render後的圖裡佔1.0*0.75單位大小,圖片材質以貼磁磚的方式,整齊 反覆地貼在物件表面上,所以我們可以很方便地做出像磁磚、磚牆、道路、人行道... 等效果的圖。


材質試驗範例..........

以下將列出我們所作的材質試驗,以去比較各環境因子參數的不同,所作出的效
果如何;此外,也可看出光線追跡法所作出的材質是如此的擬真。因為做的是材質試 驗,所以我們所有的材質都使用相同的環境,包括同樣的光源,同樣的物體模型,同 樣的背景... 等,才能比較各材質的不同。

下面列出所使用的環境,在材質試驗表格中將不再重覆列出。




    #include color.bc



    // 影像處理工作坊(整體環境設定)



    studio   {

             from  6  13  3.5

             at   0 0 3

             up   0 0 1

             angle   40

             res   320 240

             antialias   adaptive

             threshold   4

             aspect   1.3333

             background   black

    }



    // 光源設定:點光源分別從右前方,和右後方照射物體



    light   {

            type   point

            falloff   1

            position   8  6  5

            color   12 12 12

    }



    light   {

            type   point

            falloff   1

            position   3  -6  6

           color   10  10   10

    }



    //   設定一個桌面放置物體和襯托物體



    surf   { diff   white  }

    ring   { center  0 0 0  normal  0 0 1  radius  100  }



    //    surface



    // 材質表面設定:這部份也就是放在材質試驗表格的材質設定

















    //    pattern sample



    //  我們使用三個基本元件,分別是圓柱體、正方體、圓球,



    //  來顯示出同一種材質在不同形狀的物體有何不同的表現。



    #include cone.BO



    #include block.BO



    #include pole.BO







       由於在材質試驗時,都使用相同的三個物體,因此我們將



   此三個物體作好成為三個 .BO ,以方便日後試驗中不需重覆



   撰寫,只要下 #include XXXX.BO 在 surface 設定之後即可。



   下面列出此三個物體 (.BO) 的內容 :





   ▲ CONE.BO



      為一個半徑 1.25 單位的圓球



       sphere {

              center 3.5 0 1.25

              radius 1.25

       }







   ▲ BOLCK.BO



      定義出正方體的六個面,長和寬都為 2 單位



       polygon   { points   4

               vertex   1 1 0

               vertex   1 1 2

               vertex   1 -1 2

               vertex   1 -1 0

       }

       polygon   { points   4

               vertex   -1 1 0

               vertex   -1 1 2

               vertex   -1 -1 2

               vertex   -1 -1 0

       }

       polygon   { points   4

               vertex    1 1 0

               vertex    1 1 2

               vertex   -1 1 2

               vertex   -1 1 0

       }

       polygon   { points   4

               vertex    1 -1 0

               vertex    1 -1 2

               vertex   -1 -1 2

               vertex   -1 -1 0

       }

       polygon   { points   4

               vertex    1  1 2

               vertex    1 -1 2

               vertex   -1 -1 2

               vertex   -1  1 2

       }

       polygon   { points   4

               vertex    1  1 0

               vertex    1 -1 0

               vertex   -1 -1 0

               vertex   -1  1 0

       }







   ▲ POLE.BO



      定義出一個圓筒加上兩邊的圓蓋,就成為一空心的圓柱體



       cone {

              base -4 0 0 base_radius 1.25

              apex -4 0 2 apex_radius 1.25

       }



       ring {

              center -4 0 0

              radius 1.25

              normal 0  0 1

             }



       ring {

              center -4 0 2

              radius 1.25

              normal 0  0 1

             }