博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Diffuse贴图+Lightmap+Ambient
阅读量:4982 次
发布时间:2019-06-12

本文共 2523 字,大约阅读时间需要 8 分钟。

  shader里面光照计算毕竟还是比较复杂的,于是想到下面的性能相对好一些的方案。

  美术提供一张Diffuse贴图,一张lightmap贴图,然后在应用一个自定义的全局的环境光效果,来模拟静态的光照。

  每个模型单独提供自己的lightmap贴图,而不是使用场景烘焙出来的包含所有物体的liangmap,这样做的好处是比较灵活,同一个物体在不同地方提供不同的lightmap贴图即可。

Shader "James/Scene/Diffuse Lightmap"{    Properties    {        _MainTex ("Base (RGB)", 2D) = "white" {}        _Lightmap ("Light Map", 2D) = "white" {}    }        SubShader    {        Tags { "RenderType"="Opaque" "Queue"="Geometry" }        LOD 200                Pass        {            Tags { "LightMode"="ForwardBase" }            Lighting Off                        CGPROGRAM            #pragma fragmentoption ARB_precision_hint_fastest                        #pragma vertex vert            #pragma fragment frag            #pragma multi_compile_fog                        #include "UnityCG.cginc"            #include "JamesLighting.cginc"            uniform sampler2D _MainTex;            uniform half4 _MainTex_ST;            UNITY_DECLARE_TEX2D(_Lightmap);            struct vertexIN_base            {                float4 vertex : POSITION;                float3 normal : NORMAL;                float2 texcoord : TEXCOORD0;                float2 uv2 : TEXCOORD1;            };                        struct v2f_base            {                float4 pos : SV_POSITION;                half4  uv : TEXCOORD0;                UNITY_FOG_COORDS(1)            };            inline half3 JamesDecodeLightmapDoubleLDR( half4 color)            {                #if defined(UNITY_COLORSPACE_GAMMA)                    return color.rgb * 2;                #else                    return color.rgb * 4.59;                #endif            }            v2f_base vert(vertexIN_base v)            {                v2f_base o;                o.pos = UnityObjectToClipPos(v.vertex);                o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);                o.uv.zw = v.uv2;                UNITY_TRANSFER_FOG(o,o.pos);                return o;             }                        fixed4 frag(v2f_base i) : COLOR            {                half4 bakedColorTex = UNITY_SAMPLE_TEX2D(_Lightmap, i.uv.zw);                half3 bakedColor = JamesDecodeLightmapDoubleLDR(bakedColorTex);                half4 mainColor = tex2D(_MainTex, i.uv.xy);                half4 clr = mainColor;                clr.rgb *= bakedColor + (AMBIENT_COLOR).rgb;                UNITY_APPLY_FOG(i.fogCoord,clr);                return clr;            }            ENDCG        }    }    FallBack Off}

 

转载于:https://www.cnblogs.com/sifenkesi/p/9971651.html

你可能感兴趣的文章
Floyd算法解说
查看>>
浅谈C++非多态单继承数据布局
查看>>
cogs 1396. wwww
查看>>
MYSQL数据库优化
查看>>
Linux 新手学习任务
查看>>
内部类对象的获取!《Thinking in Java》随笔018
查看>>
[MongoDB]Python 操作 MongoDB
查看>>
antd 表格隔行变色
查看>>
springboot-helloworld实现
查看>>
关于CocoaSocket
查看>>
面试准备专题——SOA架构
查看>>
前端 CSS padding 目录
查看>>
android无缝切换播放器,KingPlayer一个专注于 Android 视频播放器的基础库,支持无缝切换内核。...
查看>>
layui中的html怎样接收后台的值,layui框架与SSM前后台交互的方法
查看>>
Skulpt在线模拟运行Python工具
查看>>
287.软件测试概述
查看>>
297.白盒测试
查看>>
新闻客户端的突破与创新
查看>>
网络通信引擎ICE的使用
查看>>
js滚动事件实现滚动触底加载
查看>>