前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >​X3派+大疆无人机-SLAM单目建图.ROS包制作

​X3派+大疆无人机-SLAM单目建图.ROS包制作

作者头像
云深无际
发布于 2022-09-06 06:58:43
发布于 2022-09-06 06:58:43
1.1K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

X3派+大疆无人机-SLAM单目建图.上 上篇文章在此,猝不及防的小小的火了一下,让我清汤寡水的生活有了一丝慰藉。

好活

无所谓了,彻底放飞自我:

摇晃鸭送给大家

目前你要知道的一点是,ROS说到底就是一个接收和发送的过程,这里就先对发送的信息来一个打包了。

这里需要看一下无人机的SDK来构建这个东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://dl.djicdn.com/downloads/RoboMaster%20TT/Tello_SDK_3.0_User_Guide_cn.pdf

官网有,自取

目前先了解这个就行

视频流也是需要的

我们先建立一个这样的文件夹

把我们需要得信息来封装一下,ROS得Msg是固定的几种

WIFI的配置也有

在Cmake里面写好我们要编译的信息

ROS终归就是个软件的框架,最终的还是需要一个语言去落实,这里就编译成C++的。

XML文件呢,就是这个包的身份证,编译的时候依赖谁,包的作用等等

对一个机器人来说,我们需要控制的对吧?

少废话,整快点

显示无人机图像并提供键盘控制。

T 用于起飞,L 用于降落无人机,F 用于向前翻转,E 用于紧急停止,WASD 和箭头用于控制无人机运动。

SDK中获得我们的控制命令

在具体的写以前,我想让大家这里这个控制文件的一个宏观的设计

头写上

我们需要C++的ROS2控制库

附有完整的API,使用的时候记得多查

假如你不查,我觉得就是欠揍,你咋个那么厉害哟~

捏爆你的双黄蛋

关ROS中常用的消息。包括动作消息 (actionlib_msgs)、诊断 (diagnostic_msgs)、几何图元 (geometry_msgs)、机器人导航 (nav_msgs) 和常见传感器 (sensor_msgs),例如激光测距仪、相机、点云。

这里有用这个

这表示自由空间中的速度,分为线性部分和角度部分。你等我写完这些就阅读ROS的源码。

这个消息包的作用是:隔离消息以在共享依赖关系中的堆栈之间进行通信允许依赖堆栈中的节点进行通信,而无需相互依赖。该堆栈被设计为包含多个堆栈之间使用的最常见消息,以提供共享依赖关系,从而消除有问题的循环依赖关系。

下面的代码是:ROS 主题发布,你别问为什么这么写,因为别人也是这样写的。

这里是ROS2的写法

ROS1到ROS2的很多消息定义类似,大部分一样只是多了一个msg域 我自己说的(夸我)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <ros/ros.h>----> #include <rclcpp/rclcpp.hpp>

这也是变化

才学两天模板就出来搞这了

这里推荐一本书

ROS1的定时器使用的是while,二代就牛逼了一些。

每个节点都有一个句柄列表(与计时器、订阅者、客户端、服务、等待对象相关),这些句柄被放入等待集中。每当节点旋转(执行周期)时,都会检查此等待集以查看是否准备好执行任何操作。

对于计时器,这仅仅意味着检查计时器是否“过期”-> 如果是,则执行回调。

对于订阅,可以将其想象成 rcl 层询问 rmw 是否在 DDS 级别发生了任何事情,例如接收消息。

但基本上,节点只是检查是否为正确类型的回调触发了正确的事件。回调中的内容无关紧要。你可以在里面放任何东西。

这个函数的原型

看参数就行

接着我们就可以写出这样的代码,妈的,这就好像我教你1+1,但是留作业是微积分的样子,但是写程序就是这样。事实上还有一段回调没有写,开始~

还是先解释一下这个东西,我们设计了一个节点,这个节点不停的发送SDK里面的指令。里面的命令在外部被订阅,收到就会执行任务。

