• 本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载。
  • 本篇博客会补充一些扩展内容(例如其他博客链接)
  • 本篇博客还会提供一些边读边做的效果截图。文章内所有数学公式都由Latex在线编辑器生成。
  • 本篇博客主要提供一个“glance”,知识点的总结。如有需要请到书店购买正版。
  • 博客提及所有官方文档基于2022.2版本,博客会更新一些书中的旧的知识点到2022.2版本。
  • 个人博客网址:https://www.sugarcanesama.com/archives/1479,如文章转载中出现例如传送门失效等纰漏,建议直接访问原博客网址。

  • 如有不对之处欢迎指正。
  • 我创建了一个游戏制作交流群:637959304 进群密码:(CSGO的拆包密码)欢迎各位大佬一起学习交流,不限于任何平台(U3D、UE、COCO2dx、GamesMaker等),以及欢迎编程,美术,音乐等游戏相关的任何人员一起进群学习交流。

目录

Shader数学基础

坐标系

矢量

矩阵

矩阵变换

坐标空间


Shader数学基础

  • 矢量和矩阵的内容如果还没学到那么可以买本线性代数的小册子学一下。

坐标系

  • 笛卡尔坐标系,左手系,右手系:传送门,Unity使用的是左手坐标系(只有观察空间是右手坐标系)
  • Unity模型,世界,观察,裁剪空间坐标转换:传送门
    模型空间(对象空间,每个模型自己的空间),世界空间(最大的宏观坐标系),观察空间(以摄像机为原点),裁剪空间(顶点传入的空间,进行裁剪等操作),投影空间(对应屏幕上的像素坐标)

矢量

  • :坐标中的一个位置
    矢量(vector,也被称作向量):n维空间中包含了模(magnitude)和方向(direction)的有向线段。矢量的模指适量的长度。方向描述了矢量在空间中的指向。
  • 矢量和标量的乘除法
    乘法:kv=vk

  • 除法:当k/v时没有意义

  • 矢量的加法和减法:矢量不可以和标量或不同维度的矢量加减

  • 矢量加法三角形定则(triangle rule):

  • 矢量的模:矢量的模是一个标量,即长度。

  • 单位矢量(unit vector):模为1的矢量。多用于计算光照模型中。矢量转换为单位矢量的过程成为归一化(normalization),零矢量不可以被归一化。

  • 矢量的乘法:点积(dot product),叉积(cross product)
    点积公式:点积满足交换律。点积的其中一个主要的几何意义为投影(projection)

  • 点积可结合标量乘法,加法减法同理

  • 矢量和自身点积就是矢量模的平方
  • 三角代数角度表示的矢量点积意义:两个矢量的点积可以表示为两个矢量的模相乘再乘以他们之间夹角的余弦值。

  • 矢量的叉积:结果为矢量,不满足交换律但满足反交换律(axb=-(bxa)),同时也不满足结合律。叉积的结果为垂直叉积的向量,但左右手系仅影响视觉观看效果(即方向相反),不影响性质和结果。

  • 叉积的模

矩阵

  • 矩阵的含义:传送门
  • 矩阵和标量的乘法:kM=Mk=把k乘入每个元素中。
  • 矩阵和矩阵的乘法:不满足交换律。满足结合律。

  • 特殊的矩阵:
    1、方块矩阵:行列数目相等
    2、对角矩阵:在方块矩阵的基础上,只有对角线上的元素有值
    3、单位矩阵:在对角矩阵的基础上,对角线上的元素值都为1。记一个矩阵M和一个单位矩阵I,IM=MI=M。
  • 转置矩阵:转置矩阵的转置等于原矩阵。矩阵串接的转置等于反向串接各个矩阵的转置。

  • 逆矩阵(inverse matrix):只有方阵才有可能有逆矩阵。方阵的行列式(determinant)不为0那么它就是可逆的。逆矩阵的逆矩阵是原矩阵本身。单位矩阵的逆矩阵也是他本身。转置矩阵的逆矩阵是逆矩阵的转置。矩阵串接相乘后的逆矩阵等于反向串接各个逆矩阵。

  • 正交矩阵(orthogonal matrix):一个方阵M和它的转置矩阵乘积为单位矩阵,那么这个矩阵就是正交的,反之也成立。正交矩阵的行列之间分别构成了一组标准正交基。

矩阵是正交的等价式

  • 正交基(orthogonal basis):一个坐标空间需要指定一组矢量基(即坐标轴),如果这些矢量基之间互相垂直,那么就把他们称为一组正交基。如果正交基中的向量长度都为1,那么它们就是一组标准正交基(orthonormal basis)。
  • 行列矩阵以及先后顺序对于矩阵乘法的结果有很大印象,Unity中常规做法是把矢量放在矩阵的右侧,即把矢量转换成矩阵来进行计算。例如:

矩阵变换

  • 变换(teansform):把一些数据,例如点、方向矢量、颜色等通过某种方式进行转换的过程。
  • 线性变换(linear transform):可以保留矢量加和乘的变换。缩放(scale)、旋转(rotation)、错切(shear)、镜像(mirroring/reflection)、正交投影(orthographic projection)等都属于线性变换。

  • 仿射变换(affine transform):合并线性变换和平移变换的变换,该变换可以使用一个4x4的矩阵来表示。

  • 齐次坐标空间(homogeneous space):传送门,即多一个维度来实现平移等操作的表示。如下图所示,M为原矩阵,t矩阵用于平移,0是零矩阵,1为普通标量。

  • 平移矩阵:可以使用矩阵乘法来表示对一个点进行平移变换。

  • 缩放矩阵:对一个模型沿空间x、y、z轴进行缩放。如果kx=ky=kz那么就称之为统一缩放(uniform scale),否则成为非统一缩放(nonuniform scale)

  • 旋转矩阵:绕x、y、z轴进行的旋转。

  • 复合变换:将上述变换进行组合。绝大多数情况下,我们约定变换的顺序是先缩放,再旋转,后平移。

坐标空间

  • 可以仔细阅读书中4.6.1-4.6.2的原理内容,这里不再作详细解释。因为你会发现,如果你不是编写底层数学工具的程序员,那么这些原理只需要知道例如为什么对于float4x4有些时候可以直接取float3x3计算即可。在具体实践中往往有相关的转换函数来直接完成操作。
  • 顶点的坐标空间变换过程:一个顶点最开始在模型空间中定义,最后他将会变换到屏幕空间中,得到真正的像素坐标奥。
  • 模型空间(model space):有时被称为对象空间(object space)或局部空间(local space)。每个模型都有自己独立的坐标空间,当它被移动或旋转的时候,模型空间也会跟着移动和旋转。
  • 世界空间(world space):最宏观的空间。顶点变换的第一步,就是将顶点坐标从模型空间变换到世界空间中。这个变换通常叫做模型变换(model transform)。
  • 观察空间(view space):也被称为摄像机空间(camera space)。观察空间是一个三维空间,而屏幕空间是一个二维空间。从观察空间到屏幕空间的转换需要经过投影(projection)的操作。顶点变换的第二步,就是将顶点坐标从世界空间变换到观察空间中。这个变换通常叫做观察变换。
  • 裁剪空间(clip space):顶点从观察空间转换到裁剪空间,其中用于变换的矩阵叫做裁剪矩阵(clip matrix),也被称为投影矩阵(projection matrix)。裁剪空间的目标是能够方便地对渲染图元进行裁剪,由视锥体(view frustum)决定裁剪范围。
    视锥体由六个平面包围而成,这些平面被称为裁剪平面(clip planes)。视锥体有两种类型,一种是正交投影(orthographic projection),一种是(perspective projection)。透视投影钟,渲染地图上的平行线不会保持摄像机所见的平行,离摄像机越近网格越大,反之越小。正交投影中所有网格大小一致,且平行线会一直保持平行。视锥体有两个平面,近剪裁平面和远剪裁平面,决定了摄像机可以看到的深度范围。
  • 投影矩阵为投影做准备,但没有进行真正的投影工作。投影矩阵对x、y、z分量进行缩放,方便判断顶点是否位于裁剪空间内。

视锥体的六个面

  • 屏幕空间(screem space):经过裁剪操作后,进行真正的投影工作,把视锥体投影到屏幕空间。屏幕空间是二维空间,因此要把顶点从裁剪空间投影到屏幕空间中。
    步骤:1、进行标准齐次除法(homogeneous division),也被称为透视除法。
    2、根据变换后的x、y坐标来映射输出窗口的对应像素坐标。用齐次坐标的w分量除以x、y、z分量。屏幕映射只会把x、y分量进行处理,z分量会被用于深度缓冲中。

