• [小明学Shader]3.自定义光照,半拉姆伯特


    • 一.Lambert

    在SubShader中的CG片段里,需要指定光照函数,一般为Lambert,即默认的拉姆伯特

    #pragma surface surf Lambert

    Lambert的函数是默认的,代码同下:

    inline float4 LightingBaseDiffuse(SurfaceOutput s,fixed3 LightDir,fixed atten){
                float lightDif=max(0,dot(s.Normal,LightDir));
                
                float4 col;
                col.rgb=s.Albedo*_LightColor0.rgb*(lightDif*atten*2);
                col.a=s.Alpha;
                
                return col;
            }

    其中BaseDiffuse是可以改的,如果我们将第一句的声明改为别的,那么与其对应的LightingXXX就是光照函数.

    • 二.HalfLambert

    半拉姆伯特是经典的一种光反射算法,用来防止图像过暗,代码如下

    Shader "Custom/11.26.1" {
        Properties {
            _MainTex ("Base (RGB)", 2D) = "white" {}
        }
        SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 200
            
            CGPROGRAM
            #pragma surface surf HalfLamBert
    
            sampler2D _MainTex;
    
            struct Input {
                float2 uv_MainTex;
            };
    
            void surf (Input IN, inout SurfaceOutput o) {
                half4 c = tex2D (_MainTex, IN.uv_MainTex);
                o.Albedo = c.rgb;
                o.Alpha = c.a;
            }
            
            inline float4 LightingHalfLamBert(SurfaceOutput s,fixed3 lightDir,fixed atten){
                float difLight=max(0,dot(s.Normal,lightDir));
                difLight=0.5*difLight+0.5;
                
                float4 col;
                col.rgb=s.Albedo*_LightColor0.rgb*(difLight*atten*2);
                col.a=s.Alpha;
                
                return col;
            }
            ENDCG
        } 
        FallBack "Diffuse"
    }

    效果如图:

    偏亮的那个就是进行了增亮处理.

  • 相关阅读:
    黑马乐优商城项目总结
    SpringDataJpa学习(3)——SpringDataJpa的多表映射和动态查询
    SpringDataJpa学习(2)——SpringDataJpa的单表使用
    SpringDataJpa学习(1)——Jpa学习
    个人博客06
    个人博客05
    个人博客04
    典型用户和用户场景描述
    个人博客03
    个人博客02
  • 原文地址:https://www.cnblogs.com/WongSiuming/p/4997420.html
Copyright © 2020-2023  润新知