IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Shader学习随笔(初)-- 持续更新 -> 正文阅读

[游戏开发]Shader学习随笔(初)-- 持续更新

目录

Shader基础概念

1、渲染流水线简述

2、对于学习Shader数学基础的了解

3、坐标空间

4、Shader初体验 -- 初级

5、Shader光照篇 -- 中级

6、Shader实例篇 -- 高级

7、Shader拓展? ? ? ??



Shader基础概念

1、渲染流水线简述

? ? ? ? 计算机渲染流程从硬件上分为CPU(应用阶段)和 GPU(渲染阶段)。

? ? ? ? CPU有三个步骤:把数据加载到显存中,设置渲染状态,调用DrawCall。

? ? ? ? 把数据加载到显存中:渲染流程起步阶段,需要从硬盘把数据传到系统内存中,但是GPU从显存中读取数据与直接读取硬盘中的数据相比,从显存读取是比较快的,并且消耗也是小的。同时,部分的显卡(GPU)不支持直接对硬盘进行数据读取。

? ? ? ? 设置渲染状态:CPU要设置渲染对象的渲染类型,例如:使用哪张纹理,使用什么着色器,是否开启混合等等,设置好之后,CPU将这些信息通过DrawCall命令发出,通知GPU应该依据什么进行渲染显示。

? ? ? ? 调用DrawCall:DrawCall就是包含所有渲染所需的基础信息和命令,从CPU发出,GPU接收,并按照DrawCall中的信息,对渲染对象进行处理和最终显示。

? ? ? ? GPU流水线:顶点数据-->几何阶段-->光栅化阶段-->屏幕图像

? ? ? ? 顶点数据就是CPU通过DrawCall命令发给GPU的数据信息,这些数据会传递给顶点着色器。

? ? ? ? 几何阶段中,包含顶点着色器,曲面部分着色器,几何着色器,裁剪,屏幕映射。这个阶段可以理解为把数据进行一次清洗,通过顶点着色器和曲面部分着色器以及几何着色器,把顶点和图元等信息做好设置,再通过裁剪去除摄像机范围之外的顶点和图元,最终通过屏幕隐射把每个图元的坐标转换到屏幕坐标系中。

? ? ? ? 光栅化阶段中,包含三角形设置,三角形遍历,片元着色器,逐片元操作。这个阶段完成之后,需要绘制的图像信息就已经准备完善了,只需要最终显示到屏幕上。

? ? ? ? 屏幕图像,显示最终成品图像到屏幕上。

2、对于学习Shader数学基础的了解

? ? ? ? Shader中常使用的数据是矢量和矩阵(线性代数),矢量在shader中常常用来判断位置信息和坐标信息,而矩阵是用来帮助进行坐标空间转换。(由于目前也是在初学阶段,后续根据实际的学习情况会做填充

? ? ? ? :点在n维空间中是一个非常基础且必须的元素,一般用来表示位置,没有大小。宽度等概念,是空间表示的基础。

? ? ? ? 矢量:矢量是空间中一种有模,有方向的有向线段。模指的是大小,例如速度,距离等。对应的有一个标量的概念,标量只有模,没有方向。
? ? ? ?

? ? ? ? 矢量加法:

? ? ? ? ? ? ? ? 公式:a+b = (ax + bx,ay + by,az + bz)

? ? ? ? ? ? ? ? 图形学:用来处理矢量的位移操作。

? ? ? ? ? ? ? ? 几何意义:从向量a头连接到向量b尾,表示相加后的矢量。

? ? ? ? 矢量减法:

? ? ? ? ? ? ? ? 公式:a-b = (ax - bx,ay - by,az - bz)

????????????????图形学:用来处理矢量的位移操作。

? ? ? ? ? ? ? ? 几何意义:从向量a尾连接到向量b尾,表示相减后的矢量。


????????要想计算点b相对于点a的位移,可以把b和a相减得出。

? ? ? ? 矢量的模

? ? ? ? ? ? ? ? 公式:|v| = √v2x + v2y + v2z

? ? ? ? ? ? ? ? 单位矢量公式:v = v/|v|

? ? ? ? ? ? ? ? 几何意义:可以根据二维矢量,构建出一个三角形。

? ? ? ? ? ? ? ? 图形学:矢量在空间中的长度。(这里有疑问,大佬可在下方评论,感谢!)

? ? ? ? ? ? ? ? shader应用:关注点重在于矢量的方向,一般在计算顶点的法线方向和光源方向

??????????????????????????????????????时,会计算单位矢量(归一化的矢量,即模为1)。

????????点乘

? ? ? ? ? ? ? ? 公式:a · b = |a|·|b|cos<a,b>? 取值范围为【0,180】

? ? ? ? ? ? ? ? 性质:a·b=b·a? 满足乘法交换律

? ? ? ? ? ? ? ? 几何意义:a·b,即为b在a上的投影,并乘以a的长度,值是一个标量。

????????????????图形学:方向判断。点乘>0方向朝向相近,点乘<0方向相反,点乘=0垂直。

? ? ? ? ? ? ? ? unity应用:a·b,在unity中,简单理解为点乘判断角度。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1、计算两个向量的夹角。<a,b> = arccos(a·b/(|a| · |b|))

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、计算夹角范围。>0 (0,90)? <0(90,180)

? ? ? ? 叉乘

? ? ? ? ? ? ? ? 公式:c = a × b? ?(a,b,c均为向量)

? ? ? ? ? ? ? ? 性质:1、c⊥a,c⊥b,即向量c与向量a,b所在的平面垂直。

? ? ? ? ? ? ? ? ? ? ? ? ? ?2、模长|c| = |a||b|sin<a,b>

? ? ? ? ? ? ? ? ? ? ? ? ? ?3、数学上满足右手法则,a×b = -b×a。

? ? ? ? ? ? ? ? 几何意义:a×b,得到一个与这两个向量都垂直的向量,这个向量的模是以两个向

??????????????????????????????????量为边的平行四边形的面积。

? ? ? ? ? ? ? ? 图形学:二维空间判断左右,三位空间求法向量。(法向量即法线)

? ? ? ? ? ? ? ? unity应用:a×b,在unity中,简单理解为叉乘判断方向。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1、a×b > 0 顺时针,< 0 逆时针,= 0 平行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、得出夹角的正弦值,计算向量的夹角(0,90),配合点乘和Angle方法计

??????????????????????????????????????算含正负的方向。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3、得出a,b向量形成的平行四边形的面积大小,得出c向量的相对大

??????????????????????????????????????小。

? ? ? ? 矩阵旋转

? ? ? ? ? ? ? ? X轴旋转矩阵:

????????????????

? ? ? ? ? ? ? ? Y轴旋转矩阵:

?????????????????

? ? ? ? ? ? ? ? Z轴旋转矩阵:

?????????????????

? ? ? ? 矩阵缩放

????????????????

? ? ? ? 矩阵位移

????????????????

? ? ? ? ? 有关于矩阵的知识点需要系统的去了解和学习,这里仅仅是列出在shader运算过程中会用到的一些矩阵。

3、坐标空间

? ? ? ? 模型空间:模型空间主要是以模型或对象为原点进行位置确定的空间。

? ? ? ? 世界空间:世界空间是以一个被定义好的绝对位置为原点,然后进行位置确认的空间。

? ? ? ? 观察空间(摄像机空间):以摄像机或观察点为原点,进行位置确认的空间。

? ? ? ? 裁剪空间:以摄像机的视椎体为范围,进行空间划分的空间。

? ? ? ? 屏幕空间:把视锥体投影到屏幕的空间,用于把三维坐标转换成二维坐标,进行像素点确认的空间。

4、Shader初体验 -- 初级

5、Shader光照篇 -- 中级

? ? ? ? 更新中。。。

6、Shader实例篇 -- 高级

? ? ? ? 更新中。。。

7、Shader拓展?

? ? 更新中。。。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-11-06 15:13:15  更:2021-11-06 15:13:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:32:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码