![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Unity Shader入门精要
文章平均质量分 59
悄悄努力,然后惊艳到所有人!!!
金朝
活到老,学到老.
展开
-
常用函数
在unity shader开发中,经常会用一些unity提供的函数来提供简单快捷的操作,以下将列出常用的函数,日后也会不定期的更新。step(a, b):等价于:a >= b ? 1 : 0。smoothstep(min, max, param):当param小于min时返回0,大于max时返回1,否则就返回min到max之间的值。lerp(from, to, t):按照t从from到to之间进行插原创 2017-12-28 14:35:36 · 686 阅读 · 0 评论 -
表面着色器
设计目的:顶点-几何-片元着色器处理方式比较适合gpu去理解,但是对人理解而言就显得比较晦涩。所以unity提供了一种适合人类理解的处理方式,也就是表面着色器-光照模型-光照着色器。它是在顶点-几何-片元着色器上面进行的一层抽象封装,最终还是会被unity翻译成顶点-几何-片元着色器的处理方式。 表面着色器:通常用来定义渲染相关的变量。 光照模型:就是选择兰伯特或者phong等光照模型。 光原创 2018-01-02 23:02:03 · 1859 阅读 · 0 评论 -
使用噪声
噪声纹理的应用:噪声往往会应用到规则的事物里,从而产生一种杂乱无章的特殊效果。噪声纹理的创建:噪声纹理本质上是一个程序纹理,是由一些程序算法生成的纹理,相关纹理参数都在程序里面进行控制。常用的噪声纹理是用于生成自然的perlin_noise 以及用于多孔的worley_noise。也可以从procedural-noise 中获取更多的噪声纹理及其相关实现。消融效果:表现效果就是从不同的区域开始,并向原创 2017-12-25 13:31:26 · 2098 阅读 · 0 评论 -
基于物理渲染
设计原因:普通光照模型(兰伯特模型,半兰伯特模型,phong模型,blinn-phong模型)是一种经验模型,只能表达简单普通的光照效果。对于十分逼真的光照效果,就必须使用基于物理的光照模型。BRDF定义:表示双向反射分布函数,通常用f(I,V)来表示,其中I代表光线入射方向,V代表光线观察方向,并且当沿着法线方向旋转I或者V时,对应的BRDF不变,就表明这个BRDF是各项同性的BRDF,反之原创 2018-01-08 22:54:05 · 1337 阅读 · 2 评论 -
渲染优化
优化的原则:程序优化的第一准则就是不要优化,意思就是对问题认识不清楚或者过度的优化往往会让事情变得更加负责,产生更多的程序错误。优化的原因:因为移动端的GPU相对PC端的GPU而言,架构设计不一样,能够使用的带宽,功能和资源都非常的有限,所以才需要优化。原创 2017-12-13 13:31:25 · 833 阅读 · 0 评论 -
非真实感渲染
非真实感渲染的定义:就是使用一些渲染方法使得画面达到某些特殊的绘画风格相似的效果,简称NPR。渲染轮廓线的方式:常见渲染方式如下: 1.基于观察角度和表面法线的轮廓线渲染:这种方法就是使用视角方向和法线方向的点乘结果来得到轮廓信息。但是很多模型渲染出来的描边效果却不尽人意,而且也不能控制轮廓线风格的渲染。 2.过程式几何轮廓线渲染:这种方法就是使用两个pass渲染,第一个pass用来绘制背面的片原创 2017-12-03 16:09:54 · 2957 阅读 · 0 评论 -
深度纹理
深度纹理定义:深度纹理实际上是一种渲染纹理,纹理中的每一个像素值分别存储的是高精度的深度值,而该深度值又是由NDC(统一设备坐标系)中的z分量值来提供,具体的计算公式如下: 深度纹理实现方式:实现方式如下: 1.通过设置渲染路径为延迟渲染路径,将深度信息存储在几何缓冲区中,从而通过直接访问深度缓存来实现。 2.通过在单独的pass中利用着色器替换技术,将满足渲染类型为Opaque,渲染队列小于原创 2017-10-17 18:11:41 · 3583 阅读 · 0 评论 -
屏幕后处理技术
屏幕后处理定义:就是渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。屏幕后处理实现过程:首先需要在摄像机上添加一个用于屏幕后处理的脚本。在这个脚本中,我们会实现MonoBehaviour.OnRenderImage函数来获取当前屏幕的渲染纹理。然后再调用Graphics.Blit函数使用特定的Unity Shader对当前的图像进行处理,再把返回的渲染纹理显示到屏幕上。明原创 2017-10-12 18:44:05 · 2521 阅读 · 0 评论 -
初探动画
动画效果往往都是把时间添加到一些变量的计算中,以便在时间发生变化时,变量也发生变化,从这些变量控制的画面也会随之发生变化,unity shader中常见的时间内置变量如下: 序列帧动画:就是从序列帧纹理中,获取当前时间播放关键帧的纹理采样坐标,从序列帧纹理中进行采样,获取当前播放的帧颜色。参考代码如下:Shader "Custom/ImageSequence" { Properties {原创 2017-10-10 16:18:58 · 384 阅读 · 0 评论 -
初探纹理
纹理用途:纹理主要是使用纹理映射技术,将纹理当中的贴图附着到模型上,然后逐纹素控制模型的颜色,进而控制模型的外观。uv坐标:等价与纹理映射坐标,其中u表示的是横向坐标,v表示的是纵向坐标,表示顶点在纹理中的2D坐标。纹理基本属性: 1.纹理类型(Texture Type):Texture,NormalMap,CubeMap等。 2.平铺模式(Warp Mode): Repeat重复模式,表示超原创 2017-09-20 18:54:33 · 1613 阅读 · 0 评论 -
深入光照
渲染路径定义:就是告诉unity将光源和光照信息数据存储到指定渲染路径对应的变量中。渲染路径分类:在unity4.x中,主要存在前向渲染路径,延时渲染路径以及顶点光照渲染路径,而在unity5.x中,主要存在前向渲染路径,新版延迟渲染路径,旧版延时渲染路径以及旧版顶点光照渲染路径。渲染路径设置:unity中可以在摄像机的RenderPath中进行设置,也可以在PlayerSetting的Render原创 2017-09-26 18:26:33 · 767 阅读 · 0 评论 -
初探光照
光照中的基础概念如下: 1.辐射度:在物体的单位大小上,在单位时间内,获取的光线能量。 2.出射度:光源出射光线的数量和方向。 3.物体光线距离:光线和物体相交时,物体表面的光线距离为d/cosQ,其中d表示光线之间的距离,cosQ表示光线与物体法线之间的夹角。光照模型:在物体某一个方向上计算出射度的等式。常见的光照模型如下: 1.标准光照模型:用来描述光线照射物体表面上时,直接反射进入摄像原创 2017-09-14 18:45:59 · 1150 阅读 · 0 评论 -
初探透明度
透明度实现方式:在unity中实现透明度效果有两种方案,一种是透明度测试,一种是透明度混合。透明度测试实现方式:既是片元的透明度和透明度阈值进行比较,小于这个透明度阈值的片元会直接被舍弃掉,不会做任何处理,相当于该片元透明。而大于这个透明度阈值的则会按照不透明的方式进行处理。实现代码如下:Shader "Custom/AlphaTest" { Properties { _Co原创 2017-09-25 17:08:08 · 1407 阅读 · 0 评论 -
数学基础
简介:数学在shader中应用比较广泛,如:向量,矩阵等,了解基本的数学知识对shader的编写是有比较大的帮助的。坐标系:我们常用的坐标系是笛卡尔坐标系,分为二维和三维两种。 其中二维坐标系我们可以通过旋转来实现坐标重合,但是三维坐标系中无论怎么变化,总有一个坐标是反方向的,并且三维坐标系又分为左手坐标系和右手坐标系两种,分别如下: 1.左手坐标系:就是左手大拇指朝右,食指朝上,中指朝前构成的原创 2017-09-01 11:43:16 · 512 阅读 · 0 评论 -
初探语义
语义简介:实际上就是一个表达参数含义的字符串。应用阶段到顶点着色器时用常用的语义如下: POSITION:模型空间中的顶点坐标 NORMAL:模型空间中的法线方向 TANGENT:模型空间中的切线方向 TEXCOORDn:模型空间中第n组纹理坐标 COLOR:模型空间中顶点的颜色顶点着色器传递数据给片元着色器时常用的语义如下: SV_POSITION:裁剪空间中的顶点坐标 COLOR0原创 2017-09-11 19:50:54 · 1151 阅读 · 0 评论 -
初探shaderlab
简介:unity shader是放入material中,而material放入到对象的mesh或者粒子系统中,通过在material检视面板中修改shader属性值,从而达到修改渲染效果。而shaderlab就是用来编写unity shader的说明性语言,它对传统shader底层进行封装,让使用者不必操作太多的细节。语法:shader "着色器名名称" { Properties {原创 2017-08-31 10:02:49 · 1275 阅读 · 0 评论 -
渲染流程
渲染流水线:是cpu和gpu配合渲染一帧的过程,主要分为应用阶段,几何阶段以及光栅化阶段。应用阶段流程:由cpu进行控制,主要流程如下 1.准备哪些对象被渲染,哪些被剔除,然后将要渲染的对象从硬盘加载到内存,然后从内存加载到显存,方便gpu高速处理。 2.设置每个对象的渲染状态,也就是设置对象所需的材质,纹理,着色器等。 3.输出渲染图元,然后向gpu发送draw call命令,并将渲染图元传原创 2017-08-25 21:53:04 · 5918 阅读 · 0 评论