CS5L13-1——筛选和排序
CS5L13-1——筛选和排序 本章代码关键字 123456789//查询表达式from ... in ... //从某个集合内选出单个元素where //筛选,后跟和集合内单个元素相关的条件表达式orderby //排序。后跟要排序的单个元素select //将单个元素放入到新集合内//链式表达式IEnumerable<> //公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代IEnumerable<>.Where() //筛选,需要传入条件表达式,可以使用lambda表达式IEnumerable<>.OrderBy() //排序 用LINQ来筛选和排序 假设有一个列表,要筛选出里面的所有的偶数,且大于等于4的数据,再对挑选出来的数字进行排序,最后打印出来 1234//假设有一个列表List<int>...
US3S2L2——纹理相关设置
US3S2L2——纹理相关设置 重要纹理相关设置 纹理设置具体内容,详见:U3L2——图片导入概述 Texture Type(纹理图片类型)和 Texture Shape(纹理图片类型) 决定了我们是否能在Shader当中获取正确数据 Wrap Mode(循环模式):决定了缩放偏移的表现效果 Repeat:在区块中重复纹理 Clamp: 拉伸纹理的边缘 Mirror:在每个整数边界上镜像纹理以创建重复图案 Mirror Once:镜像纹理一次,然后将拉伸边缘纹理 Per-axis:单独控制如何在U轴和V轴上包裹纹理 Filter Mode(过滤模式):决定了放大缩小纹理时看到的图片质量 Point:纹理在靠近时变为块状(适合像素游戏) Bilinear:纹理在靠近时变得模糊 Trilinear:与Bilinear类似,但纹理也在不同的Mip级别之间模糊 过滤模式在开启MipMaps根据实际表现选择,可以达到不同的表现效果
US3S2L1——纹理颜色采样
US3S2L1——纹理颜色采样 知识回顾 内置函数 —— 二维纹理采样函数,详见:US2S3L12——CG内置函数 1fixed tex2D(sampler2D tex, float2 s) 传入纹理图片和UV坐标,返回纹理图片中对应位置的颜色值 单张纹理颜色采样的Shader 关键步骤: 纹理属性和CG成员变量声明 CG中映射ShaderLab中的纹理属性,需要有两个成员变量: 一个用于映射纹理颜色数据,一个用于映射纹理缩放平移数据 ShaderLab中的属性:图片属性(2D),用于利用UV坐标提取这个图片中的颜色 1234Properties{ _MainTex("MainTex", 2D) = ""{}} 在Inspector窗口上,可以看到ShaderLab的图片属性除了关联贴图,还可以修改贴图的缩放和偏移量, 如果CG代码内需要获取贴图的缩放和偏移量这些数据,还需要额外的声明对应的 float4...
US3S1L9——Unity内置光照计算相关函数
US3S1L9——Unity内置光照计算相关函数 Unity内置光照计算相关函数 我们在实现光照模型时,经常会进行一些数学计算,比如:坐标、法线相关的转换 在 UnityCG.cginc 中提供了一些常用的函数,可以帮助我们快捷的进行数学计算 比如我们之前将法线从模型空间转换到世界空间的方法:UnityObjectToWorldNormal 等 有了这些内置函数,我们就不需要自己去通过数学计算来得到结果了,直接调用API即可得到我们想要的结果 除了之前我们在课程中用到的一些函数外,还有一些其他的内置函数 常用内置函数 float3 WorldSpaceViewDir(float4 v) 传入模型空间下的顶点位置,返回世界空间中从该点到摄像机的观察方向 float3 UnityWorldSpaceViewDir(float4 v) 传入世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向 123float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - wPos); ...
US3S1L8——逐片元比逐顶点更光滑的原因
US3S1L8——逐片元比逐顶点更光滑的原因 知识回顾 渲染管线回顾: 通过知识点回顾,我们知道在顶点着色器和片元着色器之间还存在其他流程,比如: 裁剪 屏幕映射 三角形设置 三角形遍历 等等 也就是说顶点着色器回调函数中返回的数据,还会在这些中间流程中进行处理,再传递给片元着色器。这也是为什么逐片元比逐顶点更加平滑的原因 逐片元比逐顶点更光滑的原因 为什么逐顶点光照的渲染表现比较粗糙 顶点以外的像素点颜色,是进行插值运算的结果,效果不真实 为什么逐片元光照的渲染表现更加的平滑 每一个像素点都利用其相关数据(法线、位置等)进行颜色计算,效果更真实 注意:也侧面说明了片元着色器的性能消耗更大,顶点着色器的性能消耗更小 为何逐顶点光照比较粗糙 如果我们在顶点着色器中进行了颜色相关的计算,我们只是计算了**模型顶点位置的颜色信息**。 1234567891011v2f vert (appdata_base v){ v2f v2fData; v2fData.svPos =...
US3S1L7-2——Blinn-Phong光照模型的逐片元光照
US3S1L7-2——Blinn-Phong光照模型的逐片元光照 知识回顾 Blinn Phong光照模型公式: 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + BlinnPhong式高光反射光照模型所得颜色 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色 其中: 环境光颜色 = UNITY_LIGHTMODEL_AMBIENT (unity_AmbientSky、unity_AmbientEquator、unity_AmbientGround) 关于上边四个变量,详见:US3S1L5——Phong光照模型 漫反射光颜色 = 兰伯特光照模型 计算得到的颜色 高光反射光颜色 = Blinn Phong式高光反射光照模型 计算得到的颜色 利用Blinn-Phong式光照模型实现光照效果(逐片元光照) 关键步骤: 计算兰伯特光照模型 123456789101112fixed4...
US3S1L7-1——Blinn-Phong光照模型的逐顶点光照
US3S1L7-1——Blinn-Phong光照模型的逐顶点光照 知识回顾 Blinn Phong光照模型公式: 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + BlinnPhong式高光反射光照模型所得颜色 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色 其中: 环境光颜色 = UNITY_LIGHTMODEL_AMBIENT (unity_AmbientSky、unity_AmbientEquator、unity_AmbientGround) 关于上边四个变量,详见:US3S1L5——Phong光照模型 漫反射光颜色 = 兰伯特光照模型 计算得到的颜色 高光反射光颜色 = Blinn Phong式高光反射光照模型 计算得到的颜色 利用Blinn-Phong式光照模型实现光照效果(逐顶点光照) 关键步骤: 计算兰伯特光照模型 12345678910111213fixed4...
US3S1L7——Blinn-Phong光照模型
US3S1L7——Blinn-Phong光照模型 Blinn Phong光照模型 来历: Blinn Phong光照模型我们之前提到过,它是由吉姆·布林(Jim Blinn,美国计算机科学家) 在1977年时,在Phong光照模型基础上进行修改提出的 它和Phong一样是一个经验模型,并不符合真实世界中的光照现象,它们只是看起来正确 原理: Blinn Phong和Phong光照模型一样,认为物体表面反射光线是由三部分组成的: 环境光 + 漫反射光 + 镜面反射光(高光反射光) Blinn Phong光照模型的公式 Blinn Phong光照模型公式: 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 + BlinnPhong式高光反射光照模型所得颜色 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色 其中: 环境光颜色 = UNITY_LIGHTMODEL_AMBIENT...
US3S1L6-2——Blinn-Phong式高光反射光照模型的逐片元光照
US3S1L6-2——Blinn-Phong式高光反射光照模型的逐片元光照 知识回顾 公式: 高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向→⋅标准化后半角向量方向→)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向})^{光泽度} 高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向⋅标准化后半角向量方向)光泽度 标准化后顶点法线方向→⋅标准化后半角向量方向→\overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向}标准化后顶点法线方向⋅标准化后半角向量方向 得到的结果就是 cosθ\cos\thetacosθ 半角向量方向→=视角单位向量→+入射光单位向量→\overrightarrow{半角向量方向} = \overrightarrow{视角单位向量} +...
US3S1L6-1——Blinn-Phong式高光反射光照模型的逐顶点光照
US3S1L6-1——Blinn-Phong式高光反射光照模型的逐顶点光照 知识回顾 公式: 高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向→⋅标准化后半角向量方向→)光泽度高光反射光照颜色 = 光源的颜色 \times 材质高光反射颜色 \times \max(0,\ \overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向})^{光泽度} 高光反射光照颜色=光源的颜色×材质高光反射颜色×max(0, 标准化后顶点法线方向⋅标准化后半角向量方向)光泽度 标准化后顶点法线方向→⋅标准化后半角向量方向→\overrightarrow{标准化后顶点法线方向} \cdot \overrightarrow{标准化后半角向量方向}标准化后顶点法线方向⋅标准化后半角向量方向 得到的结果就是 cosθ\cos\thetacosθ 半角向量方向→=视角单位向量→+入射光单位向量→\overrightarrow{半角向量方向} = \overrightarrow{视角单位向量} +...