{"id":1032,"date":"2023-02-13T11:49:48","date_gmt":"2023-02-13T11:49:48","guid":{"rendered":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/?page_id=1032"},"modified":"2023-04-26T10:49:30","modified_gmt":"2023-04-26T10:49:30","slug":"single-image-falling-leaves","status":"publish","type":"page","link":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/single-image-falling-leaves\/","title":{"rendered":"Single Image Falling Leaves"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1032\" class=\"elementor elementor-1032\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6cbed9d2 elementor-section-full_width elementor-section-content-middle bramha_header mobile_header elementor-section-height-default elementor-section-height-default\" data-id=\"6cbed9d2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-21eff783\" data-id=\"21eff783\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4ec1dadc elementor-widget elementor-widget-image\" data-id=\"4ec1dadc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.9.2 - 21-12-2022 *\/\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/envato\/bramha\/preview\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"160\" height=\"40\" src=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/2023\/01\/Logo.png\" class=\"attachment-full size-full wp-image-36\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-40cce435\" data-id=\"40cce435\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6a5d4720 menu-icon elementor-align-right elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"6a5d4720\" data-element_type=\"widget\" id=\"open_offcanvas_mobile\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-text\"><\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-409b34b elementor-section-full_width elementor-section-height-full elementor-section-items-stretch elementor-section-height-default\" data-id=\"409b34b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-6a98514a page-left content_main_left elementor-hidden-mobile\" data-id=\"6a98514a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3234eec7 elementor-widget elementor-widget-image\" data-id=\"3234eec7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/envato\/bramha\/preview\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"40\" height=\"160\" src=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/2023\/01\/desktop-logo.png\" class=\"attachment-full size-full wp-image-508\" alt=\"\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d86e81c menu-icon elementor-widget elementor-widget-button\" data-id=\"2d86e81c\" data-element_type=\"widget\" id=\"open_offcanvas\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-text\"><\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3632b050 social_icons elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"3632b050\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/elementor\/css\/custom-widget-icon-list.min.css?ver=1676633232\">\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">FB<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">TW<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"#\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">IN<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-7fcb65eb content_main_middle slider-content\" data-id=\"7fcb65eb\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6b7c4ac elementor-absolute elementor-widget elementor-widget-html\" data-id=\"6b7c4ac\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script id=\"sakura_point_vsh\" type=\"x-shader\/x_vertex\">\nuniform mat4 uProjection;\nuniform mat4 uModelview;\nuniform vec3 uResolution;\nuniform vec3 uOffset;\nuniform vec3 uDOF;  \/\/x:focus distance, y:focus radius, z:max radius\nuniform vec3 uFade; \/\/x:start distance, y:half distance, z:near fade start\n\nattribute vec3 aPosition;\nattribute vec3 aEuler;\nattribute vec2 aMisc; \/\/x:size, y:fade\n\nvarying vec3 pposition;\nvarying float psize;\nvarying float palpha;\nvarying float pdist;\n\n\/\/varying mat3 rotMat;\nvarying vec3 normX;\nvarying vec3 normY;\nvarying vec3 normZ;\nvarying vec3 normal;\n\nvarying float diffuse;\nvarying float specular;\nvarying float rstop;\nvarying float distancefade;\n\nvoid main(void) {\n\/\/ Projection is based on vertical angle\nvec4 pos = uModelview * vec4(aPosition + uOffset, 1.0);\ngl_Position = uProjection * pos;\ngl_PointSize = aMisc.x * uProjection[1][1] \/ -pos.z * uResolution.y * 0.5;\n\npposition = pos.xyz;\npsize = aMisc.x;\npdist = length(pos.xyz);\npalpha = smoothstep(0.0, 1.0, (pdist - 0.1) \/ uFade.z);\n\nvec3 elrsn = sin(aEuler);\nvec3 elrcs = cos(aEuler);\nmat3 rotx = mat3(\n1.0, 0.0, 0.0,\n0.0, elrcs.x, elrsn.x,\n0.0, -elrsn.x, elrcs.x\n);\nmat3 roty = mat3(\nelrcs.y, 0.0, -elrsn.y,\n0.0, 1.0, 0.0,\nelrsn.y, 0.0, elrcs.y\n);\nmat3 rotz = mat3(\nelrcs.z, elrsn.z, 0.0, \n-elrsn.z, elrcs.z, 0.0,\n0.0, 0.0, 1.0\n);\nmat3 rotmat = rotx * roty * rotz;\nnormal = rotmat[2];\n\nmat3 trrotm = mat3(\nrotmat[0][0], rotmat[1][0], rotmat[2][0],\nrotmat[0][1], rotmat[1][1], rotmat[2][1],\nrotmat[0][2], rotmat[1][2], rotmat[2][2]\n);\nnormX = trrotm[0];\nnormY = trrotm[1];\nnormZ = trrotm[2];\n\nconst vec3 lit = vec3(0.6917144638660746, 0.6917144638660746, -0.20751433915982237);\n\nfloat tmpdfs = dot(lit, normal);\nif(tmpdfs < 0.0) {\nnormal = -normal;\ntmpdfs = dot(lit, normal);\n}\ndiffuse = 0.4 + tmpdfs;\n\nvec3 eyev = normalize(-pos.xyz);\nif(dot(eyev, normal) > 0.0) {\nvec3 hv = normalize(eyev + lit);\nspecular = pow(max(dot(hv, normal), 0.0), 20.0);\n}\nelse {\nspecular = 0.0;\n}\n\nrstop = clamp((abs(pdist - uDOF.x) - uDOF.y) \/ uDOF.z, 0.0, 1.0);\nrstop = pow(rstop, 0.5);\n\/\/-0.69315 = ln(0.5)\ndistancefade = min(1.0, exp((uFade.x - pdist) * 0.69315 \/ uFade.y));\n}\n<\/script>\n<script id=\"sakura_point_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\n\nuniform vec3 uDOF;  \/\/x:focus distance, y:focus radius, z:max radius\nuniform vec3 uFade; \/\/x:start distance, y:half distance, z:near fade start\n\nconst vec3 fadeCol = vec3(0.08, 0.03, 0.06);\n\nvarying vec3 pposition;\nvarying float psize;\nvarying float palpha;\nvarying float pdist;\n\n\/\/varying mat3 rotMat;\nvarying vec3 normX;\nvarying vec3 normY;\nvarying vec3 normZ;\nvarying vec3 normal;\n\nvarying float diffuse;\nvarying float specular;\nvarying float rstop;\nvarying float distancefade;\n\nfloat ellipse(vec2 p, vec2 o, vec2 r) {\nvec2 lp = (p - o) \/ r;\nreturn length(lp) - 1.0;\n}\n\nvoid main(void) {\nvec3 p = vec3(gl_PointCoord - vec2(0.5, 0.5), 0.0) * 2.0;\nvec3 d = vec3(0.0, 0.0, -1.0);\nfloat nd = normZ.z; \/\/dot(-normZ, d);\nif(abs(nd) < 0.0001) discard;\n\nfloat np = dot(normZ, p);\nvec3 tp = p + d * np \/ nd;\nvec2 coord = vec2(dot(normX, tp), dot(normY, tp));\n\n\/\/angle = 15 degree\nconst float flwrsn = 0.258819045102521;\nconst float flwrcs = 0.965925826289068;\nmat2 flwrm = mat2(flwrcs, -flwrsn, flwrsn, flwrcs);\nvec2 flwrp = vec2(abs(coord.x), coord.y) * flwrm;\n\nfloat r;\nif(flwrp.x < 0.0) {\nr = ellipse(flwrp, vec2(0.065, 0.024) * 0.5, vec2(0.36, 0.96) * 0.5);\n}\nelse {\nr = ellipse(flwrp, vec2(0.065, 0.024) * 0.5, vec2(0.58, 0.96) * 0.5);\n}\n\nif(r > rstop) discard;\n\nvec3 col = mix(vec3(1.0, 0.8, 0.75), vec3(1.0, 0.9, 0.87), r);\nfloat grady = mix(0.0, 1.0, pow(coord.y * 0.5 + 0.5, 0.35));\ncol *= vec3(1.0, grady, grady);\ncol *= mix(0.8, 1.0, pow(abs(coord.x), 0.3));\ncol = col * diffuse + specular;\n\ncol = mix(fadeCol, col, distancefade);\n\nfloat alpha = (rstop > 0.001)? (0.5 - r \/ (rstop * 2.0)) : 1.0;\nalpha = smoothstep(0.0, 1.0, alpha) * palpha;\n\ngl_FragColor = vec4(col * 0.5, alpha);\n}\n<\/script>\n<!-- effects -->\n<script id=\"fx_common_vsh\" type=\"x-shader\/x_vertex\">\nuniform vec3 uResolution;\nattribute vec2 aPosition;\n\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\n\nvoid main(void) {\ngl_Position = vec4(aPosition, 0.0, 1.0);\ntexCoord = aPosition.xy * 0.5 + vec2(0.5, 0.5);\nscreenCoord = aPosition.xy * vec2(uResolution.z, 1.0);\n}\n<\/script>\n<script id=\"bg_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\n\nuniform vec2 uTimes;\n\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\n\nvoid main(void) {\nvec3 col;\nfloat c;\nvec2 tmpv = texCoord * vec2(0.8, 1.0) - vec2(0.95, 1.0);\nc = exp(-pow(length(tmpv) * 1.8, 2.0));\ncol = mix(vec3(0.02, 0.0, 0.03), vec3(0.96, 0.98, 1.0) * 1.5, c);\ngl_FragColor = vec4(col * 0.5, 1.0);\n}\n<\/script>\n<script id=\"fx_brightbuf_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\nuniform sampler2D uSrc;\nuniform vec2 uDelta;\n\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\n\nvoid main(void) {\nvec4 col = texture2D(uSrc, texCoord);\ngl_FragColor = vec4(col.rgb * 2.0 - vec3(0.5), 1.0);\n}\n<\/script>\n<script id=\"fx_dirblur_r4_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\nuniform sampler2D uSrc;\nuniform vec2 uDelta;\nuniform vec4 uBlurDir; \/\/dir(x, y), stride(z, w)\n\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\n\nvoid main(void) {\nvec4 col = texture2D(uSrc, texCoord);\ncol = col + texture2D(uSrc, texCoord + uBlurDir.xy * uDelta);\ncol = col + texture2D(uSrc, texCoord - uBlurDir.xy * uDelta);\ncol = col + texture2D(uSrc, texCoord + (uBlurDir.xy + uBlurDir.zw) * uDelta);\ncol = col + texture2D(uSrc, texCoord - (uBlurDir.xy + uBlurDir.zw) * uDelta);\ngl_FragColor = col \/ 5.0;\n}\n<\/script>\n<!-- effect fragment shader template -->\n<script id=\"fx_common_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\nuniform sampler2D uSrc;\nuniform vec2 uDelta;\n\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\n\nvoid main(void) {\ngl_FragColor = texture2D(uSrc, texCoord);\n}\n<\/script>\n<!-- post processing -->\n<script id=\"pp_final_vsh\" type=\"x-shader\/x_vertex\">\nuniform vec3 uResolution;\nattribute vec2 aPosition;\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\nvoid main(void) {\ngl_Position = vec4(aPosition, 0.0, 1.0);\ntexCoord = aPosition.xy * 0.5 + vec2(0.5, 0.5);\nscreenCoord = aPosition.xy * vec2(uResolution.z, 1.0);\n}\n<\/script>\n<script id=\"pp_final_fsh\" type=\"x-shader\/x_fragment\">\n#ifdef GL_ES\n\/\/precision mediump float;\nprecision highp float;\n#endif\nuniform sampler2D uSrc;\nuniform sampler2D uBloom;\nuniform vec2 uDelta;\nvarying vec2 texCoord;\nvarying vec2 screenCoord;\nvoid main(void) {\nvec4 srccol = texture2D(uSrc, texCoord) * 2.0;\nvec4 bloomcol = texture2D(uBloom, texCoord);\nvec4 col;\ncol = srccol + bloomcol * (vec4(1.0) + srccol);\ncol *= smoothstep(1.0, 0.0, pow(length((texCoord - vec2(0.5)) * 2.0), 1.2) * 0.5);\ncol = pow(col, vec4(0.45454545454545)); \/\/(1.0 \/ 2.2)\n\ngl_FragColor = vec4(col.rgb, 1.0);\ngl_FragColor.a = 1.0;\n}\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19586c3 elementor-absolute elementor-widget elementor-widget-html\" data-id=\"19586c3\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\nvar $ = jQuery;\n\"use strict\";\n$(document).ready(function ()\n{\n\n\/\/ Utilities\nvar Vector3 = {};\nvar Matrix44 = {};\nVector3.create = function (x, y, z)\n{\nreturn { 'x': x, 'y': y, 'z': z };\n};\nVector3.dot = function (v0, v1)\n{\nreturn v0.x * v1.x + v0.y * v1.y + v0.z * v1.z;\n};\nVector3.cross = function (v, v0, v1)\n{\nv.x = v0.y * v1.z - v0.z * v1.y;\nv.y = v0.z * v1.x - v0.x * v1.z;\nv.z = v0.x * v1.y - v0.y * v1.x;\n};\nVector3.normalize = function (v)\n{\nvar l = v.x * v.x + v.y * v.y + v.z * v.z;\nif (l > 0.00001) {\nl = 1.0 \/ Math.sqrt(l);\nv.x *= l;\nv.y *= l;\nv.z *= l;\n}\n};\nVector3.arrayForm = function (v)\n{\nif (v.array) {\nv.array[0] = v.x;\nv.array[1] = v.y;\nv.array[2] = v.z;\n}\nelse {\nv.array = new Float32Array([v.x, v.y, v.z]);\n}\nreturn v.array;\n};\nMatrix44.createIdentity = function ()\n{\nreturn new Float32Array([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]);\n};\nMatrix44.loadProjection = function (m, aspect, vdeg, near, far)\n{\nvar h = near * Math.tan(vdeg * Math.PI \/ 180.0 * 0.5) * 2.0;\nvar w = h * aspect;\n\nm[0] = 2.0 * near \/ w;\nm[1] = 0.0;\nm[2] = 0.0;\nm[3] = 0.0;\n\nm[4] = 0.0;\nm[5] = 2.0 * near \/ h;\nm[6] = 0.0;\nm[7] = 0.0;\n\nm[8] = 0.0;\nm[9] = 0.0;\nm[10] = -(far + near) \/ (far - near);\nm[11] = -1.0;\n\nm[12] = 0.0;\nm[13] = 0.0;\nm[14] = -2.0 * far * near \/ (far - near);\nm[15] = 0.0;\n};\nMatrix44.loadLookAt = function (m, vpos, vlook, vup)\n{\nvar frontv = Vector3.create(vpos.x - vlook.x, vpos.y - vlook.y, vpos.z - vlook.z);\nVector3.normalize(frontv);\nvar sidev = Vector3.create(1.0, 0.0, 0.0);\nVector3.cross(sidev, vup, frontv);\nVector3.normalize(sidev);\nvar topv = Vector3.create(1.0, 0.0, 0.0);\nVector3.cross(topv, frontv, sidev);\nVector3.normalize(topv);\n\nm[0] = sidev.x;\nm[1] = topv.x;\nm[2] = frontv.x;\nm[3] = 0.0;\n\nm[4] = sidev.y;\nm[5] = topv.y;\nm[6] = frontv.y;\nm[7] = 0.0;\n\nm[8] = sidev.z;\nm[9] = topv.z;\nm[10] = frontv.z;\nm[11] = 0.0;\n\nm[12] = -(vpos.x * m[0] + vpos.y * m[4] + vpos.z * m[8]);\nm[13] = -(vpos.x * m[1] + vpos.y * m[5] + vpos.z * m[9]);\nm[14] = -(vpos.x * m[2] + vpos.y * m[6] + vpos.z * m[10]);\nm[15] = 1.0;\n};\n\n\/\/\nvar timeInfo = {\n'start': 0, 'prev': 0, \/\/ Date\n'delta': 0, 'elapsed': 0 \/\/ Number(sec)\n};\n\n\/\/\nvar gl;\nvar renderSpec = {\n'width': 0,\n'height': 0,\n'aspect': 1,\n'array': new Float32Array(3),\n'halfWidth': 0,\n'halfHeight': 0,\n'halfArray': new Float32Array(3)\n\/\/ and some render targets. see setViewport()\n};\nrenderSpec.setSize = function (w, h)\n{\nrenderSpec.width = w;\nrenderSpec.height = h;\nrenderSpec.aspect = renderSpec.width \/ renderSpec.height;\nrenderSpec.array[0] = renderSpec.width;\nrenderSpec.array[1] = renderSpec.height;\nrenderSpec.array[2] = renderSpec.aspect;\n\nrenderSpec.halfWidth = Math.floor(w \/ 2);\nrenderSpec.halfHeight = Math.floor(h \/ 2);\nrenderSpec.halfArray[0] = renderSpec.halfWidth;\nrenderSpec.halfArray[1] = renderSpec.halfHeight;\nrenderSpec.halfArray[2] = renderSpec.halfWidth \/ renderSpec.halfHeight;\n};\n\nfunction deleteRenderTarget (rt)\n{\ngl.deleteFramebuffer(rt.frameBuffer);\ngl.deleteRenderbuffer(rt.renderBuffer);\ngl.deleteTexture(rt.texture);\n}\n\nfunction createRenderTarget (w, h)\n{\nvar ret = {\n'width': w,\n'height': h,\n'sizeArray': new Float32Array([w, h, w \/ h]),\n'dtxArray': new Float32Array([1.0 \/ w, 1.0 \/ h])\n};\nret.frameBuffer = gl.createFramebuffer();\nret.renderBuffer = gl.createRenderbuffer();\nret.texture = gl.createTexture();\n\ngl.bindTexture(gl.TEXTURE_2D, ret.texture);\ngl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\ngl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\ngl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\ngl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\ngl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\ngl.bindFramebuffer(gl.FRAMEBUFFER, ret.frameBuffer);\ngl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, ret.texture, 0);\n\ngl.bindRenderbuffer(gl.RENDERBUFFER, ret.renderBuffer);\ngl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, w, h);\ngl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, ret.renderBuffer);\n\ngl.bindTexture(gl.TEXTURE_2D, null);\ngl.bindRenderbuffer(gl.RENDERBUFFER, null);\ngl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\nreturn ret;\n}\n\nfunction compileShader (shtype, shsrc)\n{\nvar retsh = gl.createShader(shtype);\n\ngl.shaderSource(retsh, shsrc);\ngl.compileShader(retsh);\n\nif (!gl.getShaderParameter(retsh, gl.COMPILE_STATUS)) {\nvar errlog = gl.getShaderInfoLog(retsh);\ngl.deleteShader(retsh);\nconsole.error(errlog);\nreturn null;\n}\nreturn retsh;\n}\n\nfunction createShader (vtxsrc, frgsrc, uniformlist, attrlist)\n{\nvar vsh = compileShader(gl.VERTEX_SHADER, vtxsrc);\nvar fsh = compileShader(gl.FRAGMENT_SHADER, frgsrc);\n\nif (vsh == null || fsh == null) {\nreturn null;\n}\n\nvar prog = gl.createProgram();\ngl.attachShader(prog, vsh);\ngl.attachShader(prog, fsh);\n\ngl.deleteShader(vsh);\ngl.deleteShader(fsh);\n\ngl.linkProgram(prog);\nif (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\nvar errlog = gl.getProgramInfoLog(prog);\nconsole.error(errlog);\nreturn null;\n}\n\nif (uniformlist) {\nprog.uniforms = {};\nfor (var i = 0; i < uniformlist.length; i++) {\nprog.uniforms[uniformlist[i]] = gl.getUniformLocation(prog, uniformlist[i]);\n}\n}\n\nif (attrlist) {\nprog.attributes = {};\nfor (var i = 0; i < attrlist.length; i++) {\nvar attr = attrlist[i];\nprog.attributes[attr] = gl.getAttribLocation(prog, attr);\n}\n}\n\nreturn prog;\n}\n\nfunction useShader (prog)\n{\ngl.useProgram(prog);\nfor (var attr in prog.attributes) {\ngl.enableVertexAttribArray(prog.attributes[attr]);;\n}\n}\n\nfunction unuseShader (prog)\n{\nfor (var attr in prog.attributes) {\ngl.disableVertexAttribArray(prog.attributes[attr]);;\n}\ngl.useProgram(null);\n}\n\n\/\/\/\/\/\nvar projection = {\n'angle': 60,\n'nearfar': new Float32Array([0.1, 100.0]),\n'matrix': Matrix44.createIdentity()\n};\nvar camera = {\n'position': Vector3.create(0, 0, 100),\n'lookat': Vector3.create(0, 0, 0),\n'up': Vector3.create(0, 1, 0),\n'dof': Vector3.create(10.0, 4.0, 8.0),\n'matrix': Matrix44.createIdentity()\n};\n\nvar pointFlower = {};\nvar meshFlower = {};\nvar sceneStandBy = false;\n\nvar BlossomParticle = function ()\n{\nthis.velocity = new Array(3);\nthis.rotation = new Array(3);\nthis.position = new Array(3);\nthis.euler = new Array(3);\nthis.size = 1.0;\nthis.alpha = 1.0;\nthis.zkey = 0.0;\n};\n\nBlossomParticle.prototype.setVelocity = function (vx, vy, vz)\n{\nthis.velocity[0] = vx;\nthis.velocity[1] = vy;\nthis.velocity[2] = vz;\n};\n\nBlossomParticle.prototype.setRotation = function (rx, ry, rz)\n{\nthis.rotation[0] = rx;\nthis.rotation[1] = ry;\nthis.rotation[2] = rz;\n};\n\nBlossomParticle.prototype.setPosition = function (nx, ny, nz)\n{\nthis.position[0] = nx;\nthis.position[1] = ny;\nthis.position[2] = nz;\n};\n\nBlossomParticle.prototype.setEulerAngles = function (rx, ry, rz)\n{\nthis.euler[0] = rx;\nthis.euler[1] = ry;\nthis.euler[2] = rz;\n};\n\nBlossomParticle.prototype.setSize = function (s)\n{\nthis.size = s;\n};\n\nBlossomParticle.prototype.update = function (dt, et)\n{\nthis.position[0] += this.velocity[0] * dt;\nthis.position[1] += this.velocity[1] * dt;\nthis.position[2] += this.velocity[2] * dt;\n\nthis.euler[0] += this.rotation[0] * dt;\nthis.euler[1] += this.rotation[1] * dt;\nthis.euler[2] += this.rotation[2] * dt;\n};\n\nfunction createPointFlowers ()\n{\n\/\/ get point sizes\nvar prm = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);\nrenderSpec.pointSize = { 'min': prm[0], 'max': prm[1] };\n\nvar vtxsrc = document.getElementById(\"sakura_point_vsh\").textContent;\nvar frgsrc = document.getElementById(\"sakura_point_fsh\").textContent;\n\npointFlower.program = createShader(\nvtxsrc, frgsrc,\n['uProjection', 'uModelview', 'uResolution', 'uOffset', 'uDOF', 'uFade'],\n['aPosition', 'aEuler', 'aMisc']\n);\n\nuseShader(pointFlower.program);\npointFlower.offset = new Float32Array([0.0, 0.0, 0.0]);\npointFlower.fader = Vector3.create(0.0, 10.0, 0.0);\n\n\/\/ paramerters: velocity[3], rotate[3]\npointFlower.numFlowers = 1600;\npointFlower.particles = new Array(pointFlower.numFlowers);\n\/\/ vertex attributes {position[3], euler_xyz[3], size[1]}\npointFlower.dataArray = new Float32Array(pointFlower.numFlowers * (3 + 3 + 2));\npointFlower.positionArrayOffset = 0;\npointFlower.eulerArrayOffset = pointFlower.numFlowers * 3;\npointFlower.miscArrayOffset = pointFlower.numFlowers * 6;\n\npointFlower.buffer = gl.createBuffer();\ngl.bindBuffer(gl.ARRAY_BUFFER, pointFlower.buffer);\ngl.bufferData(gl.ARRAY_BUFFER, pointFlower.dataArray, gl.DYNAMIC_DRAW);\ngl.bindBuffer(gl.ARRAY_BUFFER, null);\n\nunuseShader(pointFlower.program);\n\nfor (var i = 0; i < pointFlower.numFlowers; i++) {\npointFlower.particles[i] = new BlossomParticle();\n}\n}\n\nfunction initPointFlowers ()\n{\n\/\/area\npointFlower.area = Vector3.create(20.0, 20.0, 20.0);\npointFlower.area.x = pointFlower.area.y * renderSpec.aspect;\n\npointFlower.fader.x = 10.0; \/\/env fade start\npointFlower.fader.y = pointFlower.area.z; \/\/env fade half\npointFlower.fader.z = 0.1;  \/\/near fade start\n\n\/\/particles\nvar PI2 = Math.PI * 2.0;\nvar tmpv3 = Vector3.create(0, 0, 0);\nvar tmpv = 0;\nvar symmetryrand = function () { return (Math.random() * 2.0 - 1.0); };\nfor (var i = 0; i < pointFlower.numFlowers; i++) {\nvar tmpprtcl = pointFlower.particles[i];\n\n\/\/velocity\ntmpv3.x = symmetryrand() * 0.3 + 0.8;\ntmpv3.y = symmetryrand() * 0.2 - 1.0;\ntmpv3.z = symmetryrand() * 0.3 + 0.5;\nVector3.normalize(tmpv3);\ntmpv = 2.0 + Math.random() * 1.0;\ntmpprtcl.setVelocity(tmpv3.x * tmpv, tmpv3.y * tmpv, tmpv3.z * tmpv);\n\n\/\/rotation\ntmpprtcl.setRotation(\nsymmetryrand() * PI2 * 0.5,\nsymmetryrand() * PI2 * 0.5,\nsymmetryrand() * PI2 * 0.5\n);\n\n\/\/position\ntmpprtcl.setPosition(\nsymmetryrand() * pointFlower.area.x,\nsymmetryrand() * pointFlower.area.y,\nsymmetryrand() * pointFlower.area.z\n);\n\n\/\/euler\ntmpprtcl.setEulerAngles(\nMath.random() * Math.PI * 2.0,\nMath.random() * Math.PI * 2.0,\nMath.random() * Math.PI * 2.0\n);\n\n\/\/size\ntmpprtcl.setSize(0.9 + Math.random() * 0.1);\n}\n}\n\nfunction renderPointFlowers ()\n{\n\/\/update\nvar PI2 = Math.PI * 2.0;\nvar limit = [pointFlower.area.x, pointFlower.area.y, pointFlower.area.z];\nvar repeatPos = function (prt, cmp, limit)\n{\nif (Math.abs(prt.position[cmp]) - prt.size * 0.5 > limit) {\n\/\/out of area\nif (prt.position[cmp] > 0) {\nprt.position[cmp] -= limit * 2.0;\n}\nelse {\nprt.position[cmp] += limit * 2.0;\n}\n}\n};\nvar repeatEuler = function (prt, cmp)\n{\nprt.euler[cmp] = prt.euler[cmp] % PI2;\nif (prt.euler[cmp] < 0.0) {\nprt.euler[cmp] += PI2;\n}\n};\n\nfor (var i = 0; i < pointFlower.numFlowers; i++) {\nvar prtcl = pointFlower.particles[i];\nprtcl.update(timeInfo.delta, timeInfo.elapsed);\nrepeatPos(prtcl, 0, pointFlower.area.x);\nrepeatPos(prtcl, 1, pointFlower.area.y);\nrepeatPos(prtcl, 2, pointFlower.area.z);\nrepeatEuler(prtcl, 0);\nrepeatEuler(prtcl, 1);\nrepeatEuler(prtcl, 2);\n\nprtcl.alpha = 1.0;\/\/(pointFlower.area.z - prtcl.position[2]) * 0.5;\n\nprtcl.zkey = (camera.matrix[2] * prtcl.position[0]\n+ camera.matrix[6] * prtcl.position[1]\n+ camera.matrix[10] * prtcl.position[2]\n+ camera.matrix[14]);\n}\n\n\/\/ sort\npointFlower.particles.sort(function (p0, p1) { return p0.zkey - p1.zkey; });\n\n\/\/ update data\nvar ipos = pointFlower.positionArrayOffset;\nvar ieuler = pointFlower.eulerArrayOffset;\nvar imisc = pointFlower.miscArrayOffset;\nfor (var i = 0; i < pointFlower.numFlowers; i++) {\nvar prtcl = pointFlower.particles[i];\npointFlower.dataArray[ipos] = prtcl.position[0];\npointFlower.dataArray[ipos + 1] = prtcl.position[1];\npointFlower.dataArray[ipos + 2] = prtcl.position[2];\nipos += 3;\npointFlower.dataArray[ieuler] = prtcl.euler[0];\npointFlower.dataArray[ieuler + 1] = prtcl.euler[1];\npointFlower.dataArray[ieuler + 2] = prtcl.euler[2];\nieuler += 3;\npointFlower.dataArray[imisc] = prtcl.size;\npointFlower.dataArray[imisc + 1] = prtcl.alpha;\nimisc += 2;\n}\n\n\/\/draw\ngl.enable(gl.BLEND);\n\/\/gl.disable(gl.DEPTH_TEST);\ngl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\nvar prog = pointFlower.program;\nuseShader(prog);\n\ngl.uniformMatrix4fv(prog.uniforms.uProjection, false, projection.matrix);\ngl.uniformMatrix4fv(prog.uniforms.uModelview, false, camera.matrix);\ngl.uniform3fv(prog.uniforms.uResolution, renderSpec.array);\ngl.uniform3fv(prog.uniforms.uDOF, Vector3.arrayForm(camera.dof));\ngl.uniform3fv(prog.uniforms.uFade, Vector3.arrayForm(pointFlower.fader));\n\ngl.bindBuffer(gl.ARRAY_BUFFER, pointFlower.buffer);\ngl.bufferData(gl.ARRAY_BUFFER, pointFlower.dataArray, gl.DYNAMIC_DRAW);\n\ngl.vertexAttribPointer(prog.attributes.aPosition, 3, gl.FLOAT, false, 0, pointFlower.positionArrayOffset * Float32Array.BYTES_PER_ELEMENT);\ngl.vertexAttribPointer(prog.attributes.aEuler, 3, gl.FLOAT, false, 0, pointFlower.eulerArrayOffset * Float32Array.BYTES_PER_ELEMENT);\ngl.vertexAttribPointer(prog.attributes.aMisc, 2, gl.FLOAT, false, 0, pointFlower.miscArrayOffset * Float32Array.BYTES_PER_ELEMENT);\n\n\/\/ doubler\nfor (var i = 1; i < 2; i++) {\nvar zpos = i * -2.0;\npointFlower.offset[0] = pointFlower.area.x * -1.0;\npointFlower.offset[1] = pointFlower.area.y * -1.0;\npointFlower.offset[2] = pointFlower.area.z * zpos;\ngl.uniform3fv(prog.uniforms.uOffset, pointFlower.offset);\ngl.drawArrays(gl.POINT, 0, pointFlower.numFlowers);\n\npointFlower.offset[0] = pointFlower.area.x * -1.0;\npointFlower.offset[1] = pointFlower.area.y * 1.0;\npointFlower.offset[2] = pointFlower.area.z * zpos;\ngl.uniform3fv(prog.uniforms.uOffset, pointFlower.offset);\ngl.drawArrays(gl.POINT, 0, pointFlower.numFlowers);\n\npointFlower.offset[0] = pointFlower.area.x * 1.0;\npointFlower.offset[1] = pointFlower.area.y * -1.0;\npointFlower.offset[2] = pointFlower.area.z * zpos;\ngl.uniform3fv(prog.uniforms.uOffset, pointFlower.offset);\ngl.drawArrays(gl.POINT, 0, pointFlower.numFlowers);\n\npointFlower.offset[0] = pointFlower.area.x * 1.0;\npointFlower.offset[1] = pointFlower.area.y * 1.0;\npointFlower.offset[2] = pointFlower.area.z * zpos;\ngl.uniform3fv(prog.uniforms.uOffset, pointFlower.offset);\ngl.drawArrays(gl.POINT, 0, pointFlower.numFlowers);\n}\n\n\/\/main\npointFlower.offset[0] = 0.0;\npointFlower.offset[1] = 0.0;\npointFlower.offset[2] = 0.0;\ngl.uniform3fv(prog.uniforms.uOffset, pointFlower.offset);\ngl.drawArrays(gl.POINT, 0, pointFlower.numFlowers);\n\ngl.bindBuffer(gl.ARRAY_BUFFER, null);\nunuseShader(prog);\n\ngl.enable(gl.DEPTH_TEST);\ngl.disable(gl.BLEND);\n}\n\n\/\/ effects\n\/\/common util\nfunction createEffectProgram (vtxsrc, frgsrc, exunifs, exattrs)\n{\nvar ret = {};\nvar unifs = ['uResolution', 'uSrc', 'uDelta'];\nif (exunifs) {\nunifs = unifs.concat(exunifs);\n}\nvar attrs = ['aPosition'];\nif (exattrs) {\nattrs = attrs.concat(exattrs);\n}\n\nret.program = createShader(vtxsrc, frgsrc, unifs, attrs);\nuseShader(ret.program);\n\nret.dataArray = new Float32Array([\n-1.0, -1.0,\n1.0, -1.0,\n-1.0, 1.0,\n1.0, 1.0\n]);\nret.buffer = gl.createBuffer();\ngl.bindBuffer(gl.ARRAY_BUFFER, ret.buffer);\ngl.bufferData(gl.ARRAY_BUFFER, ret.dataArray, gl.STATIC_DRAW);\n\ngl.bindBuffer(gl.ARRAY_BUFFER, null);\nunuseShader(ret.program);\n\nreturn ret;\n}\n\n\/\/ basic usage\n\/\/ useEffect(prog, srctex({'texture':texid, 'dtxArray':(f32)[dtx, dty]})); \/\/basic initialize\n\/\/ gl.uniform**(...); \/\/additional uniforms\n\/\/ drawEffect()\n\/\/ unuseEffect(prog)\n\/\/ TEXTURE0 makes src\nfunction useEffect (fxobj, srctex)\n{\nvar prog = fxobj.program;\nuseShader(prog);\ngl.uniform3fv(prog.uniforms.uResolution, renderSpec.array);\n\nif (srctex != null) {\ngl.uniform2fv(prog.uniforms.uDelta, srctex.dtxArray);\ngl.uniform1i(prog.uniforms.uSrc, 0);\n\ngl.activeTexture(gl.TEXTURE0);\ngl.bindTexture(gl.TEXTURE_2D, srctex.texture);\n}\n}\nfunction drawEffect (fxobj)\n{\ngl.bindBuffer(gl.ARRAY_BUFFER, fxobj.buffer);\ngl.vertexAttribPointer(fxobj.program.attributes.aPosition, 2, gl.FLOAT, false, 0, 0);\ngl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n}\nfunction unuseEffect (fxobj)\n{\nunuseShader(fxobj.program);\n}\n\nvar effectLib = {};\nfunction createEffectLib ()\n{\n\nvar vtxsrc, frgsrc;\n\/\/common\nvar cmnvtxsrc = document.getElementById(\"fx_common_vsh\").textContent;\n\n\/\/background\nfrgsrc = document.getElementById(\"bg_fsh\").textContent;\neffectLib.sceneBg = createEffectProgram(cmnvtxsrc, frgsrc, ['uTimes'], null);\n\n\/\/ make brightpixels buffer\nfrgsrc = document.getElementById(\"fx_brightbuf_fsh\").textContent;\neffectLib.mkBrightBuf = createEffectProgram(cmnvtxsrc, frgsrc, null, null);\n\n\/\/ direction blur\nfrgsrc = document.getElementById(\"fx_dirblur_r4_fsh\").textContent;\neffectLib.dirBlur = createEffectProgram(cmnvtxsrc, frgsrc, ['uBlurDir'], null);\n\n\/\/final composite\nvtxsrc = document.getElementById(\"pp_final_vsh\").textContent;\nfrgsrc = document.getElementById(\"pp_final_fsh\").textContent;\neffectLib.finalComp = createEffectProgram(vtxsrc, frgsrc, ['uBloom'], null);\n}\n\n\/\/ background\nfunction createBackground ()\n{\n\/\/console.log(\"create background\");\n}\nfunction initBackground ()\n{\n\/\/console.log(\"init background\");\n}\nfunction renderBackground ()\n{\ngl.disable(gl.DEPTH_TEST);\n\nuseEffect(effectLib.sceneBg, null);\ngl.uniform2f(effectLib.sceneBg.program.uniforms.uTimes, timeInfo.elapsed, timeInfo.delta);\ndrawEffect(effectLib.sceneBg);\nunuseEffect(effectLib.sceneBg);\ngl.enable(gl.DEPTH_TEST);\n}\n\n\/\/ post process\nvar postProcess = {};\nfunction createPostProcess ()\n{\n\/\/console.log(\"create post process\");\n}\nfunction initPostProcess ()\n{\n\/\/console.log(\"init post process\");\n}\n\nfunction renderPostProcess ()\n{\ngl.enable(gl.TEXTURE_2D);\ngl.disable(gl.DEPTH_TEST);\nvar bindRT = function (rt, isclear)\n{\ngl.bindFramebuffer(gl.FRAMEBUFFER, rt.frameBuffer);\ngl.viewport(0, 0, rt.width, rt.height);\nif (isclear) {\ngl.clearColor(0, 0, 0, 0);\ngl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n}\n};\n\n\/\/make bright buff\nbindRT(renderSpec.wHalfRT0, true);\nuseEffect(effectLib.mkBrightBuf, renderSpec.mainRT);\ndrawEffect(effectLib.mkBrightBuf);\nunuseEffect(effectLib.mkBrightBuf);\n\n\/\/ make bloom\nfor (var i = 0; i < 2; i++) {\nvar p = 1.5 + 1 * i;\nvar s = 2.0 + 1 * i;\nbindRT(renderSpec.wHalfRT1, true);\nuseEffect(effectLib.dirBlur, renderSpec.wHalfRT0);\ngl.uniform4f(effectLib.dirBlur.program.uniforms.uBlurDir, p, 0.0, s, 0.0);\ndrawEffect(effectLib.dirBlur);\nunuseEffect(effectLib.dirBlur);\n\nbindRT(renderSpec.wHalfRT0, true);\nuseEffect(effectLib.dirBlur, renderSpec.wHalfRT1);\ngl.uniform4f(effectLib.dirBlur.program.uniforms.uBlurDir, 0.0, p, 0.0, s);\ndrawEffect(effectLib.dirBlur);\nunuseEffect(effectLib.dirBlur);\n}\n\n\/\/display\ngl.bindFramebuffer(gl.FRAMEBUFFER, null);\ngl.viewport(0, 0, renderSpec.width, renderSpec.height);\ngl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\nuseEffect(effectLib.finalComp, renderSpec.mainRT);\ngl.uniform1i(effectLib.finalComp.program.uniforms.uBloom, 1);\ngl.activeTexture(gl.TEXTURE1);\ngl.bindTexture(gl.TEXTURE_2D, renderSpec.wHalfRT0.texture);\ndrawEffect(effectLib.finalComp);\nunuseEffect(effectLib.finalComp);\n\ngl.enable(gl.DEPTH_TEST);\n}\n\n\/\/\/\/\/\nvar SceneEnv = {};\nfunction createScene ()\n{\ncreateEffectLib();\ncreateBackground();\ncreatePointFlowers();\ncreatePostProcess();\nsceneStandBy = true;\n}\n\nfunction initScene ()\n{\ninitBackground();\ninitPointFlowers();\ninitPostProcess();\n\n\/\/camera.position.z = 17.320508;\ncamera.position.z = pointFlower.area.z + projection.nearfar[0];\nprojection.angle = Math.atan2(pointFlower.area.y, camera.position.z + pointFlower.area.z) * 180.0 \/ Math.PI * 2.0;\nMatrix44.loadProjection(projection.matrix, renderSpec.aspect, projection.angle, projection.nearfar[0], projection.nearfar[1]);\n}\n\nfunction renderScene ()\n{\n\/\/draw\nMatrix44.loadLookAt(camera.matrix, camera.position, camera.lookat, camera.up);\n\ngl.enable(gl.DEPTH_TEST);\n\n\/\/gl.bindFramebuffer(gl.FRAMEBUFFER, null);\ngl.bindFramebuffer(gl.FRAMEBUFFER, renderSpec.mainRT.frameBuffer);\ngl.viewport(0, 0, renderSpec.mainRT.width, renderSpec.mainRT.height);\ngl.clearColor(0.005, 0, 0.05, 0);\ngl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\nrenderBackground();\nrenderPointFlowers();\nrenderPostProcess();\n}\n\n\/\/\/\/\/\nfunction onResize (e)\n{\nmakeCanvasFullScreen(document.getElementById(\"sakura\"));\nsetViewports();\nif (sceneStandBy) {\ninitScene();\n}\n}\n\nfunction setViewports ()\n{\nrenderSpec.setSize(gl.canvas.width, gl.canvas.height);\n\ngl.clearColor(0.2, 0.2, 0.5, 1.0);\ngl.viewport(0, 0, renderSpec.width, renderSpec.height);\n\nvar rtfunc = function (rtname, rtw, rth)\n{\nvar rt = renderSpec[rtname];\nif (rt) deleteRenderTarget(rt);\nrenderSpec[rtname] = createRenderTarget(rtw, rth);\n};\nrtfunc('mainRT', renderSpec.width, renderSpec.height);\nrtfunc('wFullRT0', renderSpec.width, renderSpec.height);\nrtfunc('wFullRT1', renderSpec.width, renderSpec.height);\nrtfunc('wHalfRT0', renderSpec.halfWidth, renderSpec.halfHeight);\nrtfunc('wHalfRT1', renderSpec.halfWidth, renderSpec.halfHeight);\n}\n\nfunction render ()\n{\nrenderScene();\n}\n\nvar animating = true;\nfunction toggleAnimation (elm)\n{\nanimating ^= true;\nif (animating) animate();\nif (elm) {\nelm.innerHTML = animating ? \"Stop\" : \"Start\";\n}\n}\n\nfunction stepAnimation ()\n{\nif (!animating) animate();\n}\n\nfunction animate ()\n{\nvar curdate = new Date();\ntimeInfo.elapsed = (curdate - timeInfo.start) \/ 1000.0;\ntimeInfo.delta = (curdate - timeInfo.prev) \/ 1000.0;\ntimeInfo.prev = curdate;\n\nif (animating) requestAnimationFrame(animate);\nrender();\n}\n\nfunction makeCanvasFullScreen (canvas)\n{\nvar b = document.body;\nvar d = document.documentElement;\nfullw = Math.max(b.clientWidth, b.scrollWidth, d.scrollWidth, d.clientWidth);\nfullh = Math.max(b.clientHeight, b.scrollHeight, d.scrollHeight, d.clientHeight);\ncanvas.width = fullw;\ncanvas.height = fullh;\n}\n\nwindow.addEventListener('load', function (e)\n{\nvar canvas = document.getElementById(\"sakura\");\ntry {\nmakeCanvasFullScreen(canvas);\ngl = canvas.getContext('experimental-webgl');\n} catch (e) {\nalert(\"WebGL not supported.\" + e);\nconsole.error(e);\nreturn;\n}\n\nwindow.addEventListener('resize', onResize);\n\nsetViewports();\ncreateScene();\ninitScene();\n\ntimeInfo.start = new Date();\ntimeInfo.prev = timeInfo.start;\nanimate();\n});\n\n\/\/set window.requestAnimationFrame\n(function (w, r)\n{\nw['r' + r] = w['r' + r] || w['webkitR' + r] || w['mozR' + r] || w['msR' + r] || w['oR' + r] || function (c) { w.setTimeout(c, 1000 \/ 60); };\n})(window, 'equestAnimationFrame');\n\n});\n\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c90117 elementor-absolute elementor-widget elementor-widget-html\" data-id=\"6c90117\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<canvas id=\"sakura\" class=\"bg-animation\" width=\"1920\" height=\"880\" style=\"\n    opacity: 0.5;\n\"><\/canvas>\n<div class=\"btnbg\"><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-721d44c8 elementor-widget elementor-widget-heading\" data-id=\"721d44c8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.9.2 - 21-12-2022 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><span class=\"elementor-heading-title elementor-size-default\">WE ARE<\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-476a67ee content_main_left_wrapper_top elementor-widget elementor-widget-heading\" data-id=\"476a67ee\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Coming Soon<\/h1>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4aa4393b elementor-widget elementor-widget-text-editor\" data-id=\"4aa4393b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.9.2 - 21-12-2022 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\tOur website is under construction. We are working very hard to give you the best experience with this one.\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2935ab48 elementor-widget elementor-widget-html\" data-id=\"2935ab48\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"countdown\" class=\"datecountdown row\">\r\n<div id=\"day\"><\/div>\r\n<div id=\"hours\"><\/div>\r\n<div id=\"minutes\"><\/div>\r\n<div id=\"seconds\"><\/div>\r\n<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2930ba elementor-widget elementor-widget-html\" data-id=\"c2930ba\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"btn_wrapper\">\r\n<a class=\"btn_notify btn-hover btn-item\"><span><\/span>NOTIFY ME<\/a>\r\n<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f77cae2 notify-form  elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f77cae2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-309ad92 contents_in \" data-id=\"309ad92\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6251a34 elementor-widget elementor-widget-heading\" data-id=\"6251a34\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<span class=\"elementor-heading-title elementor-size-default\"><span class=\"close\">\u00d7<\/span>\n<small class=\"tagline\">STAY IN TOUCH<\/small><\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dee24d1 elementor-widget elementor-widget-heading\" data-id=\"dee24d1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<span class=\"elementor-heading-title elementor-size-default\"> <h2 class=\"site-title\">We Are Almost Here<\/h2> <\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-00a7df7 elementor-widget elementor-widget-heading\" data-id=\"00a7df7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<span class=\"elementor-heading-title elementor-size-default\"><div class=\"notify_desc\">Subscribe to our newsletter and we will send you a notification about the launch of our brand new site.<\/div><\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b4aa74 eael-contact-form-7-button-align-left eael-contact-form-7-button-custom elementor-widget elementor-widget-eael-contact-form-7\" data-id=\"7b4aa74\" data-element_type=\"widget\" data-widget_type=\"eael-contact-form-7.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"eael-contact-form-7-wrapper\">\n                <div class=\"eael-contact-form eael-contact-form-7 eael-contact-form-7b4aa74 placeholder-show eael-contact-form-align-default\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f5410-o1\" lang=\"en-US\" dir=\"ltr\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/pages\/1032#wpcf7-f5410-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<div style=\"display: none;\">\n<input type=\"hidden\" name=\"_wpcf7\" value=\"5410\" \/>\n<input type=\"hidden\" name=\"_wpcf7_version\" value=\"5.7.4\" \/>\n<input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/>\n<input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f5410-o1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/>\n<input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/div>\n<div class=\"contact-top\">\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email form-control\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Email Address*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n\t<\/p>\n\t<div class=\"notify_submit_btn\">\n\t\t<p><input class=\"wpcf7-form-control has-spinner wpcf7-submit submit-btn\" type=\"submit\" value=\"SEND\" \/>\n\t\t<\/p>\n\t<\/div>\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n            <\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-1eff2657 content_main_right h-100\" data-id=\"1eff2657\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-158cac4e h-100 elementor-widget elementor-widget-html\" data-id=\"158cac4e\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"h_sidebar_slider h-100\">\r\n<div class=\"bg-image\" style=\"background-image: url('https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/2023\/01\/header_sidebar_slider_1.png')\">\r\n    <div class=\"custom-slider-text\">\r\n        <h5>Unicorn Bath<\/h5>\r\n        <p>Photography<\/p>\r\n    <\/div>\r\n<\/div>\r\n<div class=\"bg-image\" style=\"background-image: url('https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/2023\/01\/contact_sidebar_image.png')\">\r\n    <div class=\"custom-slider-text\">\r\n        <h5>Unicorn Bath<\/h5>\r\n        <p>Photography<\/p>\r\n    <\/div>\r\n<\/div>\r\n<div class=\"bg-image\" style=\"background-image: url('https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-content\/uploads\/2023\/01\/header_sidebar_slider_1.png')\">\r\n    <div class=\"custom-slider-text\">\r\n        <h5>Unicorn Bath<\/h5>\r\n        <p>Photography<\/p>\r\n    <\/div>\r\n<\/div>\r\n<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24d5e81 social_icons main_social_icons elementor-list-item-link-inline elementor-hidden-desktop elementor-hidden-tablet elementor-icon-list--layout-traditional elementor-widget elementor-widget-icon-list\" data-id=\"24d5e81\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.facebook.com\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">FB<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/twitter.com\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">TW<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.linkedin.com\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">IN<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5b7dc038 elementor-section-full_width elementor-section-height-full elementor-section-items-stretch offcanvas__area elementor-section-height-default\" data-id=\"5b7dc038\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-634d600a offcanvas__left\" data-id=\"634d600a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-4925866f offcanvas__middle\" data-id=\"4925866f\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3ee087e6 eael-hamburger--none offcanvas__links h-100 eael-simple-menu-hamburger-align-right elementor-widget elementor-widget-eael-simple-menu\" data-id=\"3ee087e6\" data-element_type=\"widget\" data-widget_type=\"eael-simple-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div data-hamburger-icon=\"&lt;i aria-hidden=&quot;true&quot; class=&quot;fas fa-bars&quot;&gt;&lt;\/i&gt;\" data-indicator-class=\"fas fa-angle-down\" data-dropdown-indicator-class=\"fas fa-angle-down\" class=\"eael-simple-menu-container eael-simple-menu-align-left eael-simple-menu--stretch eael-simple-menu-dropdown-align-left preset-2\" data-hamburger-breakpoints=\"{&quot;mobile&quot;:&quot;Mobile (&gt; 768px)&quot;,&quot;tablet&quot;:&quot;Tablet (&gt; 1024px)&quot;,&quot;none&quot;:&quot;None&quot;}\" data-hamburger-device=\"none\"><ul id=\"menu-theme-header-menu\" class=\"eael-simple-menu eael-simple-menu-dropdown-animate-to-top eael-simple-menu-indicator eael-simple-menu-vertical\"><li id=\"menu-item-4872\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-4872\"><a href=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/\">Home<\/a><\/li>\n<li id=\"menu-item-546\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-546\"><a href=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/about\/\">About Us<\/a><\/li>\n<li id=\"menu-item-547\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-547\"><a href=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/portfolio\/\">Portfolio<\/a><\/li>\n<li id=\"menu-item-548\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-548\"><a href=\"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/contact\/\">Contact<\/a><\/li>\n<\/ul><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-525a8960 offcanvas__right\" data-id=\"525a8960\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-664ea5a4 elementor-widget elementor-widget-html\" data-id=\"664ea5a4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"offcanvas__contact\">\r\n<h3>Get In Touch<\/h3>\r\n<ul>\r\n<li><a href=\"tel:+1 234 567 8899\">+1 234 567 8899<\/a>\r\n<\/li>\r\n\r\n<li><a href=\"mailto:hello@bramha.com\">hello@bramha.com<\/a>\r\n<\/li>\r\n\r\n<li>230 Norman Street New York,QC (USA) H8R 1A1<\/li>\r\n<\/ul>\r\n<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1dec1853 elementor-widget elementor-widget-html\" data-id=\"1dec1853\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div>Design By The_Krishna 2023<\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FB TW IN WE ARE Coming Soon Our website is under construction. We are working very hard to give you the best experience with this one. NOTIFY ME \u00d7 STAY IN TOUCH We Are Almost Here Subscribe to our newsletter and we will send you a notification about the launch of our brand new site. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1032","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/pages\/1032"}],"collection":[{"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":44,"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/pages\/1032\/revisions"}],"predecessor-version":[{"id":5562,"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/pages\/1032\/revisions\/5562"}],"wp:attachment":[{"href":"https:\/\/up2client.com\/envato\/bramha\/bramha_preview\/wp-json\/wp\/v2\/media?parent=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}