Unity3D Shader实现动态星空

本文实例为大家分享了Unity3D Shader实现动态星空的具体代码,供大家参考,具体内容如下

Shader "Unlit/Test"
{
Properties
{
[Gamma][Header(CubeMap)]_MainColor("MainColor",COLOR)=(0.5,0.5,0.5,1)
_Spec("Spec",Range(1,8))=1
[NoScaleOffset]_Tex("CubeMap",CUBE)="black"{}
[Header(Rotation)][Toggle(_ENABLEROTATION_ON)]_EnableRotation("Enable Rotation",Float)=0
[IntRange]_Rotation("Rotation",Range(0,360))=0
_RotationSpeed("RotationSpeed",float)=1
[Header(Fog)][Toggle(_ENABLEFOG_ON)]_EnableFog("Enable Fog",float)=0
_FogHeight("FogHeight",Range(0,1))=1
_FogSmooth("FogSmooth",Range(0.01,1))=0.01
_FogHill("FogHill",Range(0,1))=0.5

}
SubShader
{
Tags { "RenderType"="Background" "Queue"="Background" "IgnoreProjector"="True" "ForceNoShadowCasting"="True"}
LOD 100
Cull Off
ZWrite Off
CGPROGRAM
#include "UnityShaderVariables.cginc"
#include "UnityCG.cginc"
#pragma target 3.0
#pragma shader_feature _ENABLEROTATION_ON
#pragma shader_feature _ENABLEFOG_ON
#pragma surface surf Lint keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nofog nometa noforwardadd vertex:vertexRo

struct Input
{
float3 worldPos;
float3 vertextofrag;
};

uniform float4 _MainColor;
uniform float _Spec;
uniform samplerCUBE _Tex;
uniform half _Rotation;
uniform half _RotationSpeed;
uniform half _FogHeight;
uniform half _FogSmooth;
uniform half _FogHill;
uniform half4 _Tex_HDR;

half3 decode_HDR(half4 data)
{
return DecodeHDR(data,_Tex_HDR);
}
void vertexRo(inout appdata_full v,out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input,o);
float3 _worldPos=mul(unity_ObjectToWorld,v.vertex);
float _lerpResult=lerp(1.0,(unity_OrthoParams.y/unity_OrthoParams.x),unity_OrthoParams.w);
float3 _append=float3(_worldPos.x,_worldPos.y*_lerpResult,_worldPos.z);
float3 _nor_append=normalize(_append);
float _timeMove=_Time.y;
float3 _timeMove1=float3(cos(radians(_Rotation+_timeMove*_RotationSpeed)),0,sin(radians(_Rotation+_timeMove*_RotationSpeed))*-1);
float3 _timeMove2=float3(0,_lerpResult,0);
float3 _timeMove3=float3(sin(radians(_Rotation+_timeMove*_RotationSpeed)),0,cos(radians(_Rotation+_timeMove*_RotationSpeed)));
float3 _nor_worldPos=normalize(_worldPos);
#ifdef _ENABLEROTATION_ON
o.vertextofrag=mul(float3x3(_timeMove1,_timeMove2,_timeMove3),_nor_worldPos);
#else
o.vertextofrag=_nor_append;
#endif

}
fixed4 LightingLint(SurfaceOutput s,float3 lightDir,float atten)
{
return fixed4(0,0,0,s.Alpha);
}
void surf(Input i,inout SurfaceOutput o)
{
half4 CUBEdata=texCUBE(_Tex,i.vertextofrag);
half3 CUBEdataHDR=decode_HDR(CUBEdata);
float4 CUBEColor=(float4(CUBEdataHDR,0))*_MainColor*_Spec*unity_ColorSpaceDouble;
float3 _nor_worldPos=normalize(i.worldPos);
float _lerpFog=lerp(saturate(pow(_nor_worldPos.y/_FogHeight,1-_FogSmooth)),0,_FogHill);
float4 FinalColor=lerp(unity_FogColor,CUBEColor,_lerpFog);
#ifdef _ENABLEFOG_ON
o.Emission=FinalColor.rgb;
#else
o.Emission=CUBEColor.rgb;
#endif
o.Alpha=1;

}
ENDCG
}

}

Spec:亮度

Rotation:开始旋转角度,可以调节

RotationSpeed:旋转速度

