--track@amount:Amount,0, 1000, 10, 0.1 --track@scale:Scale,0, 4000, 100, 0.1 --track@speed:Speed,0,1000,100,0.1 --track@seed:Seed,0,4000,0,1 --track@blur:Blur,0,1000,15,0.1 --check@expansion:Expansion,1 --label:変形 --[[pixelshader@psmain: Texture2D tex : register(t0); Texture2D map : register(t1); cbuffer constant0 : register(b0) { float2 resolution; float amt; float _pad1; }; float4 psmain(float4 pos : SV_Position) : SV_Target { float4 mapcol=map[uint2(pos.xy)]; float lum=2*mapcol.x-1; float4 col=tex[int2(pos.xy+int2(lum*amt,lum*amt))]; return col; } ]] --amountを大きくしすぎるとバグる(0~1000なら多分平気) --シーンにノイズ置いてディスプレイスメントマップしたほうが自由度は高いです これは気軽に使う用 if expansion==1 then obj.effect("領域拡張","上",amount,"下",amount,"右",amount,"左",amount) end local w,h=obj.getpixel() local ox,oy=obj.ox,obj.oy obj.copybuffer("cache:org","obj") obj.load("figure","四角形",0xffffff,math.max(w,h)) obj.effect( "ノイズ", "強さ",100.0, "変化速度",speed, "周期X",100/scale, "周期Y",100/scale, "シード",seed+obj.index, "合成モード","明るさと乗算", "ノイズの種類","Type1" ) obj.effect("ぼかし","範囲",blur,"サイズ固定",1) obj.setoption("drawtarget","tempbuffer",w,h) obj.draw() obj.copybuffer("obj","tempbuffer") obj.ox,obj.oy=ox,oy obj.pixelshader("psmain","object",{"cache:org","tempbuffer"},{w,h,amount})