US3S1L3-1——半兰伯特光照模型的逐顶点光照
US3S1L3-1——半兰伯特光照模型的逐顶点光照 利用半兰伯特光照模型实现光照效果(逐顶点光照) 半兰伯特光照模型的逐顶点实现,和兰伯特一模一样,唯一的区别就是公式: Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量→⋅标准化后光源方向向量→)×0.5+0.5)Color_{漫反射光照} = Color_{光源} \times Color_{材质的漫反射} \times ((\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) \times 0.5 + 0.5) Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量⋅标准化后光源方向向量)×0.5+0.5) 具体Shader实现: 要注意,尽管半兰伯特光照模型改进了背光面的显示效果,我们为了光照效果更加自然还是会使用 UNITY_LIGHTMODEL_AMBIENT 不使用 UNITY_LIGHTMODEL_AMBIENT (左)和使用...
US3S1L3——半兰伯特光照模型
US3S1L3——半兰伯特光照模型 半兰伯特光照模型 半兰伯特光照模型 是 基于兰伯特光照模型进行的修改,主要目的是让背光面可以有明暗变化: Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量→⋅标准化后光源方向向量→)×0.5+0.5)Color_{漫反射光照} = Color_{光源} \times Color_{材质的漫反射} \times ((\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) \times 0.5 + 0.5) Color漫反射光照=Color光源×Color材质的漫反射×((标准化后物体表面法线向量⋅标准化后光源方向向量)×0.5+0.5) 单位向量点乘的结果范围 根据数学公式我们知道,假设单位向量A和单位向量B,它们的点乘结果为: A⃗⋅B⃗=∣A⃗∣∣B⃗∣cosθ\vec{A} \cdot \vec{B} =...
US3S1L2-2——兰伯特光照模型的逐片元光照
US3S1L2-2——兰伯特光照模型的逐片元光照 知识回顾 兰伯特光照模型公式: Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量→⋅标准化后光源方向向量→)Color_{漫反射光}=Color_{光源} \times Color_{材质的漫反射} \times \max(0,\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量⋅标准化后光源方向向量) 其中,标准化后物体表面法线向量→⋅标准化后光源方向向量→\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}标准化后物体表面法线向量⋅标准化后光源方向向量 等于物体表面法线与光源方向向量的夹角的 cos\coscos 值 会使用的信息: 光源的颜色 Lighting.cginc 内置文件中的...
US3S1L2-1——兰伯特光照模型的逐顶点光照
US3S1L2-1——兰伯特光照模型的逐顶点光照 知识回顾 兰伯特光照模型公式: Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量→⋅标准化后光源方向向量→)Color_{漫反射光}=Color_{光源} \times Color_{材质的漫反射} \times \max(0,\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量⋅标准化后光源方向向量) 其中,标准化后物体表面法线向量→⋅标准化后光源方向向量→\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}标准化后物体表面法线向量⋅标准化后光源方向向量 等于物体表面法线与光源方向向量的夹角的 cos\coscos 值 会使用的信息: 光源的颜色 Lighting.cginc 内置文件中的...
US3S1L2——兰伯特光照模型
US3S1L2——兰伯特光照模型 本章代码关键字 12UNITY_LIGHTMODEL_AMBIENT //兰伯特光照模型环境光变量,对计算出来的结果加上该变量、用于模拟环境光对物体的影响,避免物体阴影部分完全黑暗_WorldSpaceLightPos0 //表示光源0在世界坐标系下的位置 兰伯特光照模型 Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量→⋅标准化后光源方向向量→)Color_{漫反射光}=Color_{光源} \times Color_{材质的漫反射} \times \max(0,\overrightarrow{标准化后物体表面法线向量} \cdot \overrightarrow{标准化后光源方向向量}) Color漫反射光=Color光源×Color材质的漫反射×max(0,标准化后物体表面法线向量⋅标准化后光源方向向量) 其中,标准化后物体表面法线向量→⋅标准化后光源方向向量→\overrightarrow{标准化后物体表面法线向量} \cdot...
US3S1L1——逐顶点光照和逐片元光照
US3S1L1——逐顶点光照和逐片元光照 光照在哪里计算? 具体的光照效果相关的计算,应该写在顶点还是片元着色器中呢? 光照效果的计算在顶点着色器和片元着色器中都可以做 在顶点着色器回调函数中:消耗低,效果差,适合低配设备 在片元着色器回调函数中:消耗高,效果好,适合高配设备 具体在哪里实现,根据项目实际情况而定 我们之后在学习光照模型时,每一种光照模型都会讲解两种实现,即 逐顶点 和 逐片元 光照 逐顶点光照 光照在哪计算:顶点着色器 回调函数中 计算方式:逐顶点光照会在每个物体的顶点上进行光照计算 这意味着光照计算只在物体的顶点位置上执行,而在顶点之间的内部区域使用插值来获得颜色信息(因此计算量少) 优点:逐顶点光照的计算量较小,通常在移动设备上性能较好,适用于移动游戏等要求性能的场景 缺点:照明效果可能不够精细,特别是在物体表面上的细节区域,因为颜色插值可能不足以捕捉到细微的照明变化 适用场景:逐顶点光照适用于需要在有限资源下获得较好性能的场景,例如移动游戏 逐片元光照 光照在哪计算:片元着色器...
US3S3——Shader入门-透明效果
US3S3——Shader入门-透明效果 透明 在 Unity Shader 中实现半透明效果的基本原理就是:利用多个物体或背景的颜色进行混合计算呈现出类似半透明效果 想要实现透明效果,需要掌握如下内容: 渲染标签 —— 渲染队列:确定物体的渲染顺序 渲染状态 —— 深度缓冲:记录像素的深度值,用于之后进行比较,决定片元(颜色)的去留 渲染状态 —— 深度测试:将当前片元深度值和深度缓冲中深度值进行比较,决定片元(颜色)去留 渲染状态 —— 混合方式:将通过深度测试的片元颜色和颜色缓冲区中的颜色按指定算法进行混合,并更新颜色缓冲区 本系列学习内容: 透明必备知识 渲染顺序的重要性 设置深度写入和渲染队列 设置混合命令 透明效果实现 透明度测试 透明度混合 开启深度写入的半透明 双面渲染
US3S2——Shader入门-纹理效果
US3S2——Shader入门-纹理效果 纹理 模型的骨肉皮分别为: 骨:模型骨骼 肉:三角面片(由模型顶点围成模型的轮廓) 皮:纹理图片 由此可以看出,纹理的主要作用就是使用一张图片来控制模型的外观 使用纹理映射技术,将图片和模型联系起来,让模型能呈现出图片中的颜色表现 纹理映射:是计算机图形学中的一种技术,它用来将图像(纹理)映射到三维模型的表面, 从而赋予模型更加真实和细致的外观,这个过程实际上是将二维图像映射到三维空间的过程 纹理就是模型的“皮”,它决定了模型的颜色表现,在建模时通过纹理映射技术将顶点和纹理图片建立联系 在模型数据中记录顶点对应的UV坐标,之后我们在进行Shader开发时,就可以利用UV坐标从纹理图片中取出对应的颜色,给片元“上色”了 左图为不关联纹理的模型的显示效果(固定为白色),右图为关联的纹理的模型的显示效果 注意 UV坐标的取值范围在 [0~1]...
US3——Shader开发知识
US3——Shader开发知识 前置知识点 Unity Shader 入门相关必备基础知识的学习,其中重要的知识有: 渲染管线相关(应用阶段——>几何阶段——>光栅化阶段) 数学基础相关(点、向量、矩阵、坐标系变换) 语法基础相关(ShaderLab语法、CG语法) 通过这些知识的学习,我们基本上能够大致了解了应该如何进行Shader开发 Shader 开发知识 我们可以通过 CG 等语言结合 ShaderLab 语法规则来编写 Shader 文件 我们需要在顶点、片元着色器的回调函数中具体实现着色器逻辑 在顶点着色器回调函数中我们利用语义获取到模型中的数据 将数据处理完毕后又传递给片元着色器回调函数中进行处理 还可以结合 ShaderLab 属性来进行更多的可变处理,从而呈现出不同的表现效果 我们之后学习的大部分 Shader 相关的知识,其实本质上都是一些计算公式、计算规则(算法) Shader 的本质其实就是利用各种数学计算,呈现出不同的表现效果 本系列学习内容: Shader...