zoukankan      html  css  js  c++  java
  • 【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、半兰伯特对两个方向进行修正的结果和异同。


    待续。。。

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314669.html
Copyright © 2011-2022 走看看