当前位置: 首页 > news >正文

【Unity Shaders】《Unity Shaders and Effects Cookbook》总结篇


我的唠叨


不知不觉,从发表第一篇关于《Unity Shaders and Effects Cookbook》已经快十个月了。一开始的初衷就是学习笔记,毕竟将来回过头去看的时候,再看英文难免有种急躁感。从一开始几乎只有我一个人在奋斗,到现在时不时有人学习留言或者发邮件鼓励我,能有人和我一起学习我已经很开心了。谢谢所有鼓励和支持我的人~


我先说下我的博客里这个系列的特点~

  • 首先声明,这不是纯翻译,我的插图绝大部分都是在自己的Unity里面按步骤实践以后再截图放到博客里的。

  • 会对原文中的一些错误进行修正。

  • 会对原文中解释较少的部分增加自己的理解和扩展。

  • 原文里一些我觉得比较啰嗦的话我也会不再翻译出来赘述的。。。但我认为,就算没有那些一般人都是可以看懂的~

那么下面就是对这本书的看法啦~

优点:

  • 算是填补了国内外(对,没错,包括国外)关于Unity Shaders方面的空白。在这之前大多是依靠Unity文档、论坛和各种网站的资源学习的,而现在有了一个比较集中的书籍。在国外的网站上(例如packtpub和Amazon),这本书的评价是4星左右,是可以接受的分数了。

  • 包含的内容面还是比较广的。由基础的漫反射光照、镜面反射、Cubemap等等,到Cloth、Skin(Skin这个必须要吐槽。。。真的不像皮肤啊啊啊啊!),再到移动平台上的优化,如何使用Cg,以及最后关于画面特效的几个高级话题。对于初学者来说,这些内容还是比较丰富和有趣的。

  • 写Shader一直是一个很难而且不知道如何入手的事情,这本书给了一个简单而又不失有效的途径。


缺点:

  • 这本书有很多称不上经典的原因(当然已经很感谢作者了)。我感触最深的就是作者关于很多表层一下的知识介绍太少,有种浅尝辄止的感觉。比如Shader的pipeline等。而这些其实是非常重要的,知其然而不知其所以然是阻止很多程序员成长的最大元凶。如果要完全理解的话,还是要辅助看很多基础数据或文章,比如Nvidia关于Cg的教程等等。

  • 解释的部分有时太过简略。虽然有时候作者说的很简单,但其实对于初学者来说,“为什么要这样”的问题时常浮现在我的脑海里。。。当然其实很多时候写Shader是一个经验活,那些公式和系数就是长期时间下来的结果,没有太多的为什么。

  • 一些错误。比如作者关于变量类型的使用比较混乱,尤其是fixed的使用。我之后也要重新复习看一下。。。

  • 虽然叫cookbook,但是很多是不可以直接拿来用的。所以,这本书整体来说是一个入门书籍,让你了解一些Unity Shader的常见用处和语法。


内容总结



好啦,当做复习以及索引方便,下面是本书各章节内容的介绍和总结。


第一章 漫反射着色(Diffuse Shading)


Diffuse,即漫反射,可以想象成太阳光照射到某一个粗糙平面上时,该平面向四面八方都会反射光线,这些光线中的某些光线进入我们的眼睛,从而使我们看到了这个平面。一个基本的漫反射光照模型,需要包括以下几个部分:一个反射颜色( emissive color,可以理解成平面本身的颜色), 一个环境光颜色(ambient color,可以理解成光源的颜色), 以及计算来自所有光源的光线和。

1.1 创建一个基本的Surface Shader



如何新建一个Shader并使用Material。

1.2 向Surface Shader添加Properties


第一次解释了Properties块,如何添加新的property,不同类型property的声明方式。

1.3 在Surface Shader中使用Properties


第一次解释了怎样创建CGPROGRAM和Properties块中各变量的链接。

1.4 创建一个自定义的漫反射光照模型


如何在Surface Shader中使用非默认的光照函数,光照函数的几种类别,基本的漫反射光照模型(兰伯特光照模型)。

1.5 创建一个半兰伯特光照模型


半兰伯特听起来很高端,其实就是把物体背光面的亮度提高了,使光照范围从(0.0, 1.0)映射到了(0.5, 1.0)。

1.6 创建一个渐变纹理来控制漫反射着色


使用一维渐变纹理控制光照(即光照颜色就是采样后纹理上的某个像素)是非常常见的手法,在很多类型的Shader,如卡通风格的Shader中都非常常见。这种方法具有非常好的可变性。

1.7 使用二维渐变纹理来伪造一个双向反射分布函数


这节是上面两节内容的结合和扩展。双向,即两个方向,一个指入射光线的方向,一个指观察点的方向。之前的光照模型都是只使用了第一个方向,即入射光线的方向。给出了max、半兰伯特对两个方向进行修正的结果和异同。


待续。。。

转载于:https://www.cnblogs.com/xiaowangba/p/6314669.html

相关文章:

  • 如何将PPT转成Word格式?好用的格式转换工具!
  • [翻译] RSKImageCropper
  • 独热编码和dummy编码的作用
  • iOS绘图例2:增加Undo/Redo功能
  • grep简单用法及脚本基础篇
  • SysUtils.UpperCase、SysUtils.LowerCase - 大小写转换
  • 使用X-UA-Compatible来设置IE浏览器兼容模式
  • 区块链技术对未来的影响
  • Delphi 2009 新增的 Class Explorer
  • jar包和war包的区别:
  • 新手须知 C、C++和VC++之间的区别
  • Linux权限、用户以及文本处理的一些相关命令
  • git clone,git push,git pull
  • 对话巨杉核心研发团队:分布式数据库自研之路
  • 用NetHogs监控Linux每个进程的网络使用情况
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 78. Subsets
  • CSS 提示工具(Tooltip)
  • ES6核心特性
  • mockjs让前端开发独立于后端
  • 基于axios的vue插件,让http请求更简单
  • 自定义函数
  • mysql面试题分组并合并列
  • Python 之网络式编程
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # 飞书APP集成平台-数字化落地
  • #1015 : KMP算法
  • (0)Nginx 功能特性
  • (4)(4.6) Triducer
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)斐波那契Fabonacci函数
  • (二十四)Flask之flask-session组件
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)jQuery 基础
  • (转)程序员疫苗:代码注入
  • (转载)利用webkit抓取动态网页和链接
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET单元测试
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • @private @protected @public
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Angular] 笔记 21:@ViewChild
  • [APIO2012] 派遣 dispatching
  • [c#基础]DataTable的Select方法
  • [C++]四种方式求解最大子序列求和问题
  • [C++数据结构](22)哈希表与unordered_set,unordered_map实现
  • [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明
  • [iOS]如何删除工程里面用cocoapods导入的第三方库
  • [javaSE] 数据结构(二叉查找树-插入节点)