unity的HDR效果

2023-11-07

http://blog.csdn.net/wolf96/article/details/44057915

文章开始先放两组效果,文章结尾再放两组效果
本文测试场景资源来自浅墨大神,shader效果为本文效果



HDR

人们有限的视觉系统,只支持16.7百万的颜色,超出这个范围的颜色就不能显示了
bmp或jprg每个像素就是16,24或32位
每个像素都由红绿蓝构成,如果储存为24位,每个值的范围就在0,255之间,
只能表现出256:1的差别,unity的shader中是0到1
然而在自然中太阳光下的对比度是50000:1
HDR(High Dynamic Range)使图像能表现出更大范围的对比,普通的范围就叫LDR(Low Dynamic Range)

你在照相的时候能控制曝光时间从而控制亮度。
HDR效果就是可控的曝光,

色调映射 tone-mapping

传统的显示设备不能完全的显示出HDR,所以我们用tone-mapping技术。
tone-mapping让图像从HDR映射为LDR显示
http://www.ownself.org/blog/2011/tone-mapping.html中的解释很好
Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。人的眼睛也是相同的原理,这就是为什么当我们从一个明亮的环境突然到一个黑暗的环境时,可以从什么都看不见到慢慢可以适应周围的亮度,所不同的是人眼是通过瞳孔来调节亮度域的。
一个tone-mapping的公式

 



Middlegrey为全屏幕或部分屏幕的中间灰度,可以控值屏幕的亮度
AvgLogLuminance就是全屏幕或部分屏幕的亮度的对数的平均值
 
AvgLogLuminance的公式
Lw是亮度,n是所取亮度数

这个操作能让L值限制位[0,1)
一些tone-mapping操作用exposure或gamma作为参数控制最终的图像。
tone-mapping是非线性的,他对暗色保有一定范围并且对亮色逐步接近动态
这个技术产生吸引人的视觉效果,有着强烈的对比和细节。

HDR Rendering In OpenGL一文中给出简要且效果不错的公式
 
关键代码如下

  1. float4 frag(v2f i) :COLOR  
  2. {  
  3.     float4 c = tex2D(_MainTex, i.uv_MainTex);  
  4.     float y = dot(float4(0.3,0.59,0.11,1),c);  
  5.     float yd = _Exp * (_Exp / _BM + 1) / (_Exp + 1);  
  6.     return c*yd;  
  7. }  

<span style="font-family:Microsoft YaHei;font-size:14px;">            float4 frag(v2f i) :COLOR
            {
                float4 c = tex2D(_MainTex, i.uv_MainTex);
                float y = dot(float4(0.3,0.59,0.11,1),c);
                float yd = _Exp * (_Exp / _BM + 1) / (_Exp + 1);
                return c*yd;
            }</span>

_Exp,_BM为外部可控变量

HDR流程如下

 



如果分不清HDR与加亮light,可以看看skybox,加亮light是不会加亮skybox的,HDR使颜色更鲜明,像素更清晰。


Bloom泛光

辉光的原因是由于人眼晶状体的散射
我们制造bloom的原理是把图像的亮的部分通过卷积模糊再叠加到原图像上,就产生了bloom效果。
高斯模糊的滤波器是一种低通滤波器
就是去当前像素和周围的像素按一定权重混合,产生一定模糊效果

权重分布如下,离当前像素越远,权重越低


 
高斯正态分布曲线

 


二维公式

可以通过这个公式直接算出权重
  1. double sigma = (double)radius / 3.0;  
  2. double sigma2 = 2.0 * sigma * sigma;  
  3. double sigmap = sigma2 * PI;  
  4.   
  5. for(long n = 0, i = - radius; i <=radius; ++i)  
  6. {  
  7.     long i2 = i * i;  
  8.     for(long j = -radius; j <= radius; ++j, ++n)  
  9.         kernel[n] = exp(-(double)(i2 + j * j) / sigma2) / sigmap;  
  10.  }  
<span style="font-family:Microsoft YaHei;font-size:14px;">    double sigma = (double)radius / 3.0;
    double sigma2 = 2.0 * sigma * sigma;
    double sigmap = sigma2 * PI;

for(long n = 0, i = - radius; i &lt;=radius; ++i)
{
    long i2 = i * i;
    for(long j = -radius; j &lt;= radius; ++j, ++n)
        kernel[n] = exp(-(double)(i2 + j * j) / sigma2) / sigmap;
 }&lt;/span&gt;</pre><br>