经过齐次除法,裁剪空间会变换成一个立方体

  • 法线变换:传送门,了解法线(normal),切线(ta

《Unity Shader入门精要》笔记:基础篇(2)相关推荐

  1. Unity shader入门精要学习笔记-代码篇6(序列帧动画/滚动背景/流动河流/广告牌/顶点动画的阴影)

    一.序列帧动画 建立一个四边形对着摄像机. 我们需要一张序列帧图像,这里用到8x8的爆炸图. 给四边形上材质和shader,代码如下: Shader "Custom/NewSurfaceSh ...

  2. Unity Shader入门精要学习笔记 - 第14章 非真实感渲染

    Unity Shader入门精要学习笔记 - 第14章 非真实感渲染 本系列为UnityShader入门精要读书笔记总结, 原作者博客链接:http://blog.csdn.net/candycat1 ...

  3. Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照

    转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...

  4. Unity Shader入门精要学习笔记 - 第7章 基础纹理

    转自 冯乐乐的 <Unity Shader 入门精要> 纹理最初的目的就是使用一张图片来控制模型的外观.使用纹理映射技术,我们可以把一张图"黏"在模型表面,逐纹素地控制 ...

  5. Unity Shader入门精要学习笔记 - 第14章非真实感渲染

    转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...

  6. Games101结合Unity Shader入门精要学习笔记(个人向)

    第四章 3D旋转 绕X轴旋转: 绕Y轴旋转: 绕Z轴旋转: 旋转变换(一)旋转矩阵_csxiaoshui的博客-CSDN博客_旋转矩阵 重点:MVP变换!!! model transformation ...

  7. Unity Shader入门精要笔记(五):其他数学相关介绍

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/73747162 前两篇介绍了U ...

  8. Unity Shader入门精要笔记(四):矩阵与空间变换

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/73612170 上一篇我们学习 ...

  9. 《Unity Shader入门精要》笔记:初级篇(2)

    本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...

  10. 《Unity Shader入门精要》笔记:初级篇(1)

    本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...

最新文章

  1. authc过滤器 shiro_Shiro的web下的使用
  2. Python爬虫(二)_urllib2的使用
  3. php str_replace 字符串替换
  4. 前端学习(1486):postman测试接口
  5. 永洪bi_案例分享!永洪BI助力知名三甲医院数字化转型升级
  6. win7系统去除图标箭头的方法
  7. DevOps 国际峰会,为你讲解腾讯的 Git 转型之路
  8. 干货|Elastic 在顶级互联网公司的应用案例浅析
  9. fedora yum 安装mysql
  10. 20+移动端硬件,Int8极速推理,端侧推理引擎Paddle Lite 2.0 正式发布
  11. 电脑基础操作_学电脑到万科!怀集万科电脑培训2019全面招生!
  12. HTML5 Canvas渐进填充与透明(摘自 http://blog.csdn.net/jia20003/article/details/9251893)
  13. 16进制发送 mqtt客户端调试工具_MQTT Simulate Device(MQTT客户端调试工具)下载 v1.0.7免费版-下载啦...
  14. .net pdf转图片_pdf转图片怎么转?看了就知道啦!
  15. 传统媒体如何借力微信
  16. xdb 服务_localhost 8080 XDB服务器需要用户名和密码的问题
  17. cad怎么画坐标系箭头_CAD中怎么画箭头啊 cad箭头
  18. 【分享】精通并发与Netty教程
  19. Hibernate5使用c3p0一些小问题及注意
  20. 高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)

热门文章

  1. Eclipse使用教程1
  2. 关于——Git命令大全
  3. 电磁兼容(EMC)的标准与测试内容(三)
  4. 网页策略游戏《绝地战争》完整源码下载
  5. 在米帝求学的你,知道每个州的圣诞节特色活动吗!
  6. JavaScript零基础入门 13:DOM规范中的MutationObserver接口
  7. 从入门到深入!深入浅出kubernetes(K8S)指南
  8. 关于STM32的BSRR(端口位设置/清除寄存器) 和 BRR(端口位清除寄存器) 的理解(初学32)
  9. NLP词向量模型总结:从Elmo到GPT,再到Bert
  10. 光耦隔离前后电阻阻值选择注意事项