首页 > 其他分享 >Games101-Cp3-Shading

Games101-Cp3-Shading

时间:2023-06-18 17:23:49浏览次数:41  
标签:法线 Cp3 Mipmap 纹理 vec Shading Games101 坐标

Shading的过程就是对物体应用材质的过程。Shading\(\not=\)Shadow。着色模型不包括阴影。

Z-Buffering

深度缓存用于做深度测试时对深度进行比较。在\([0, 1]\)之间取值。应该是可视范围与深度的相除?
在开启深度测试的时候,与深度缓存进行比较。如果小于对应像素的深度值则绘制。

Blinn-Phong反射模型

该简单着色模型由三部分光构成:1.漫反射diffuse2.高光specular3.环境光ambient。对应的输入为:1.观测方向\(\vec{v}\) 2.法线方向\(\vec{n}\) 3.光照方向\(\vec{I}\) 4.表面材质参数。注意上述三个方向均是从像素点往外出射。因为Shading是局部的,同时我们在对应的着色器也是逐顶点/逐片元的局部操作。

Diffuse 漫反射

\[L_d = k_d(I/r^2)max(0,\vec{n}\cdot\vec{I}) \]

这是Lambertian计算漫反射的公式。首先\(k_d\)是漫反射系数,实际上就是该点的颜色,即光线被着色点反射的部分,可以直接再uv纹理上取值。第二个部分则是光在能量传播中的损耗,我们假设漫反射的光在传播过程中是均匀发散的,能量是以球壳的方式传播,并假设在半径为1的球上光的强度为\(I\),则在距离为\(r\)的球壳上与\(r^2\)成反比,因为球的表面积公式。第三部分是能量接收部分,与光线方向和法线的夹角有关。

总结,漫反射与传播距离和光线方向有关,与观察方向无关。

Specular 高光

\[L_s = k_s(I/r^2)max(0,\vec{n}\cdot\vec{h})^p \\ \vec{h} = bisetor(\vec{v},\vec{I}) \]

高光的强度与视线方向\(\vec{v}\)有关,即视线和反射光的夹角越小,对应强度越大。但并不好计算,于是引入半程向量做近似处理。将反射光向量与视线向量的夹角\(\iff\)相当于法线\(\vec{n}\)与半程向量\(\vec{h}\)之间的夹角大小。一般\(_p\)取100~200以降低高光范围,越高高光越集中。

Ambient 环境光

\[L_a = k_aI_a \]

与任何方向无关,为一常数。


Blinn-Phong计算公式如下 $$ L=L_a+L_d+L_s $$

着色频率

判断着色应用在什么位置。

  • Flat Shading 由一个顶点颜色作为整个三角形的颜色。
  • Gouraud Shading 逐顶点着色 在顶点着色器完成,在光栅化阶段插值得到各片段的光照信息。但高光结果不行,因为高光不是线性变化的。
  • Phong Shading 逐片段着色,根据输入的顶点法线信息在光栅化阶段进行法线插值,然后在片段着色器中计算光照信息。

法线

  • 逐顶点法线,需要满足以下两个条件1.最好要求是基础的几何体。2.对周围的平面法线进行平均。

\[N_v=\dfrac{\sum_i N_i}{||\sum_i N_i||} \]

  • 逐像素法线,通过重心坐标确定。
    为了得到三角形内部对应所需变量,并且能在三角形内平滑过渡。采用三角形重心坐标。用于计算纹理坐标、颜色、法线等。

\[(x, y)=\alpha A+\beta B+\gamma C \\ \alpha+\beta+\gamma=1 \\ \alpha = \dfrac{S_a}{S}, \beta = \dfrac{S_b}{S}, \gamma = \dfrac{S_c}{S} \]

重心坐标不能应用在投影后的坐标,而是只能用在世界坐标系下。

渲染管线

直接看我写的另一个blog。我认为是比较清楚。
https://www.cnblogs.com/xkyl/p/17473565.html

纹理 Texture

uv纹理坐标在\([0, 1]\)之间。三角形顶点对应着纹理坐标,在光栅化的同时纹理坐标也一起被光栅化。纹理在应用的过程中会出现两种常见情况:

1.纹理过小

当纹理分辨率不足时,对纹理坐标的取值非整数(ps:注意这里的整数是未归一化的纹理坐标。而不是uv坐标)。

  • Nearest 采样最近像素,这是对纹理坐标直接取整,会出现明显锯齿。
  • Bilinear 双线性插值,对应锯齿较少,对考虑非整数纹理坐标周围四个像素的像素值。具体步骤如下1.取非整数点相邻的四个整数坐标的纹素 2.在两条平行线上做一维线性插值 3.计算对应像素值。

\[lerp = v_0 + x(v_1 - v_0) \\ u_0 = lerp(s, u_00, u_10) \\ u_1 = lerp(s, u_01, u_11) \\ f(x, y) = lerp(t, u_0, u_1) \]

  • Bicubic 双三次插值

2.纹理过大

假设一个平面直接通过纹理坐标对纹理进行采样,近处会出现锯齿走样,远处会出现摩尔纹。近处可以通过上面介绍的线性插值来减少锯齿。而远处是因为覆盖的纹理范围大,采样的信号频率低。一般有两个方法解决 1.超采样SS 2.Mipmap。因为超采样的消耗比较大,不是我们的第一选择。下面介绍Mipmap的过程。

Mipmap

