数学对于计算机图形学的重要性是不言而喻的.在学习Shader之前,首先就要打好数学基础,好在入门Unity Shader所需的数学知识都是线性代数中很基础的的内容.按部就班的来,第一篇文章记录总结的是坐标系,点,矢量等概念以及简单的运算.本文主要源自<Unity Shader入门精要>一书的读书笔记. 如果有小伙伴对Shader着色器相关的概念还不了解的话,可以先看下这篇文章一篇文章搞懂到底什么是渲染流水线 坐标系 在三维笛卡尔坐标系中,我们需要定义3个坐标轴和一个原点.这3个坐标轴被称为该坐…
目录 1.坐标空间 1.2 坐标空间的变换 @ 1.坐标空间 我们在以前渲染流水线中就接触了坐标空间的变换.例如,在学习顶点着色器流水线阶段时,我们说过,顶点着色器的最基本功能就是把模型的顶点坐标从模型空间转换到齐次裁剪坐标空间中. 1.2 坐标空间的变换 我们先要为后面的内容做些数学铺垫.在渲染流水线中,我们往往需要把一个点或方向矢量从一个坐标空间转换到另一个坐标空间.这个过程到底是怎么实现的? 我们把问题一般化,我们知道,要想定义一个坐标空间,必须指明其原点的位置和三个坐标轴的方向.而这些数…
摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐标系下进行的. 一个二维的笛卡尔坐标系包含了两个部分的信息: 一个特殊的位置,即原点,它是整个坐标系的中心. 两条过原点的互相垂直的矢量,即X轴和Y轴.这些坐标轴也被称为是该坐标的矢量. OpenGL 和 DirectX 使用了不同的二维笛卡尔坐标系.如下图所示: 2)三维笛卡尔坐标系 在三维笛卡尔坐标系中,…
1. Unity Shader的内置变量(数学篇) 使用Unity写shader的一个好处在于,它提供了很多内置参数,这使得我们不在需要自己手动算一些值.本文给出Unity内置的用于空间变换和摄像机以及屏幕参数的内置变量.这些内置变量可以在UnityShaderVariables.cginc文件中找到定义和说明. 1.1 变换矩阵 首先是用于坐标空间变换的矩阵.表中给出了Unity5.2版本提供的所有内置变换矩阵.下面的所有矩阵都是float4×4类型的. 上表给出了这些矩阵的常用用法.但读者可…
1. 笛卡尔坐标系 在游戏中,我们使用的数学大部分都是为了计算位置.距离和角度等变量.而这些就算大部分是在笛卡尔坐标系下进行的. 1.1 二维笛卡尔坐标系 一个二维笛卡尔坐标系包含了两个部分的信息 1.一个特殊的位置,即原点,他是整个坐标系的中心 2.两条过原点的互相垂直的矢量,即x轴和y轴.这些坐标轴也被称为是该坐标系的基矢量. 虽然在图中x轴和y轴分别是水平方向的和垂直方向的.但这并不是必须的.而且虽然图中的x轴指向右.y轴指向上,但这也不是必须的.如下图所示 1.2 三维笛卡尔坐标系 在三…
@[TOC] 1. 顶点的坐标空间变换过程 我们知道,在渲染流水线中,一个顶点要经过多个坐标空间的变换才能最终被画在屏幕上.一个顶点最开始是在模型空间中定义的,它最后会被变换到屏幕空间中,得到真正的屏幕像素坐标.因此接下来我们将解释顶点要进行的各种空间变换的过程. 为了帮助大家理解这个过程,我们将建立在农场游戏的实例背景下,每讲到一种空间变换,我们都会解释如何应用到这个案例中. 在我们的农场游戏中,妞妞很好奇自己是如何渲染到屏幕上的.它只知道自己和一群小伙伴快乐的在农场里吃草,而前面一直有一个摄…
法线变换 法线(normal),也被称为法矢量(normal vector).在以前我们已经讲过如何使用变换矩阵来变换一个顶点或方向矢量,但法线是需要我们特殊处理的一种方向矢量.在游戏中,模型的顶点往往会携带额外的信息,而顶点法线就是其中一种信息.当我们变换一个模型的时候,不仅需要变换它的顶点,还需要变换顶点法线,以便在后续处理(如片元着色器)中计算光照等. 一般来说,点和绝大部分方向矢量都可以使用同一个4×4或3×3的变换矩阵Ma->b把其从坐标空间A变换到坐标空间B中.但在变换法线的时候,如…
本笔记,是根据自己学习shader的笔记,主要是参照冯乐乐的<Shader 入门精要> 和游戏蛮牛shaderLad视频 和网上一些博客. 为啥要学习这个呐? 自己其实之前学过一段时间的shader,但是中间终止了.当时学的还挺多吧,算是有点基础. 但是有一点自己明白.shader学好,还关联3D数学,图形学的知识.刚好,自己这方面不足.再加上自己前些日子面试网易等 知名大公司,被打击的体无完肤,自己的确很多的不足,底子的确很不扎实. Shader难的原因? 牵扯到整个渲染流程,面向GPU编程…
引言 shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来.但看了一些资料甚至看了不少cg的语法之后,我们还是很迷茫,UNITY_MATRIX_MVP到底是个什么矩阵?它和v.vertex相乘出来的又是什么玩意?当这些问题困扰我们很久之后,我们才发现,原来我们是站在浮沙上筑高台,根基都没有打牢当然不可能盖得起高楼大厦了. 那根基是什么呢?大牛曰,计算机图形学. shader…
引言 shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来.但看了一些资料甚至看了不少cg的语法之后,我们还是很迷茫,UNITY_MATRIX_MVP到底是个什么矩阵?它和v.vertex相乘出来的又是什么玩意?当这些问题困扰我们很久之后,我们才发现,原来我们是站在浮沙上筑高台,根基都没有打牢当然不可能盖得起高楼大厦了. 那根基是什么呢?大牛曰,计算机图形学. shader…