Gitlab | CI/CD简单实现

CI/CD 流水线 组件组成

  1. stages
  2. job
  3. gitlab runner(可以与gitlab服务器独立, c/s架构. )
--------    --------    --------- 
|stage1| -> |stage2| -> | stage3|          
--------    --------    --------- 

------    ------    -------
|job1|    |job2|    | job3|          
------    ------    ------- 

---------   ---------    --------- 
|runner1|   |runner2| -> |runner3|          
---------   ---------    --------- 
  • pipline: 包含多个stage, 顺序执行
  • stages: 一个stage可以包含多个job,job之间并行
  • jobs: 一个job对应一个runner
  • runner: job的运行环境 可以独立于gitlab,放到其他宿主机上.

gitlab runner 安装

gitlab runner是运行job的环境。需要安装一个可以执行gitlab runner命令的环境.

……

阅读全文

百度网盘不限速 | Aria2篇

环境

  • win10
  • chrome
  • 油猴插件
  • aria2

Aria2

对于不想折腾的有懒人包. 实际上包里含有的是aria2软件和aria2 GUI。 下载链接如下:

  1. 懒人下载包
  2. AriaNg
  3. Aria2

百度网盘简易下载助手

安装油猴脚本: 百度网盘简易下载助手

安装好上述脚本之后,可以在百度网盘web页面看到

选中一个你想要下载的文件,然后点击获取直链地址。第一次获取可能需要关注公众号,获得验证码。输入验证码之后,再次点击获取直链地址。

……

阅读全文

百度网盘不限速 | Aria2篇

环境

  • win10
  • chrome
  • 油猴插件
  • aria2

Aria2

对于不想折腾的有懒人包. 实际上包里含有的是aria2软件和aria2 GUI。 下载链接如下:

  1. 懒人下载包
  2. AriaNg
  3. Aria2

百度网盘简易下载助手

安装油猴脚本: 百度网盘简易下载助手

安装好上述脚本之后,可以在百度网盘web页面看到

选中一个你想要下载的文件,然后点击获取直链地址。第一次获取可能需要关注公众号,获得验证码。输入验证码之后,再次点击获取直链地址。

……

阅读全文

URP 不透明/半透明物体的折射

折射

应用场景

  1. 水池
  2. 玻璃
  3. 热空气(热扭曲)

GrabPass + CubeMap

《Unity3D Shader入门精要》第十章介绍了,模拟实现折射效果有两种

  1. 使用cubemap: 我认为太麻烦.需要的贴图太多。也没有找到其他合适的使用场景,遂搁置。
  2. 使用GrabPass抓屏: 是一种比较简单也好理解的方式,抓屏,然后对抓到的贴图的坐标进行偏移。

详情可以参考 《Unity3D Shader入门精要》第十章

……

阅读全文

URP 不透明/半透明物体的折射

折射

应用场景

  1. 水池
  2. 玻璃
  3. 热空气(热扭曲)

GrabPass + CubeMap

《Unity3D Shader入门精要》第十章介绍了,模拟实现折射效果有两种

  1. 使用cubemap: 我认为太麻烦.需要的贴图太多。也没有找到其他合适的使用场景,遂搁置。
  2. 使用GrabPass抓屏: 是一种比较简单也好理解的方式,抓屏,然后对抓到的贴图的坐标进行偏移。

详情可以参考 《Unity3D Shader入门精要》第十章

……

阅读全文

《Unity Shader入门精要》第八章笔记 | 透明度

渲染顺序

名称队列索引号描 述
Background1000这个渲染队列会在任何其他队列之前被渲染,我们通常使用该队列来渲染那些需要绘制在背景上的物体
Geometry2000默认的渲染队列,大多数物体都使用这个队列。不透明物体使用这个队列
AlphaTest2450需要透明度测试的物体使用这个队列。在Unity 5中它从Geometry队列中被单独分出来,这是因为在所有不透明物体渲染之后再渲染它们会更加高效
Transparent3000这个队列中的物体会在所有Geometry和AlphaTest物体渲染后,再按从后往前的顺序进行渲染。任何使用了透明度混合(例如关闭了深度写入的Shader)的物体都应该使用该队列, srpite模式是该队列
Overlay4000该队列用于实现一些叠加效果。任何需要在最后渲染的物体都应该使用该队列

透明度测试

透明度测试: 只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它

……

阅读全文

《Unity Shader入门精要》第八章笔记 | 透明度

渲染顺序

