Unity昼夜变换(lightmap+天空球)
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+天空球)相关推荐
- unity 自定义天空球模型防止被裁剪
在unity中,有时候不想使用内置的天空球去渲染,那么,我们就会使用一个球体去渲染天空球.为了保证游戏场景模型都放置在天空球内.球体就会放大的很大,那么问题就来了,这样会导致球体超出了相机的可视范围, ...
- unity在没有灯光的作用下实现物体的发光以及去除天空球
首先在左上角找到Window在里面找到Rendering然后再找到Lighting Settings按钮,进去之后按照下图进行一些设置,则可以实现 上面就是进行一些操作,就可以了. 这个地方就是删除天 ...
- Unity昼夜变化效果
Unity动态昼夜变化Lightmap+天空盒 最近一直在对旧项目的场景进行重新烘焙,于是顺便做了个昼夜变化的效果.没有用实时光,而是用了Lightmap烘焙+天空盒. 上面的视频,前面一段是4个时间 ...
- [shader]动态天空球
最终效果 思路 把天空球当成一个球体来处理纹理. 贴图UV动画. 通过渐变颜色和曲线控制昼夜变化. Shader源码 Shader "QQ/Sky" {Properties{_Su ...
- Laya Air+Unity3D双引擎带你做个天空球3D小游戏(上篇)
上个月有个gz让我高仿做一个的天空球微信小游戏,当晚做出Demo后第二天那gz居然说不要了(很气愤),所以这个Demo一直保留至今,今天刚好就做为供大家学习Laya3D的demo分享给大家 国际惯例先 ...
- Laya Air+Unity3D双引擎带你做个天空球3D小游戏(下篇)
本章继续上篇文章内容开始带大家写代码,大家要是把这个3d天空球demo学会了再自己丰富一下玩法加点精美UI其实也可以拿去上线发布哦
- ue4学习日记4(植被,光照,光束遮挡,天空球)
目录 植被 种植植被 植被垂直向上 消失距离 删除植被 植被加碰撞 光照 关闭自动曝光 雾气效果 光亮 光束遮挡 体积雾 天空球 调整白天黑夜 白天黑夜-调整太阳高度 是否让颜色根据太阳位置改变 改变 ...
- 11_ue4天空球的使用
1.变成黑天 先旋转平行光 90度旋转,让平行光从下往上射,这时地面变黑了. 勾选这个按钮,可以刷新天空球,让太阳跑到光源的上游. 太阳到了地面的下方 天黑了,星星都出来了. 这个选项是根据平行光的 ...
- 关于Unity 5.x Lightmap Shader 编译过慢的分析
关于Unity 5.x Lightmap Shader 编译过慢的分析 缘起 最近在研究Unity 5.x 的 Lightmapping 与 场景打包的相关的知识.发现坑深啊.关于怎么打包怎么用网上的 ...
最新文章
- 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
- 深度神经网络是否过拟合?
- python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
- Android Framework系统服务详解
- param.requires_grad = False的作用
- 获得手机屏幕相关参数
- OCR+NLP 提取信息并分析,这个开源项目火了!
- 天刀服务器维护时间表,3月2日服务器例行维护公告
- 抖音视频社交产品多闪上架各大应用市场
- ios:苹果手机直接安装ipa文件
- Wireshark用户使用手册系列完结篇
- Combining Visual Cues with Interactions for 3D–2D Registration in Liver Laparoscopy翻译
- 电路方案分析(十)2 端口 USB 3.0 集线器参考方案设计
- SqlSugar学习总结1(基础操作)
- php fcgi 配置,apache使用fcgi配置PHP环境的步骤
- 信息技术(Information Technology)的限定有:硬件 ,软件 , 形式
- python 之字典及生成字典
- 支付宝红包口令活动,几个朋友圈话术让领取转化率提高3倍
- 当PS遇上Sketch 竟是棋逢对手
- 高职单招计算机类基础知识试卷,计算机类高职单招试卷
热门文章
- javascript的 CollectGarbage函数--垃圾清理,内存释放
- 中南大学计算机软件专业如何,被中南大学的软件工程专业录取,应不应该去?...
- 我们面临怎样的成长之路?
- 云表格Pro功能上新:透视表视图+一键出图功能来啦!
- C4D用云渲染快不快?
- ub linux硬盘没存什么就满,Linux -UB基本命令
- python图像人类检测_Python 超简单实现人类面部情绪的识别
- java计算机毕业设计家电售后管理系统(附源码、数据库)
- 10 个吸引眼球的滚动动画创意
- 数字展厅虚拟迎宾讲解员有哪些展现方式?