智慧城市美术效果Unity实现笔记流程

 智慧城市美术效果Unity实现笔记流程:

参考 对标 效果图:

        参考资料:

                方案一:

                        fBlender GIS 获取城市 房屋道路等数据

                        安装BlenderGIS插件

                        落叶大师智慧城市效果解析

               方案二:

                        CityEngine2022地块生成

                     

                        

        写实类-参考图:

(以上均为网络搜索效果,有落叶大师,以及其他优秀开发者效果图参考)

        未来类-参考图:

智慧城市可视化-案例

如上图所示,智慧城市基本分为 这两个大类,偏写实风,偏未来风,也有互相结合的效果。

一、实现思路大纲:

二、实操环节(方案1):

1、软件准备/环境配置:
        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问题反馈页,发现是安装插件后,因缺少.dll的文件引起的。

缺少的.dll文件,可以在这里下载。

                (我是吧所有文件夹都下载下来了,防止因为缺少内容继续报错)。

                下载后,需要复制到指定位置下,通常在这个位置下:

替换位置:

C:\Users\你的用户名\AppData\Roaming\BlenderFoundation\Blender\3.5\scripts\addons\BlenderGIS-master\core\lib\imageio\resources\freeimage

将压缩包解压后,找到freeimage的文件夹,整体复制后,替换掉原有文件夹即可。

如果中间没有 某个文件夹结构的话,自己新建一个即可。

2、获取GIS城市数据:
         1)、注册OpenTopographyAPIKey:

                进入网站后根据提示,进行注册即可,注意,这个网站在注册过程中,需要注意IP地址,开始的时候我在电脑的IP下进行注册,区域是大陆IP,邮箱收不到验证码,后来换成在手机上选择非大陆地区的科学入网后,收到了验证码。

           复制API Key 到 下图 API key 文本框 中。

2)、选择GIS下载区域:

        在上述内容配置好后,重启Blender,并开启科学入网后,点击Basemap按钮,进行地图获取。

        单机后,会出现以下窗口,红框框选部分OSM,Bing,Esri经测试,是可用状态,Google选项,不知为何,始终是加载不出来任何数据的。

        这里我们确定,选择Esri的地图数据,会出现下图界面。

        快捷键G 获取地图位置,用拼音即可搜索,这里精度小一些设为12。

        

        定位到指定位置后,需要注意窗口范围不要过大,否则是无法工作的,会报数据太大的错,所以尽量控制城市区域范围。        

        快捷键E 裁切可视区域 ,裁切后,会发现GIS按钮重新出现了,开始进行下一步,生成,建筑,河流,公路等提供数据的内容。

        点击Get OMS按钮,开始下载载入上述数据。

按住Shift + 鼠标左键,进行 填入数据加选。

单击确定后,开始载入 数据,数据量根据每个地区所选不同,完整度也所不同,加载速度也不一样。

        这里以北京城区数据为例,数据相对丰富。 

3)、设置地形高度:

        点击选择地形对象,Get elevation获取地形高度。

这里选择第三个选项,其他选项经测试,没有明显效果。

确定后,根据真实地理情况,会生成地面的高度。

3、非主区域/道路建筑贴图:
        1)、建筑贴图指定:

                1、环境天空贴图:

选择一个全景图。

                 

        选择全景图之后,在切换渲染模式为 视图着色模式, 就可以看到 天空盒了。

       

                2、白膜建筑贴图:

 选择面:

 1、编辑模式下,选择建筑白膜,并在 选择 >>选择相似>>法向按钮,点击后会全选所有白模 建筑。

这个时候  Ctrl + i  进行反选,因为选中白模中墙面的面,才是主要目的,因为我们要对墙面 添加材质和贴图。

创建材质,并赋贴图:

1、打开 材质编辑窗口:并新建一个材质球,为材质球命名。

打开材质编辑窗口,为材质添加一个贴图。

选择一张 建筑外立面的无缝贴图。

选择UV分布方式:为  块面投影  并设置 UV 大小,这里设为15的精度。

(数小UV越大,数大UV越小) 这里实际可以小一些,因为要进unity中可以修改Telline的参数修改。

