Unity 过度光照贴图

背景:开关窗帘过程,让环境在亮和暗之间过度

事先烘培出亮、暗两张Lighting map。然后代码实现,窗帘开关由动作实现,而代码中通过动作执行进度来过度两张Lighting map

void OnAnimatorMove()
{
    AnimatorTransitionInfo transitionInfo = animator.GetAnimatorTransitionInfo(0);
    if (transitionInfo.normalizedTime != 0)//状态切换中
    {
    }
    else
    {
        AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);

        // 开窗
        if (currentAnimatorStateInfo.IsName("opening"))
        {
            LightmapBlender.Instance.OpenWindow(currentAnimatorStateInfo.normalizedTime);
        }

        // 关窗
        if (currentAnimatorStateInfo.IsName("closing"))
        {
            LightmapBlender.Instance.CloseWindow(currentAnimatorStateInfo.normalizedTime);
        }
    }

动作控制代码

 1 public Texture2D normalTexture2D;
 2 public Texture2D closeWindowTexture2D;
 3 public Texture2D dancingTexture2D;
 4
 5 public Texture2D blendTexture2D;
 6
 7 private Color[] normalColors;
 8 private Color[] closeWindowColors;
 9 private Color[] dancingColors;
10
11 private Color[] blendColors;
12
13 [SerializeField]
14 private Transform brightTransform, darkTransform;
15
16 [SerializeField]
17 private Color brightAmbientLight, darkAmbientLight;
18
19 void Awake ()
20 {
21     normalColors = normalTexture2D.GetPixels();
22     closeWindowColors = closeWindowTexture2D.GetPixels();
23
24     if (dancingTexture2D != null)
25         dancingColors = dancingTexture2D.GetPixels();
26
27     blendColors = blendTexture2D.GetPixels();
28 }
29
30 public void OpenWindow(float t)
31 {
32     brightTransform.gameObject.SetActive(true);
33     darkTransform.gameObject.SetActive(false);
34
35     Blend2Textures(closeWindowColors, normalColors, t);
36     RenderSettings.ambientLight = Blend2Color(darkAmbientLight, brightAmbientLight, t);
37 }
38
39 public void CloseWindow(float t)
40 {
41     brightTransform.gameObject.SetActive(false);
42     darkTransform.gameObject.SetActive(true);
43
44     Blend2Textures(normalColors, closeWindowColors, t);
45
46     // 过度环境光(影响没烘培在Lighting map 中的对象的明暗)
47     RenderSettings.ambientLight = Blend2Color(brightAmbientLight, darkAmbientLight, t);
48 }
49
50 private Color Blend2Color(Color from, Color to, float t)
51 {
52     Color blend;
53
54     blend.r = from.r * (1 - t) + to.r * t;
55     blend.g = from.g * (1 - t) + to.g * t;
56     blend.b = from.b * (1 - t) + to.b * t;
57     blend.a = from.a * (1 - t) + to.a * t;
58
59     return blend;
60 }
61
62 private void Blend2Textures(Color[] from, Color[] to, float t)
63 {
64     for (int i = 0; i < blendColors.Length; i++)
65         blendColors[i] = Blend2Color(from[i], to[i], t);
66
67     blendTexture2D.SetPixels(blendColors);
68     blendTexture2D.Apply();
69
70     SwitchLightmaps(blendTexture2D);
71 }
72
73 private void SwitchLightmaps(Texture2D tex)
74 {
75     LightmapData[] lightmaps = LightmapSettings.lightmaps;
76
77     lightmaps[0].lightmapFar = tex;
78
79     // 切换 Lighting map
80     LightmapSettings.lightmaps = lightmaps;
81 }

插值过度Lighting map

时间: 2024-10-21 00:40:12

Unity 过度光照贴图的相关文章

Unity 3D 光照贴图快速入门 Lightmapping Quickstart

This an introductory description of lightmapping in Unity. For more advanced topics see in-depth description of lightmapping in Unity 这是一个Unity 光照贴图的引导手册.如果想查看更多的高级功能请查看in-depth description of lightmapping in Unity. Unity has a built-in lightmapper:

Unity编辑器中光照贴图背后的PowerVR光线追踪技术

