本系列主要参考《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. Android POJO 转换器 —> RapidOOO

    博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...

  2. Python笔记十一(迭代器)

    这里我们要学会Iterable和Iterator. 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator f ...

  3. jQuery 遍历 – 同胞(siblings)

    同胞拥有相同的父元素. 通过 jQuery,您能够在 DOM 树中遍历元素的同胞元素. 在 DOM 树中水平遍历 有许多有用的方法让我们在 DOM 树进行水平遍历: siblings() next() ...

  4. Docker容器如何互联

    容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式. 该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息. 自定义容器命名 连接系统依据容器的名称来执 ...

  5. 20160226.CCPP体系详解(0036天)

    程序片段(01):01.多线程.c+02.多线程操作.c 内容概要:多线程 ///01.多线程.c #include <stdio.h> #include <stdlib.h> ...

  6. 20160215.CCPP体系详解(0025天)

    程序片段(01):01.Malloc.c 内容概要:Malloc拓展 #include <stdio.h> #include <stdlib.h> //01.内存伸缩函数: / ...

  7. 最大熵模型The Maximum Entropy

    http://blog.csdn.net/pipisorry/article/details/52789149 最大熵模型相关的基础知识 [概率论:基本概念CDF.PDF] [信息论:熵与互信息] [ ...

  8. [Centos7] bbc tools安装

    作者 运维开发群 @军爷,bbc是什么? 请参考 Brendan大爷的博客 Linux 4.9's Efficient BPF-based Profiler 更新到最新 CentOS 7.3 1611 ...

  9. maven配置详解

    什么是pom?     pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的 ...

  10. Linux proc/pid/task/tid/stat文件详解

    [root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 419 ...