Unity Shader学习:ShaderToy变换云

这篇博客探讨了如何在Unity中学习ShaderToy的变换云效果,并介绍了如何将游戏对象与Ray Marching技术结合,利用深度信息进行融合。
摘要由CSDN通过智能技术生成

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++)
				{
   
					p += sin(p
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值