CityEngine基於規則貼圖的實現技巧


轉自:http://blog.sina.com.cn/s/blog_841eeb5201010p3e.html

 

CityEngine在貼圖的實現過程有兩種方式:第一種是通過i(geometryPath)規則引入外部帶貼圖的模型;第二種方式是通過texture(string  texturePath)規則在CityEngine內部通過規則控制來完成貼圖的實現。下面通過具體的例子談一下這兩種方式在實際中的應用。

引入外部帶貼圖的模型

適用方向:模型被重復利用、結構較為復雜。

下面以蓋板為例來說一下引入外部帶貼圖模型的方法。

一、     模型導出時的注意事項

在用3DMax軟件把其它格式的模型導出為CityEngine支持的部件格式(如obj)時,要選擇帶有貼圖紋理和貼圖坐標。
CityEngine基於規則貼圖的實現技巧

 

 

默認情況下,OBJ導出選項窗口的面選項為四邊形,為了減少面數據根據需要可以選擇多邊形;材質導出的窗口中轉換位圖是被選中的,此種情況下貼圖的的尺寸會發生變化。下圖為max模型效果與導出obj之后在max里的顯示效果:
CityEngine基於規則貼圖的實現技巧

 

 

二、     引用規則的代碼與效果

Street-->

split(u,unitSpace,0){~3.6:Str_Tex | 0.2:color("#ff0000") X}*

Str_Tex-->

i("obj/gaiban.obj")
CityEngine基於規則貼圖的實現技巧
CityEngine基於規則貼圖的實現技巧

 

 

 

 

從上面兩個圖可以看出不用任何貼圖的代碼就可以完成模型的貼圖。

通過內部規則控制實現紋理貼圖

通過內部規則控制實現紋理貼圖,主要是指采用texture的方式進行貼圖。在使用texture進行貼圖的過程中其最關鍵的在於約束texture引入的圖片所代表的實際大小和其擺放的位置等信息,因而就產生了控制圖片代表實際尺寸、圖片重復的次數兩種方式的貼圖。下面就針對這兩種方式進行簡單的介紹。
控制圖片代表的實際尺寸
適用范圍:主要指建築物、護欄等的貼圖。
引用的規則代碼:
Lot-->
   extrude(10)
   comp(f){front:ftFacade | all:X}
ftFacade-->
   setupProjection(0,scope.xy,scope.sx/rint(scope.sx/2.5),scope.sy/rint(scope.sy/1.5))
   texture("WINDOW_02.jpg")
   projectUV(0)
與貼圖相關的規則介紹:
setupProjection(uvSet,axeSelector,texWidth,texHeight)
該規則主要是對texture所引入的圖片進行了約束,其中uvSet的取值范圍[0,5],分別代表不同的Texture Layer,一般選0值;axesSelector確定了貼圖時圖片的U向和V向,texWidthtexHeight分別代表圖片的尺寸所對應的實際的寬度和高度。
texture(string texturePath)
該規則引入相應的貼圖。
projectUV(uvSet)
該規則通過應用相應的投影矩陣創建最終的紋理坐標。與3D Max的塌陷功能有點類似。

CityEngine基於規則貼圖的實現技巧

 引入該規則之后建築貼圖的效果。
控制圖片的重復次數
適用范圍:道路或與道路相關的具有走向的平面貼圖。
引用的規則代碼:
lenAlongU=geometry.du(0,unitSpace)
Sidewalk-->
   NIL
Street-->
   normalizeUV(0, uv, collectiveAllFaces) 
   scaleUV(0,rint(lenAlongU/20),1)
   texture("street_1lanes_stripes.png")

與貼圖相關規則的介紹:
normalizeUV(uvSet,uvNormalizeMode,uvNormalizeType)
該規則約束了貼圖是沿走向方向上進行貼圖的。uvNormalizeMode有三個值的選項:uvuv;之前做了一個簡單的測試發現它們的區別不是很大,在道路上貼圖時一般選擇uv項;uvNormalizeType有兩個值的選項:separatePerFacecollectiveAllFaces,之前采用第一個值時發現貼圖時並不按走向進行貼的,一般選擇第二個值。
scaleUV(float uvSet, float uFactor, float vFactor)
該規則約束了當前貼圖時的重復次數,其中uFactor代表長度方向上的重復次數,vFactor代表寬度方向上重復次數。
CityEngine基於規則貼圖的實現技巧 
附注:本文檔提供的規則代碼可以在實際中實用,通過調整某些參數的值我們將會更清晰的理解這些規則、更好的實用這些規則。由於水平有限,其中的內容有解釋不清的地方敬請雅正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM