![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UnityShader入门精要
文章平均质量分 89
Fatestay_DC
这个作者很懒,什么都没留下…
展开
-
屏幕后处理效果
建立一个基本的屏幕后处理脚本系统屏幕后处理:指的是渲染完整个场景得到屏幕图像后,再对整个图像进行一系列操作,实现各种屏幕特效。使用这种技术,可以为游戏画面添加更多效果,景深,运动模糊想要实现屏幕后处理的基础在于得到渲染后的屏幕图像,抓取屏幕Unity提供了接口OnRenderImage函数Unity会把当前渲染得到的图像存储在第一个参数对应的渲染纹理中,通过函数中一系列操作后,再把目标渲染纹理,第二个参数对应的渲染纹理显示到屏幕上。在OnRenderImage函数中,通常利用Garphics.Bilt函数原创 2021-01-26 20:14:43 · 399 阅读 · 0 评论 -
动画
Unity Shader中内置变量(时间)动画效果往往都是把时间添加到一些变量的计算中,以便时间变化画面跟着变化。UnityShader提供了一系列关于时间的内置变量来允许我们方便的在Shader中进行访问运行时间,实现动画效果。纹理动画序列帧动画依次播放一系列关键帧图像,播放速度达到一定数值,看起来是一个连续动画,优点在于灵活性强,不需要进行任何物理计算就可以得到细腻的动画效果,缺点明显,序列帧需要美术工程量较大。Shader "Unity Shaders Book/SequenceAnima原创 2021-01-14 18:56:07 · 135 阅读 · 0 评论 -
高级纹理
立方体纹理立方体纹理时环境映射的一种实现方法,环境映射可以模拟物体的周围环境。立方体采样需要提供一个三维的纹理坐标,这个三维纹理坐标表示在世界空间下的一个方向。该方向从立方体中心出发,外部延伸时会和立方体6个纹理之一发生相交,采样得到的结果就是由该交点计算而来。使用立方体纹理的好处在于,实现简单快速,效果较好。缺点,场景中引入新的物体光源,或者物体位移,需要重新生成立方体纹理。立方体纹理仅可以反射环境,不能反射使用了该立方体纹理的本身。立方体不能模拟多次反射结果,由于这样,尽量对凸面体使用立方体纹理。天原创 2021-01-06 19:51:36 · 280 阅读 · 0 评论 -
Unity复杂光照
Unity渲染路径Unity里,渲染路径决定了光照是如何应用到Unity Shader中的,因此,如果跟光源打交道,需要为每个Pass指定使用的渲染路径,只有这样,Unity才会把光源和处理后的光照信息放到数据里,也就是说只有为Shader正确选择和设置了需要的渲染路径,Shader的光照计算才能正确执行。Unity支持多种类型的渲染路径,前向渲染,延迟渲染。大多情况下,一个项目只使用一种渲染路径,因此可以为整个项目设置渲染路径,需要在Project Setting设置,默认选择是前向渲染路径,有时候原创 2020-12-25 12:36:14 · 243 阅读 · 0 评论 -
透明效果
实时渲染中实现透明效果,通常会在渲染模型时控制透明通道。当开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值之外,还有另外的属性,透明度。透明度为1表示像素完全不透明,当为0时,表示像素完全不显示。Unity中有两种方法实现透明效果,一种是透明度测试,这种方法无法得到真正的半透明效果,另一种是透明度混合。对于不透明物体,不考虑渲染顺序也能得到正确的排序效果,是因为强大的深度缓冲的存在。实时渲染中,深度缓冲用于解决可见性问题,决定了哪个物体的哪些部分会被渲染在前面,哪些部分会被其他物体遮原创 2020-12-16 18:50:47 · 404 阅读 · 0 评论 -
基础纹理
纹理最初的目的是使用一张图片来控制模型的外观,使用纹理映射技术,可以把一张图黏在模型表面,逐纹素的控制模型颜色。美术人员建模时候,通常会在建模软件中利用纹理展开技术把纹理坐标存储在每个顶点。纹理映射坐标定义了该顶点在纹理中对应的2D坐标。通常,这些坐标使用一个二维变量uv来表示,u是横向坐标v是纵向坐标因此纹理坐标也称为UV坐标。顶点UV坐标的范围通常都被归一化到[0,1]之间,需要注意的是,纹理采样的纹理坐标不一定在这个范围,实际上,这种不在[0,1]的范围内的纹理坐标有时候非常有用,与之相关的是纹理的原创 2020-12-08 11:25:08 · 281 阅读 · 0 评论 -
Unity中的基础光照
标准光照模型只关心直接光照,也就是直接从光源发射到物体表面后,经过物体表面的一次反射直接进入摄像机的光线。基本方法是,把进入摄像机内的光线分为4各部分,每个部分使用一种方法计算贡献度。自发光部分:用于描述给给定一个方向时,一个表面本身会向该方向发射多少的辐射量,如果没有使用全局光照技术,这些自发光表面并不会真的照亮周围的物体,而是他本身看起来更亮了。高光反射部分:用于描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。漫反射部分:用于描述光线从光源照射到模型表面时,该表面会向每原创 2020-12-03 18:34:39 · 312 阅读 · 0 评论 -
UnityShader结构基础
一个最简单的顶点片元着色器顶点片元的基本结构Shader "ShaderStruct"{ Properties{ //属性 } SubShader { //针对显卡A的SubShader Pass { //设置渲染状态和标签 //开始CG代码片段 CGPROGRAM //代码片段的编译指令 #pragma vertex vert #pragma fragment frag //cg代码 ENDCG //其他设置 }原创 2020-11-30 19:15:09 · 193 阅读 · 0 评论 -
UnityShader数学基础
左手右手坐标系二维坐标系尽管x和y指向虽然可能不同,但总可以通过一些旋转操作来使他们的坐标轴指向相同,从这种意义上来说,所有的二维笛卡尔坐标系都是等价的。但对于三维笛卡尔坐标系,靠旋转并不能让两个不同朝向的坐标系重合,也就是说,三维笛卡尔坐标系并不都是等价的。因此,出现了两种不同的三维坐标系:左手坐标系和右手坐标系。我们可以用双手来判断一个坐标系的旋向性,举起左手,食指和大拇指摆出一个L手势,并且让食指指向上,大拇指向右,然后伸出中指,应该是指向前方,这样就是一个左手坐标系,大拇指食指以及中指分别对应了原创 2020-11-27 17:25:51 · 489 阅读 · 0 评论 -
UnityShader基础
Unity Shader是Unity为开发者提供的高级抽象渲染层,Unity希望通过这种方式让开发者更加轻松的控制渲染 如下图Unity Shader都是使用ShaderLab来编写的,ShaderLab是Unity提供的编写Unity Shader的一种说明性语言。使用了一些嵌套在花括号内部的语义来描述一个Unity Shader文件的结构。这些结构包含了许多渲染所需要的数据,例如Properties语句中定义了着色器需要的属性,这些属性将会出现在材质面板。他定义了要显示一个材质所需要的全部东西,而不原创 2020-11-17 15:41:51 · 257 阅读 · 0 评论 -
渲染流水线
渲染流水线渲染流水线的工作任务是:由一个三维场景触发 生成渲染一张二维图像,这个过程是由GPU与CPU共同完成的。一个渲染流程 可以分成三个部分:应用阶段 几何阶段以及光栅化阶段。这三个只是概念性阶段,每个阶段通常本身也是一个流水线系统,包含了子流水线阶段。概念流水线阶段应用阶段:由CPU负责实现,开发者具有这个阶段的绝对控制权。这一阶段的任务:首先需要准备好场景相关数据;其次为了提高渲染性能,一般需要做一个粗粒度的Culling,把那些不可见的物体剔除出去。最后需要设置每个模型的渲染状态,这些状态原创 2020-11-16 19:27:01 · 192 阅读 · 0 评论