?智慧城市美術效果Unity實現(xiàn)筆記流程:
參考 對標 效果圖:
? ? ? ? 參考資料:
? ? ? ? ? ? ? ? 方案一:
? ? ? ??????????????????Blender GIS 獲取城市 房屋道路等數(shù)據(jù)
? ? ? ??????????????????安裝BlenderGIS插件
? ? ? ? ? ? ? ????????? 落葉大師智慧城市效果解析
? ? ? ? ? ? ? ?方案二:
????????????????????????CityEngine2022地塊生成
? ? ? ? ? ? ? ? ? ? ?
????????????????????????
????????寫實類-參考圖:
(以上均為網(wǎng)絡搜索效果,有落葉大師,以及其他優(yōu)秀開發(fā)者效果圖參考)
????????未來類-參考圖:
如上圖所示,智慧城市基本分為 這兩個大類,偏寫實風,偏未來風,也有互相結合的效果。
一、實現(xiàn)思路大綱:
二、實操環(huán)節(jié)(方案1):
1、軟件準備/環(huán)境配置:
? ? ? ? 1)、Blender軟件安裝:
? ? ? ? ? ? ? ? 軟件官方下載地址/使用文檔教程:Blender 3.5 參考手冊 — Blender Manual
? ? ? ? 2)、為Blender安裝GIS插件:
? ? ? ? ? ? ? ? Blender-GIS插件下載地址:?????????????????
????????????????????????????????https://github.com/domlysz/BlenderGIS
? ? ? ? ? ? ? ? Blender-GIS的安裝參考視頻:
? ? ? ? ? ? ? ? ? ? ? ??????????iBlender中文版插件GIS 教程Blender GIS 插件Blender_嗶哩嗶哩_bilibili
? ? ? ? ? ? ? ? 這里我在安裝過程中遇到了,缺少imageIO模組的問題 :?"No imageIO module"。也就是點擊BaseMap之后,打印窗口提示錯誤信息,所以翻閱了Domlysz為這個工具開啟的BlenderGIS問題反饋頁,發(fā)現(xiàn)是安裝插件后,因缺少.dll的文件引起的。
缺少的.dll文件,可以在這里下載。
? ? ? ? ? ? ? ? (我是吧所有文件夾都下載下來了,防止因為缺少內(nèi)容繼續(xù)報錯)。
.?
????????????????下載后,需要復制到指定位置下,通常在這個位置下:
替換位置:
C:\Users\你的用戶名\AppData\Roaming\BlenderFoundation\Blender\3.5\scripts\addons\BlenderGIS-master\core\lib\imageio\resources\freeimage。
將壓縮包解壓后,找到freeimage的文件夾,整體復制后,替換掉原有文件夾即可。
如果中間沒有 某個文件夾結構的話,自己新建一個即可。
2、獲取GIS城市數(shù)據(jù):
???????? 1)、注冊OpenTopographyAPIKey:
? ? ? ? ????????進入網(wǎng)站后根據(jù)提示,進行注冊即可,注意,這個網(wǎng)站在注冊過程中,需要注意IP地址,開始的時候我在電腦的IP下進行注冊,區(qū)域應是大陸IP,郵箱收不到驗證碼,后來換成在手機上選擇非大陸地區(qū)的科學入網(wǎng)后,收到了驗證碼。
?? ????????復制API Key 到 下圖 API key 文本框 中。
2)、選擇GIS下載區(qū)域:
? ? ? ? 在上述內(nèi)容配置好后,重啟Blender,并開啟科學入網(wǎng)后,點擊Basemap按鈕,進行地圖獲取。
? ? ? ? 單機后,會出現(xiàn)以下窗口,紅框框選部分OSM,Bing,Esri經(jīng)測試,是可用狀態(tài),Google選項,不知為何,始終是加載不出來任何數(shù)據(jù)的。
? ? ? ? 這里我們確定,選擇Esri的地圖數(shù)據(jù),會出現(xiàn)下圖界面。
? ? ? ? 快捷鍵G 獲取地圖位置,用拼音即可搜索,這里精度小一些設為12。
????????
? ? ? ? 定位到指定位置后,需要注意窗口范圍不要過大,否則是無法工作的,會報數(shù)據(jù)太大的錯,所以盡量控制城市區(qū)域范圍。? ? ? ??
? ? ? ? 快捷鍵E 裁切可視區(qū)域 ,裁切后,會發(fā)現(xiàn)GIS按鈕重新出現(xiàn)了,開始進行下一步,生成,建筑,河流,公路等提供數(shù)據(jù)的內(nèi)容。
? ? ? ? 點擊Get OMS按鈕,開始下載載入上述數(shù)據(jù)。
按住Shift + 鼠標左鍵,進行 填入數(shù)據(jù)加選。
單擊確定后,開始載入 數(shù)據(jù),數(shù)據(jù)量根據(jù)每個地區(qū)所選不同,完整度也所不同,加載速度也不一樣。
? ? ? ? 這里以北京城區(qū)數(shù)據(jù)為例,數(shù)據(jù)相對豐富。?
3)、設置地形高度:
? ? ? ? 點擊選擇地形對象,Get elevation獲取地形高度。
這里選擇第三個選項,其他選項經(jīng)測試,沒有明顯效果。
確定后,根據(jù)真實地理情況,會生成地面的高度。
3、非主區(qū)域/道路建筑貼圖:
? ? ? ? 1)、建筑貼圖指定:
? ? ? ? ? ? ? ? 1、環(huán)境天空貼圖:
選擇一個全景圖。
?????????????????
? ? ? ? 選擇全景圖之后,在切換渲染模式為 視圖著色模式,?就可以看到 天空盒了。
???????
? ? ? ? ? ? ? ? 2、白膜建筑貼圖:
?選擇面:
?1、編輯模式下,選擇建筑白膜,并在 選擇?>>選擇相似>>法向按鈕,點擊后會全選所有白模 建筑。
這個時候? Ctrl + i? 進行反選,因為選中白模中墻面的面,才是主要目的,因為我們要對墻面 添加材質(zhì)和貼圖。
創(chuàng)建材質(zhì),并賦貼圖:
1、打開 材質(zhì)編輯窗口:并新建一個材質(zhì)球,為材質(zhì)球命名。
打開材質(zhì)編輯窗口,為材質(zhì)添加一個貼圖。
選擇一張 建筑外立面的無縫貼圖。
選擇UV分布方式:為? 塊面投影? 并設置 UV 大小,這里設為15的精度。
(數(shù)小UV越大,數(shù)大UV越小)?這里實際可以小一些,因為要進unity中可以修改Telline的參數(shù)修改。
但是這個時候我們發(fā)現(xiàn),全部的樓都是一個貼圖,看起來很別扭,那么Blender中可以通過面來隨機選擇一些對象,分別指定材質(zhì),進行不同樓不同材質(zhì)的區(qū)分。
再次創(chuàng)建一個材質(zhì),并賦予其他樓層外立面貼圖。
新建好幾個不同建筑外立面材質(zhì)后,按上面操作,指定不同貼圖。?
選擇>>隨機選擇 建筑外立面:隨機選中個數(shù),這里設為0.002.
為選中部分模型,指定不同 外立面貼圖。
?? ??
? ? ? ? ? ? Shift+H可以孤立顯示,配合材質(zhì)替換多種建筑貼圖。
????2)、道路生成+貼圖指定:
? ? ? ? 因道路數(shù)據(jù)原本就是線段,并不是模型,所以,需要先根據(jù)線,生成道路。
? ? ? ? 注意先切換為對象模式,快捷鍵 TAB.
? ?創(chuàng)建道路橫截面:
? ? ? ? Shift + A? : 創(chuàng)建? 曲線 >> Nurbs 曲線。?
查看所選(快速定位) 快捷鍵 ?`?
編輯模式下,快捷鍵V(設置控制柄類型) 切換為>> 矢量.
選中大綱視圖中,選擇heightway,然后 快捷鍵 鼠標右鍵,轉(zhuǎn)換到>>曲線。
這時,工具欄會出現(xiàn)這個圖標,選中highway,后,為幾何數(shù)據(jù)下,對象中,指定曲線。
這樣的話,就有了寬度。
選中曲線在物體屬性面板中,找到縮放X,并調(diào)節(jié)參數(shù),會發(fā)現(xiàn) 道路變寬了。
為道路添加貼圖:
? ? ? ? 選擇曲線,新建一個材質(zhì)球,并命名,為道路尋找一張 如下圖類似的公路貼圖。
指定后,選擇highway,為路面添加材質(zhì)貼圖。
為路面指定材質(zhì)。
這個時候就可以看到路面被賦予了公路的貼圖。
當然這里可以看到 貼圖有拉伸,可以在這個窗口來修改UV拉伸狀況。
可以明顯看到中間的差別。
3)、Blender中的操作基本完成,選擇需要導出的對象,進行導出,導出FBX或其他unity識別的3D文件,即可。
????????????????那么以上,就是Blender中全部的處理內(nèi)容,接下來,選中需要導出的網(wǎng)格模型,導出FBX即可導入到Unity中,開始在Unity中處理效果。文章來源:http://www.zghlxwxcb.cn/news/detail-644437.html
4、Unity中為不同內(nèi)容類型添加shader:
? ? ? ? 1)、非主區(qū)域shader使用:
文章來源地址http://www.zghlxwxcb.cn/news/detail-644437.html
? ? ? ?
Shader "Unlit/Sc02_BuildSF"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_EmisTex("EmisTex",2D)="white"{}
[HDR]_EmisCol("RGB:自發(fā)光色彩 A:強度",Color) = (1,1,1,1)
_Cutout("透貼",Range(0,1))=0.5
}
SubShader
{
Tags {
"Queue"="Transparent"
"RenderType"="Transparent"
}
LOD 100
//---------------主貼圖------------------
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}
Blend One OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase_fullshadows
#pragma target 3.0
UNITY_INSTANCING_BUFFER_START( Props )
// UNITY_DEFINE_INSTANCED_PROP( float4, _Color)
UNITY_INSTANCING_BUFFER_END( Props )
uniform sampler2D _MainTex;uniform float4 _MainTex_ST;
uniform sampler2D _EmisTex;uniform float4 _EmisTex_ST;
uniform float4 _EmisCol;
uniform float _Cutout;
//輸入結構
struct VertexInput
{
float4 vertex : POSITION;
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
};
//頂點輸出結構
struct VertexOutput
{
float4 pos : SV_POSITION;
float2 uv0 : TEXCOORD0;
float2 uv1 : TEXCOORD1;
};
//輸出結構>>>頂點shader>>>輸出結構
VertexOutput vert (VertexInput v)
{
VertexOutput o = (VertexOutput)0;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv0 = TRANSFORM_TEX (v.uv0,_MainTex);
o.uv1 = TRANSFORM_TEX (v.uv1,_EmisTex);
return o ;
}
//色彩輸出結構
float4 frag(VertexOutput i) : COLOR
{
float4 var_mainTex = tex2D(_MainTex,i.uv0);
float4 var_emisTex = tex2D(_EmisTex,i.uv1);
float4 emisTexCol = var_emisTex * _EmisCol;
float opacity = var_mainTex.a * _Cutout;
float3 finalRGB = var_mainTex * emisTexCol * opacity;
return float4(finalRGB,opacity);//輸出最終顏色
}
ENDCG
}
}
}
2)、道路區(qū)域Shader使用:
? ? ? ? 3)、主要建筑Shader使用:
三、實操環(huán)節(jié)(方案2):
到了這里,關于智慧城市美術效果Unity實現(xiàn)筆記流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!