Shader学习随笔(初)-- 持续更新

本文介绍了计算机图形学中的Shader基础,包括渲染流水线的CPU和GPU阶段,详细阐述了渲染过程中的各个步骤。此外,讨论了学习Shader所需的数学知识,如向量和矩阵的基本概念及其在图形学中的应用。坐标空间的介绍涵盖了模型空间、世界空间、观察空间和屏幕空间等。文章适合初级到中级的图形学学习者,旨在帮助理解Shader的工作原理和数学基础。
摘要由CSDN通过智能技术生成

目录

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| = √v²x + v²y + v²z

                单位矢量公式: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拓展 

    更新中。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值