1. 效果图

2. 原理

烘焙出两组lightmap,并在shader中进行采样;最后插值输出混合结果。天空球也是同理可得。

3. 代码

3.1 shader

Shader "Unlit/lightMapChanging"
{
Properties {[NoScaleOffset]_SkyCube ("天空球", Cube) = "grey" {}_SkyCube2 ("天空球2", Cube) = "grey" {}
_Rotation ("水平旋转", Range(0.0, 360.0)) = 0.0[HDR]_TintCol ("染色", Color) = (1.0, 1.0, 1.0, 1.0)}SubShader {Tags {
"Queue"="Background"        // 调整渲染顺序"RenderType"="Background"   // 渲染类型改为背景"PreviewType"="Skybox"    // 预览类型改为天空球
}Cull OffZWrite OffPass {Name "SKY_FORWARD"CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"
// 参数uniform samplerCUBE _SkyCube;uniform samplerCUBE _SkyCube2;uniform float _Rotation;uniform float3 _TintCol;uniform float _lerp;// 输入结构struct VertexInput {float4 vertex   : POSITION;   // 顶点信息 Get✔};// 输出结构struct VertexOutput {float4 pos  : SV_POSITION;  // 屏幕顶点位置float3 posWS : TEXCOORD0;    // 世界空间顶点位置};float3 RotateAroundYInDegrees (float3 vertex, float degrees){float alpha = degrees * UNITY_PI / 180.0;float sina, cosa;sincos(alpha, sina, cosa);float2x2 m = float2x2(cosa, -sina, sina, cosa);return float3(mul(m, vertex.xz), vertex.y).xzy;}// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;                   o.pos = UnityObjectToClipPos(v.vertex);
o.posWS = RotateAroundYInDegrees(v.vertex, _Rotation);
return o;  }// 输出结构>>>像素float4 frag(VertexOutput i) : COLOR {float4 var_SkyCube = texCUBE (_SkyCube, i.posWS);float4 var_SkyCube2 = texCUBE (_SkyCube2, i.posWS);float3 final_skycube = lerp(var_SkyCube, var_SkyCube2, _lerp);float3 SkyCol = final_skycube * _TintCol;
return float4(SkyCol, 1.0);}ENDCG}
}
}
Shader "Unlit/cubeLightMap"
{Properties{_MainTex ("Texture", 2D) = "white" {}_LightMainTex1 ("LightMap1", 2D) = "white" {}_LightMainTex2 ("LightMap2", 2D) = "white" {}}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct v2f{float4 pos:POSITION;float2 uv:TEXCOORD0;float2 uv2:TEXCOORD1;};sampler2D _MainTex;sampler2D _LightMainTex1;sampler2D _LightMainTex2;uniform float _lerp;float4 _MainTex_ST; v2f vert (appdata_full v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = v.texcoord.xy;o.uv = TRANSFORM_TEX(o.uv,_MainTex);//光照贴图   o.uv2 = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;   return o;}fixed4 frag (v2f i) : COLOR{fixed4 col = tex2D(_MainTex, i.uv);  //光照贴图  fixed4 lmtex1  = tex2D(_LightMainTex1, i.uv2); fixed4 lmtex2  = tex2D(_LightMainTex2, i.uv2); fixed3 final_lmtex = lerp(lmtex1.rgb, lmtex2.rgb, _lerp);col.rgb *= final_lmtex;  return col;}ENDCG}}
}

3.2 脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class lightingcontrollor : MonoBehaviour
{[Range(0, 1)]public float _lerp = 0.0f;private void Update(){UpdateGlobalProperties();}public void UpdateGlobalProperties(){Shader.SetGlobalFloat("_lerp", _lerp);}
}

Unity昼夜变换(lightmap+天空球)相关推荐

  1. unity 自定义天空球模型防止被裁剪

    在unity中,有时候不想使用内置的天空球去渲染,那么,我们就会使用一个球体去渲染天空球.为了保证游戏场景模型都放置在天空球内.球体就会放大的很大,那么问题就来了,这样会导致球体超出了相机的可视范围, ...

  2. unity在没有灯光的作用下实现物体的发光以及去除天空球

    首先在左上角找到Window在里面找到Rendering然后再找到Lighting Settings按钮,进去之后按照下图进行一些设置,则可以实现 上面就是进行一些操作,就可以了. 这个地方就是删除天 ...

  3. Unity昼夜变化效果

    Unity动态昼夜变化Lightmap+天空盒 最近一直在对旧项目的场景进行重新烘焙,于是顺便做了个昼夜变化的效果.没有用实时光,而是用了Lightmap烘焙+天空盒. 上面的视频,前面一段是4个时间 ...

  4. [shader]动态天空球

    最终效果 思路 把天空球当成一个球体来处理纹理. 贴图UV动画. 通过渐变颜色和曲线控制昼夜变化. Shader源码 Shader "QQ/Sky" {Properties{_Su ...

  5. Laya Air+Unity3D双引擎带你做个天空球3D小游戏(上篇)

    上个月有个gz让我高仿做一个的天空球微信小游戏,当晚做出Demo后第二天那gz居然说不要了(很气愤),所以这个Demo一直保留至今,今天刚好就做为供大家学习Laya3D的demo分享给大家 国际惯例先 ...

  6. Laya Air+Unity3D双引擎带你做个天空球3D小游戏(下篇)

    本章继续上篇文章内容开始带大家写代码,大家要是把这个3d天空球demo学会了再自己丰富一下玩法加点精美UI其实也可以拿去上线发布哦

  7. ue4学习日记4(植被,光照,光束遮挡,天空球)

    目录 植被 种植植被 植被垂直向上 消失距离 删除植被 植被加碰撞 光照 关闭自动曝光 雾气效果 光亮 光束遮挡 体积雾 天空球 调整白天黑夜 白天黑夜-调整太阳高度 是否让颜色根据太阳位置改变 改变 ...

  8. 11_ue4天空球的使用

    1.变成黑天 先旋转平行光 90度旋转,让平行光从下往上射,这时地面变黑了. 勾选这个按钮,可以刷新天空球,让太阳跑到光源的上游. 太阳到了地面的下方 天黑了,星星都出来了.  这个选项是根据平行光的 ...

  9. 关于Unity 5.x Lightmap Shader 编译过慢的分析

    关于Unity 5.x Lightmap Shader 编译过慢的分析 缘起 最近在研究Unity 5.x 的 Lightmapping 与 场景打包的相关的知识.发现坑深啊.关于怎么打包怎么用网上的 ...

最新文章

  1. 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
  2. 深度神经网络是否过拟合?
  3. python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
  4. Android Framework系统服务详解
  5. param.requires_grad = False的作用
  6. 获得手机屏幕相关参数
  7. OCR+NLP 提取信息并分析,这个开源项目火了!
  8. 天刀服务器维护时间表,3月2日服务器例行维护公告
  9. 抖音视频社交产品多闪上架各大应用市场
  10. ios:苹果手机直接安装ipa文件
  11. Wireshark用户使用手册系列完结篇
  12. Combining Visual Cues with Interactions for 3D–2D Registration in Liver Laparoscopy翻译
  13. 电路方案分析(十)2 端口 USB 3.0 集线器参考方案设计
  14. SqlSugar学习总结1(基础操作)
  15. php fcgi 配置,apache使用fcgi配置PHP环境的步骤
  16. 信息技术(Information Technology)的限定有:硬件 ,软件 , 形式
  17. python 之字典及生成字典
  18. 支付宝红包口令活动,几个朋友圈话术让领取转化率提高3倍
  19. 当PS遇上Sketch 竟是棋逢对手
  20. 高职单招计算机类基础知识试卷,计算机类高职单招试卷

热门文章

  1. javascript的 CollectGarbage函数--垃圾清理,内存释放
  2. 中南大学计算机软件专业如何,被中南大学的软件工程专业录取,应不应该去?...
  3. 我们面临怎样的成长之路?
  4. 云表格Pro功能上新:透视表视图+一键出图功能来啦!
  5. C4D用云渲染快不快?
  6. ub linux硬盘没存什么就满,Linux -UB基本命令
  7. python图像人类检测_Python 超简单实现人类面部情绪的识别
  8. java计算机毕业设计家电售后管理系统(附源码、数据库)
  9. 10 个吸引眼球的滚动动画创意
  10. 数字展厅虚拟迎宾讲解员有哪些展现方式?