之后里面搞了一个定时器。1ms看看有没有东西发生,或者这样说吧,1ms就看看回调函数有没有活干,我想回调函数是骂骂咧咧的。

回调函数摸头,定时器你礼貌吗?

我之前是个土狗,没有用过回调函数,曾经看过很多的文章,正经的不正经的都有,但是抛开一切。回调函数无非就是个等候调用的小老弟。说大白话有点不装逼,来一段拽一些的:顾名思义,回调函数就是回头再调用它。回调函数其实就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。

这里我也决定把我的笔记分享给大家:

看懂了吗?

快说看懂了啊,我这截图不浪费功夫咩???

在你假装看懂的基础上继续看这个回调函数:

先看个大的

这些是OpenCV的东西,就是先搞个控制的照片,填充窗口,然后就是创建,显示啥的。15ms看看有没有按键按下,还记得我前面的东西吗?

就看一个,如果按键按下

就把信息发出去

如果都没有就调用手动的函数,妈的,老母猪戴胸罩,一套又一套,再写个函数。

好烦

没啥好说的,把来自键盘的信息发出去

发给这个

最后这个信息发的时候注意组装

最后收尾,漂亮~

添加的编译文件

在上面写一下关于OpenCV的依赖项

内容准备的有点多的了。。。接下来一个Node,用于控制DJI Tello无人机的软件包,根据DJI提供的官方SDK提供数据和对无人机的控制。

还是先看看组织的样子

这个东西有点复杂,我怕我写不下去。

先导入库

代码有点长,倒着看,就是一个节点的启动

四元到欧拉

欧拉到四元

我不讲这个,因为我们是APP不是算法文章,下次讲,而且这两个函数是可以复用的。

节点里面有这些函数

这么努力的写不知道有没有人在看,太伤心了

节点一开始内置的参数,不要改动。主要是连接的信息

把内部的参数获取,进行类型的转换

这里看这个,因为主题是单目的SLAM,所以镜头的参数就很重要了

相机的参数是可以从外部获取的

这些参数是哪里来的额?是使用关于标定的ROS包搞来的

这里就会把外部标定的数据传给变量。

这个是外部的Tello控制包,下次我给你解读

和日志功能连用,来告诉操作者(就是我,连接情况)

一个节点的收发功能也启动到位

三大线程也启动

无人机准备起飞!

发布的节点是这样的,应该可以看的明白把。有图像,镜头标定信息,Tello的状态,ID,IMU的数据,电池,温度,里程计等,后面还有坐标的广播。

订阅的是外部的信息,起飞?迫降,控制啥的,翻跟头

就是ROS之间,信息的传输都是标准的信息,所以这里需要进行一个信息的转换,对于CV来说,思路就是按照顺序,追踪着视频流走就好,这里就是一个信息的捕获,转换,发送,而且是作为线程处理的一个函数。

另外一个是无人机的信息线程

死锁发送

一个电源的节点,其实有很多的信息,有不变的,有变的,大家都会发出来,但是你具体的使用,都要去选择的订阅, 不然我怎么知道你要啥信息,信息是从tello搞来的

tello的状态是这样的,注意看我选择的关键词,tello都是外部获得的。感兴趣的姿态信息都有了,

相机的信息是yaml里面存的,就像外挂一样,也一起发送了。

这键盘灯就是帮我找到在哪里,上面的字一个也看不清

剩下就是里程计的发送线程了

里程计说到底就是距离和角度,自己看要啥

这个相当于Util函数,写几个和机器本身相关的函数

可以通过这样的信息,搭配RC指令来精确的控制俺们的小机机

写完了!!!

本来应该上机给大家展示一下编译过程的,但是我好累,明天文章的开头展示,这里放上编译的脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

cd ../workspace
rm -rf build install log

rosdep install -i --from-path src
colcon build --symlink-install --packages-select tello tello_control tello_msg
# 表示编译时如果 install 中文件已经存在于 src 或者 build 文件夹中,
# 就用超链接指向该文件,避免浪费空间,也可以实现同步更新