但是这个时候我们发现,全部的楼都是一个贴图,看起来很别扭,那么Blender中可以通过面来随机选择一些对象,分别指定材质,进行不同楼不同材质的区分。

再次创建一个材质,并赋予其他楼层外立面贴图。

新建好几个不同建筑外立面材质后,按上面操作,指定不同贴图。 

选择>>随机选择 建筑外立面:随机选中个数,这里设为0.002.

为选中部分模型,指定不同 外立面贴图。

     

            Shift+H可以孤立显示,配合材质替换多种建筑贴图。

    2)、道路生成+贴图指定:

        因道路数据原本就是线段,并不是模型,所以,需要先根据线,生成道路。

        注意先切换为对象模式快捷键 TAB.

   创建道路横截面:

        Shift + A  : 创建  曲线 >> Nurbs 曲线。 

查看所选(快速定位) 快捷键  ` 

编辑模式下快捷键V(设置控制柄类型) 切换为>> 矢量.

 

选中大纲视图中,选择heightway,然后 快捷键 鼠标右键转换到>>曲线。

这时,工具栏会出现这个图标,选中highway,后,为几何数据下,对象中,指定曲线

这样的话,就有了宽度。

选中曲线在物体属性面板中,找到缩放X,并调节参数,会发现 道路变宽了

 


为道路添加贴图:

        选择曲线,新建一个材质球,并命名,为道路寻找一张 如下图类似的公路贴图。

 

指定后,选择highway,为路面添加材质贴图。

 

为路面指定材质。

 

这个时候就可以看到路面被赋予了公路的贴图。

 

当然这里可以看到 贴图有拉伸,可以在这个窗口来修改UV拉伸状况。

 

 

可以明显看到中间的差别。

那么以上,就是Blender中全部的处理内容,结下来,选中需要导出的网格模型,导出FBX即可导入到Unity中,开始在Unity中处理效果。

4、Unity中为不同内容类型添加shader:
        1)、非主区域shader使用:
        2)、道路区域Shader使用:
        3)、主要建筑Shader使用:


三、实操环节(方案2):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/34387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言每日一练(6)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

华为运动健康,十年创新天地宽

我听一位朋友讲过这样一个故事。某天早上,急诊科的医生迎来了一位患者,患者进来后直接说:“大夫,我房颤了。” 这位医生非常诧异,因为心脏房颤确实非常危急,但很多时候并没有明显的生理体征,患者…

JavaScript之BOM+window对象+定时器+location,navigator,history对象

一.BOM概述 BOM即浏览器对象模型,它提供了独立于内容而与窗口进行交互的对象 BOM的顶级对象是window 二.window对象的常见事件 1.窗口加载事件window.onload window.onload function(){} 或者 window.addEventListener("onload" , function(){}); window.onlo…

Mybatis-plus动态条件查询QueryWrapper的使用

Mybatis-plus动态条件查询QueryWrapper的使用 一:queryWrapper介绍 queryWrapper是mybatis plus中实现查询的对象封装操作类,可以封装sql对象,包括where条件,order by排序,select哪些字段等等,他的层级关…

CentOS7连接网络

1.下载centos7镜像文件 2.安装centos7 3.修改网卡,ens33. 注意: 这里使用的是dhcp,设置IPADDR192.168.31.64一方面是为了后面使用crt或者MobaXterm连接,另一方面它和windows电脑的网卡要一致.这样才可以连接到网络.win r,输入cmd,打开命令窗口输入ipconfig.可以看到IPv4: 102…

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS ;需要设置快捷键,这里原来是save all操作时上传文件到服务器; ** 设置好快捷键后按 CtrlS就会同步文件(添加删除文件后保存,服务器也会同步) ** 搜索出save all 后&#xf…

NPM与外部服务的集成(上)

目录 1、关于访问令牌 1.1 关于传统令牌 1.2 关于粒度访问令牌 2、创建和查看访问令牌 2.1 创建访问令牌 在网站上创建传统令牌 在网站上创建粒度访问令牌 使用CLI创建令牌 CIDR限制令牌错误 查看访问令牌 在网站上查看令牌 在CLI上查看令牌 令牌属性 1、关于访问令…

报错注入(主键重复)攻击原理

基本原理 利用数据表中主键不能重复的特点,通过构造重复的主键,使得数据库报错,并将报错结果返回到前端。 SQL说明函数 以pet数据表为例进行说明 rond(): 返回[0,1)区间内的任意浮点数。 count(): 返回每个组的列行数。 如&#xff0…

SWIG使用方法

安装 下载 swigwin软件包,解压到合适的位置,然后将路径添加到环境变量即可。 编写C代码 //vector.hpp class Vector { private:int x;int y; public:Vector(int,int);double abs();void display(); };//vector.cpp #include "vector.hpp" …

CI/CD—K8S 基本理解与部署

1 K8S 是什么 Kubernetes 是一款容器的编排调度工具,来源于 Google 开源的 Brog 系统。Kubernetes简称K8S,是用8代替8个字符 “ubernete” 而成的缩写,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化…

解决createRoot is not a function

报错: 出现的原因:在于把react18使用的vite构建,在开发中因react版本太高与其他库不兼容,而在降级的时候,出现以上dom渲染出现报错。 解决:将 src/index.j文件改成如下 import React from react; import…

【数据结构与算法】十大经典排序算法-冒泡排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌴掘金:HelloCode 🌞知乎:HelloCode ⚡如有问题,欢迎指正&#…

锐捷设备密码管理、密码恢复、恢复出厂设置

目录 配置登录用户名密码以及Enable密码 只需要密码登录 需要用户名和密码登录(无AAA) 需要用户名和密码登录(有AAA) 密码恢复 Web密码忘记 Telnet/SSH密码忘记 Console密码忘记 所有密码都忘记,通过Console进…

服务器数据恢复-RAID5上层Hyper-V虚拟机数据恢复案例

服务器数据恢复环境: 一台Windows Server服务器,部署Hyper-V虚拟化环境,虚拟机的硬盘文件和配置文件存放在一台DELL存储中。该存储中有一组由4块硬盘组建的RAID5阵列,用来存放虚拟机的数据文件,另外还有一块大容量硬盘…

【TypeScript】进阶之路语法细节,类型和函数

进阶之路 类型别名(type)的使用接口(interface)的声明的使用二者区别: 联合类型和交叉类型联合类型交叉类型 类型断言获取DOM元素 非空类型断言字面量类型的使用类型缩小(类型收窄)TypeScript 函数类型函数类型表达式内部规则检测函数的调用签…

keil下载程序具体过程:概述

一、前言 keil下载程序具体过程将由一系列的博客组成,将深入探讨keil这种IDE下载镜像文件时具体做了哪些事情。我们平常下载镜像的时候,只是点击了一下Download按钮,剩下的都由keil替代我们完成了。本系列博客将揭示这一过程,keil…

【云原生】kubernetes控制器deployment的使用

目录 ​编辑 1 Controller 控制器 1.1 什么是 Controller 1.2 常见的 Controller 控制器 1.3 Controller 如何管理 Pod 2 Deployment 2.1 创建 deployment 2.2 查看 deployment 2.3 扩缩 deployment 2.4 回滚 deployment 2.5 删除 deployment 1 Controller 控制器 …

markdown命令模板

markdown快速入门(typora) 1、代码块 //代码块语 public static void main(String[] args){}//linux下spring项目的启动命令 # java -jar blog start ## 2、标题:java # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题3、字体 …

Webpack 的 sass-loader 在生产模式下最小化 CSS 问题

学习webpack时候我发现一个问题: 将mode 改为production模式后,生成的css会被压缩了,但是我并没有引入CssMinimizerPlugin插件,然后我试着将optimization.minimize 设置为false,测试是否为webpack自带的压缩&#xff0…

【计算机网络】——数据链路层

二、组帧 1、字符计数法 帧头部使用一个字符来表示帧的大小(包括第一个计数字符) (此处一字符一个字节) 2、字符填充收尾定界法 特定字符来定界帧的首和尾。若帧中数据段出现等同于特定字符的字符内容,前置一个转义字符。(类似于正则表达…