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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们可以将像素数据按照矩形进行缩小和放大,但是还不足以满足我们的要求。例如要将一幅世界地图绘制到一个球体表面,只使用glPixelZoom这样的函数来进行缩放显然是不够的。OpenGL纹理映射功能支持将

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

一个图形引擎的画面风格是由那些因素(技术)决定的?

可能很多人第一直覺會認為shader決定了視覺風格,但我認為可以從多個方面去考慮。 1. 幾何模型 一個畫面由多個成分組成,最基本的應該是其結構,在圖形學中通常稱為幾何模型。 一些引擎,如Quake/UE,有比較強的Brush建模功能(或應稱作CSG),製作建築比較方便。而CE則有較強的大型地表、植被、水體等功能,做室外自然環境十分出色。而另一些遊戲類型專用的引擎,例

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果,效果如下: Unity URP遮挡高亮 实现步骤 创建层级,为需要显示高亮效果的物体添加层级,比如Player 创建一个材质球,也就是高亮效果显示的材质球找到Universal Renderer Data Assets 4.在Assets上添加两个Render Objects组件 第一个做如下三处设置 指定遮挡层级指

docker 重启容器且修改服务映射端口

要重启 Docker 容器并修改服务的映射端口,可以按照以下步骤进行操作: 1. 停止当前运行的容器 如果你想重新配置端口,通常需要先停止当前运行的容器。你可以使用以下命令停止容器: docker stop <container_name_or_id> 2. 删除现有容器 为了修改端口映射,你需要删除旧的容器并重新创建一个新的容器。首先运行以下命令删除停止的容器: docker rm

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

Android shape 图形

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!-- "oval","rectangle", "line","ring" 形状--><!-- 圆角 --><cornersandroid