Kernel即为权重
Radius为所求像素与当前像素距离(半径)


针对这个公式我们可以算出3*3,5*5,7*7等滤波器,出于性能考虑,我们还是使用5*5滤波器


 3*3滤波器


 5*5滤波器

有现成的就不算了,算这个也消耗一些性能
我们直接用这个权重
关键代码如下

  1.             float3 mc00 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,2)/_inten).rgb;  
  2.             float3 mc10 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,2)/_inten).rgb;  
  3.             float3 mc20 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,2)/_inten).rgb;  
  4.             float3 mc30 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,2)/_inten).rgb;  
  5.             float3 mc40 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,2)/_inten).rgb;  
  6.   
  7.             float3 mc01 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,1)/_inten).rgb;  
  8.             float3 mc11 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,1)/_inten).rgb;  
  9.             float3 mc21 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,1)/_inten).rgb;  
  10.             float3 mc31 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,1)/_inten).rgb;  
  11.             float3 mc41 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,1)/_inten).rgb;  
  12.   
  13.             float3 mc02 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,0)/_inten).rgb;  
  14.             float3 mc12 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,0)/_inten).rgb;  
  15.             float3 mc22mc = tex2D (_MainTex, i.uv_MainTex).rgb;  
  16.             float3 mc32 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,0)/_inten).rgb;  
  17.             float3 mc42 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,0)/_inten).rgb;  
  18.           
  19.             float3 mc03 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,-1)/_inten).rgb;  
  20.             float3 mc13 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,-1)/_inten).rgb;  
  21.             float3 mc23 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,-1)/_inten).rgb;  
  22.             float3 mc33 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,-1)/_inten).rgb;  
  23.             float3 mc43 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,-1)/_inten).rgb;  
  24.   
  25.             float3 mc04 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,-2)/_inten).rgb;  
  26.             float3 mc14 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,-2)/_inten).rgb;  
  27.             float3 mc24 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,-2)/_inten).rgb;  
  28.             float3 mc34 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,-2)/_inten).rgb;  
  29.             float3 mc44 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,-2)/_inten).rgb;  
  30.             float3 c=0;  
  31. c+=(mc00+mc40+mc04+mc44);//4  
  32. c+=4*(mc10+mc30+mc14+mc34+mc01+mc41+mc03+mc43);//16  
  33. c+=7*(mc20+mc24+mc02+mc42);//16  
  34. c+=16*(mc11+mc13+mc03+mc33);//32  
  35. c+=26*(mc21+mc23+mc12+mc32);//64  
  36. c+=41*mc22mc;//32  
  37. c/=273;  

<span style="font-family:Microsoft YaHei;font-size:14px;">            float3 mc00 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,2)/_inten).rgb;
            float3 mc10 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,2)/_inten).rgb;
            float3 mc20 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,2)/_inten).rgb;
            float3 mc30 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,2)/_inten).rgb;
            float3 mc40 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,2)/_inten).rgb;

        float3 mc01 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,1)/_inten).rgb;
        float3 mc11 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,1)/_inten).rgb;
        float3 mc21 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,1)/_inten).rgb;
        float3 mc31 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,1)/_inten).rgb;
        float3 mc41 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,1)/_inten).rgb;

        float3 mc02 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,0)/_inten).rgb;
        float3 mc12 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,0)/_inten).rgb;
        float3 mc22mc = tex2D (_MainTex, i.uv_MainTex).rgb;
        float3 mc32 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,0)/_inten).rgb;
        float3 mc42 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,0)/_inten).rgb;

        float3 mc03 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,-1)/_inten).rgb;
        float3 mc13 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,-1)/_inten).rgb;
        float3 mc23 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,-1)/_inten).rgb;
        float3 mc33 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,-1)/_inten).rgb;
        float3 mc43 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,-1)/_inten).rgb;

        float3 mc04 = tex2D (_MainTex, i.uv_MainTex-fixed2(2,-2)/_inten).rgb;
        float3 mc14 = tex2D (_MainTex, i.uv_MainTex-fixed2(1,-2)/_inten).rgb;
        float3 mc24 = tex2D (_MainTex, i.uv_MainTex-fixed2(0,-2)/_inten).rgb;
        float3 mc34 = tex2D (_MainTex, i.uv_MainTex-fixed2(-1,-2)/_inten).rgb;
        float3 mc44 = tex2D (_MainTex, i.uv_MainTex-fixed2(-2,-2)/_inten).rgb;
        float3 c=0;