今年八月,大量的游戏开发者走进Unite 2014,齐聚在西雅图中心参加Unite第八届年度会议.在一系列令人兴奋的会议以及主题演讲中,来自我们PowerVR光线追踪团队的Jens Fursund介绍了即将推出的Unity 5光照贴图编辑器,使用光线追踪技术以快速.准确地模拟光照. 我们非常高兴与Unity的合作,在最近的展示和活动中,我们已经从观看该工具演示的一些开发者中得到很多积极反馈. 让我们来快速浏览一下PowerVR光线追踪技术如何通过新光照贴图编辑器助力开发人员和艺术家加快作品开发.

【Unity】第12章 光照贴图和光影效果

分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在Unity 5中,Lighting是-种增强场景光照和阴影效果的技术,它可以通过较少的性能消耗使静态场景看上去更真实.丰富,以及更具有立体感,又可以对动态对象进行处理. 早期版本的Unity 4只能对"静态"对象和"动态"对象分别进行处理,称为Lightmapping(光照贴图),但是,Lightmapping不能被用来实时地处理"动态"光照:而在Unity 5中,

unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏药 比如一个shader叫 Shader "xx/UnlitAlphaCutout" 要改为 Shader "xx/Transparent/UnlitAlphaCutout" 才能烘焙出正常的效果,不知道Unity做了什么黑科技,居然在烘焙的时候判断了Transpare

光照贴图深入学习 Lightmapping In-Depth

If you are about to lightmap your first scene in Unity, this Quickstart Guide might help you out. 如果你是在Unity第一次接触光照贴图,这个快速指南可以帮助你快速了解. Lightmapping is fully integrated in Unity, so that you can build entire levels from within the Editor, lightmap the

Unity Shader-法线贴图(Normal)及其原理

简介 以前经常听说“模型不好看啊,怎么办啊?”答曰“加法线”,”做了个高模,准备烘一下法线贴图”,“有的美术特别屌,直接画法线贴图”.....法线贴图到底是个什么鬼,当年天真的我真的被这个图形学的奇淫杂技忽悠了,然而毕竟本人还算有点刨根问底的精神,决定研究一下法线贴图的原理以及Unity下的实现.本人才疏学浅,如有错误,欢迎指正. 法线贴图是目前游戏开发中最常见的贴图之一.我们知道,一般情况下,模型面数越高,可以表现的细节越多,效果也越好.但是,由于面数多了,顶点数多了,计算量也就上去了,效果永

光照贴图烘焙

转载自CSDN雨蒙一,简书自由的天空等人,感谢分享: https://www.jianshu.com/p/3e1e002f5684 基础知识了解一下: 1,什么是贴图(Texture)? 贴图(texture)是一张不大的二维图像,它呈现了某个表面的最终信息.它被指定到线框多边形的表面,给予模型最终的外观.贴图的制作技巧是创建游戏真实度方面的关键因素. 2,贴图格式及大小 一般情况下,贴图的实现在图像处理软件中制作完成,纹理一般会包含很多信息和图层,也将随后被储存成PSD格式,当制作完成后,文件

光照贴图

光照图的理论和实践 http://www.cnblogs.com/minggoddess/archive/2012/12/03/2800133.html 光照贴图快速入门 http://www.bjbkws.com/online/1091/ http://wenku.baidu.com/link?url=frxjAkZW64G8Z6ujGC75yvGFl1WxtigbaKKak7IWu9gjYkCMPKme_5cT4PsMHcbzn68sZASfD6WvGDzBdr_WMmW1fulXSprq0

unity多边形uv贴图

以前我写过一篇文章,不规则图形uv贴图的,(http://blog.csdn.net/itolfn/article/details/17240131)当时用的三角剖分的算法,但是那个算法有所不完整,有一条这么规定的:最优性:任意两个相邻三角形形成的凸四边形的对角线如果可以互换的话,那么两个三角形六个内角中最小的角度不会变大.就是取四变形的最大化三角形内角去连接对角线,分组两个三角形,但是有时候不是自己想要的那一个图形,如图: 三角剖分算法会算出ABC和ACD这两个三角形,但是我们需要ABD和BC