在玩 HDRP 的内置 Lit 着色器的时候,对它的 Mask Map 贴图很感兴趣,感觉似乎能够为材质添加很多细节
不使用 Mask Map
使用 Mask Map
查了下文档,发现 Mask Map 是分 RGBA 通道作为灰度蒙版,为材质添加金属度、环境光遮蔽、细节贴图蒙版与粗糙度效果的:
让我最感兴趣的是 A 通道的粗糙度蒙版,就像上图那样,能营造出非常类似物体表面的水雾的感觉。
恩..如果我用 Shader 让这个 A 通道做一个平移,再加点噪声,说不定就能做出来类似下雨时物体表面潺潺流水的效果?
使用 ShaderGraph 的 Time
与Tilling and Offset
节点将 UV 做一个平移,加上线性噪声节点做一些扭曲,添加一点随机性。最后直接复用原材质的 Mask Map 的 A 通道并应用扰动。用一个布尔来控制是否应用效果。添加各种属性值就不说了。应该还不错。
在实现过程中,由于 HDRP 的内置 Lit 着色器没有 ShaderGraph 版本,就从论坛上找了一个官方的 Lit 着色器的 ShaderGraph 版本,基于它进行修改。
整体(糊也没事..大部分是官方给的,用于实现 Lit 的特性,核心就那上面的一小点)
核心效果实现(就这几个节点..真的挺简陋的..)
砖墙材质
石碑(?) 材质
模型效果
这是个很粗糙的效果,用到的节点也很少,之后要实际应用的话肯定要补充很多细节,比如单独做水流的 Mask 应该会好很多
个人认为的效果优缺点:
优点:
和网上其他的雨水效果比起来,对性能影响应该蛮低的。加上天气效果以及一些点缀应该也能实现不错的效果
简单啊(连我都能做出来..),直接复用材质自己的 Mask Map 也懒省事了
因为不同材质的 Mask Map 不同,所以这个效果也会带有各自材质的特点,不会说效果千篇一律看着疲劳
缺点:
对于较为光滑的平面类物体感觉效果比较一般
因为复用了原材质的 Mask Map,应用效果时材质自身的粗糙度会丢失,不太好
可远观而不可亵玩(bushi),在远处看起来还不错,如果离得太近的话就能比较明显的看出来违和的平移与噪声
总之还是个很粗糙的效果,不过这种思路应该还是有点意思的,必能活用于下一次..
https://forum.unity.com/threads/trying-to-replicate-the-hdrp-lit-shader-i-need-help-with-the-detail-input-part.660538/Unity Forum-ShaderGraph 版 Lit 原贴
https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@7.1/manual/Mask-Map-and-Detail-Map.htmlMask Map 文档
https://github.com/OnyxAmber/UnityHDRP_ShaderGraphTest把着色器图与材质传到 Github 上了,项目太大就不传了,直接拖入 Unity 窗口即可。使用贴图也是 HDRP 自带的示例。
周,中国"奋斗者"号载人潜水器两次"打卡"马里亚纳海沟,坐底深度 10909 米,创造了中国载人深潜的新纪录,标志着我国的深潜事业又迈上了一个崭新的台阶。昨天, "奋斗者"号再次进行了万米级海试。
从浅海到深海,从潜水者到深潜器,人类是如何一步步走向海底的?而制造一台深潜器有多难?
01 伟大的先行者们
神秘的海洋自古以来就是孕育神秘传说和伟大探索梦想的温床。几十米长粗壮腕足的海怪、西方的塞壬和东方的鲛人、失落的亚特兰蒂斯、居住着龙王的海底龙宫 …… 无数神话与科幻作品的灵感来源于那片深蓝,而人类对于它的探索也从未停止过。
《海王尼普顿》,作者 Antoine Coysevox
受限于技术条件与财富水平,古人们对海水深处的探索大多停留于浅表。对于没有潜水器具的他们来说,几十米深的水下就已经危险重重了。即使是这样,古人还是为后人留下了宝贵潜水经验。
在公元前 4 世纪,波斯帝国就出现了世界上最早的职业潜水者——负责从海底的沉船中打捞货物和珠宝。此外,地中海东岸采珍珠的腓尼基人、日韩等地的海女以及我国广东地区的古代疍民,也用肉身探索了全球各地物产较为丰富的近海海域。虽然他们所使用的潜水工具只是一些简单的麻绳、石块或者充气动物膀胱,下海的初衷也是生活所迫,但客观上,这些先民们的确是人类探索海平面以下世界的先行者。
韩国海女(图片来源:miss 猫大人 /lvmama.com)
16 世纪,英国科学家威廉 · 伯恩第一次提出了潜水艇的设想。他在 1578 年设计了一艘由皮革密封,以木条为骨架,可以在水下滑行的"木桶"。
威廉 . 伯恩 1578 年构想的潜艇原理图(Submarine by William Bourne, in Inventions or devices, 1578.)
威廉 . 伯恩的"木桶"具体是什么样子已不可考,但是毫无疑问,这艘"潜水艇"的诞生为那个时代的工程师们打开了新世界的大门。他们开始思考一种之前从未设想过的交通方式。40 年后,荷兰人科尼利斯 · 德雷贝尔在英王詹姆斯一世的支持下,制造出了世界上第一艘凭借人力驱动可以在水下航行的船只,这是世界上第一艘人力潜艇,也是现代潜艇的雏形。
科尼利斯 · 德雷贝尔潜艇复原图 (https://www.hisour.com/zh/cornelis-drebbel-13858/)
02 从潜艇到深潜器
潜水艇的出现极大地开阔了人类的视野,从此之后那层厚厚的海水开始慢慢变"薄",深海的迷雾被人类逐渐揭开。但是,潜水艇的下潜深度非常有限,各种潜艇的工作极限深度只有几百米,想要下潜到更深处,普通的潜水艇是远远不够的,需要专门的深潜器。
深海的巨大水压为有别于潜艇的深潜器提出了完全不同的要求。1928 年,美国人巴顿用钢铁制造了一个球型潜水装置。这个"球"内置简单的照明、呼吸和通讯设施,至于动力系统、生命维持系统之类现代深潜器标配一概欠奉,只是靠着与母船连接的一条钢索 + 电缆下潜与上浮。
贝比和巴顿的潜水球剖面示意图(图片来源:中国舰船研究)
1934 年,巴顿和一名叫比伯的博物学家下潜到了 923 米的深度。后来,比伯还把下潜的经历写成了一本书,向公众详细描述了他们看到的海底世界。不过受限于当时的摄影技术,他们在海底并未取得可靠的影像资料,只能靠话语描述让画师画出他们所见到的海底生物的样子。他所讲述的奇特海底生物一时之间让他成为了科学界的笑柄——那时的人们还都以为那么深的海底是生命的禁区呐。
巴顿和贝比(左)(图片来源:中国舰船研究)
03 向更深处进发!
不过向深渊进发、探索未知的欲望还是驱使着人类不断下到更深。之后的几十年里,深海探测技术的发展势头如火如荼,最值得一提的深潜器有两台:
一是瑞士探险家皮卡德在巴顿的球型深潜器基础上改进、建造的"迪里亚斯特号"。它因 1960 年作为第一台深潜至马里亚纳海沟底部的载人潜水器而名留青史。
迪里亚斯特号(图片来源:维基百科)
另一台则是 1964 年服役的美国"阿尔文号"。它的下潜深度 4500 米虽然不到迪里亚斯特号的一半,但它在接近 40 年的服役时间中下潜了 4000 多次,是深潜器界当之无愧的"劳动模范"。再加上 4500 这个下潜深度其实已经足够探索全球绝大部分的深海区域,故而在深海探测领域它居功甚伟。
阿尔文号潜艇(图片来源:维基百科)
此外,美国 "深海挑战者"号、日本"深海 6500 "号、俄罗斯"和平一号"、法国"鹦鹉螺"号载人深潜器也是深潜器家族中赫赫有名的成员。当然,我们不会忘记中国的"蛟龙号"和"深海勇士"号。在这里插一个有关于 "蛟龙号"的小知识点,蛟龙的最大下潜深度是 7062 米,这个深度足以让它探索全球海洋的 99.8% 的区域,而这次下潜的"奋斗者号",它的目标就是那仅剩的 0.2%。
"鹦鹉螺号" 载人深潜器(图片来源:亥姆霍兹海洋研究所)
04 深潜器,真的不是你想造就能造
仔细一看上面拥有深潜器的国家名单就会发现,深潜器家族虽然看上去欣欣向荣,许多国家都参与到深海科研项目当中,但是能制造深潜器的,迄今为止还是那寥寥数个科技大国。
可能有人会觉得奇怪,人类在 1960 年就已经制造出了能够深入到马里亚纳海沟底部的潜水器,为什么 60 年过去了,能制造深潜器的国家还是只有美、法、俄、日、中等寥寥几个国家呢?制造一台深潜器的技术门槛究竟在哪儿?
其实,深潜器制造就像航天工程,是一个由多种工业部门协同合作才能成行的"大项目"。我们来举几个例子:
1. 抛掉与母船连接的粗笨"辫子"。要潜到几千米深的水下,像巴顿那样的构造简单的"金属球"是万万不够的。它的体积太过狭小,没法容纳更多的空气,下潜时间十分有限;只能由钢索牵引上浮与下沉,活动范围受限于母船以及钢索长度不说,随着钢索的不断加长,钢索断裂的风险也会随着深度增加而飞速上升。
深潜器必须学会在近万米深的水下自己上浮与下潜、巡航与悬停。为实现上浮与下潜,目前潜航员们主要的工具是电磁铁,利用电磁铁在深潜器外部或特殊舱室吸住一块块压载铁或铁砂,使深潜器的整体密度大于海水实现下潜,而在上浮时只需要抛掉这些东西就可以了。
蛟龙号下潜过程示意图(图片来源:央视视频)
2. 让深潜器与海面保持通讯。水下的情形十分复杂,纷扰的海流、好奇的海洋生物、操作过程中可能产生的误差都是对深潜器的威胁,深潜器必须时刻保持与母船的通讯。但是,电磁波在水下的衰减非常快,最远通讯的距离还不到千米。因为声波在水中传播时衰减远小于电磁波,就成了第一选择。目前,世界上最可靠的水下通信技术就是水声通信,是一种将声音信号转化为电信号,再将电信号转化为声波频率在 4000 赫兹左右声信号的连续套娃技术。
水声通信应用示意图(https://kknews.cc/science/9x56kl5.html)
简单的描述是无法说明这项技术到底有多难的,海洋声音场中混杂着船舶噪声、水流回声以及鱼类和其他海洋生物发出的其他声音,如何对海水中传来的声波进行正确的辨别接受和转化是一个巨大的难题。所以光是这项技术就能将地球上的大部分军事科研能力弱的国家拦在门外。
3. 深海对深潜器最大的考验还是巨大的压强。如果我们把一辆日常生活中常见的油罐车丢入海里,在空载的情况下大概十几二十米的水深就足以把它压成一片扭曲的铁皮。在万米深海,深潜器其他部位也是灌满了海水,内外压强一致不至于被压成废铁,但是装有深潜员的球状载人舱不成,它的表面每一个点所承受的压强大概为 100.6MPa,换算成人话就是每平方米 1 万吨的压力,"也就"六分之一艘辽宁舰而已 …… 所以,为应对更加极端的深海我们需要特殊材料。
左边是承受了深水高压的保温壶(https://www.zhihu.com/question/47453175)
一般来说,高强度、高韧性、十分稳定、抗腐蚀(并且十分昂贵)的钛合金是最合适制造潜水仓的材料,所以,这一步又赶走了大量在新材料领域科研经费拮据的国家。我国在奋斗者号上使用的是我国自主研发的全新高强高韧钛合金,理论屈服应力达到或者超过了 820MPa,足以应对深海的巨大水压。
4. 加工技术。深潜器的零件制造、冷弯、焊接,精密加工等等,哪个都不是一个制造业弱国玩得转的。举个例子,蛟龙号的加工精度大概是一根头发丝的 50 分之一,且由于害怕机械加工可能造成的金属划痕,这项工作只能由技术高超的工人手工完成。
安装时还要注意,全程不能产生一点划痕或者在仪器的缝隙间掉入一点异物,否则深海巨大的压强会将这个不起眼的缝隙撕开一个巨大的口子。此外,操控、供氧、电池、照明、影像 …… 无不考验着一个国家的精密仪器制造、电子工程技术等等方面的能力。
05 结语
这次下水的奋斗者号万米深潜器是货真价实的"大国重器",它不仅意味着我国迈向国际深潜设施制造前列,更代表着我国将来在深海地质、环境污染、生命起源等重大课题领域国际话语权的提升。让我们再一次祝贺"奋斗者号"!
最后,用 "蛟龙"号首批潜航员、"载人深潜英雄"傅文韬的话来结束吧:"深海探测,既是海洋资源勘探、科学研究的需要,也是环境保护的需要。作为深海探测的重要一环,我国载人深潜事业的不断发展,推动了海洋强国的建设,大大提升了我们的民族自信心和自豪感。"
声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。
来源: 科学大院
本概念
这些基本概念有些可能不易理解但却都很重要,如果看完还是很不理解的话需要自己谷歌或百度,网上关于这些概念的文章不少。
流
“流”又叫文档流,是css的一种基本定位和布局机制。流是html的一种抽象概念,暗喻这种排列布局方式好像水流一样自然自动。“流体布局”是html默认的布局机制,如你写的html不用css,默认自上而下(块级元素如div)从左到右(内联元素如span)堆砌的布局方式。
块级元素和内联元素
这个大家肯定都知道。
块级元素是指单独撑满一行的元素,如div、ul、li、table、p、h1等元素。这些元素的display值默认是block、table、list-item等。
内联元素又叫行内元素,指只占据它对应标签的边框所包含的空间的元素,这些元素如果父元素宽度足够则并排在一行显示的,如span、a、em、i、img、td等。这些元素的display值默认是inline、inline-block、inline-table、table-cell等。
实际开发中,我们经常把display计算值为inline inline-block inline-table table-cell的元素叫做内联元素,而把display计算值为block的元素叫做块级元素。
我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。
width: auto 和 height: auto
width、height的默认值都是auto。
对于块级元素,width: auto的自动撑满一行。
对于内联元素,width: auto则呈现出包裹性,即由子元素的宽度决定。
无论内联元素还是块级元素,height: auto都是呈现包裹性,即高度由子级元素撑开。但是父元素设置height: auto会导致子元素height: 100%百分比失效。
流体布局之下,块级元素的宽度width: auto是默认撑满父级元素的。这里的撑满并不同于width: 100%的固定宽度,而是像水一样能够根据margin不同而自适应的宽度。
css的属性非常有意思,正常流下,如果块级元素的width是个固定值,margin是auto,则margin会撑满剩下的空间;如果margin是固定值,width是auto,则width会撑满剩下的空间。这就是流体布局的根本所在。
外在盒子和内在盒子
外在盒子是决定元素排列方式的盒子,即决定盒子具有块级特性还是内联特性的盒子。外在盒子负责结构布局。
内在盒子是决定元素内部一些属性是否生效的盒子。内在盒子负责内容显示。
如 display: inline-table; 外在盒子就是inline,内在盒子就是table。外在盒子决定了元素要像内联元素一样并排在一排显示,内在盒子则决定了元素可以设置宽高、垂直方向的margin等属性。如下图
右侧的table和左侧的文字在一行排列(外在盒子inline的表现特征),同时有拥有自定义宽度111px(内在盒子table可以设置宽高)。
css权重和超越 !important
曾经有道面试题把我难住了:
// 假设下面样式都作用于同一个节点元素`span`,判断下面哪个样式会生效 body#god div.dad span.son {width: 200px;} body#god span#test {width: 250px;}
可怜当时做了三年前端的我竟然还不知道css有权重
css选择器权重列表如下:
在css中,!important的权重相当的高,但是由于宽高会被max-width/min-width覆盖,所以!important会失效。
width: 100px!important; min-width: 200px;
上面代码计算之后会被引擎解析成:
width: 200px;
*请认真填写需求信息,我们会在24小时内与您取得联系。