Unity Shader学习:ShaderToy变换云

Unity Shader学习:ShaderToy变换云

算法来自:https://www.shadertoy.com/view/3l23Rh
在此基础上将游戏物件与Ray Marching通过深度做了融合
在这里插入图片描述
在这里插入图片描述
shader部分:

Shader "Unlit/ProteanClouds"
{
   
	Properties
	{
   
		_MainTex ("Texture", 2D) = "white" {
   }
	}
		SubShader
	{
   
		Pass
		{
   
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "UnityCG.cginc"
			
			struct appdata
			{
   
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
   
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
				float4 srcPos : TEXCOORD1;
				float4 interpolatedRay:TEXCOORD2;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			float4 _iMouse;
			//深度图
			sampler2D _CameraDepthTexture;
			//传入近裁面四个点的向量
			float4x4 _FrustumCornorsRay;

			float2x2 rot(float a) {
   
				float c = cos(a);
				float s = sin(a);
				return float2x2(c, s, -s, c);
			}

			

			float mag2(float2 p) {
   
				return dot(p, p);
			}

			float linstep(float mn,float mx,float x) {
   
				return clamp((x - mn) / (mx - mn), 0.0, 1.0);
			}

			float prm1 = 0;

			float2 disp(float t) {
   
				return float2(sin(t*0.22) * 1, cos(t*0.175)) * 2;
			}

			float2 map(float3 p) {
   
				float3 p2 = p;
				p2.xy -= disp(p.z).xy;
				p.xy =mul( rot(sin(p.z + _Time.y)*(0.1 + prm1 * 0.05) + _Time.y*0.09),p.xy);
				float cl = mag2(p2.xy);
				float d = 0;
				p *= 0.61;
				float z = 1;
				float trk = 1;
				float dspAmp = 0.1 + prm1 * 0.2;
				float3x3 m3 = float3x3(0.33338, 0.56034, -0.71817,
					-0.87887, 0.32651, -0.15323,
					0.15162, 0.69596, 0.61339)*1.93;
				for (int i = 0; i < 5; i++)
				
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值