Fog开头:雾化效果,可以看算法实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity Shader实现图形绘制(蓝天白云大海)

    Unity Shader学习:2D图形绘制(蓝天白云大海),供大家参考,具体内容如下 基本是一些数学上的算法 shader部分: Shader "Unlit/2D-Ocean" { Properties { _MainTex ("Texture", 2D) = "white" {} _SunColor("SunColor",Color) = (1,1,1,1) _SunRoundColor("SunRoundColo

  • Unity3D Shader实现动态星空

    本文实例为大家分享了Unity3D Shader实现动态星空的具体代码,供大家参考,具体内容如下 Shader "Unlit/Test" { Properties { [Gamma][Header(CubeMap)]_MainColor("MainColor",COLOR)=(0.5,0.5,0.5,1) _Spec("Spec",Range(1,8))=1 [NoScaleOffset]_Tex("CubeMap",CUBE

  • Unity3D Shader实现动态屏幕遮罩

    屏幕可视范围跟随目标物体移动,可修改可视范围大小,边缘渐变大小.以及遮罩颜色,支持最高物体数量可在Shader中修改,当前版本支持最多9个物体. 效果图如下: 控制面板如下: Shader代码如下: Shader "Peter/DarkEffect" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { // No culling or depth Cull Off

  • Unity3D Shader实现扫描显示效果

    本文实例为大家分享了Unity3D Shader实现扫描显示的具体代码,供大家参考,具体内容如下 通过Shader实现,从左向右的扫描显示,可自定义扫描颜色.宽度.速度. 效果图如下 编辑器界面如下 Shader源码如下 Shader "XM/ScanEffect" { Properties { _MainTex("Main Tex", 2D) = "white"{} _lineColor("Line Color", Colo

  • JS实现动态星空背景效果

    本文实例为大家分享了JS实现动态星空背景的具体代码,供大家参考,具体内容如下 这里我截取的是一个图片,实际上是会动的.废话不多说,上代码. HTML: <canvas id="canvas"></canvas> CSS: /*css reset */ body,p,div,ol,ul,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,iframe,nav { margin: 0; padding: 0; } html,body {

  • Unity3D Shader实现镜子效果

    本文实例为大家分享了Unity3D Shader实现镜子效果的具体代码,供大家参考,具体内容如下/p> Shader部分代码: Shader "Custom/FanShe" { Properties{ _MainTex("Albedo",2D) = "white"{} _MainTint("Diffuse Color",Color)=(1,1,1,1) _Cubemap("Cubemap",CUBE)

  • Unity3D Shader实现流光效果

    本文实例为大家分享了Unity3D Shader实现流光效果的具体代码,供大家参考,具体内容如下 流光效果图: 演示工程:下载地址 //功能需求:模拟数据传送效果,高亮色块从模型上方移动到下方 //功能分析:这里采用UV动画的方式来实现,利用Alpha贴图控制流动的形状 // 利用Alpha遮罩贴图,控制模型中哪些地方需要进行流动 Shader "Custom/DataFlowEffect" { Properties { _MainColor("Main Color"

  • Unity Shader实现动态过场切换图片效果

    本文实例为大家分享了Unity Shader实现动态过场切换图片的具体代码,供大家参考,具体内容如下 一.简单介绍 Shader Language的发展方向是设计出在便携性方面可以和C++.Java等相比的高级语言,"赋予程序员灵活而方便的编程方式",并"尽可能的控制渲染过程"同时"利用图形硬件的并行性,提高算法效率". 本文介绍,如何使用 shader ,动态过场形式切换图片的一点简单效果. 二.实现原理 1.通过时间叠加判断,当 值小于 主图

  • Unity Shader实现动态雾效果

    Unity Shader学习:动态雾,供大家参考,具体内容如下 先将相机近裁面四个角向量传给shader,再通过观察空间下的深度值和相机位置算出像素在世界坐标系的位置,通过世界空间高度值来设定雾的范围和浓度,然后通过噪声和uv偏移实现扰动效果.得到了类似寂静岭或恶灵附身1的效果. C#部分: using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] publ

  • Unity3D Shader实现扫描显示效果(2)

    上一篇使用的方式是对UV进行剪裁,如果用于模型的话,会出现一些问题.本篇使用的方式是对模型进行模型空间的剪裁,可设置剪裁方向.效果如下: 设置界面如下: mode用于设置剪裁方向. clip用于设置剪裁值. shader实现如下: Shader "XM/ScanEffect2" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = &q

  • Unity3D Shader实现贴图切换效果

    本文实例为大家分享了shader实现基于世界坐标的贴图置换效果. 效果如下: 设置面板如下: 可在面板上设置切换方向,与切换对象,及其切换速度. shader实现如下: Shader "XM/Effect/SwapTexture" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Targ

随机推荐