Games101-着色(着色频率、图形管线、纹理映射)

2024-03-27 05:52

本文主要是介绍Games101-着色(着色频率、图形管线、纹理映射),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

着色频率

在这里插入图片描述
从边界可以看出三个球,拥有完全相同的几何形状。但是着色之后结果各不相同
着色频率:着色要应用在哪些点上。
第一个球,把着色应用在一个面上。一个平面只做一次shading。
第二个球,每一个平面有4个顶点,每个顶点都算出对应的法线,进行shading。每3个顶点,可以围成一个三角形,三角形内部的颜色通过插值的方法计算
第三个球,着色应用在每一个像素上。求出每一个三角形的法线,将法线进行插值计算出每一个像素自己的法线,在做一遍着色

Shade each triangle/flat shading

在这里插入图片描述
每一个三角形作为一个平面,将三角形的两条边做一个叉积,求出法线。根据light方向算出shading结果

Shade each vertex/Gouraud shading

在这里插入图片描述
求出每一个顶点的法线,每个顶点进行一次着色,三角形内部的颜色通过插值计算

Shade each pixel/Phong shading

在这里插入图片描述
三角形三个顶点各求出法线,三角形内部每一个像素根据插值求出自己的法线方向,进行着色
在这里插入图片描述
当几何足够复杂的情况下,可以用相对简单的着色频率。
当面的频率已经很更高的情况下,不需要用很高的着色频率
但当三角形面的数量超过了像素数,做flat shading的计算量反而更高
要取决于具体的物体

定义每个顶点的法线在这里插入图片描述

任何一个顶点会和很多个三角形有所关联,则顶点的法线认为是相邻的所有面的法线求平均,根据各个三角形的面积进行加权平均

定义每个像素的法线

在这里插入图片描述
使用重心坐标求插值,注意法线是方向,最终结果要归一化

渲染管线/Graphics (Real-time Rendering) Pipeline

在这里插入图片描述
管线:如何从场景到最后一张图

  1. 输入一系列空间中的点
  2. 三维空间中的点变换投影到屏幕上
  3. 这些点形成三角形
  4. 通过光栅化离散成不同的fragments(类比于像素)
  5. 对像素进行着色,例如如果用了MSAA,就是好多个不同的fragment合成一个像素的着色
  6. 输出到屏幕

第一个大步骤是顶点的处理,各种变换。第二个大步骤是光栅化,涉及到如何采样,如何做深度测试,找到最终能显示在屏幕上的像素。第三个大步骤就是着色
在这里插入图片描述
顶点变换
在这里插入图片描述
采样光栅化
在这里插入图片描述
zBuffer深度缓存
在这里插入图片描述
shading发生在vertex和fragment都有可能,如果phong shading则是在Vertex,如果是flat shading则是在Fragment。
所以要注意顶点如何着色,或者像素如何着色。
现代GPU里允许管线的一些部分是可编程的,可以自己定义顶点或像素如何着色(即Shader)
在这里插入图片描述
纹理映射

Shader

在这里插入图片描述
shader本质上是一些能在硬件上执行的语言
shader是每一个顶点或者每一个像素会执行一次
shader是每一个像素通用的,不用特殊指定哪个像素,所有像素都会执行,因此shader里不需要for循环,只需要处理一个顶点或者一个像素如何运行

如果写的是对顶点的操作,则是顶点着色器/vertex shader
如果写的是对像素的操作,则是像素(片段)着色器/pixel(fragment) shader

上图的例子,像素着色器,要做的是写清楚对一个像素来说怎样算出它的颜色,并且输出出去

在这里插入图片描述
在网页上直接执行shader的一个程序

纹理映射/Texture Mapping

在这里插入图片描述
一个物体每个点公用同一个着色模型,但是希望定义物体上每个点各自的属性,如每个点有自己的光照系数。因此映入纹理映射
在这里插入图片描述
任何一个3维物体的表面都是2维的
因此一个物体的表面可以和一张图有一一对应的关系,即纹理映射
在这里插入图片描述
物体表面上任一三角形的顶点,都能在纹理图片上找到对应的三角形的顶点
在这里插入图片描述
纹理上定义的坐标系:(u,v),u,v的范围默认在[0,1]之间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个纹理可以多次应用,不同的位置可以映射到相同的纹理位置上
在这里插入图片描述
tiled纹理:纹理的四周是无缝衔接的

