zoukankan      html  css  js  c++  java
  • Unity3d Shader开发(三)Pass(Color, Material, Lighting )

    材质和灯光参数被用于控制内置顶点光照。顶点光照是Direct3D/OpenGL标准的按每顶点计算的光照模型。光照打开时,光照受材质块,颜色材质和平行高光命令的影响。

    每像素光照常被实现为自定义顶点/片面程序,并且不使用顶点光照。这种情况下,你不会使用到任何在这里描述的命令,相反,在你完成光照,贴图和任何其他动作时,你需要定义自己的vertex and fragment programs 。

     

    顶点颜色和灯光是对任何已渲染过后的几何体所添加的第一步效果。这个操作处在顶点级别,用于计算在纹理被应用之前被使用的基础颜色。

    Syntax 语法

    顶层命令控制是否采用固定函数光照,和一些控制选项。主要是在Material Block描述这些设置,细节如下。

    Color Color
    设定对象的纯色。颜色即可以是括号中的四值(RGBA),也可以是被方框包围的颜色属性名。
    Material { Material Block }
    材质块被用于定义对象的材质属性。
    Lighting On | Off
    定义材质块中的设定是否有效,你必须使用Lighting On 命令开启光照,而颜色则通过Color命令直接给出。
    SeparateSpecular On | Off
    这个命令会添加高光光照到着色器通道的末尾,因此贴图对高光没有影响。只在光照开启时有效。
    ColorMaterial AmbientAndDiffuse | Emission
    使用每顶点的颜色替代材质中的颜色集。AmbientAndDiffuse 替代材质的阴影光和漫反射值;Emission 替代 材质中的光发射值。

    Material Block 材质块

    包含材质如何和光线产生作用的设定。这些属性都是可以被忽略的,默认为值都被设定为黑色(不产生作用)

    Diffuse Color
    漫反射颜色构成。这是对象的基本颜色。
    Ambient Color
    环境色颜色构成.这是当对象被RenderSettings. 中设定的环境色所照射时对象所表现的颜色。
    Specular Color
    对象反射高光的颜色。
    Shininess Number
    加亮时的光泽度,在0和1之间。0的时候你会发现更大的高亮也看起来像漫反射光照,1的时候你会获得一个细微的亮斑。
    Emission Color
    自发光颜色,当不被任何光照所照到时,对象的颜色

    打在对象上的完整光照颜色最终是:

      Ambient * RenderSettings ambient setting +
      (Light Color * Diffuse + Light Color * Specular) + Emission

     

    方程式的灯光部分(带括号)对所有打在对象上的光线重复使用。典型情况是你希望将漫反射和阴影光保持一致(所有内置Unity着色器都是如此)。

     


     

    实例

    渲染的对象将保持纯红:

     

    Shader "Solid Red" {
        SubShader {
            Pass { Color (1,0,0,0) }
        }
    }

     

    将对象涂成白色并应用顶点光照的标准着色器:

    Shader "VertexLit White" {
        SubShader {
            Pass {
                Material {
                    Diffuse (1,1,1,1) //对象的基本颜色为白色
                          Ambient (1,0,0,1) //环境色所照射时对象所表现的颜色为红色
                }
                Lighting On
            }
        }
    }

    使材质颜色作为材质检视面板可视的属性的着色器扩展版本:

    Shader "Custom/MyShader" {
        Properties {
            _Color ("Main Color", COLOR) = (1,1,1,1)
            _AmbientColor("Ambient Color",COLOR) =(0,1,0,1)
        }
        SubShader {
            Pass {
                Material {
                    Diffuse [_Color]
                    Ambient [_AmbientColor]
                }
                Lighting On
            }
        }
    }

     

    最后,一个完全齐备的顶点光照着色器(参考SetTexture 页面)

     

    Shader "Custom/MyShader" {
       Properties {
                  _Color ("Main Color", Color) = (1,1,1,1)
                  _SpecColor ("Spec Color", Color) = (1,1,1,1) 
                  _Emission ("Emmisive Color", Color) = (0,1,0,0)
                  _Shininess ("Shininess", Range(0.01, 1)) = 0.7 
                  _MainText("Base (RGB)", 2D) = "white" {}
             }
         SubShader {
                  Pass {    // 渲染通道的列表,材质块 
                        Material 
                        {               
                            Diffuse [_Color]    // 对象的基本颜色。          
                            Ambient [_Color]    // 环境色所照射时对象所表现的颜色
                            Shininess [_Shininess]    // 亮度设置,加亮时的光泽度
                            Specular [_SpecColor]    // 对象反射高光的颜色
                            Emission [_Emission]        // 自发光色,当不被任何光照所照到时,对象的颜色
                        }
                        Lighting On
                        // 这个命令会添加高光光照到着色器通道的末尾 //
                        SeparateSpecular On
                  SetTexture [_MainText]
                        {    
                               Combine texture * primary double, texture * primary
                        }
                 }
                }
    }

     

     

  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/martianzone/p/3341297.html
Copyright © 2011-2022 走看看