• 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;
        }
    }
  • 相关阅读:
    Serverless 时代下大规模微服务应用运维的最佳实践
    Dubbo 跨语言调用神兽:dubbo-go-pixiu
    Flink 1.12 资源管理新特性回顾
    [JDBC] Kettle on MaxCompute 使用指南
    AI运动:阿里体育端智能最佳实践
    MaxCompute非事务表如何更新数据
    如何利用云原生技术构建现代化应用
    实时数仓入门训练营:实时计算 Flink 版 SQL 实践
    实时数仓入门训练营:基于 Apache Flink + Hologres 的实时推荐系统架构解析
    Flink + Iceberg + 对象存储,构建数据湖方案
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/7679376.html
Copyright © 2020-2023  润新知