hader学习之 - 概述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。

渲染管线

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

光栅化

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


渲染管线

unity图形处理流程
Shader、材质和贴图

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

GLSL/HLSL/Cg

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

OpenGL 支持Windows、Linux、MacOS等许多平台,DirectX仅支持Win平台。而Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。而且Cg语言是Microsoft和NVIDIA相互协作在标准硬件光照语言的语法和语义上达成了一致而开发,所以,HLSL和Cg其实是同一种语言。

所以尽量选择Cg比较好。

总结

一般来说,着色器会分为顶点(Vertex)着色器和片段(Fragment)着色器两个部分。

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

于是,我们就可以通过编写顶点着色器程序,通过一定的方式去改变顶点在投影面的坐标,让模型变形;或者通过编写片段着色器程序,让模型表现出来的颜色根据我们的需要而改变。

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

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


参考:

Shader编程教程
Unity Manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值