Unity3D教程宝典之Shader篇:第十六讲自定义光照模型

转载自风宇冲Unity3D教程学院

 

十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识。这一讲说的是如何写光照模型。

自定义光照模型主要分为4步:

(0)架设框架,填写需要的参数

(1)计算漫反射强度

(2)计算镜面反射强度

(3)结合漫反射光与镜面反射光

代码配有中文注释,配合上上讲的光照公式,一步一步实现即可。

//Author: 风宇冲
Shader "Custom/T_customLightModel" {
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }

    Subshader
    {
        //alpha测试,配合surf中的o.Alpha = c.a;
        AlphaTest Greater 0.4

        CGPROGRAM

        #pragma surface surf lsyLightModel 

        //命名规则:Lighting接#pragma suface之后起的名字
        //lightDir :点到光源的单位向量   viewDir:点到摄像机的单位向量   atten:衰减系数
        float4 LightinglsyLightModel(SurfaceOutput s, float3 lightDir,half3 viewDir, half atten)
        {
            float4 c;

            //(1)漫反射强度
            float diffuseF = max(0,dot(s.Normal,lightDir));

            //(2)镜面反射强度
            float specF;
            float3 H = normalize(lightDir+viewDir);
            float specBase = max(0,dot(s.Normal,H));
            // shininess 镜面强度系数,这里设置为8
            specF = pow(specBase,8);

            //(3)结合漫反射光与镜面反射光
            c.rgb = s.Albedo * _LightColor0 * diffuseF *atten + _LightColor0*specF;
            c.a = s.Alpha;
            return c;
        }

        struct Input
        {
            float2 uv_MainTex;
        };

        void vert(inout appdata_full v)
        {
            //这里可以做特殊位置上的处理
        }
        sampler2D _MainTex;

        void surf(Input IN,inout SurfaceOutput o)
        {
            half4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }

        ENDCG
    }
}

  

时间: 2024-10-26 19:53:54

Unity3D教程宝典之Shader篇:第十六讲自定义光照模型的相关文章

Unity3D教程宝典之Shader篇:第六讲TexGen

转载自风宇冲Unity3D教程学院 介绍 TexGen全称是Texture coordinate generation,即纹理坐标生成.本来模型的纹理坐标是在做模型的时候赋予各个顶点的.但是有时模型表面非常复杂,或者要做一些特效时,就需要其他方法来生成纹理坐标. TexGen主要用于Fixed Function Shader. 有如下模式ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal .  该函数直接对应OpenGL的tex

Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Vertex and Fragment Shader例子二,制作一个自动旋转的3D地球. 下载美丽的地球工程 原理是 2张贴图,一张地球图,一张云层分布图(1)通过uv.x即纹理坐标的横轴与时间相乘,产生球在移动的效果 (2)通过地球和云的颜色值叠加形成 层叠 的效果.注意:贴图的'Wrap Mode'属性一定要设置成Repeat                              关于Wrap Mode当Wrap Mode为Cl

Unity3D教程宝典之Shader篇:第八讲 Why CG?

转载自风宇冲Unity3D教程学院 Shader有Fixed Function, Vertex and Fragment, Surface, 而Vertex and Fragmen里又有CG和GLSL两种.为什么选CG做重点讲解呢? Fixed Function:老式的固定管线,实现功能有限,不必多说.CG:跨平台首选,Unity3d能直接把CG编译成GLSL.GLSL:支持Mac,iOS,安卓.不支持Windows.Unity3d不能把GLSL编译成CG.不适合广泛的跨平台.Surface:属

Unity3D教程宝典之Shader篇:第十一讲剔除及深度测试

转载自风宇冲Unity3D教程学院 Culling阴影面剔除 Culling阴影面剔除是一种优化技术.所有的多边形都有正反两面,而你永远只能看见其中一面,不信的话拿张纸板或者一面镜子看看你能不能同时看到两面.通常多边形面向屏幕里面的背面,我们看不见,所以会将该面剔除. Cull Off 关闭阴影面剔除 Cull Back 剔除背面 Cull Front 剔除正面 Depth Testing深度测试 Depth Testing:深度测试,也叫深度缓冲.只有最靠近观察者的物体会被绘制.深度即Z,该值

Unity3D教程宝典之Shader篇:第二十一讲视差贴图

转载自风宇冲Unity3D教程学院 视差贴图的展示 图一:注意轮胎印中的自阴影,实际上路面只是一个平地 图二:孤岛危机的成功,视差贴图功不可没 图三:视差贴图同样可用于人物,装备及道具 本讲分四个部分一:优点特性 二:基本原理 三:使用方法 四:视差计算 第一部分 视差贴图的优点及特性 上一讲讲了法线贴图.法线贴图,无论是RGB法线贴图还是DXT5nm,都有一个缺点就是.越接近面的水平视角,则画面越不真实.因为使用法线贴图后,凸起的部分只是看起来凸起而已,网格模型却并没有凸起依然是平的.正常来说

Unity3D教程宝典之Shader篇:第七讲流程图

转载自风宇冲Unity3D教程学院 步骤如图: 图一:坐标系变换图二:流水线图形图三:Unity3D渲染流程图四:光栅操作(又名光栅化操作) 图一:坐标系变换图二:流水线图形 图三:Unity3D渲染流程 图四:光栅操作

Unity3D教程宝典之Shader篇:第十七讲Heightmap与地形

转载自风宇冲Unity3D教程学院 Heightmap Heightmap, 高度图.通常Heightmap高度图储存成Gray Scale Image也就是常说灰度图.越白该点就越高,纯黑表示最低点,纯点表示最高点. 8位灰度图有256阶.16位灰度图有65536阶.如果依然精度不够用的话(例如绘制大型场景),那么可以使用标准的RGB位图来储存高度图,那么精度就是256的3次方=16777216阶.同理还可以再升为RGBA. Heightmap可以用3D软件(Unity的地形也可以)来绘制,或

Unity3D教程宝典之Shader篇:第十二讲 Alpha测试

转载自风宇冲Unity3D教程学院 引言:本讲和下一讲主要讲Alpha即透明通道有关的内容.RGBA,其中最终在屏幕上显示的只有RGB即 红绿蓝组成的颜色,Alpha并没有任何颜色显示.A只是辅助颜色运算特别是多图层运算而已.例如在单图层的情况下(1,1,1,0.8)输出的是(1,1,1)*0.8即 浅灰色(0.8,0.8,0.8),和(0.8,0.8,0.8)是等价的.但是假如不再是单图层而背景为绿色(0,1,0,1)的时候,(0.8,0.8,0.8)就不知道怎么去运算了,而(1,1,1,0.

Unity3D教程宝典之Shader篇

教程目录 基础讲:Shader学习方法基础讲:基础知识特别讲:常见问题解答特别讲:CG函数 第一讲: Shader总篇第二讲: Fixed Function Shader 第三讲: Vertex&Fragment Shader基础 第四讲: 制作一个美丽的地球第五讲:LOGO闪光效果 第六讲:TexGen第七讲:流程图第八讲:Why CG?第九讲:Render Path第十讲:雾化第十一讲:阴影面剔除及深度测试第十二讲:alpha测试第十三讲:alpha混合第十四讲:Surface Shader