这篇关于Games101-着色(着色频率、图形管线、纹理映射)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851132

相关文章

Android SurfaceFlinger——图形内存分配器(十一)

前面的文章中的图层合成器(HWC),这里我们接着看一下 SurfaceFlinger 中的另一个重要服务——图形内存分配器。 一、简介         android.hardware.graphics.allocator@2.0 是 Android 系统中硬件抽象层(HAL)的一个组件,专门用于图形内存的分配和管理。它是 SurfaceFlinger 在处理图形数据时所依赖的

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

使用AGG里面的clip_box函数裁剪画布, 绘制裁剪后的图形

// 矩形裁剪图片, 透明void agg_testImageClipbox_rgba32(unsigned char* buffer, unsigned int width, unsigned int height){// ========= 创建渲染缓冲区 =========agg::rendering_buffer rbuf;// BMP是上下倒置的,为了和GDI习惯相同,最后一个参数是

什么是图像频率?

经常听到图像低频成份、高频成份等等,没有细想过,今天突然一想发现真的不明白是怎么回事,在知乎上发现某答案,引用如下: 首先说说图像频率的物理意义。图像可以看做是一个定义为二维平面上的信号,该信号的幅值对应于像素的灰度(对于彩色图像则是RGB三个分量),如果我们仅仅考虑图像上某一行像素,则可以将之视为一个定义在一维空间上信号,这个信号在形式上与传统的信号处理领域的时变信号是相似的。不过是一个是

Mybatis-映射文件中select标签resultType属性的使用

数据库的最最基本操作“增删改查”,“查”是最复杂的,有各种各样的查询,所以对应到Mybatis中的select标签也是这四个操作中最复杂的 resultType属性的使用 1.返回的结果是List集合的类型 select标签里的resultType类型设置为List集合里的元素类型 2.返回一个Map集合 key是列名称,value是列对应的值 3.返回的查询结果也是Map集合

材质、纹理、贴图的关系

材质、纹理、贴图的关系 材质 (Material)包含贴图 (Map),贴图包含纹理 (Texture)。 纹理(Texture)是最基本的数据输入单位。

4.3、Django - URL之URL映射

1、为什么Django项目在urls.py 文件中去寻找所有URL映射? 答:因为,在settings.py 文件中进行了配置。主要是ROOT_URLCONF = 'douAPI.urls'(根URL配置 = douAPI下urls.py)。 2、在urls.py 文件中所有的映射,都应该放在urlpatterns 中 。例如,urls.py # from django.conf.urls im

tomcat外网映射工具

sunny-ngrok 运行sunny-ngrok 输入客户端ID 运行成功 域名(外网)直接访问 注释:tomcat端口改为8080,并且保证http://127.0.0.1:8080 可以正常访问 sunny-ngrok下载地址:http://download.csdn.net/detail/u012081441/9889646

directfb嵌入式图形界简介

 引 言   DirectFB是一个提供硬件图形加速、输入设备处理抽象并集成了透明功能窗体系统和多显示层处理的开源库。通过对底层硬件不支持的图形操作以回调函数实现,DirectFB实现硬件设备的完全抽象。另外DirectFB在设计之初就充分考虑嵌入式系统的固有特性,体积小巧,资源消耗低。作为嵌入式系统中强大的图形处理库,DirectFB成为Linux下图形处理的一个新的标准(CELF A

VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色

目录 引出第五讲 文本编程新建项目输入线的初始化根据字体大小定义插入符大小创建图形插入符文字始终保存在窗口中CString类通过字符串资源 路径层字符输入的功能键盘输入消息鼠标左键消息保存点击位置的坐标 输入回车键的处理删除文字的实现 字符输入功能代码字体的修改模拟卡拉ok变色字体 总结第四讲 简单绘图加入点击弹窗 划线的实现1划线实现2划线的实现3,CClientGetParent()