昨天因为一个JK引男女老少都进来看看有啥好东西,所以今天也得搞点不一样的,这就去找。

老夫压箱底图片一张

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.jianshu.com/p/8c7516fc3b1a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://wenku.baidu.com/view/3cc58005bfd126fff705cc1755270722192e5920.html
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/ros/common_msgs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.pianshen.com/article/9755969759/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://docs.ros.org/en/rolling/Concepts/About-ROS-Interfaces.html?highlight=geometry_msgs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/ament/ament_lint/blob/master/ament_cmake_lint_cmake/doc/index.rst
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://docs.ros2.org/latest/api/rclcpp/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Unity 通用透明物体漫反射Shader
对于至今为止Shader学习内容的一个总结,算是一个比较综合通用的shader了,因为是漫反射所以暂时没有计算高光部分,之后再出一个带高光版本的。
汐夜koshio
2020/03/19
8730
《Unity Shader入门精要》笔记:初级篇(4)
本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载。 本篇博客会补充一些扩展内容(例如其他博客链接)。 本篇博客还会提供一些边读边做的效果截图。文章内所有数学公式都由Latex在线编辑器生成。 本篇博客主要提供一个“glance”,知识点的总结。如有需要请到书店购买正版。 博客提及所有官方文档基于2022.2版本,博客会更新一些书中的旧的知识点到2022.2版本。 如有不对之处欢迎指正。 我创建了一个游戏制作交流群:637959304 进群密码:(CSGO的拆包密
[Sugar]
2022/09/21
5930
《Unity Shader入门精要》笔记:初级篇(3)
本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载。 本篇博客会补充一些扩展内容(例如其他博客链接)。 本篇博客还会提供一些边读边做的效果截图。文章内所有数学公式都由Latex在线编辑器生成。 本篇博客主要提供一个“glance”,知识点的总结。如有需要请到书店购买正版。 博客提及所有官方文档基于2022.2版本,博客会更新一些书中的旧的知识点到2022.2版本。 如有不对之处欢迎指正。 我创建了一个游戏制作交流群:637959304 进群密码:(CSGO的拆包密
[Sugar]
2022/09/21
6970
《Unity Shader入门精要》笔记:中级篇(1)
本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载。 本篇博客会补充一些扩展内容(例如其他博客链接)。 本篇博客还会提供一些边读边做的效果截图。文章内所有数学公式都由Latex在线编辑器生成。 本篇博客主要提供一个“glance”,知识点的总结。如有需要请到书店购买正版。 博客提及所有官方文档基于2022.2版本,博客会更新一些书中的旧的知识点到2022.2版本。 如有不对之处欢迎指正。 我创建了一个游戏制作交流群:637959304 进群密码:(CSGO的拆包密
[Sugar]
2022/09/21
7820
Shader实例:高级纹理应用
第一种方法:就是提供一张具有特殊布局的纹理(如:立方体展开贴图交叉布局,全景布局等)用的时候把Texture Type设置成Cubemap(优点:这种方法可以对纹理数据进行压缩,而且可以支持边缘修正,光滑反射和HDR等功能);
bering
2019/12/03
5580
Shader实例(流光实现)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/02
1.9K0
Shader-基础纹理-凹凸映射
基础纹理: 美术人员通常在建模软件中利用纹理展开技术,将纹理映射坐标存储在每个顶点上。纹理映射坐标定义了该点在纹理中对应的2D坐标。这个坐标通常被称为UV坐标用uv表示。
祝你万事顺利
2019/05/28
9030
Shader-基础光照-高光反射光照模型
在a2v中声明了一个新变量texcoord,Unity将第一组纹理坐标存储到该变量中.在v2f结构体中,添加用于存储纹理坐标的变量uv.
祝你万事顺利
2019/05/31
4020
Shader-基础纹理-渐变纹理
一种基于冷暖色调的着色技术,通过渐变纹理控制漫反射光照。核心部分来说用过使用halfLambert构建一个纹理坐标,用这个纹理坐标来对渐变纹理进行采样。
祝你万事顺利
2019/05/28
1.2K0
Shader-基础光照-高光反射光照模型
高光反射计算公式: 我们需要4个参数,光源的颜色和强度,材质的高光反射系数,视角方向和反射方向. 在高光反射中我们要取得反射光线和视线的夹角. Cg提供了反射光线的函数reflect(i,n)
祝你万事顺利
2019/05/28
1K0
Unity Shader-描边效果[通俗易懂]
描边效果是游戏里面非常常用的一种效果,一般是为了凸显游戏中的某个对象,会给对象增加一个描边效果。最近又跑回去玩了玩《剑灵》,虽然出了三年了,感觉在现在的网游里面画面仍然算很好的了,剑灵里面走近或者选中NPC的一瞬间,NPC就会出现描边效果,不过这个描边效果是渐变的,会很快减弱最后消失(抓了好久才抓住一张图….)
全栈程序员站长
2022/07/26
2.3K0
Unity Shader-描边效果[通俗易懂]
Unity Shader常用函数,标签,指令,宏总结(持续更新)
UnityObjectToClipPos(v.vertex); 最基本的顶点变换,模型空间 ==》裁剪空间 mul(unity_ObjectToWorld, v.vertex); 顶点:模型空间 ==》世界空间,多用于顶点着色器 UnityObjectToWorldNormal(v.normal); 法线:模型空间 ==》世界空间,多用于顶点着色器,float3(归一化后fixed3) UnityWorldSpaceLightDir(i.worldPos.xyz); 仅前向渲染,世界空间顶点位置 ==》世界空间光源方向,多用于片元着色器,一般会顺带归一化(fixed3) UnityWorldSpaceViewDir(i.worldPos.xyz); 世界空间顶点位置 ==》世界空间视线方向,多用于片元着色器,一般会顺带归一化(fixed3) P.S.一般[0,1]范围内的尽量用低精度fixed类型,如单位矢量,颜色等 Tags{"lightmode"="forwardbase"}(字符串不区分大小写,编译时会自动转为所有字母大写) 指示光照模型为前向渲染的基本模式 #include "UnityCG.cginc"(字符串不区分大小写,编译时会自动转为所有字母大写) 包含大量基本内置函数,宏等,一般自带 #include "lighting.cginc"(字符串不区分大小写,编译时会自动转为所有字母大写) 包含基本光照属性,如 _LightColor0 UNITY_LIGHTMODEL_AMBIENT(使用大写) 环境光,一般取前三个分量rgb(xyz);基本光照模型需要有环境光,漫反射,高光等 基本纹理&法线贴图: TRANSFORM_TEX(v.uv, _MainTex); 基本纹理变换,用于顶点着色器,相当于v.uv*_MainTex_ST.xy + _MainTex_ST.zw;(其中xy存缩放,zw存偏移,对应面板参数);_MainTex_ST需额外定义 tex2D(_MainTex, i.uv); 基本纹理采样,用于片元着色器;一般会定义染色属性并与之相乘得到反射率(albedo),反射率作为环境光和漫反射计算的因子 UnpackNormalWithScale(packedNormal, _BumpScale); 反映射法线贴图采样结果得到顶点空间中的法线方向,同时计算凹凸映射的缩放;packedNormal为法线贴图直接采样结果,_BumpScale为凹凸缩放值;法线贴图必须进行导入设置为Normal Map UnityObjectToWorldDir(v.tangent.xyz); 方向(切线):模型空间 ==》世界空间,多用于顶点着色器 cross(worldNormal, worldTangent)*v.tangent.w 计算副法线,cross(,)两个向量叉积,用于得知两个坐标轴求第三个坐标轴朝向,w控制朝向的正负;知道三个朝向就可以构造变换矩阵了 TANGENT_SPACE_ROTATION 得到从模型空间到顶点空间的变换矩阵rotation,随后可直接进行如下计算,例如: mul(rotation, ObjSpaceLightDir(v.vertex)); 模型空间顶点位置 ==》模型空间光源方向==》顶点空间光源方向 mul(rotation, ObjSpaceViewDir(v.vertex)); 模型空间顶点位置 ==》模型空间视线方向==》顶点空间视线方向 多光源&前向渲染&光照衰减: Tags{"lightmode"="forwardbase"}(第一个Pass,全局性通用计算,只计算一次,不用开启混合) Tags{"lightmode"="forwardadd"}(第二个Pass,根据光源数目不同可能多次计算,需开启混合) 前向渲染的两种标签,分别位于不同的两个Pass,指示每个Pass的光照模式 #pragma multi_compile_fwdbase #pragma multi_compile_fwdadd 前向渲染的两种指令,只有每个Pass配置正确指令才可能得到正确的光照变量,如光照衰减值 UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos.xyz); 用于第二个Pass分别计算每个光源的衰减,atten为输出的衰减值,i为片元着色器的输入结构体,其内部数学运算根据各个光照的类型不同复杂度不一,具体可参考:https://github.com/candycat1992/Unity_Shaders_Book/issues/47 接收投影: SHADOW_COORDS(idx) 声明阴影纹理采样的坐标,用于顶点着色器输出结构体,idx为下一个可用插值寄存器(TEXCOORD)的索引值 TRANSFER_SHADOW(o); 用于在顶点着色器
汐夜koshio
2020/03/19
2.1K0
【Unity Shader】绒毛草坪
后来参考了这篇文章的思路,相信很多人都看过,核心思想就是通过多个PASS的堆叠实现出类似毛发的效果:
HkingAuditore
2023/10/26
4460
【Unity Shader】绒毛草坪
Shader-透明效果-透明度测试
在代码中添加Cull Off关闭渲染图元的剔除功能,这时所有的物体都是正反面双向渲染,得到效果如下
祝你万事顺利
2019/05/28
1.5K0
Shader-基础纹理-遮罩纹理
遮罩纹理(mask texture)控制光照的强度,获得更加细腻的效果,通过遮罩纹理控制光照。在制作地形材质的时候混合多张图片,遮罩纹理控制如何混合这些纹理。 通过采样得到的纹素值与某种表面属性相乘,来更加精准的控制模型表面的各种属性。 在代码中添加了BumpMap来进行凹凸纹理效果,通过SpecularMask实现控制高光的光照
祝你万事顺利
2019/05/28
1.2K0
Shader-透明效果-透明度混合
透明度混合相较于透明度测试更加复杂一些,透明度混合可以得到真正的半透明效果,使用当前片元和透明度作为混合因子,与已经存储在颜色缓冲区的颜色值进行混合,得到新的颜色。透明度混合需要关闭深度写入,这使得我们需要关注物体的渲染顺序。 我们使用Unity的混合指令Blend,想实现半透明的效果就要把当前自身的颜色和已经存在的颜色缓冲中的颜色进行混合,混合时使用的函数就是该指令决定的。
祝你万事顺利
2019/05/28
2.3K0
Shader经验分享
流水线 1.应用阶段:(CPU)输出渲染图元,粗粒度剔除等 比如完全不在相机范围内的需要剔除,文件系统的粒子系统实现就用到粗粒度剔除。 2.几何阶段:(GPU)把顶点坐标转换到屏幕空间,包含了模型空间 到世界空间 到观察空间(相机视角view) 到齐次裁剪空间(投影project2维空间,四维矩阵,通过-w<x<w判断是否在裁剪空间) 到归一化设备坐标NDC(四维矩阵通过齐次除法,齐次坐标的w除以xyz实现归一化) 到屏幕空间(通过屏幕宽高和归一化坐标计算)。 a.顶点着色器:坐标变换和逐顶点光照,将顶点空间转换到齐次裁剪空间。 b.曲面细分着色器:可选 c.几何着色器:可选 d.裁剪:通过齐次裁剪坐标的-w<x<w判断不在视野范围内的部分或者全部裁剪,归一化。 e.屏幕映射:把NDC坐标转换为屏幕坐标 3.光栅化阶段:(GPU)把几何阶段传来的数据来产生屏幕上的像素,计算每个图元覆盖了哪些像素,计算他们的颜色、 a.三角形设置:计算网格的三角形表达式 b.三角形遍历:检查每个像素是否被网格覆盖,被覆盖就生成一个片元。 c.片元着色器:对片元进行渲染操作 d.逐片元操作:模板测试,深度测试 混合等 e.屏幕图像 ------------------------------------------------------- 矩阵: M*A=A*M的转置(M是矩阵,A是向量,该公式不适合矩阵与矩阵) 坐标转换: o.pos = mul(UNITY_MATRIX_MVP, v.vertex);顶点位置模型空间到齐次空间 o.worldNormal = mul((float3x3)_Object2World,v.normal);//游戏中正常的法向量转换,转换后法向量可能不与原切线垂直,但是不影响游戏显示,而且大部分显示也是差不多的。一般用这个就行了。 o.worldNormal = mul(v.normal, (float3x3)_World2Object);顶点法向量从模型空间转换到世界空间的精确算法,公式是用_Object2World该矩阵的逆转置矩阵去转换法线。然后通过换算得到该行。 ------------------------------------------------------- API: UNITY_MATRIX_MVP 将顶点方向矢量从模型空间变换到裁剪空间 UNITY_MATRIX_MV 将顶点方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 将顶点方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 将顶点方向矢量从观察空间变换到裁剪空间 UNITY_MATRIX_VP 将顶点方向矢量从世界空间变换到裁剪空间 UNITY_MATRIX_T_MV UNITY_MATRIX_MV的转置矩阵 UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间 _Object2World将顶点方向矢量从模型空间变换到世界空间,矩阵。 _World2Object将顶点方向矢量从世界空间变换到模型空间,矩阵。 模型空间到世界空间的矩阵简称M矩阵,世界空间到View空间的矩阵简称V矩阵,View到Project空间的矩阵简称P矩阵。 --------------------------------------------- _WorldSpaceCameraPos该摄像机在世界空间中的坐标 _ProjectionParams _ScreenParams _ZBufferParams unity_OrthoParams unity_Cameraprojection unity_CameraInvProjection unity_CameraWorldClipPlanes[6]摄像机在世界坐标下的6个裁剪面,分别是左右上下近远、 ---------------------------- 1.表面着色器 void surf (Input IN, inout SurfaceOutput o) {}表面着色器,unity特殊封装的着色器 Input IN:可以引用外部定义输入参数 inout SurfaceOutput o:输出参数 struct SurfaceOutput//普通光照 { half3 Albedo;//纹理,反射率,是漫反射的颜色值 half3 Normal;//法线坐标 half3 Emission;//自发光颜色 half Specular;//高光,镜面反射系数 half Gloss;//光泽度 half Alpha;//alpha通道 } 基于物理的光照模型:金属工作流Surfa
bering
2019/12/03
2.2K0
Unity Shader 玻璃效果
一个玻璃效果主要分为两个部分,一部分是折射效果的计算,另一部分则是反射。下面分类进行讨论:
汐夜koshio
2020/03/19
1.4K0
shader 4 杂 一些和函数名词、数据结构
Bump mapping: 凹凸贴图;模拟粗糙外表面的技术。 FX-Water simple.shader中即用到了。模拟波浪效果。
全栈程序员站长
2022/07/09
4150
Unity Shader 菲涅尔环境反射
菲涅尔反射描述了一种光学现象,当光照到物体表面时,一部分发生反射,另一部分则进入物体内部,发生折射或散射;相比直接的反射和折射计算,菲涅尔反射更接近真实情况。
汐夜koshio
2020/03/19
1.6K0
相关推荐
Unity 通用透明物体漫反射Shader
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档