• 和Keyle一起学ShaderForge – Custom Blinn-Phong


    sf_logo

    用了两天时间精心准备了这篇教程,快来和Keyle一起学ShaderForge,玩起来~

    本章目录

    1.什么是Blinn-Phong光照模型

    2.如何使用自定义光照模型

            2.1 ShaderForge内置光照模型

    3.如何使用自定义类似光照实现Blinn-Phong的光照模型

    4.完善我们的自定义Shader

            4.1 我们先模拟出一个Diffuse的算法
            4.2合并(通过加法),得到我们想要的结果
            4.3 优化 去除重复声明的变量 如同Normal Direction
            4.4添加法线贴图
            4.5添加Emission效果
            4.7 最终效果

    1.什么是Blinn-Phong光照模型 ?

         要想知道Blinn-Phong是什么,首先你要知道什么是Phong光照模型,Phong光照模型是真实图形学中提出的第一个有影响的光照明模型,该模型只考虑物体对直接光照的反射作用,认为环境光是常量,没有考虑物体之间相互的反射光,物体间的反射光只用环境光表示。Phong光照模型属于简单光照模型,详情移步到 百科 ,而 Blinn-Phong 则是对Phong的加强,具体代码我就不复制上来了,为了提高我们的业务水准可以用一句话来概括与改进之后的区别:

    Blinn-Phong模型与Phong模型的区别是,把dot(V,R)换成了dot(N,H),其中H为半角向量,位于法线N和光线L的角平分线方向。

     

    Blinn-Phong模型可表示为:

    Ispecular = Ks*Is* pow(( dot(N,H), n )

    其中H = (L + V) / | L+V |,计算H比计算反射向量R更快速。

    左图是 Phong光照模型 的典型例子 ,右图是采用 Blinn-Phong 光照模型 的例子

    22172819-202cb4692a6d4162a39d6ae5226218c3         31173743-8f8494efb7f843d6b0b480f4f17a60e2

    2.如何使用自定义光照模型

          选中属性栏 Lighting Unlit/Custom更改后的效果如下 Diffuse将被禁用,此时将不受环境光照影响

    imageimage

    2.1 ShaderForge内置光照模型

    image

    Amblient Light 环境光

    顾名思义,不受任何角度,位置关系影响,直接取环境光的色值着色

    image

    Half Direction

    输出的颜色与入射光线反射出的角度有关

    image

    Light Attenuation

    光衰减, 混合 Light Attenuation和LightColor效果,美极了

    image

    Light Ccolor

    输出场景中光的颜色

    image

    Light Direction

    表达的东西和Half Direction一样,效果是Half Direction * 2,光源的角度变换影响很大,与光源相反方向直接就黑掉了,half Direction的时候还保留色值/2的的颜色

    image

    Light Position

    忽略光源按照Y轴旋转角度的变化,反之如果是X轴忽略光源X轴变化,XYZ为都不忽略,默认Z轴发生Rotation时不会有变化(围绕自身转Z轴不动,没有发生位移)

    image

    效果如下

    image

    3.如何使用自定义类似光照实现Blinn-Phong的光照模型

          我们根据如下公式,在ShaderForge中做出如下实现

    Ispecular = Ks*Is* pow(( dot(N,H), n )

    image

    核心实现效果如下

    image

    4.完善我们的自定义Shader

          4.1 我们先模拟出一个Diffuse的算法

    image

          4.2合并(通过加法),得到我们想要的结果

    image

           

          4.3 优化 去除重复声明的变量 如同Normal Direction

    image

           4.4添加法线贴图

    添加法线贴图并在Normal Dir的复选框内打勾,让贴图与法线贴图对齐,官方翻译如下

    The Perturbed checkbox makes it use the normals after having applied the "Normal" input of the main node, such as a normal map.

    右键查看大图吧~ 现在你会发现所有的图形都被扭曲了,很形象(包括了法线信息)

    image

         4.5添加Emission效果

    在上一篇文章中我已经阐述过Emission节点的效果,我们用上上文讲到的知识,使用Amblient Light(环境光),来模拟在环境光照下的效果

    首先我希望你现在已经知道了环境光是个什么样的概念(不要辜负我写那么长的说明),纯粹的光,那么我们要做成贴图反光的效果则要将环境光与贴图混合

    image

          4.7 最终效果

     

    image

    如果你觉得效果不明显,那我们换一张图吧

    image

    大功告成!举起我们的手,让那些还在苦苦手写Shader的人们颤抖吧~

  • 相关阅读:
    深度残差网络的理解
    迪士尼收购福克斯,传媒巨头江山瓦解?
    穷人的噩梦:来自金融公司的高利贷
    智能家居沦为家暴的“新工具”?
    墨西哥“死亡选举”导致近 150 名政客被杀
    推荐系统
    多线程编程
    two sum
    python 操作mysql
    天才大猩猩可可去世,享年 46 岁
  • 原文地址:https://www.cnblogs.com/Keyle/p/4451887.html
Copyright © 2020-2023  润新知