是一种范围搜索的方式。

  • 生成Mipmap图。我们先对原始图进行处理,生成原来一半边长的缩略图,并且多次生成多层的Mipmap。多生成部分的缩略图只多占原来的内存的1/3.(将多生成的Mipmap乘三,对应的内存极限接近于原始图大小)

  • 计算取第\(D\)层的Mipmap纹理。取该像素在原始图上的uv坐标相邻上方和右侧的像素。

\[L = max(\sqrt{(\dfrac{du}{dx})^2 + (\dfrac{dv}{dx})^2}, \sqrt{(\dfrac{du}{dy})^2 + (\dfrac{dv}{dy})^2}) \\ D = \log_2{L} \]

  • 三线性插值。希望在层与层之间能有平滑变化的纹理。对\(D\)层做双线性,\(D+1\)层做双线性,对应结果做线性。

Mipmap局限性。因为三线性插值可能会导致远处过分模糊。有两种解决方法,

  • 1.各向异性过滤,对于一些特殊覆盖范围的纹理采样(如长条等)。我们分别对u轴、v轴进行压缩得到Ripmap,解决特殊纹理模糊情况,对应内存会增加三倍。
  • 2.EWA filtering 不规则图形覆盖面积。

对应还有各种各样的贴图。环境贴图,CubeMap,凹凸,法线贴图。后面虎书再具体展开讲。

对应作业三是模型显示以及上不同贴图,没太搞懂IBN矩阵的内容。先放过。

感谢你看到这里,Cheers!

标签:法线,Cp3,Mipmap,纹理,vec,Shading,Games101,坐标
From: https://www.cnblogs.com/xkyl/p/17472567.html

相关文章

  • Shading-JDBC使用实例
    Sharding-JDBC是一个开源的数据库中间件,用于实现数据库分片和读写分离。它通过在应用程序和底层数据库之间添加一个透明的中间层来实现数据分片和路由。下面是一个简单的示例,展示了如何在Java应用程序中使用Sharding-JDBC:添加依赖项:在您的项目的构建文件(例如pom.xml)中,添加Shard......
  • Oceans on a Shoestring: Shape Representation, Meshing and Shading(低成本的海洋:形
    作者:HuwBowles单位:StudioGoboIntroduction(简介):StudioGoboisasmallteamoftalenteddevelopersbasedinBrighton/UKTheCrew(成员):BenAndrews,PaulAyliffe,AnastasiosBrakis,JimCallin,ClementDagneauKevinHayes,WillMyles,OlliverReid-Smith,Phi......
  • 计算机图形学入门——GAMES101第一课笔记
    一、光栅化将三维空间的几何形体显示在屏幕上,就是光栅化(Rasterization)。 虎书中有这么一段话: Theprocessoffindingallthepixelsinanimagethatareoccupiedbyageometricprimitiveiscalledrasterization;即光栅化就是找到所有被几何原型所占据的所有像素点......
  • GAMES101 VS2019 2022环境配置
    GAMES101VS20192022环境配置Eigen库的配置在官网https://eigen.tuxfamily.org/index.php?title=Main_Page中下载Eigen库的zip格式。将压缩包解压为eigen3同时解压到指定路径,我这里为D:\include\eigen3。使用VS2019创建一个空项目,将代码框架的头文件和源文件加入到项......
  • rknn_toolkit-1.6.1-cp36安装(Centos:rknn_toolkit-1.6.1-cp36-cp36m-linux_x86_64.whl)
    ---------start添加用户----------#suroot#adduserxu#passwdxu#chmod-vu+w/etc/sudoers#vim/etc/sudoers在这一行rootALL=(ALL)ALL下新增#xuALL=(ALL)ALL#addbyjiangshanwithhands#chmod-vu-w/etc/sudoers退出root用户#exit----......
  • 09 Shading(Texture Mapping)
    1.TextureMapping下图中,不同位置的反射模型是一样的,但是颜色不同,这是因为漫反射系数不同。同样的,一个点应该还存在着很多属性,那么应当如何定义属性。三维图形的表面可以展开为二维平面,这一个二维平面(包含着对应的三维中三角形的属性)便是Texture。如何实行一个好的纹理映射,是......
  • 08 Shading(Shadding, Pipeline and Texture Mapping)
    关键点Real-TimeRenderingPipelineShader1.Graphics(Real-timeRendering)Pipeline管线1.1PipelineMVP,Rasterization,Z-Buffer,Shading,Texture1.2ShaderPrograms着色器通用程序,用于定义任意像素如何操作。来源[1]Games101.闫令琪......
  • GAMES101笔记-02
    上节课已知旋转θ角度时用矩阵表示为  那么如果要旋转-θ度,则将θ全部替换为-θ,得到结果为  此时这个矩阵正好与原来矩阵的倒置相同 当一个矩阵的逆等于这个矩阵的转置,将其称为正交矩阵。    三维空间的变换三维空间的旋转操作在三维空间中本身矩阵是3*......
  • Lens Shading成因及相关
    一个监控摄像头光学处理包含以下几个部分:镜头(Lens)(定变焦镜头)、红外截止滤波片(IR-cutfilter)(红外截止滤光片和蓝玻璃滤光片为主)、图像传感器(ImageSensor)和印制电路板(PCB)。其中,镜头、红外截止滤波片)和图像传感器是组成摄像头的核心部件,也是引起LensShading的主要部分。图分解示意......
  • GAMES101笔记-01
    前言:这篇以及未来的一系列随笔是根据b站上的GAMES101现代计算机图形学入门课程所写的笔记,但笔记的篇章并非和课程一一对应。比如这篇对应的是第二课~第三课的内容。并且整理时不一定会将推导过程全部列出,做成只有总结概括的内容也不是没有可能。 1.向量叉乘的矩阵表示:  ......