Unity Shader的渲染顺序

作者:追风剑情 发布于:2016-10-22 17:46 分类:Shader

      Unity为了解决渲染顺序的问题提供了渲染队列(render queue)这一解决方案。我们可以使用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列。Unity在内部使用一系列整数索引来表示每个渲染队列,且索引号越小表示越早被渲染。在Unity5中,Unity提前定义了5渲染队列(与Unity5之前的版本相比多了一个AlphaTest渲...

阅读全文>>

标签: Shader

评论(0) 浏览(17440)

为什么渲染顺序很重要

作者:追风剑情 发布于:2016-10-22 16:23 分类:Shader

      对透明度混合技术,需要关闭深度写入,此时我们就需要小心处理透明物体的渲染顺序。那么,我们为什么要关闭深度写入呢?如果不关闭深度写入,一个半透明表面背后的表面本来是可以透过它被我们看到的,但由于深度测试时判断结果是该半透明表面距离摄像机更近,导致后面的表面将会被剔除,我们也就无法透过半透明表面看到后面的物体了。但是,我们由此就破坏了深度缓冲的工作机制,而这是...

阅读全文>>

标签: Shader

评论(0) 浏览(7166)

System.ObsoleteAttribute

作者:追风剑情 发布于:2016-10-21 14:53 分类:C#

用来标识已过时的类或方法。 示例 using System; namespace TTest { class Program { static void Main(string[] args) { A a = new A(); B b = new B(); ...

阅读全文>>

标签: C#

评论(0) 浏览(3020)

透明效果的基本原理

作者:追风剑情 发布于:2016-10-19 22:22 分类:Shader

      透明是游戏中经常使用的一种效果。在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,当一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值之外,它还有另一个属性——透明度。当透明度为1时,表示该像素是完全不透明的,而当其为0时,则表示该像素完全不会显示。     &...

阅读全文>>

标签: Shader

评论(0) 浏览(4233)

Unity的渲染路径

作者:追风剑情 发布于:2016-9-27 16:13 分类:Shader

      在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的。因此,如果要和光源打交道,我们需要为每个Pass指定它使用的渲染路径,只有这样我们才能在Unity Shader中访问到Unity为我们准备好的光照信息。       Unity...

阅读全文>>

标签: Shader

评论(0) 浏览(11253)

凹凸映射

作者:追风剑情 发布于:2016-9-23 22:04 分类:Shader

      纹理的另一种常见的应用就是凹凸映射(bump mapping)。凹凸映射的目的是使用一张纹理来修改模型表面的法线,以便为模型提供更多的细节。这种方法不会真的改变模型的顶点位置,只是让模型看起来好像是“凹凸不平”的,但可以从模型的轮廓处看出“破绽”。       有两种主要的方法可以用来进行凹凸映射:一种方...

阅读全文>>

标签: Shader

评论(0) 浏览(4505)

纹理的属性

作者:追风剑情 发布于:2016-9-22 21:43 分类:Shader

纹理属性面板 Texture Type: 纹理类型。我们之所以要为导入的纹理选择合适的类型,是因为只有这样才能让Unity知道我们的意图,为Unity Shader传递正确的纹理,并在一些情况下可以让Unity对该纹理进行优化。 Alpha from Grayscale: 如果勾选了它,那么透明通道的值将会由每个像素的灰度值生成。 Wrap Mode...

阅读全文>>

标签: Shader

评论(0) 浏览(3313)

利用Guid类生成唯一ID

作者:追风剑情 发布于:2016-9-22 19:41 分类:C#

using System; namespace TTest { class Program { static void Main(string[] args) { for (int i = 0; i < 100; i++) { Guid gui...

阅读全文>>

标签: C#

评论(0) 浏览(6839)

单张纹理

作者:追风剑情 发布于:2016-9-21 21:43 分类:Shader

使用一张纹理来代替物体的漫反射颜色。 Shader代码 Shader "Custom/Chapter7-SingleTexture" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Base (RGB)", 2D) = "white" {} _Specu...

阅读全文>>

标签: Shader

评论(0) 浏览(9485)

Blinn-Phong光照模型

作者:追风剑情 发布于:2016-9-18 22:18 分类:Shader

       Blinn-Phong光照模型的高光反射部分看起来更大、更亮些。在实际渲染中,绝大多数情况我们都会选择Blinn-Phong光照模型。需要再次提醒的是,这两种光照模型都是经验模型,也就是说,我们不应该认为Blinn-Phong模型是对“正确的”Phong模型的近似。实际上,在一些情况下,Blinn-Phong模型更符合实验结果。 B...

阅读全文>>

标签: Shader

评论(0) 浏览(11746)

高光反射光照模型——逐像素光照

作者:追风剑情 发布于:2016-9-14 22:33 分类:Shader

可以使用逐像素光照来得到更加平滑的高光效果。 Shader代码 Shader "Custom/Chapter6-SpecularPixelLevel" { Properties { //漫反射颜色 _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) //高光反射系数,用于控制材质的高光反射颜色 _Specular ...

阅读全文>>

标签: Shader

评论(0) 浏览(3980)

高光反射光照模型——逐顶点光照

作者:追风剑情 发布于:2016-9-13 23:33 分类:Shader

函数: reflect(i, n) 参数: i, 入射方向;n, 法线方向。可以是float、float2、float3等类型。 描述: 当给定入射方向i和法线方向n时,reflect函数可以返回反射方向。 Shader代码 Shader "Custom/Chapter6-SpecularVertexLevel" { Properties { //...

阅读全文>>

标签: Shader

评论(0) 浏览(3898)

Unity中的环境光和自发光

作者:追风剑情 发布于:2016-9-9 22:32 分类:Shader

在标准光照模型中,环境光和自发光的计算是最简单的。 在Unity5中,场景中的环境光可以在Windows->Lighting->Ambient Source/Ambient Color/Ambient Intensity中控制。 在Unity4中,场景中的环境光可以在Edit->Render Settings中控制。 在Shad...

阅读全文>>

标签: Shader

评论(0) 浏览(13754)

漫反射——半兰伯特(Half Lambert)光照模型

作者:追风剑情 发布于:2016-9-9 22:16 分类:Shader

广义的半兰伯特光照模型公式: 绝大多数情况下,α和β的值均为0.5,即公式为: 半兰伯特Shader代码 Shader "Custom/Chapter6-HalfLambert" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) } ...

阅读全文>>

标签: Shader

评论(0) 浏览(9393)

漫反射——逐像素光照

作者:追风剑情 发布于:2016-9-8 23:26 分类:Shader

      逐像素光照可以得到更加平滑的光照效果。但是,即便使用了逐像素漫反射光照,有一个问题仍然存在。在光照无法到达的区域,模型的外观通常是全黑的,没有任何明暗变化,这会使模型的背光区域看来就像一个平面一样,失去了模型细节表现。实际上我们可以通过添加环境光来得到非全黑的效果,但即便这样仍然无法解决背光面明暗一样的缺点。为此,有一种改善技术被提出来,这就是半兰伯特(H...

阅读全文>>

标签: Shader

评论(0) 浏览(3783)

漫反射——逐顶点光照

作者:追风剑情 发布于:2016-9-8 1:09 分类:Shader

兰伯特光照模型Shader代码之逐顶点光照 Shader "Custom/Chapter6-DiffuseVertexLevel" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) } SubShader { pass{ Tags { "LightMode"="ForwardBase" } ...

阅读全文>>

标签: Shader

评论(0) 浏览(3384)

总结

作者:追风剑情 发布于:2016-9-4 12:20 分类:Shader

      虽然标准光照模型仅仅是一个经验模型,也就是说,它并不完全符合真实世界中的光照现象。但由于它的易用性、计算速度和得到的效果都比较好,因此仍然被广泛使用。而也是由于它的广泛使用性,这种标准光照模型有很多不同的叫法。例如,一些资料中称它为Phong光照模型,因为裴祥风(Bui Tuong Phong)首先提出了使用漫反射和高光反射的和来对反射光照进行建...

阅读全文>>

标签: Shader

评论(0) 浏览(3371)

逐像素还是逐顶点

作者:追风剑情 发布于:2016-9-4 12:06 分类:Shader

      前面,我们给出了基本光照模型使用的数学公式,那么我们在哪里计算这些光照模型呢?通常来讲,我们有两种选择:在片元着色器中计算,也被称为逐像素光照(per-pixel lighting);在顶点着色器中计算,也被称为逐顶点光照(per-vertex lighting)。       在逐像素光照中,我们会以每...

阅读全文>>

标签: Shader

评论(0) 浏览(6306)

高光反射

作者:追风剑情 发布于:2016-9-4 11:06 分类:Shader

这里的高光反射是一种经验模型,也就是说,它并不完全符合真实世界中的高光反射现象。它可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是有光泽的,例如金属材质。 计算高光反射需要知道的信息比较多,如表面法线、视角方向、光源方向、反射方向等。我们假设这些矢量都是单位矢量。 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第四个矢量——反射...

阅读全文>>

标签: Shader

评论(0) 浏览(3826)

漫反射

作者:追风剑情 发布于:2016-9-4 10:35 分类:Shader

      漫反射光照是用于对那些被物体表面随机散射到各个方向的辐射度进行建模的。在漫反射中,视角的位置是不重要的,因为反射是完全随机的,因此可以认为在任何反射方向上的分布都是一样的。但是,入射光线的角度很重要。 漫反射光照符合兰伯特定律(Lambert's law):反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。因此,漫反射部分的计...

阅读全文>>

标签: Shader

评论(0) 浏览(3876)

自发光

作者:追风剑情 发布于:2016-9-4 10:30 分类:Shader

      光线也可以直接由光源发射进入摄像机,而不需要经过任何物体的反射。标准光照模型使用自发光来计算这个部分的贡献度。它的计算也很简单,就是直接使用了该材质的自发光颜色: Cemissive=Memissive       通常在实时渲染中,自发光的表面往往并不会照亮周围的表面,也就是说,这个物体并不会被当成一个光源。Unit...

阅读全文>>

标签: Shader

评论(0) 浏览(2808)

环境光

作者:追风剑情 发布于:2016-9-4 10:23 分类:Shader

      虽然标准光照模型的重点在于描述直接光照,但在真实世界中,物体也可以被间接光照(indirect light)所照亮。间接光照指的是,光线通常会在多个物体之间反射,最后进入摄像机,也就是说,在光线进入摄像机之前,经过了不止一次的物体反射。       在标准光照模型中,我们使用了一种被称为环境光的部分来近似模拟间接光...

阅读全文>>

标签: Shader

评论(0) 浏览(3116)

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号