本系列主要参考《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. 最基本的漫反射光照模型(上述前四个小节):

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

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

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


结束语


呼呼,希望自己能坚持下来,也希望对大家有所帮助。

【Unity Shaders】概述及Diffuse Shading介绍的更多相关文章

  1. 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧

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

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

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

  3. 【Unity Shaders】Diffuse Shading——在Surface Shader中使用properties

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

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

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

  5. 【Unity Shaders】Diffuse Shading——向Surface Shader添加properties

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

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

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

  7. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  8. 【Unity Shaders】Lighting Models 介绍

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

  9. 【Unity Shaders】Reflecting Your World(反射吧!)介绍

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

随机推荐

  1. Go 语言递归函数

    递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } ...

  2. Docker其它安全特性

    除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等. Docker 当前默认只启用了能力机制. ...

  3. Lucene总结

    数据的分类 结构化数据:有固定类型或者有固定长度的数据 例如:数据库中的数据(mysql,oracle等), 元数据(就是windows中的数据) 结构化数据搜索方法: 数据库中数据通过sql语句可以 ...

  4. Bootstrap3 表格-基本表格

    为任意 <table> 标签添加 .table 类可以为其赋予基本的样式 - 少量的内补(padding)和水平方向的分隔线.这种方式看起来很多余!?但是我们觉得,表格元素使用的很广泛,如 ...

  5. 20160227.CCPP体系详解(0037天)

    程序片段(01):01.一对一模式.c+02.中介者模式.c+03.广播模式.c 内容概要:事件 ///01.一对一模式.c #include <stdio.h> #include < ...

  6. Django Model field reference

    ===================== Model field reference ===================== .. module:: django.db.models.field ...

  7. Linux 性能监测:Memory

    这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为 ...

  8. 初识RecyclerView

    初识RecyclerView 效果图 RecyclerView与ListView对比(官方) RecyclerView 小组件比 ListView 更高级且更具灵活性. 此小组件是一个用于显示庞大数据 ...

  9. XML Condition And

    <Target Name="CustomBuildStep" Condition="'@(CustomBuildStep)' != '' and '$(Select ...

  10. 转:LINUX/UNIX下的回车换行与WINDOWS下的区别

      今天,我总算搞清楚“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别了.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 3 ...