名称队列索引号描 述
Background1000这个渲染队列会在任何其他队列之前被渲染,我们通常使用该队列来渲染那些需要绘制在背景上的物体
Geometry2000默认的渲染队列,大多数物体都使用这个队列。不透明物体使用这个队列
AlphaTest2450需要透明度测试的物体使用这个队列。在Unity 5中它从Geometry队列中被单独分出来,这是因为在所有不透明物体渲染之后再渲染它们会更加高效
Transparent3000这个队列中的物体会在所有Geometry和AlphaTest物体渲染后,再按从后往前的顺序进行渲染。任何使用了透明度混合(例如关闭了深度写入的Shader)的物体都应该使用该队列, srpite模式是该队列
Overlay4000该队列用于实现一些叠加效果。任何需要在最后渲染的物体都应该使用该队列

透明度测试

透明度测试: 只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它

……

阅读全文

《Unity Shader入门精要》第六章笔记 | 基础光照

我们是如何看到这个世界的

  • 光源: 在光学里,我们使用辐照度 (irradiance) 来量化光
  • 物体的吸收和散射: 光线由光源发射出来后,就会与一些物体相交
  • 着色: 根据材质属性(如漫反射属性等)、光源信息(如光源方向、辐照度等),使用一个等式去计算沿某个观察方向的出射度的过程。我们也把这个等式称为光照模型 (Lighting Model)
  • BRDF光照模型

标准光照模型

  • 环境光: 近似模拟间接光照
  • 自发光: 光线也可以直接由光源发射进入摄像机,而不需要经过任何物体的反射
  • 高光反射: 它可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是有光泽的,例如金属材质。
  • 自发光
  • 漫反射: 漫反射光照是用于对那些被物体表面随机散射到各个方向的辐射度进行建模的. 符合兰伯特定律 (Lambert’s law)

……

阅读全文

《Unity Shader入门精要》第六章笔记 | 基础光照

我们是如何看到这个世界的

  • 光源: 在光学里,我们使用辐照度 (irradiance) 来量化光
  • 物体的吸收和散射: 光线由光源发射出来后,就会与一些物体相交
  • 着色: 根据材质属性(如漫反射属性等)、光源信息(如光源方向、辐照度等),使用一个等式去计算沿某个观察方向的出射度的过程。我们也把这个等式称为光照模型 (Lighting Model)
  • BRDF光照模型

标准光照模型

  • 环境光: 近似模拟间接光照
  • 自发光: 光线也可以直接由光源发射进入摄像机,而不需要经过任何物体的反射
  • 高光反射: 它可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是有光泽的,例如金属材质。
  • 自发光
  • 漫反射: 漫反射光照是用于对那些被物体表面随机散射到各个方向的辐射度进行建模的. 符合兰伯特定律 (Lambert’s law)

……

阅读全文

《Unity Shader入门精要》第五章笔记 | 开始shader练习

一个简单的顶点/片元着色器

代码
Shader "Unity Shaders Book/Chapter 5/Simple Shader" {
    Properties {
        // 声明一个Color类型的属性
        _Color ("Color Tint", Color) = (1.0,1.0,1.0,1.0)
    }
    SubShader {
        Pass {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag

            // 在Cg代码中,我们需要定义一个与属性名称和类型都匹配的变量
            fixed4 _Color;

            // 使用一个结构体来定义顶点着色器的输入
            struct a2v {
                // POSITION语义告诉Unity,用模型空间的顶点坐标填充vertex变量
                float4 vertex : POSITION;
                // NORMAL语义告诉Unity,用模型空间的法线方向填充normal变量
                float3 normal : NORMAL;
                // TEXCOORD0语义告诉Unity,用模型的第一套纹理坐标填充texcoord变量
                float4 texcoord : TEXCOORD0;
            };

            // 使用一个结构体来定义顶点着色器的输出
            struct v2f {
                // SV_POSITION语义告诉Unity,pos里包含了顶点在裁剪空间中的位置信息
                float4 pos : SV_POSITION;
                // COLOR0语义可以用于存储颜色信息
                fixed3 color : COLOR0;
            };

            v2f vert(a2v v) : SV_POSITION {
                v2f o;
                // 使用v.vertex来访问模型空间的顶点坐标
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);
                return o;
            }

            fixed4 frag(v2f i) : SV_Target {
                fixed3 c = i.color;
                // 使用_Color属性来控制输出颜色
                c *= _Color.rgb;
                return fixed4(c, 1.0);
            }

            ENDCG
        }
    }
}

  • 模型数据从哪里来: a2v结构体定义了顶点着色器的输入
  • 顶点着色器和片元着色器之间如何通信: v2f结构体定义了顶点着色器的输入和片元着色器的输入
  • 如何使用属性: Properties 语义块中,并在其中声明了一个属性_Color。并在Cg代码中定一个变量。
  • 顶点着色器是逐顶点调用的,而片元着色器是逐片元调用的。片元着色器中的输入实际上是把顶点着色器的输出进行插值后得到的结果。

ShaderLab中属性的类型和Cg中变量的类型之间的匹配关系 如下:

……

阅读全文