从NDC(归一化的设备坐标)坐标转换到世界坐标要点 参考资料 How to go from device coordinates back to worldspace http://feepingcreature.github.io/math.html <Unity Shader入门精要> 前情提要,从运动模糊说起 产生运动模糊效果,一般来说有两种做法,第一种是将当前帧和下一帧或上一帧等等图像混合起来作为当前的屏幕图像,这样做法可以导致物体运动时会出现多个残影(因为多个帧混合起来了),可以产生…
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大渲染测试 混合 CPU.GPU.图形接口和驱动的关系 CPU和GPU之间的通信 CPU和GPU并行工作的秘密:命令缓冲区 显示流畅的方法 着色器语言 ShaderLab Shader选用 顶点片元着色器 Unlit Shader 结构 一个简单的Shader 库文件 调试 注意点 3D数学 空间 渲…
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Shader](三)------ 光照模型原理及漫反射和高光反射的实现         [Unity Shader](四)------ 纹理之法线纹理.单张纹理和遮罩纹理的实现              [Unity Shader](五) ------ 透明效果之半透明效果的原理及实现 目录 前言 一.…
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Shader](三)------ 光照模型原理及漫反射和高光反射的实现         [Unity Shader](四)------ 纹理之法线纹理.单张纹理和遮罩纹理的实现              [Unity Shader](五) ------ 透明效果之半透明效果的原理及实现          …
分为三个地方讲解. NDC(Normalize Device Coordinates)归一化的设备坐标 NDC坐标是世界空间坐标通过MVP变换之后再进行归一化得到的坐标.只需要再一步变换就能得到屏幕空间坐标.顺便提一下因为已经归一化了,如果需要从NDC坐标还原成世界坐标,需要注意最后除w分量. 何为线性何为非线性 正交投影得到的深度是线性的,而透视投影得到深度是非线性的. 所谓线性,就是指变化曲线的一阶导数为常量,也就是说变化量是恒定的.既然变换是恒定的,即深度z的采样点在[-1,]1之间均匀分…
摘录自 冯乐乐的<Unity Shader入门精要> 笛卡尔坐标系 1)二维笛卡尔坐标系 在游戏制作中,我们使用的数学绝大部分都是计算位置.距离.角度等变量.而这些计算大部分都是在笛卡尔坐标系下进行的. 一个二维的笛卡尔坐标系包含了两个部分的信息: 一个特殊的位置,即原点,它是整个坐标系的中心. 两条过原点的互相垂直的矢量,即X轴和Y轴.这些坐标轴也被称为是该坐标的矢量. OpenGL 和 DirectX 使用了不同的二维笛卡尔坐标系.如下图所示: 2)三维笛卡尔坐标系 在三维笛卡尔坐标系中,…
来源作者:candycat   http://blog.csdn.net/candycat1992/article/ 2.1 综述 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏幕上看到的所有效果.它的输入是一个虚拟摄像机.一些光源.一些Shader以及纹理等. 渲染流程分成3个阶段:应用阶段.几何阶段.光栅化阶段. 应用阶段: 这个阶段由我们的应用主导的,因此通常由CPU负责实现,我们开发者具有这个阶段的绝对控制权. 在这个阶段,开发者主要有三个主要任务:首先,准备好场景…
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数学基础. 第五章:利用简单的顶点/片元着色器来实现辅助技巧. 第六章:基本光照模型. 第七章:法线纹理.遮罩纹理等基础纹理. 第八章:透明度测试和透明度混合. 第九章:复杂光照实现. 第十章:高级纹理(立方体纹理等). 第十一章:纹理动画.顶点动画. 第十二章:屏幕特效. 第十三章:深度纹理. 第十四章:非真…
线纹理的代码非常简单,但是我们有必要在这之前首先了解它们背后的实现原理. 深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值而是一个高精度的深度值.由于被存储在一张纹理中,深度纹理里的深度值范围是[0,1],而且通常是非线性分布的.那么,这些深度值是从哪里得到的呢?总体来说,这些深度值来自于顶点变换后得到的归一化的设备坐标(Normalized Device Coordinates, NDC).一个模型要想最终被绘制在屏幕上,需要把它的顶点从模型空间变换到齐次裁剪坐标系下,这是通…
主要是对第二章的整理 渲染流水线:由一个三维场景出发,生成(渲染)一张二维图像. 渲染流程:应用阶段.几何阶段.光栅化阶段. 应用阶段: 1. 把数据加载到显存中 渲染所需数据从硬盘,到内存,再到显存 2. 设置渲染状态 渲染状态:使用哪个顶点着色器.片元着色器.光源属性.材质等 3. 调用Draw Call 发起方CPU,接收方GPU GPU流水线 以下为几何阶段主要步骤 顶点着色器: CPU输入的每一个顶点都会调用一次顶点着色器 不创建或销毁任何顶点,且顶点之间相互独立 坐标转换:把顶点坐标…