unity3d shader之Julia集和Mandelbrot集绘制美丽图案 (二)

之前写过一篇Mandelbrot集的代码在这里

这次主要写Julia集的

Mandelbrot 集内的每一个点都对应了一个连通的 Julia 集,Mandelbrot 集合外的点则对应了不连通的 Julia 集

Julia集合可以由下式进行反复迭代得到:f(z) = z^2 + c

这篇文章()讲的非常详细

迭代次数,C值均可调, 先来看看效果:

代码在此:

Shader "Custom/julia1x" {Properties {_MainTex ("Noise", 2D) = "white" {}_MaxIters("Max Iters", range(0,85)) = 1//迭代次数_CR("CR", range(-1,1)) = -0.7//y的C_CI("CI", range(-1,1)) = -0.7//x的C_TS("TS", range(0,15)) = 1//x缩放_CS("CS", range(0,15)) = 1//y缩放_S0("S0", range(-3,3)) = 0.5//x偏移_T0("T0", range(-3,3)) = 0.5//y偏移_Limits("iLimits", range(0,19)) = 5_ConColor("ConColor",color)=(1,1,1,1)_DivColor1("Diverge Color1",color)=(1,1,1,1)_DivColor2("Diverge Color2",color)=(1,1,1,1)}SubShader {pass{Tags{"LightMode"="ForwardBase" }Cull offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _LightColor0;int _MaxIters;float _TS;float _CS;float _S0;float _T0;float _Limits;float _CR;float _CI;float4 _ConColor;float4 _DivColor1;float4 _DivColor2;float4 _MainTex_ST;struct v2f {float4 pos:SV_POSITION;float2 uv_MainTex:TEXCOORD0;};v2f vert (appdata_full v) {v2f o;o.pos=mul(UNITY_MATRIX_MVP,v.vertex);o.uv_MainTex = TRANSFORM_TEX(v.texcoord,_MainTex);return o;}float4 frag(v2f i):COLOR{float real = i.uv_MainTex.x * _TS + _S0;//xfloat imag = i.uv_MainTex.y * _CS + _T0;//yfloat newr;int numIters;float4 color = 0;for(numIters = 0;numIters < _MaxIters;numIters++){float newreal = real * real;float newimag = imag * imag;newr = newreal + newimag;if(newr >= _Limits)break;imag = real * imag * 2;real = newreal – newimag;real += _CR;imag += _CI;}if(newr<_Limits)color = _ConColor;if(newr>_Limits)color = lerp(_DivColor1,_DivColor2, frac(numIters/_CS));return color;}ENDCG}//} }———————–by wolf96

,哪里有意志存在,哪里就会有出路。

unity3d shader之Julia集和Mandelbrot集绘制美丽图案 (二)

相关文章:

你感兴趣的文章:

标签云: