Unity5中叹为观止的实时GI效果

2023-11-10

原地址


    今天为大家分享 unity与Alex Lovett共同使用 unity5制作的Shrine Arch-viz Demo,其中充分利用了Unity5的实时全局光照功能。实在是太过惊艳,随便一帧都可以直接拿来当做屏保~~~

 
  上面的Demo使用Unity5.2制作,没有导入任何第三方资源包,从无到有历时8周。

   全实时光照的场景

  整个Demo全是实时全局光照(下简称GI),没有使用烘焙。场景包含了一天的各个时刻、大量集合图形、100来个晚间出没的点光源、一些流光、一些固定支架上的探照光以及可选的闪光灯。昼夜交替的效果是使用天空盒同步太阳运动来实现的,以便捕捉不太明显的光照变化。在Demo中,你可以通过UI自己控制上述所有的光照。

  下面欣赏一下Demo的画面:

 

 

 

 

 

 

 

 

 

 

 

 

  这个场景对光照有特别要求。有些地方在白天或日落后都只依赖反射光来照亮。

  整个实时GI系统是通过预先计算场景中所有静态物体之间的光线路径来实现的。这样一来就可以实时调整光照而不会中断,因为系统已经有了计算光照变化序列的所有信息。但这也意味着场景中的静态物体不能移动,因为动过之后需要重新计算所有路径。所以整个制作过程都是先制作几何体然后添加光照(必要时重复)。不经意地移动几何体并同时调整光照可能会导致多次计算光照信息。

   实时GI创作

  上面的效果很震撼吧,但这只能在PC或主机上运行,要想在移动端运行还得经过一些改造。

  Unity5中的实时GI利用了Geomerics公司的Enlighten技术,并专为游戏设计。所有的光照计算都是由CPU工作线程异步执行的,由于游戏通常是GPU绑定的,额外的CPU工作对整体帧率的影响很小。而且也只有那些有光照变化的区域需要重新计算。

  游戏中的光照延迟是由选取的实时间接光照贴图分辨率决定的。而Alex为了保证响应迅捷,在Demo中将分辨率设得相当低,即便这样还是有些间接光照的地方并未完全达到想要的效果。

  间接光照贴图分辨率如下:

  •   中央区域两单元一个纹理像素(即每单元0.5纹理像素)
  •   沙漠里接近中央区域的位置10单元一个纹理像素
  •   沙漠外部区域32单元一个纹理像素

  为了使分辨率平均,整个场景采用了平均每个单元0.25纹理像素的做法,下图分别是UV图(表示间接光照贴图分辨率):

 

  Clusters(负责反射光的发射):

 

  反射光贴图:

 

  以及光照方向贴图:

 

  保证光照贴图UV的效果比较重要。某些情况下要非常小心以确保模型在编辑器模式和运行模式下都能正常工作。典型的例子就是楼梯。


  楼梯照明表现正常是有难度的,因为尺寸较大的纹理像素可以覆盖多个阶梯。这会导致光照层次夹在阶梯之间。另一方面,由于性能 问题也不能为阶梯使用多个纹理像素。此场景中的楼梯是有斜面的,它会浪费很多纹理像素空间。最初楼梯实时GI的UV布局如下:

 

  其中使用了70x72纹理像素的光照贴图。这个布局有两个问题,首先是每个阶梯用的纹理像素太多(4x4);其次被分离到两张图中的斜面也会占用至少4x4的纹理像素。

  Enlighten在运行时处理纹理是以2x2的单位来优化的,所以每张图需要至少2x2的纹理像素。另外,Enlighten包含了无缝衔接功能,图片会自动被衔接到一起以便保证图像更平滑,例如球体和圆柱。这个功能要求各图在边缘部分有单独的方向信息。方向信息只保存在各个块中,所以衔接过的图需要至少2x2个块,加起来就是4x4的纹理像素。此楼梯中不需要进行衔接,所以2x2的纹理像素就可以满足需求。

  在光照面板中新加入了最小图尺寸的选项:

 

  这个值可以设为4用于衔接用到方向的贴图,或者设为更紧凑的2,可以大大降低纹理像素密度,这时楼梯模型只需44x46纹理像素的光照贴图即可:

 

  此时楼梯斜面还是霸占了一些不必要的空间。下图展示了模型的UV边界。注意整个斜面集成到了阶梯中:

 

  光照贴图UV的 2D视图中并未出现斜面,因为斜面被整个叠在了阶梯中。这样做的目的是避免光照模拟会考虑到被遮挡的斜面。

 

  斜面之所以被分为两张图是因为用于实时GI的UV会按照各对象用到的实际分辨率重新打包。打包算法会默认各图会有0.5纹理像素的边界,这样可以避免图像失真。也保证了对图集的充分利用,同时不需为各具体UV打包边缘。

  边缘越锋利带来的问题越明显,此例中楼梯与斜面的边缘就是如此。模型导入器会自动复制锋利边缘处的顶点,因为边缘两边需要不同的法线。所以贴图会在外部分离。重新打包会导致斜面贴图分离。因为贴图默认使用法线来检测。当它找到顶点位置、UV完全一样但法线不同的边缘,就会按照边缘分离贴图。

  此例中不需如此。斜面会被集成到阶梯的贴图中,因为它对光照没有实际影响。所以为了实现这点,同样在光照面板中新增了Ignore Normals,以便在打包阶梯期间进行贴图检测时忽略法线。这样可以聚合UV贴图而不用在乎边缘:

 

  选中Ignore Normals会进一步减小纹理像素密度。此时斜面已被集成到楼梯中。最终的光照贴图是22x24纹理像素:

 

 

  使用这些选项可以将实时GI预计算的时间从1.5小时直接缩短至15分钟。
  关于性能

  实时GI在满足其运行性能与内存需求的情况下不需要太多调整。然而,后期特效特别多,其中包括Filmic Vignette(电影修饰), Bloom(爆发),Tonemapping(色调映射),Lens Distort(镜头变形),Screen Space Ambient Occlusion(屏幕空间的环境光遮蔽),Color Correction Curves(颜色校正曲线),Noise And Grain(噪声及噪点),Color Grading Properties(颜色渐变)以及 Antialiasing(抗锯齿)等等。除开这些可以在PC上运行时达到60fps。

  快速环境光

  实时GI系统可以使用天空盒直接驱动环境光输入。但使用该功能需要先从GPU获取天空盒纹理以便基于实时GI系统更新CPU。这在环境光每帧都会发生变化的情况下非常不理想。所以替代方法是,由当前时间来控制环境光,并转换为关照渐变和环境光强度用于驱动实时GI系统。这些都可以在光照面板中设置:

 

  渐变环境光源可以完全由CPU来处理。这样处理的效果与完全使用天空盒几乎看不出差别。

 

  用于更新环境光的核心代码如下:

[AppleScript]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
usingSystem;
 
usingUnityEngine;
 
usingSystem.Collections;
 
usingSystem.Collections.Generic;
 
[ExecuteInEditMode]
 
publicclassEnvironmentUpdater : MonoBehaviour {
 
publicGradient groundGradient , equatorGradient , skyGradient;
 
privateTimeOfDayManager m_TimeOfDayManager;
 
voidOnEnable ( ) {
 
m_TimeOfDayManager = FindObjectOfType < timeofdaymanager > ( ) ;
 
}
 
voidUpdate ( ) {
 
floatcurrentTime = m_TimeOfDayManager.time;
 
RenderSettings.ambientGroundColor = groundGradient.Evaluate ( currentTime ) ;
 
RenderSettings.ambientEquatorColor = equatorGradient.Evaluate ( currentTime ) ;
 
RenderSettings.ambientSkyColor = skyGradient.Evaluate ( currentTime ) ;
 
}
 
}


  快速发射光

  与环境光类似,实时GI系统可以根据发光着色器属性直接驱动发光物体。默认会使用发射光材质属性,或添加自定义着色器通道,在实时光照贴图空间渲染出一张发射光贴图。这需要在实时GI系统消灭数据之前从GPU下载纹理。可以在脚本中使用(DynamicGI.SetEmissive)将物体的发射光属性设为固定的颜色,并允许实时GI系统在模拟GI中直接使用发射光。这样可以完全绕过GPU,且几乎不需要什么代价就可以照明场景。

 

  关于大场景中的GI

  可以对大场景采取流式加载以保证内存消耗低同时快速响应。实时GI系统可以结合LoadLevelAdditive和UnloadLevel使用。当然在加载关卡时有些注意事项,因为关卡并非加载后直接可见,所以可能会影响到反射光。

  其它的加载方式,或多场景编辑的功能会在12月8日发布的Unity5.3中提供,那时通过实时GI系统缩放场景中的光照就很容易了。
    今天为大家分享 unity与Alex Lovett共同使用 unity5制作的Shrine Arch-viz Demo,其中充分利用了Unity5的实时全局光照功能。实在是太过惊艳,随便一帧都可以直接拿来当做屏保~~~

  先奉上视频:



  上面的Demo使用Unity5.2制作,没有导入任何第三方资源包,从无到有历时8周。

   全实时光照的场景

  整个Demo全是实时全局光照(下简称GI),没有使用烘焙。场景包含了一天的各个时刻、大量集合图形、100来个晚间出没的点光源、一些流光、一些固定支架上的探照光以及可选的闪光灯。昼夜交替的效果是使用天空盒同步太阳运动来实现的,以便捕捉不太明显的光照变化。在Demo中,你可以通过UI自己控制上述所有的光照。

  下面欣赏一下Demo的画面:

 

 

 

 

 

 

 

 

 

 

 

 

  这个场景对光照有特别要求。有些地方在白天或日落后都只依赖反射光来照亮。

  整个实时GI系统是通过预先计算场景中所有静态物体之间的光线路径来实现的。这样一来就可以实时调整光照而不会中断,因为系统已经有了计算光照变化序列的所有信息。但这也意味着场景中的静态物体不能移动,因为动过之后需要重新计算所有路径。所以整个制作过程都是先制作几何体然后添加光照(必要时重复)。不经意地移动几何体并同时调整光照可能会导致多次计算光照信息。

   实时GI创作

  上面的效果很震撼吧,但这只能在PC或主机上运行,要想在移动端运行还得经过一些改造。

  Unity5中的实时GI利用了Geomerics公司的Enlighten技术,并专为游戏设计。所有的光照计算都是由CPU工作线程异步执行的,由于游戏通常是GPU绑定的,额外的CPU工作对整体帧率的影响很小。而且也只有那些有光照变化的区域需要重新计算。

  游戏中的光照延迟是由选取的实时间接光照贴图分辨率决定的。而Alex为了保证响应迅捷,在Demo中将分辨率设得相当低,即便这样还是有些间接光照的地方并未完全达到想要的效果。

  间接光照贴图分辨率如下:

  •   中央区域两单元一个纹理像素(即每单元0.5纹理像素)
  •   沙漠里接近中央区域的位置10单元一个纹理像素
  •   沙漠外部区域32单元一个纹理像素

  为了使分辨率平均,整个场景采用了平均每个单元0.25纹理像素的做法,下图分别是UV图(表示间接光照贴图分辨率):

 

  Clusters(负责反射光的发射):

 

  反射光贴图:

 

  以及光照方向贴图:

 

  保证光照贴图UV的效果比较重要。某些情况下要非常小心以确保模型在编辑器模式和运行模式下都能正常工作。典型的例子就是楼梯。


  楼梯照明表现正常是有难度的,因为尺寸较大的纹理像素可以覆盖多个阶梯。这会导致光照层次夹在阶梯之间。另一方面,由于性能 问题也不能为阶梯使用多个纹理像素。此场景中的楼梯是有斜面的,它会浪费很多纹理像素空间。最初楼梯实时GI的UV布局如下:

 

  其中使用了70x72纹理像素的光照贴图。这个布局有两个问题,首先是每个阶梯用的纹理像素太多(4x4);其次被分离到两张图中的斜面也会占用至少4x4的纹理像素。

  Enlighten在运行时处理纹理是以2x2的单位来优化的,所以每张图需要至少2x2的纹理像素。另外,Enlighten包含了无缝衔接功能,图片会自动被衔接到一起以便保证图像更平滑,例如球体和圆柱。这个功能要求各图在边缘部分有单独的方向信息。方向信息只保存在各个块中,所以衔接过的图需要至少2x2个块,加起来就是4x4的纹理像素。此楼梯中不需要进行衔接,所以2x2的纹理像素就可以满足需求。

  在光照面板中新加入了最小图尺寸的选项:

 

  这个值可以设为4用于衔接用到方向的贴图,或者设为更紧凑的2,可以大大降低纹理像素密度,这时楼梯模型只需44x46纹理像素的光照贴图即可:

 

  此时楼梯斜面还是霸占了一些不必要的空间。下图展示了模型的UV边界。注意整个斜面集成到了阶梯中:

 

  光照贴图UV的 2D视图中并未出现斜面,因为斜面被整个叠在了阶梯中。这样做的目的是避免光照模拟会考虑到被遮挡的斜面。

 

  斜面之所以被分为两张图是因为用于实时GI的UV会按照各对象用到的实际分辨率重新打包。打包算法会默认各图会有0.5纹理像素的边界,这样可以避免图像失真。也保证了对图集的充分利用,同时不需为各具体UV打包边缘。

  边缘越锋利带来的问题越明显,此例中楼梯与斜面的边缘就是如此。模型导入器会自动复制锋利边缘处的顶点,因为边缘两边需要不同的法线。所以贴图会在外部分离。重新打包会导致斜面贴图分离。因为贴图默认使用法线来检测。当它找到顶点位置、UV完全一样但法线不同的边缘,就会按照边缘分离贴图。

  此例中不需如此。斜面会被集成到阶梯的贴图中,因为它对光照没有实际影响。所以为了实现这点,同样在光照面板中新增了Ignore Normals,以便在打包阶梯期间进行贴图检测时忽略法线。这样可以聚合UV贴图而不用在乎边缘:

 

  选中Ignore Normals会进一步减小纹理像素密度。此时斜面已被集成到楼梯中。最终的光照贴图是22x24纹理像素:

 

 

  使用这些选项可以将实时GI预计算的时间从1.5小时直接缩短至15分钟。
  关于性能

  实时GI在满足其运行性能与内存需求的情况下不需要太多调整。然而,后期特效特别多,其中包括Filmic Vignette(电影修饰), Bloom(爆发),Tonemapping(色调映射),Lens Distort(镜头变形),Screen Space Ambient Occlusion(屏幕空间的环境光遮蔽),Color Correction Curves(颜色校正曲线),Noise And Grain(噪声及噪点),Color Grading Properties(颜色渐变)以及 Antialiasing(抗锯齿)等等。除开这些可以在PC上运行时达到60fps。

  快速环境光

  实时GI系统可以使用天空盒直接驱动环境光输入。但使用该功能需要先从GPU获取天空盒纹理以便基于实时GI系统更新CPU。这在环境光每帧都会发生变化的情况下非常不理想。所以替代方法是,由当前时间来控制环境光,并转换为关照渐变和环境光强度用于驱动实时GI系统。这些都可以在光照面板中设置:

 

  渐变环境光源可以完全由CPU来处理。这样处理的效果与完全使用天空盒几乎看不出差别。

 

  用于更新环境光的核心代码如下:

[AppleScript]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
usingSystem;
 
usingUnityEngine;
 
usingSystem.Collections;
 
usingSystem.Collections.Generic;
 
[ExecuteInEditMode]
 
publicclassEnvironmentUpdater : MonoBehaviour {
 
publicGradient groundGradient , equatorGradient , skyGradient;
 
privateTimeOfDayManager m_TimeOfDayManager;
 
voidOnEnable ( ) {
 
m_TimeOfDayManager = FindObjectOfType < timeofdaymanager > ( ) ;
 
}
 
voidUpdate ( ) {
 
floatcurrentTime = m_TimeOfDayManager.time;
 
RenderSettings.ambientGroundColor = groundGradient.Evaluate ( currentTime ) ;
 
RenderSettings.ambientEquatorColor = equatorGradient.Evaluate ( currentTime ) ;
 
RenderSettings.ambientSkyColor = skyGradient.Evaluate ( currentTime ) ;
 
}
 
}


  快速发射光

  与环境光类似,实时GI系统可以根据发光着色器属性直接驱动发光物体。默认会使用发射光材质属性,或添加自定义着色器通道,在实时光照贴图空间渲染出一张发射光贴图。这需要在实时GI系统消灭数据之前从GPU下载纹理。可以在脚本中使用(DynamicGI.SetEmissive)将物体的发射光属性设为固定的颜色,并允许实时GI系统在模拟GI中直接使用发射光。这样可以完全绕过GPU,且几乎不需要什么代价就可以照明场景。

 

  关于大场景中的GI

  可以对大场景采取流式加载以保证内存消耗低同时快速响应。实时GI系统可以结合LoadLevelAdditive和UnloadLevel使用。当然在加载关卡时有些注意事项,因为关卡并非加载后直接可见,所以可能会影响到反射光。

  其它的加载方式,或多场景编辑的功能会在12月8日发布的Unity5.3中提供,那时通过实时GI系统缩放场景中的光照就很容易了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity5中叹为观止的实时GI效果 的相关文章

  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • 游戏开发unity编辑器扩展知识系列:修改纹理资源的TextureType

    需要用TextureImporter导入资源 调用如下代码 TextureImporter importer TextureImporter TextureImporter GetAtPath path importer textureTy
  • using UnityEditor引用注意事项

    本文转载自http blog csdn net czlilove article details 19979725 在运行时脚本中使用UnityEditor命名空间 假如该脚本被挂在场景中的物体上 那么 可以这样做 在Unity编辑器中运行
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • unity网络资源导入

    1 找到需要导入的文件 这里导入fbx格式 2 打开unity界面 在Asset目录下创建文件夹FBX 将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3 选中需要的fbx预制体并拖至场景中 4 双击定位到当前物体 5 找到需
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • Webpack5资源配置(三)

    总述 wepack资源配置了四类资源加载除了js以外的配置资源 分别为asset recource资源 asset inline资源 asset source资源 asset通用资源类型 接下来 将配合前期webpack学习 系统的对以上四
  • MEMCACHE未授权访问漏洞利用及修复

    memcache是国外社区网站Live Journal的开发团队开发的高性能的分布式内存缓存服务器 一般的使用目的是 通过缓存数据库查询结果 减少数据库访问次数 以提高动态Web应用的速度 提高扩展性 memcache的默认端口是11211
  • LeeCode精选100题-【两数相加】-1

    这里写自定义目录标题 题干 思路 1 暴力枚举 这种没啥好说的 直接双层循环就可以 时间复杂度为O n 2 空间复杂度为O n 2 借助HashMap 两数想相加 题干 给定一个整数数组 nums 和一个整数目标值 target 请你在该数
  • Nginx 各种反向代理方式

    Nginx 反向代理 代理 http 实现负载均衡 nginx 代理 https nginx 代理tcp nginx 平滑升级 代理 http 本次实验后端为 geoserver 如下就可以实现基础的http反向代理 server list
  • 刷脸支付是一套完整解决商户方案的大数据

    支付宝刷脸支付服务还可以使用微信刷你的脸 支付宝刷脸支付服务接受第三方支付 因此它了面部识别支付的权利和产品的开发 对于用户来说 脸刷支付不但是一种收集功能 而且是一套完整解决方案的大数据 支付宝刷脸支付服务商不但解决了现金收集的问题 而且
  • Fiddler抓取HTTP请求详解

    Fiddler抓取HTTP请求 抓包是Fiddler的最基本的应用 以本博客为例 启动Fiddler之后 在浏览器中输入http baidu com 键入回车之后 在Fiddler的web session界面捕获到的HTTP请求如下图所示
  • ES6 迭代器Iterator

    Iterator是一种新的遍历机制 两个核心 1 迭代器是一个接口 能快捷的访问数据 通过Symbol iterator来创建迭代器 通过迭代器的next 方法 获取数据 2 迭代器是用于遍历数据结构的指针 类似于数据库的游标 const
  • Tomcat运行startup一闪而过

    右击startup bat选择用记事本打开 在最后加一个PAUSE 这样可以暂停住窗口 end PAUSE 一般是因为没有配置JAVA HOME这个环境变量导致的 只需要在系统环境变量里新加一个JAVA HOME 变量值填你的jdk安装路径
  • 计组

    目录 一 知识点 二 习题 参考文献 一 知识点 不同机器有不同的指令系统从计算机指令系统设计角度 可将计算机分为复杂指令系统计算机CISC Complex InstrucTIon Set Computer 和精简指令系统计算机RISC R
  • 匿名内部类

    关于匿名内部类还有如下两条规则 1 匿名内部类不能是抽象类 因为系统在创建匿名内部类的时候 会立即创建内部类的对象 因此不允许将匿名内部类 定义成抽象类 2 匿名内部类不等定义构造器 因为匿名内部类没有类名 所以无法定义构造器 但匿名内部类
  • java正则表达式匹配所有数字,包括带小数点的数字

    用于匹配的正则表达式为 1 9 d d 0 d 1 9 1 9 匹配1 9的数字 d 匹配数字 包括0 9 紧跟在 d 之后 表明可以匹配零个及多个数字 匹配小数点 紧跟在 之后 表明可以匹配零个或一个小数点 0 匹配一个数字0 其中的 1
  • 百度网盘提取码_百度网盘提取码查询工具,老菜建议大家收藏备用!

    APP菜园 打造属于我们自己的APP帝国 1 打开支付宝app 首页搜索 8221050 然后点击快捷功能 天天领红包 2 软件领取流程 1 认真阅读下软件介绍 2 找到图片下方的 获取链接 复制 3 打开手机上的浏览器粘贴链接搜索 百度云
  • Unity学习笔记(一)结构体的简单理解与应用

    Unity中的结构体的简介与使用 一 Unity中的结构体是什么 二 结构体与类的不同 一 Unity中的结构体是什么 简单来说 在 C 中 结构体是值类型数据结构 它使得一个单一变量可以存储各种数据类型的相关数据 例如我定义了一个结构体
  • Mybatis使用IN语句查询

    一 简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用 select from HealthCoupon where useType in 4 3 但是如果在MyBatis中的使用in的话 像如下去做的话 肯定会报错 Map
  • FFMPEG进阶系列02-ffmpeg命令详解3

    ffmpeg 的封装转换 FFmpeg的封装转换部分 主要是通过libavformat这部分来完成的功能 通过libavformat库进行mux和demux操作 多媒体文件的格式有很多种 但是还是有好多demux与mux的操作参数是公用的
  • 代码随想录算法训练营day1

    代码随想录算法训练营第一天 704 二分查找 27 移除元素 704 二分查找 题目链接 leetcode704 Binary search 暴力解法 class Solution public int search vector
  • 第01课:以太坊节点部署及基本命令操作

    第01课 以太坊节点部署及基本命令操作 区块链诞生自中本聪的比特币 自 2009 年以来 出现了各种各样的类比特币的基于公有区块链的数字货币 目前各个国家及企业机构都对区块链投入巨大的财力和人力来对区块链技术进行研究 官方文档 https
  • mapper-spring-boot-starter 主要作用是

    今天是第一次接触到 这个场景启动器内心中真是一片的茫然 学习了这么长时间我居然还不知道有这个的存在今天好好查一查资料 参考资料 https blog csdn net crq1205 article details 88040582 MyB
  • 【Metashape精品教程1】 软件介绍

    Metashape精品教程1 软件介绍 概述 一 软件功能 二 软件优点 三 软件缺点 四 软件安装 概述 Agisoft Metashape是一款独立的数字摄影测量软件 能够处理航空 近景摄影 卫星等获取的影像数据 生成相应的数据产品 该
  • Unity5中叹为观止的实时GI效果

    原地址 今天为大家分享 unity与Alex Lovett共同使用 unity5制作的Shrine Arch viz Demo 其中充分利用了Unity5的实时全局光照功能 实在是太过惊艳 随便一帧都可以直接拿来当做屏保 上面的Demo使用