【Unity Shaders】概述及Diffuse Shading介绍

原创 2013年12月03日 17:34:26

本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。

这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。

========================================== 分割线 ==========================================



概述


几个月以前我就一直在找关于Unity Shader相关的资料,大三的时候有一门叫《计算机图形学》,让我觉得如果游戏程序员要从beginner成长为advancer,就必须了解底层渲染的一些知识。

Unity3D无疑是一个非常出色的游戏引擎,它让很多独立开发者真正能够独立开发一款让自己满意的游戏,而不需要考虑那些烦人的细节,正如Unity宣称的那样,让他们来做那些令人抓狂的事情吧!但是,在我们制作游戏的时候,经常会让游戏带有明显的“made in Unity”的感觉:明显的锯齿,糟糕的游戏性能,不真实的场景等等。当然这不是Unity引擎的错误,我相信它提供了很多强大的优化支持,支持很多自学者没有接触和学习这些高级技巧,就制作出了那样画面粗糙的游戏。

像育碧、盛大这种大型游戏公司,还是非常看重程序员对计算机图形学方面的知识,因为他们面向的对象是广大PC机,对画面和性能都有非常高的要求。而对于手机游戏,虽然现在手机硬件对渲染的支持还不是非常广泛,但是我们有理由相信,在这个发展迅速的时代,手机硬件的支持已经不再是梦想,手机游戏对画质的要求也一定越来越高。掌握shaders的原理和技术,我想是一个想要成长为更高level的游戏程序员不可或缺的部分。

哈,就在前两天,我发现了一本书,《Unity Shaders and Effects Cookbook》,这是我目前发现的第一本系统讲述Unity Shaders的书籍,我当时高兴坏了,毕竟之前都只是查看手册和一些论坛里的留言,非常零散。看了评论也是非常不错,因此决定把这本书当成以后学习Unity Shader的资料,并在博客里记录下学习的体会。

这里是本书所有的插图,先看看过个瘾吧!

这里是本书所需的代码和资源。

在这篇文章里,先对Diffuse Shading开个头。


Diffuse Shading 介绍


可以说Diffuse Shading是所有高级Shader的基础。几乎每个讲计算机图形渲染的书的第一章都是这个。在过去的计算机图形硬件中,这是通过固定渲染流水线来完成的。学过OpenGL等类似语言的人都会知道,以前是通过一些固定接口设置渲染属性来调节渲染细节的。而现在,那种固定编程的模型基本已经弃用,我们可以通过Cg更灵活地控制渲染细节。
Diffuse,即漫反射,可以想象成太阳光照射到某一个粗糙平面上时,该平面向四面八方都会反射光线,这些光线中的某些光线进入我们的眼睛,从而使我们看到了这个平面。一个基本的漫反射光照模型,需要包括以下几个部分:一个反射颜色(emissive color,可以理解成平面本身的颜色), 一个环境光颜色(ambient color,可以理解成光源的颜色), 以及计算来自所有光源的光线和。
  1. 创建一个基本的Surface Shader
  2. Surface Shader添加properties
  3. Surface Shader中使用properties
  4. 创建一个自定义的diffuse lighting model(漫反射光照模型)
  5. 创建一个Half Lambert lighting model(半兰伯特光照模型)
  6. 创建一个ramp texture来控制diffuse shading
  7. 使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
下面的章节中,首先讲解完整的漫反射光照模型,然后会讲述使用2D texture来实现更复杂的漫反射模型的技巧。

下面给出了本章中主要实现的渲染效果:

  1. 最基本的漫反射光照模型(上述前四个小节):

  2. 半兰伯特光照模型(第5节):

  3. 使用一维渐变图控制光照模型(第6节):

  4. 使用二维渐变图控制光照模型(第7节):


结束语


呼呼,希望自己能坚持下来,也希望对大家有所帮助。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【Unity Shaders】Diffuse Shading——创建一个自定义的diffuse lighting model(漫反射光照模型)

上一篇中,我们学了怎样在surface shader(这里即指surf函数)中使用自己定义的Properties变量。而在之前的学习中,我们实际上使用的都是Unity内置的Diffuse Lighti...

【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader

这一次的工作非常简单,我们主要是为了了解Unity Shaders的基本工作原理。 准备工作 创建一个新的Unity Project在Assets目录下新建一个文件夹:Shaders在Assets...

在VS2015中让UnityShader脚本关键词高亮

在写Unity中的shaderlab时,习惯了VS的同志们,想实现在VS2012-2015中显示Shader 关键字高亮,这里有一个方法。 效果如图: 这需要一个工具:在我的资源里面 若是2015...
  • leoysq
  • leoysq
  • 2016年05月18日 21:28
  • 2833

【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)

终于到了Diffuse Shading一章的最后一篇了!回忆一下,在上一篇中,一共学习了两种改善漫反射光照的方法:一种是完全根据感性认识,使用Half Lembert方法改变了光照值区间,使得物体颜色...

【Unity5.x Shaders】最基本的Surface Shader-Diffuse shader以及Surface中的三种输出结构

某些物体可能具有均匀的颜色和光滑的表面,但光滑程度不足以照射反射光。 这些哑光材料最好用Diffuse Shader。 在现实世界中,不存在纯diffuse materials Di...

【Unity Shader】概述以及Diffuse shader和unity5新功能Standard shader

一:Diffuse shader介绍: Diffuse,即漫反射,可以想象成太阳光照射到某一个粗糙平面时,该平面向四面八方都会反射光线,这些光线中的某些光线会进入我们的眼睛,从而使我们看到这个平面,...

问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)

68.1.2.1 漫反射光 前面,我们有这么一张图:   为了突出光子和表面里面的原子相互作用,还是用画得更为夸张的图好了。(注意:只关注蓝色光线。) 关于“漫反射光”(上图中的蓝色反射光)...

【Unity Shaders】Lighting Models 介绍

本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。 这里是本书所有的插图。这里是本书所需的代码和资源(当然...

Unity 中用 Vertex & Fragment Shader 实现 surface shader 中的 Diffuse 和 Decal

自己体验了以后发现surface shader确实是隐藏了好多好多的内部实现呀,像我没有考虑的多光源,阴影,衰减等问题,在surface shader中都是被隐藏实现好了的,而且还是多平台适配的,Ve...
  • WPAPA
  • WPAPA
  • 2016年05月14日 00:17
  • 1305

Unity Shader-兰伯特光照模型与Diffuse Shader

一.简介 学了一段时间shader,然而一直在玩后处理,现在终于下定决心钻研一下真正的带光照的shader。从Diffuse到Specular,到Bump等等。一个游戏的画面好坏,很大程度上取决于...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Unity Shaders】概述及Diffuse Shading介绍
举报原因:
原因补充:

(最多只允许输入30个字)