zoukankan      html  css  js  c++  java
  • Unity混合天空盒

    对于不同天气下天空盒的实现。

    天空盒时通过天空盒材质更改实现的,新建材质,选择shader/skybox/6sided,然后添加六个天空盒贴图就可以实现天空盒,如果想实现天气变化则需要至少两套贴图,并需要实现渐变。此时需要新建着色器shader。Create/shader/unityshader然后双击新建的shader,添加如下代码,然后将此shader添加到相应材质上,就会看到相应材质有12个贴图槽,即两套天空盒贴图,拖入相应的贴图,通过材质的setfloat方法控制参数_Blend的值即可实现渐变,如第二段代码所示,也可加入灯光强度的设置,以达到相关效果。

    Shader "Skybox/Blended" {
        Properties{
            _Tint("Tint Color", Color) = (.5, .5, .5, .5)
            _Blend("Blend", Range(0.0,1.0)) = 0.5
            _FrontTex("Front (+Z)", 2D) = "white" {}
        _BackTex("Back (-Z)", 2D) = "white" {}
        _LeftTex("Left (+X)", 2D) = "white" {}
        _RightTex("Right (-X)", 2D) = "white" {}
        _UpTex("Up (+Y)", 2D) = "white" {}
        _DownTex("Down (-Y)", 2D) = "white" {}
        _FrontTex2("2 Front (+Z)", 2D) = "white" {}
        _BackTex2("2 Back (-Z)", 2D) = "white" {}
        _LeftTex2("2 Left (+X)", 2D) = "white" {}
        _RightTex2("2 Right (-X)", 2D) = "white" {}
        _UpTex2("2 Up (+Y)", 2D) = "white" {}
        _DownTex2("2 Down (-Y)", 2D) = "white" {}
        }
    
            SubShader{
            Tags{ "Queue" = "Background" }
            Cull Off
            Fog{ Mode Off }
            Lighting Off
            Color[_Tint]
            Pass{
            SetTexture[_FrontTex]{ combine texture }
            SetTexture[_FrontTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
            Pass{
            SetTexture[_BackTex]{ combine texture }
            SetTexture[_BackTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
            Pass{
            SetTexture[_LeftTex]{ combine texture }
            SetTexture[_LeftTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
            Pass{
            SetTexture[_RightTex]{ combine texture }
            SetTexture[_RightTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
            Pass{
            SetTexture[_UpTex]{ combine texture }
            SetTexture[_UpTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
            Pass{
            SetTexture[_DownTex]{ combine texture }
            SetTexture[_DownTex2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous }
        }
        }
    
            Fallback "Skybox/6 Sided", 1
    }
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SetWeather : MonoBehaviour {
    
        public Material sky;
        public Light sun;
    
        private float cloudValue = 0f;
        private float sunIntensity;
    
        private void SetOvercast(float value)
        {
            sky.SetFloat("_Blend", value);
           // sun.intensity = sunIntensity - (sunIntensity * value);
        }
        // Use this for initialization
        void Start () {
            sunIntensity = sun.intensity;
        }
        
        // Update is called once per frame
        void Update () {
            SetOvercast(cloudValue);
            cloudValue += 0.005f;
        }
    }
  • 相关阅读:
    Effective Java 第三版——26. 不要使用原始类型
    Effective Java 第三版——25. 将源文件限制为单个顶级类
    Effective Java 第三版——24. 优先考虑静态成员类
    Effective Java 第三版——23. 优先使用类层次而不是标签类
    Effective Java 第三版——22. 接口仅用来定义类型
    Effective Java 第三版——21. 为后代设计接口
    Effective Java 第三版——20. 接口优于抽象类
    Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
    Effective Java 第三版——18. 组合优于继承
    Effective Java 第三版——17. 最小化可变性
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/7679376.html
Copyright © 2011-2022 走看看