c+=(mc00+mc40+mc04+mc44);//4
c+=4*(mc10+mc30+mc14+mc34+mc01+mc41+mc03+mc43);//16
c+=7*(mc20+mc24+mc02+mc42);//16
c+=16*(mc11+mc13+mc03+mc33);//32
c+=26*(mc21+mc23+mc12+mc32);//64
c+=41*mc22mc;//32
c/=273;</span>


_inten为模糊程度


觉得冗长麻烦也可用for循环代替。


然后我们要取其中的亮色部分与原有图像混合,
这一部分直接调用unity内部函数Luminance函数求出亮度,把它与模糊的图像相乘,暗色部分自然消除
但如果直接相乘就会在暗色的边缘产生不自然的黑影,就是把暗色也“泛光了”,为此我们不让Luminance后的值为0,再加上0.1,也不影响亮度。
  1. float lum = Luminance(c);  
  2. c = mc22mc + c * (lum+0.1) * _Lum;  
  3. return float4(c,1);  

<span style="font-family:Microsoft YaHei;font-size:14px;">            float lum = Luminance(c);
            c = mc22mc + c * (lum+0.1) * _Lum;
            return float4(c,1);</span>



最终与HDR结合再一起就是上图例子的最终效果



最后一道工序就是放入相机中,我们建立一个c#并负责传值

代码如下:


[csharp] view plain copy print ?
  1. using UnityEngine;  
  2. using System.Collections;  
  3. [ExecuteInEditMode]  
  4. public class HDRGlow : MonoBehaviour {  
  5.     #region Variables  
  6.     public Shader curShader;  
  7.     private Material curMaterial;  
  8.     public float exp = 0.4f;  
  9.     public float bm = 0.4f;  
  10.     public int inten = 512;  
  11.     public float lum = 1f;  
  12.     #endregion  
  13.  
  14.     #region Properties  
  15.     Material material  
  16.     {  
  17.         get  
  18.         {  
  19.             if (curMaterial == null)  
  20.             {  
  21.                 curMaterial = new Material(curShader);  
  22.                 curMaterial.hideFlags = HideFlags.HideAndDontSave;  
  23.             }  
  24.             return curMaterial;  
  25.         }  
  26.     }  
  27.     #endregion  
  28.   
  29.     void Start()  
  30.     {  
  31.         if (!SystemInfo.supportsImageEffects)  
  32.         {  
  33.             enabled = false;  
  34.             return;  
  35.         }  
  36.   
  37.         if (!curShader && !curShader.isSupported)  
  38.         {  
  39.             enabled = false;  
  40.         }  
  41.     }  
  42.   
  43.     void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)  
  44.     {  
  45.         if (curShader != null)  
  46.         {  
  47.             material.SetFloat("_Exp", exp);  
  48.             material.SetFloat("_BM", bm);  
  49.             material.SetFloat("_Inten", inten);  
  50.             material.SetFloat("_Lum", lum);  
  51.             Graphics.Blit(sourceTexture, destTexture, material);  
  52.         }  
  53.         else  
  54.         {  
  55.             Graphics.Blit(sourceTexture, destTexture);  
  56.         }  
  57.     }  
  58.     void OnDisable()  
  59.     {  
  60.         if (curMaterial)  
  61.         {  
  62.             DestroyImmediate(curMaterial);  
  63.         }  
  64.     }  
  65. }  
<span style="font-family:Microsoft YaHei;font-size:14px;">using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class HDRGlow : MonoBehaviour {
    #region Variables
    public Shader curShader;
    private Material curMaterial;
    public float exp = 0.4f;
    public float bm = 0.4f;
    public int inten = 512;
    public float lum = 1f;
    #endregion

#region Properties
Material material
{
    get
    {
        if (curMaterial == null)
        {
            curMaterial = new Material(curShader);
            curMaterial.hideFlags = HideFlags.HideAndDontSave;
        }
        return curMaterial;
    }
}
#endregion

void Start()
{
    if (!SystemInfo.supportsImageEffects)
    {
        enabled = false;
        return;
    }

    if (!curShader &amp;&amp; !curShader.isSupported)
    {
        enabled = false;
    }
}

void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
    if (curShader != null)
    {
        material.SetFloat(&quot;_Exp&quot;, exp);
        material.SetFloat(&quot;_BM&quot;, bm);
        material.SetFloat(&quot;_Inten&quot;, inten);
        material.SetFloat(&quot;_Lum&quot;, lum);
        Graphics.Blit(sourceTexture, destTexture, material);
    }
    else
    {
        Graphics.Blit(sourceTexture, destTexture);
    }
}
void OnDisable()
{
    if (curMaterial)
    {
        DestroyImmediate(curMaterial);
    }
}

}

