[Unity Shader] Shader学习笔记1 - 概述1

 

GPU发展

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。NVIDIA在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU所采用的核心技术有硬件T&L、立方纹理(Cube map)和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L(Transform and Lighting,多边形转换与光源处理)技术能够说是GPU的标志。
2001年第三代modern GPU提供了vertex programmability(顶点编程能力),容许应用程序指定一个序列的进行定点操做控制。所谓vertex,就是组成3D图形的顶点,vertex信息包含了3D模型在空间内的坐标等信息,vertex shader能够经过特定的算法在工做中改变3D模型的外形。到了2003年,GPU开始同时支持vertex programmability 和 fragment programmability(片断编程能力,也成像素编程)。同时DirectX 和 OpenGL也获得了发展。算法

什么是Shader

Shader,即着色器。是一些在GPU上运行的小程序,可编程图形管线的算法片断,用以告诉图形硬件如何计算和输出图像。
主要分为两类:Vertex Shader 和 Fragment Shader。编程

渲染管线

渲染管线也称为渲染流水线或像素流水线或像素管线,是显示芯片内部处理图形信号相互独立的的并行处理单元。在某种程度上能够把渲染管线比喻为工厂里面常见的各类生产流水线,工厂里的生产流水线是为了提升产品的生产能力和效率,而渲染管线则是提升显卡的工做能力和效率。小程序

光栅化

光栅化就是把顶点数据转换为片元的过程。片元中的每个元素对应于帧缓冲区中的一个像素。
光栅化实际上是一种将几何图元变为二维图像的过程。该过程包含了两部分的工做。第一部分工做:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工做:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。
把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将离散信号转换为模拟信号的过程。编程语言

渲染管线spa

unity图形处理流程翻译

Shader、材质和贴图

输入的贴图或者颜色,通过Shaer将其与顶点数据以必定方式组合起来,而后输出。绘图单位能够依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的shader,以及对shader的特定的参数设置,将这些内容(shader以及输入参数)打包存储在一块儿,获得的就是一个material(材质)。以后,咱们即可以将材质赋予三维物体来进行渲染(输出)了。orm

GLSL/HLSL/Cg

Shader language 目前主要有3种:GLSL(OpenGL Shder Language, 基于OpenGL), HLSL(High Level Shading Language, 基于DirectX), 还有NVIDIA公司的Cg语言(C for Graphic)。htm

OpenGL 支持Windows、Linux、MacOS等许多平台,DirectX仅支持Win平台。而Cg是一个能够被OpenGL和Direct3D普遍支持的图形处理器编程语言。并且Cg语言是Microsoft和NVIDIA相互协做在标准硬件光照语言的语法和语义上达成了一致而开发,因此,HLSL和Cg实际上是同一种语言。开发

因此尽可能选择Cg比较好。get

总结

通常来讲,着色器会分为顶点(Vertex)着色器和片断(Fragment)着色器两个部分。

顶点着色器,主要求出各个顶点在投影面的坐标。因此传进去的值须要有顶点的三维坐标,还须要有摄像机的位移旋转矩阵。
片断着色器,主要经过给出的数据,结合从顶点着色器获得的坐标值,计算出每个像素点应该显示的颜色值。因此传进去的值,会默认包括了顶点程序的坐标,而后咱们给予的贴图信息、颜色信息和UV坐标信息。片断着色器是针对于每一个像素点的,因此片断着色器的输出,就是该像素点应该显示的颜色值。

因而,咱们就能够经过编写顶点着色器程序,经过必定的方式去改变顶点在投影面的坐标,让模型变形;或者经过编写片断着色器程序,让模型表现出来的颜色根据咱们的须要而改变。

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合做用,而后输出。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一块儿,获得的就是一个Material(材质)。

Shader开发者要作的就是根据输入,进行计算变换,产生输出而已。

相关文章
相关标签/搜索