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;
        }
    }
  • 相关阅读:
    Openlayer 3 的画图测量面积
    Openlayer 3 的画线测量长度
    屏幕尺寸
    px和em,rem的区别
    水平和垂直居中
    Flex布局
    继承的几种方法及优缺点
    call ,apply 和 bind的用法与区别
    mybatis springmvc velocity的demo
    正则同时包含两个关键字
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/7679376.html
Copyright © 2011-2022 走看看