</span>









Unity 的imageEffect有一个叫做BloomAndLensFlares

与本文的差别是多了色彩平衡和lens flare效果,可以试着再加上去


                                                        ——-  by wolf96 http://blog.csdn.net/wolf96

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity的HDR效果 的相关文章

  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Input.GetAxis _ Unity3d

    Input GetAxis 获取轴 static function GetAxis axisName string float Description描述 Returns the value of the virtual axis iden
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • [3dsMax]2018版下拉菜单项的子菜单无法选中

    软件自身问题 安装更新补丁即可解决 不想更新补丁也可以使用键盘的方向键进行选中 补丁百度云链接 https pan baidu com s 1LDxRFwQnR0GSONuz7wcEfA 提取码 6gpk
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • Unity3D:按键生成物件,Instantia…

    在按下按键之后 可以在画面中生成之前定义好了的物体 这里使用了Instantiate函数来生成 1 先在游戏中定一个空物件GameObject 创建空物件快捷键 ctrl shift n 2 在视图中放置 3 编写脚本 脚本 SpaceCh
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • Mecanim Any State

    Any State表示任意状态 任意状态是 一个一直存在的特殊状态 他的存在是为了保证你在无意转移至某个你当前正处于的特殊状态而准备的 为你的状态机中的每个状态设置相同的对外转移是一个快捷的方式 假如有Walk Run Fly Die这四个
  • java中Keytool的使用总结

    java中Keytool的使用总结 2011 02 26 15 30 15 分类 在申请Android Map API Key的时候使用到了java中Keytool 下面转一篇介绍java中Keytool的文章 http blog csdn
  • NO.6——Unity3D中两种绘制小地图的方法

    在玩游戏时 你经常会发现 在游戏窗口的右上角或者左下角通常会有一个小地图 里边实时反馈角色的移动信息甚至是世界地图 那么这个小地图是如何绘制的呢 我目前掌握了两种方法 一种是以GUI方法重新绘制一个小窗口 另一种是新建一个正交投影的摄像机机
  • Unity3D的四种坐标系

    1 World Space 世界坐标 我们在场景中添加物体 如 Cube 他们都是以世界坐标显示在场景中的 transform position可以获得该位置坐标 2 Screen Space 屏幕坐标 以像素来定义的 以屏幕的左下角为 0
  • Unity在UI界面上显示3D模型/物体,控制模型旋转

    https blog csdn net ChinarCSDN article details 81058773
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. chang

    npm安装typescript报错 提示 这里简述项目相关背景 在vscode新建一个项目 想写ts 于是先准备安装typescript 不料 报错 原因分析 提示 这里填写问题的分析 主要原因发现应该是npm版本号的原因 解决方案 提示
  • html的block标签,html标签的block、inline分类总结分享

    块元素 block element m address 地址 blockquote 块引用 center 举中对齐块 dir 目录列表 p 常用块级容易 也是css layout的主要标签 dl 定义列表 fieldset form控制组
  • 【SEER数据库简介】

    一 SEER数据库简介 全称 Surveillance Epidemiology and End Results Program 网址 https seer cancer gov SEER 数据库所涉及的肿瘤被划分为9类 乳腺肿瘤 结肠与直
  • PieCloudDB Database:云原生分布式虚拟数仓的诞生之旅

    杭州拓数派科技发展有限公司 OpenPie 的旗舰产品 PieCloudDB Database 是一款云原生分布式虚拟数仓 PieCloudDB 通过多种创新性技术将物理数仓整合到云原生数据计算平台 PieCloudDB 可以动态创建虚拟数
  • VTK相机类vtkCamera原理及用法

    vtk是著名的开源三维渲染库 在三维渲染过程中的一个非常重要的内容就是相机即vtkCamera类的设置 在VTK中 相机的实质是一个观测点 VTK的官方Doc对vtkCamera写的十分简略 暗坑很多 在学习和使用vtkCamera的过程中
  • PostgreSQL报pg_dump: no matching tables were found错误

    刚导出表时 发现找不到这个表 但是表是存在的 所以找了一圈 发现是要加 才行 例如 T TABLES
  • python中input()和raw_input()的区别

    两者均是python的内置函数 通过读取控制台的输入与用户实现交互 raw input 将所有输入作为字符串看待 不管用户输入什么类型的都会转变成字符串 raw的含义就是 生的 未加工的 gt gt gt s1 raw input abc
  • Cadence学习篇(1) Cadence原理图工程以及原理图库的创建

    文章目录 前言 一 创建原理图库 1 1新建工程 1 2 设置原理图板框 1 3 设置原理图栅格 二 添加多个原理图 2 1 原理图重命名 2 2 原理图编页码 三 放置元器件 3 1 添加库 3 2 连线 四 保存工程文件 4 1 新建原
  • Larave5.7使用Mailable发送邮件

    现在很多网站都有发送邮件验证身份的功能 所以介绍一下Laravel中邮件发送的方法 Laravel框架中为我们绑定了Mailable服务 我们只需要配置好参数 然后使用该服务即可 配置邮件服务器 我们发送邮件需要有一个stmp服务器 现在有
  • Sublime实现自动排版

    sublime功能很强大 但是使用sublime就可以实现代码自动重新缩进 使代码缩进重排 方法 Ctrl A选中全部内容 然后在菜单中选择Edit gt Line gt Reindent
  • 苹果发布AirTag新固件更新:增加了反跟踪增强功能

    Apple今天发布了专为AirTags设计的1 0 27 固件的新版本 这是对 6 月份提供的更新的修订 新的 AirTags 1 0 276 固件的内部版本号为 1A287b 而旧固件的内部版本号为 1A276d 6 月份发布的 1 0
  • k8s dashboard 报错 Error: 'dial tcp 172.168.56.2:9090: getsockopt: connection refused'

    访问web http 192 168 56 101 8080 ui Error dial tcp 172 17 26 2 9090 getsockopt connection refused 排查方法 1 需要检查apiserver的地址设
  • hive多窗口遇到java.sql.SQLException 异常

    hive多窗口遇到java sql SQLException 异常 多打开一个客户端窗口启动 hive 会产生 java sql SQLException 异常 文章目录 hive多窗口遇到java sql SQLException 异常
  • 【沉浸式腾讯云服务器部署安装docker】

    重置密码 sudo passwd root lighthouse VM 12 2 centos sudo passwd root Changing password for user root New password Retype new
  • asp.net zero 8.2 学习-11-Metronic替换google字体,加速网页加载速度

    asp net zero 8 2使用的前端模板是Metronic6 0以上版本 官网的Metronic下载下来 打开很慢主要是加载googole字体耗费时间 这是我之前写的如何在Metronic中替换google字体 Metronic是一款
  • 使用STM32F4XX自带数学库“arm_math.h“

    使用STM32F4XX自带数学库 arm math h STM32 F4属于Cortex M4F构架 这与M0 M3的最大不同就是具有FPU 浮点运算单元 支持浮点指令集 因此在处理数学运算时能比M0 M3高出数十倍甚至上百倍的性能 但是要
  • 什么是低信噪比图像及处理方法

    信号处理领域的信噪比即SNR Singal to Noise Ration 又称讯噪比 即放大器的输出信号的电压与同时输出的噪声电压的比 常常用分贝数表示 设备的信噪比越高表明它产生的杂音越少 一般来说 信噪比越大 说明混在信号里的噪声越小
  • python (一维、二维)列表的初始化

    一维列表的初始化 初始一个长度为5的列表 方式1 a 0 5 0 0 0 0 0 方式2 a 0 for in range 5 0 0 0 0 0 二维列表的初始化 初始一个2 5的列表 方式1 b 0 5 for in range 2 0
  • Hibernate环境搭建(小实例)

    Hibernate是一个开源的对象关系映射框架 在学习之前 首先让我们先了解一下Hibernate环境是如何搭建的 废话不多说 直接进入正题 建项目 引Jar包 首先 我们需要创建一个Java项目 创建好项目之后 就需要引入与Hiberna
  • unity的HDR效果

    http blog csdn net wolf96 article details 44057915 文章开始先放两组效果 文章结尾再放两组效果 本文测试场景资源来自浅墨大神 shader效果为本文效果 HDR 人们有限的视觉系统 只支持1