<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Codercat Studio</title>
    <link>https://codercat.tk</link>
    <description>Projects and blog posts by Codercat Studio.</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 16 Mar 2026 12:00:24 +0800</lastBuildDate>
    <pubDate>Mon, 16 Mar 2026 12:00:24 +0800</pubDate>

    
        <item>
            <title>[SEDUCTRESS]</title>
            <link>https://codercat.tk/seductress</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[SEDUCTRESS] <i>/she needs you, more/</i></h1>
    <section>
        <video playsinline="" controls="" poster="sed-thumb.jpg">
            <source src="https://cdn.codercat.xyz/vid/sed_final_001.mov" type="video/mp4"/>
        </video>
    </section>
    <section>
        <h1>[+]Origin</h1>
        <p>
            At some point during a fascination with the praying mantis, I came across a term called <i>Sexual
                Cannibalism</i>. It&#39;s a trait of female
            praying mantes and other carnivorous insects, who eat their mates prior to, during, or after copulation.
            There
            are a few
            theories as to why this
            behaviour evolved -- the theory of adaptive foraging, for example, suggests that the mate may be more
            valueable
            as a meal than a partner
            (lol).
            <br/><br/>
            I had also been watching Scavengers Reign at the time, and completely in awe of some of the wildly obscure
            and chained
            biological
            processes that the animation team had designed.
            <br/><br/>
            These themes eventually fused together in my head to create the concept of the Alien Seductress -- an alien
            that is sent to earth to assist her species in their modest goal of biological survival. In this universe,
            an alien
            species discovered codes in the
            human DNA that could be used to optimize their reproduction cycle.
            <br/><br/>
            They observed humans and the absolute power of female seduction on men, and devised a strategy to retrieve
            the human specimen:
            sending disguised females down to earth to seduce, capture, and feed males into their biological baby making
            machines...
            <br/><br/>
        </p>
        <figure>
            <img src="https://codercat.tk/seductress/sketchToHoudini1.jpg"/>
            <figcaption>Sketches of the baby making machine</figcaption>
        </figure>
        <p>
            This concept was probably pulsing in my head for over a year! I played with some storyboards and sketches,
            and talked about it
            a
            <i>lot</i>, but could never really move the idea along. Until Aiji came to me!
            <br/><br/>
            Aiji is a director, photographer, and
            body artist,
            from Nizhny Novgorod and with roots in Kyrgystan. We met in 2024 in Tbilisi, and I fell in love with her
            soft
            charm and whimsical vision of beauty and femininity. We were so in line creatively, but sadly did not have
            enough time
            to create together before her move to Belgrade.

            <br/><br/>
            In 2025, our paths aligned again in Tbilisi and I told her the story of
            The Seductress.
            <br/><br/>
        </p>
    </section>

    <section>
        <h1>[+]PRODUCTION</h1>
        <p>
            Aiji was exactly what this story needed. She jumped in as the director, and brought life to the concept with
            a
            romantic eye and lo-fi look. I remember how inspired I was after she first showed me the treatment she made
            to
            convey our ideas to the Styling, Casting, and Makeup team.
        </p>

        <figure>
            <img src="https://codercat.tk/seductress/treatment.jpg"/>
            <figcaption>Section of Aiji&#39;s Treatment for Seductress</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/seductress/cast.jpg"/>
            <figcaption>Seductress and her Victim Casting</figcaption>
        </figure>
        <p>

            We decided to have the Seductress&#39;s lair be at the stylist&#39;s apartment, as it <i>conveniently</i> fit the
            storyline and our production
            constraints! We shot the film in reverse with the apartment scene being first, to have the
            bodypaint be fresh. We experimented with shadow play scenes to bridge the gap between the lovely couple
            entering
            the apartment and seeing the victim in the machine, without having to do any VFX or complex acting.
            <br/><br/>
            We wandered around the underground passages of Tbilisi for the
            &#34;night walk home&#34; scenes, and ended
            with the bar for the &#34;seduction&#34; scenes, and a few Alkhanaidze&#39;s :)
        </p>
        <figure>
            <img src="https://codercat.tk/seductress/makeup.jpg"/>
            <figcaption>Aiji bodypainting the Seductress</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/seductress/home2.jpg"/>
            <figcaption>Shadow play in the Seductress&#39;s Lair</figcaption>
        </figure>

    </section>

    <section>
        <h1>[+]Post Production</h1>
        <figure>
            <video src="https://cdn.codercat.xyz/vid/sed_bts_002.mp4" controls=""></video>
            <figcaption>Full behind the scenes clip</figcaption>
        </figure>
        <p>

            Post went smoothly overall, <i>yes the nodes in the screen capture below are normal</i>. We had designed the
            story and shots in a
            way where VFX complexity was quite low.
            There was only one shot that needed compositing, which we shot on a DSLR to have cleaner footage for
            tracking.
            As always, designing the 3D element went through phases of creative blocks and brilliance. The
            final inspiration that made it click for me was strangely a drawing of the human pelvis in an anatomy book.

            <br/><br/>
            I could not have made this baby making machine without <a href="https://sketchfab.com/3d-models/sweet-child-ed574bbe40a04e93af6c344de8373826" target="_blank">Leneeen</a> and the &#34;Sweet Child&#34; that they kindly modeled and shared for free on
            Sketchfab.
            I used it pretty much as is for the alien baby, and it honestly made me smile everytime I thought about
            it (smiling as i&#39;m typing this!).
        </p>
        <figure>
            <img src="https://codercat.tk/seductress/nodes.jpg"/>
            <figcaption>You know how Houdini be sometimes.</figcaption>
        </figure>

        <figure>
            <img src="https://codercat.tk/seductress/child.jpg"/>
            <figcaption>What the Seductress really looks like!</figcaption>
        </figure>
    </section>
    <section>
        <h1>[+]Credits</h1>
        <p>
            <a href="https://www.instagram.com/aiji.yes/" target="_blank">Aiji</a> - Director, Camera, Body Art
            <br/>
            <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - VFX &amp; Creative Concept
            <br/>
            <a href="https://www.instagram.com/hurrayfor/" target="_blank">Ksusha</a> - Styling
            <br/>
            <a href="https://www.instagram.com/needlesmichelle/" target="_blank">Nikita</a> - Makeup, Body Art Assistant
            <br/>
            <a href="https://www.instagram.com/lllllllllijulllllllll/" target="_blank">Julia</a> - Alien Girl
            <br/>
            <a href="https://www.instagram.com/riznichjj/" target="_blank">Vlad</a> - The Victim
            <br/>
            <a href="https://www.instagram.com/ponochka.vd/" target="_blank">Viki</a> - Second Camera
            <br/>
            <a href="https://www.instagram.com/solvani.jewelry/" target="_blank">Solvani Jewelry</a> - Jewelry
            <br/>
            <a href="https://sketchfab.com/3d-models/sweet-child-ed574bbe40a04e93af6c344de8373826" target="_blank">Leneeen</a> - Sweet Child 3D Model
            <br/>
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[NGINX VISUALIZER]</title>
            <link>https://codercat.tk/nginx-visualizer</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[NGINX VISUALIZER] <i>/defend your castle/</i></h1>

  <video playsinline="" controls="" poster="thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/nginxviz.mov" type="video/mp4"/>
  </video>

  <section>
    <h1>[+]About</h1>
    <p>
      Above is a demo video of our realtime NGINX log visualizer, created in the style of <a href="http://www.xgenstudios.com/play/castle" target="_blank">Defend your Castle</a>. When connected to an NGINX
      log, the app dispays incoming requests as they approach the corresponding server.
      <br/>
      <br/>
      This app development started when we noticed a stream of requests from Open AI bots crawling our website. We felt
      the need
      to fight back, and generally understand the invisible landscape of the internet around us. There is a whole bustling
      world of crawlers, bots, and attackers operating on the internet that somehow our modern way of browsing leaves us
      completely obvlivious to!
      <br/>
      <br/>
      We aimed to use the spatial dimension to comprehend the log in a new way. Requests from the same IP
      appear from the same spatial location, IPs are parsed to country flags, device names are simplified, and avatar type signals the intent of the request.
      For example, most ethical crawlers and bots will let their identity be known in the sender URL. Possible malicious
      agents can be identified when you see requests going to urls such as .env, .git, or /admin.
      <br/>
      <br/>
      Future developments
      include the ability to adjust your NGINX config directly through the web app, providing a real-time defence
      strategy:)
      <br/>
      <br/>
      This app is made with Golang and ThreeJS frontend, compiled to a single binary for ease of use. If you would like to
      try it out on your own NGINX server log, you can download the latest release on <a href="https://github.com/codercatclub/nginx-viz" target="_blank">Github</a>.
    </p>
  </section>
  <section>
    <h1>[+]Credits</h1>
    <p>
    <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Go / ThreeJS Dev
    <br/>
    <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Go Consultant
    <br/>
    </p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ALMOST ALWAYS]</title>
            <link>https://codercat.tk/almost-always</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[Almost Always]<i> /by Khloe Kardashian/</i></h1>

  <video playsinline="" controls="" poster="kkf_thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/kkf_fullInstagram_001.mp4" type="video/mp4"/>
  </video>

  <section>
    <h1>[+]CODERCAT HIGHLIGHT</h1>
    <figure>
      <video src="https://codercat.tk/almost-always/kkf_highlight.mp4" controls=""></video>
      <figcaption>Our VFX Shots</figcaption>
    </figure>
    <h1>[+]FLOWER BLOOMS</h1>
    <p>For this campaign, the team on site in Los Angeles created a floral lagoon, and our task was to bring it to life
      with a layer of
      3D blooming flowers! Before even seeing the footage, I got started researching. I knew from looking at the
      moodboards that a procedural system would be the way to go, since the shots called for a variation in flower types
      and levels of detail. <br/> After browsing several tutorials I created a custom procedural setup involving KineFX
      rigged
      petals, phyllotaxis, and vellum simulations. With this setup, I could change the flower petal shape and
      distrubtion to create a wide array of looks! </p>

    <figure>
      <video src="https://codercat.tk/almost-always/kkf_proceduralFlowers.mov" controls=""></video>
      <figcaption>Procedural flower setup in Houdini</figcaption>
    </figure>

    <p>Some flowers got special treatment of course.</p>

    <p>Once the footage came in, I started designing flowers that would match the beautiful arrangement they created on
      physically
      set.. but also give the scene a surreal twist. Finding that balance was really fun.</p>
    <figure>
      <video src="https://codercat.tk/almost-always/kkf_flowerArray_001.mov" controls=""></video>
      <figcaption>Final flower types, still in the lab</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]LAYOUT </h1>
    <p>First step was a sketch to get ourselves and collaborators on the same page about the distribution of flowers and
      general flow of movement for each of the shots. Kif made these lovely sketches (in Blender by the way) to do so!
    </p>
    <figure>
      <img src="https://codercat.tk/almost-always/kkf_crownClose_001.jpg"/>
      <figcaption>Crown shot sketch</figcaption>
      <img src="https://codercat.tk/almost-always/kkf_crownFar_001.jpg"/>
      <figcaption>Hero shot sketch</figcaption>
      <img src="https://codercat.tk/almost-always/kkf_hand_001.jpg"/>
      <figcaption>Hand shot sketch</figcaption>
    </figure>
    <p>In parallel, Kif was devloping the pipeline for layout and scene development. Traditionally we would export the
      flower assets as alembics from Houdini, and load them in Blender for layout and timing. However for this project,
      it seemed to us that handling the animation of 100 or more flowers manually in Blender could be a nightmare.</p>
    <p>Kif pushed for the bold move of setting up the scene with USD in Solaris. We felt that the instancing tools and
      procedural nature of Houdini would allow for smoother iterations.</p>
    <p>I can&#39;t say for sure if we were right or wrong. There were MANY hurdles along the way. Big Con, the layout tools
      are terrible in Houdini, so bad that Kif actually made his own custom USD Export to Blender that allowed him to do
      the flower layout in Blender and import it back as instances in Houdini.</p>
    <p>Big Pro, updating assets and materials was very smooth, and you can make... a procedural flower field... in just
      a few minutes... </p>
    <figure>
      <img src="https://codercat.tk/almost-always/kkf_flowrField_0011.jpg"/>
      <figcaption>Flower Fields because we can!!</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]THANKS TO</h1>
    <p><a href="https://www.instagram.com/shootchevytyler/" target="_blank">Chevy Tyler</a> - Creative Director x
      Director of Photography
      <br/>
      <a href="https://www.instagram.com/gregswalesart/" target="_blank">Greg Swales</a> - Creative Director x Director
    </p>
    <p>{full production credits on their pages}</p>

  </section>


</body>]]>
	      
	    </description>
            <pubDate>Tue, 11 Nov 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[COOKBOOK]</title>
            <link>https://codercat.xyz/cookbook</link>
            <description>
	      
	          Houdini shelf tool and online library to share copy and pastable recipes.
	      
	    </description>
            <pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[SPINAL CLEANSE]</title>
            <link>https://codercat.tk/spinal-cleanse</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[SPINAL CLEANSE] <i>/by Cerebra, refresh your intervertebral discs/</i></h1>

  <video playsinline="" controls="" poster="spc-thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/spc_comp_003.mov" type="video/mp4"/>
  </video>

  <section>
    Spinal Cleanse, by Cerebra. Automatically refresh your intervertebral discs T2-T7. Perform once a week for optimal
    motor health. Integrates seamlessly with Cerebra&#39;s Vertebral Augmentation Ecosystem.
    <br/><br/>
    Consult your cybernetic physician before initiating procedure.
  </section>
  <section>
    <h1>[+]Behind the Scenes</h1>
    <figure>
      <img src="https://codercat.tk/spinal-cleanse/spc_wireframe.jpg"/>
      <figcaption>Cerebra&#39;s digital prototyping environment</figcaption>

    </figure>
    <figure>
      <img src="https://codercat.tk/spinal-cleanse/spc_init_006.jpg"/>
      <figcaption>Cerebra&#39;s product renders</figcaption>
    </figure>

    <figure>
      <img src="https://codercat.tk/spinal-cleanse/cotton-field.jpg"/>
      <figcaption>Product design inspiration, Cotton Fields, Kazakhstan</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]Credits</h1>
    <p>
    <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Concept, Spine Modeling and Simulating, Sound Design
    <br/>
    <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Environment Design &amp; Lighting
    <br/>
    <a href="https://miestasbito.bandcamp.com/music" target="_blank">Bito</a> - Livecoded Music and Visuals in Orca
    <br/>
    </p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TELERANA]</title>
            <link>https://codercat.tk/telerana</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[TELERANA]<i> /eight legged embodiment of dysfunction/</i></h1>

  <video playsinline="" controls="" poster="tel_thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/tel_fullEdit_003.mov" type="video/mp4"/>
  </video>

  <section>
    <p>
      The above is a section from a short film that we worked on, directed by Nicola Rios. The film was shot in Puerto
      Rico, and about a night of
      rebellion, where a teenager confronts the disturbing truth that looms over her house in an effort to break free
      from
      her family&#39;s dysfunction. This trauma is represented by a giant spider living in the family&#39;s basement -- and
      that&#39;s
      where Codercat comes in.
    </p>
  </section>

  <section>
    <h1>[+]the Spider</h1>
    <p>The scope was to have the spider start out in it&#39;s lair, crawl out and attack the protagonist. To get us all on
      the same page before we started working, Nicola provided a pre-visualization animatic of the spider
      motion for us. It is amazing to me how much a few simple hand drawn lines could convey! It was enough for us to
      have an idea of the general spider framing in the shot, it&#39;s size, proportions, and movement style. </p>
    <figure>
      <img src="https://codercat.tk/telerana/previs.jpg"/>
      <figcaption>Previs of the four spider shots. We came a long way!</figcaption>
    </figure>
    <p>
      Kif then iteratively modeled, rigged, and textured the spider. I recall that we were in Montenegro at the time,
      and were able to get real spider reference shots right outside our door.
    </p>
    <figure>
      <img src="https://codercat.tk/telerana/spider_ref.jpg"/>
      <figcaption>Living references</figcaption>
    </figure>
    <p>
      Kif used these scouted spider references to develop the look and add realism. He also individually groomed every
      hair on each of
      the eight spider legs. I will tell him to elaborate on this here at some point!
    </p>
    <figure>
      <img src="https://codercat.tk/telerana/blender_spider.jpg"/>
      <figcaption>Spider material development in Blender</figcaption>
    </figure>
    <figure>
      <img src="https://codercat.tk/telerana/spider_BaseColor.jpg"/>
      <figcaption>Spider diffuse color map</figcaption>
    </figure>
    <p>
      While the hero asset was being developed, I was setting up the render and compositing pipeline. Each shot had it&#39;s
      own individual blender file, with camera, lighting, and proxy geometry to match the plates. I also created a
      procedural spider web in Houdini that I could scatter around the room for a nest like atmosphere.
    </p>
    <figure>
      <img src="https://codercat.tk/telerana/spider_web.jpg"/>
      <figcaption>Blender scene with proxy geometry and lighting to match the plate</figcaption>
    </figure>
    <p>
      With every major iteration of the spider, Kif would send me his blender file with the character and it&#39;s
      materials, and I would append the spider to
      each shot.
    </p>
    <figure>
      <img src="https://codercat.tk/telerana/spider_bed.jpg"/>
      <figcaption>Spider resting on the bed in random color</figcaption>
    </figure>
  </section>
  <section>
    <h1>[+]Compositing</h1>
    <p>
      I was the REnDeR WRanGLeR. Most of what I learned here was how to efficiently manage five shots simultaniously. I
      am very thankful for naming conventions, and also our Blender deploy script! With this script, I could send
      multiple shots to our remote machine, and batch render them (and their shadow passes configured with a blender
      script) on their own GPU&#39;s.
      <br/><br/>
      Everything ran overnight, on it&#39;s own, and far away from me. I slept in silence, without the sound of my laptop
      fan taking off. At some point I was even batch rendering the final composites from Nuke
      on command line:)
      <br/><br/>
      On the creative side, some compositing work went into the spider webs and how to add realism. On top of the render
      of the
      3D web, I collaged in some real spider web textures from a great <a href="https://www.artstation.com/marketplace/p/GxMv/spider-webs-cobwebs-reference-images-pack">photo pack on art
        station</a>.
    </p>
    <figure>
      <img src="https://codercat.tk/telerana/web_refs.jpg"/>
      <figcaption>Spiderwebs reference image pack</figcaption>
    </figure>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/tel_bedSwipe_002.mov" controls=""></video>
      <figcaption>Compositing of the bed shot</figcaption>
    </figure>
    <p>A <i>Day for Night</i> shot was added to the list later -- breakdown below.</p>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/tel_d4nSwipe_002.mov" controls=""></video>
      <figcaption>My first Day for Night shot!</figcaption>
    </figure>
    <p>
      Thank you for reading &lt;3
    </p>
  </section>
  <section>
    <h1>[+]Credits</h1>
    <a href="https://www.instagram.com/nicola.rios/" target="_blank">Nicola Rios</a> - Director
    <br/>
    <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Character Artist
    <br/>
    <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Rendering &amp; Compositing
    <br/>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ONSEN]</title>
            <link>https://codercat.tk/onsen</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[ONSEN] <i>/sustainable bathing pools/</i></h1>

  <video playsinline="" controls="" poster="onsen-thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/ons_final_003.mov" type="video/mp4"/>
  </video>

  <section>
    <p>
      This piece is set in a future where biotech researchers created Living Walls — engineered organisms that produce
      regenerative
      bathing fluids, much like the human body produces blood. These structures are sustainable in space, feeding on the
      abundant chemical elements. They grow, repair, and adapt,
      offering a healing Onsen far from Earth.
  
      <br/><br/>
  
      Inspired by our walk through Japan, and the many Onsens that healed us on the way. Specifially visually inspiring were the black water hot
      and cold pools in Nishi Magome! 
    </p>
  </section>
  <section>
    <h1>[+]Behind the Scenes</h1>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/ons_btscomp_001.mov" controls=""></video>
      <figcaption>behind the scenes clip</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]Credits</h1>
    <p>
    <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Director, 3D Modeling Interior, Edit, Color
    <br/>
    <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - 3D Modeling Exterior
    <br/>
    </p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[KANN NICHT WARTEN]</title>
            <link>https://codercat.tk/cant-wait</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[KANNT NICHT WARTEN] <i>/the running towards/</i></h1>
  <video playsinline="" controls="" poster="cantwait-thumb.jpg">
    <source src="https://cdn.codercat.xyz/vid/cantwait_music_video.mp4" type="video/mp4"/>
  </video>
  <section>
    <h1>[+]Behind the Scenes</h1>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/cwa_envbtscomp_001.mov" controls=""></video>
      <figcaption>environment design and shockwave effect</figcaption>
    </figure>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/cwa_crowdbtscomp_001.mov" controls=""></video>
      <figcaption>crowd simulation and development</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]Credits</h1>
    <p>
    <a href="https://www.instagram.com/ANNAVANDERVELDE_" target="_blank">Anna van der Velde</a> - Director
    <br/>
    <a href="https://www.instagram.com/FLORIANCHRISTOPHR/" target="_blank">Florian Christopher</a> - Director
    <br/>
    <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - 3D Simulations
    <br/>
    <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - 3D Environment
    <br/>
    </p>
    <p>Full production credits on the <a href="https://www.youtube.com/watch?v=KHIZZrKxn5o" target="_blank">Official Youtube Video</a>.</p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ICONIC]</title>
            <link>https://codercat.tk/iconic</link>
            <description>
	      
	          <![CDATA[<body>
  <h1>[ICONIC]<i> /by Paris Hilton Fragrances/</i></h1>

  <video playsinline="" controls="" poster="iconic_thumb.jpg">
    <source src="https://cdn.codercat.xyz/cc-refs/phf_webRip_001.mp4" type="video/mp4"/>
  </video>

  <section>
    <h1>[+]AERIAL WORLD</h1>
    <p>For this campaign, the team created a large physical set of giant holographic looking crystals. They wanted an
      overhead shot to reveal the entire crystal labrynthian world that Paris Hilton finds herself lost in, with a
      bedazzled flip phone. She quotes, <i>&#34;I THINK I TOOK A WRONG TURN&#34;</i>.</p>
    <p>That&#39;s where Codercat came in! Our goal was to extend and replicate the physical set in 3D for this overhead
      angle, including Paris Hilton herself.</p>
    <p>We started off with developing the material and form of the crystal labrynth walls. This was an interesting task,
      because we needed to strike the balance between continuity with the physical set, and visual impact of a fantasy
      crystal formation.</p>
    <figure>
      <img src="https://codercat.tk/iconic/crystalRef.jpg"/>
      <figcaption>Reference frame of Paris Hilton and the crystal labrynth on set</figcaption>
    </figure>
    <figure>
      <img src="https://codercat.tk/iconic/phf_crystalLook_002.jpg"/>
      <figcaption>Our initial ideas for material and form matching of the labrynth walls</figcaption>
    </figure>
    <p>Next task: create a digital clone of Paris Hilton on set. This was necessary because we did not have a plate of
      Paris walking from an overhead angle. Thankfully the 3D replica did not have to be 100% photoreal due to the angle
      and distance, but damn there was still a lot of work that needed to go into this to be convincing, even at this
      framing!</p>
    <p>Kif was the true mastermind here, 3D sculpting her face and body, grooming her lovely blonde locks, reprojecting
      face &amp; body textures from the reference plates, and rigging. I supported with a velour tracksuit made in Marvelous
      Designer and a walk animation.</p>
    <figure>
      <img src="https://codercat.tk/iconic/phf_hair.jpg"/>
      <figcaption>Liminal spaces along kif&#39;s character workflow</figcaption>
    </figure>
    <figure>
      <img src="https://codercat.tk/iconic/physicalVs3D.jpg"/>
      <figcaption>Fruits of our labor</figcaption>
    </figure>
    <p>Putting it all together for the final 5 second delivery was an iterative process with the team. Honestly so
      thankful for Chevy and Greg, our liasons and creative directors. They made the process so smooth, giving us just
      the amount of creative space we needed, pushing the visuals to their vision, while also appeasing clients! Enjoy
      the breakdown video below highlighting just a selecta of moments from the development process.</p>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/phf_envBTS_001.mov" controls=""></video>
      <figcaption>Aerial world, behind the scenes clip</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]EYE REFLECTION</h1>
    <p>This was a lighter (but still involved) task of adding a sparkling perfume bottle in the reflection of Paris
      Hilton&#39;s eye. It began with contacting the fabrication team for a production model of the perfume bottle --
      rendering with a bit of rotation for that specular lens flare we all love -- and compositing onto Paris&#39;s eye!
      Enjoy the breakdown video below.</p>
    <figure>
      <video src="https://cdn.codercat.xyz/vid/phf_eyeBTS_001.mov" controls=""></video>
      <figcaption>Bottle in eye reflection, behind the scenes clip</figcaption>
    </figure>
  </section>

  <section>
    <h1>[+]LOVELY THANKS TO</h1>
    <p>
      <a href="https://www.instagram.com/shootchevytyler/" target="_blank">Chevy Tyler</a> - Creative Director x
      Director of Photography
      <br/>
      <a href="https://www.instagram.com/gregswalesart/" target="_blank">Greg Swales</a> - Creative Director x Director
    </p>
    <p>{full production credits on their pages}</p>

    <p><i>YOU AND ME TO INFINITY</i></p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[THE BIOPORT]</title>
            <link>https://codercat.tk/the-bioport</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[The Bioport] <i>/ft. Lela Laperashvili/</i></h1>

    <video playsinline="" controls="" poster="bioport_thumb.jpg">
      <source src="https://cdn.codercat.xyz/vid/lel_master_002.mov" type="video/mp4"/>
    </video>

    <section>
      <p>Inspired by the concept of &#34;Glanding&#34; in Surface Detail, by Ian Banks. In this future, some of us chose to install specialized chemical receptors in our body that bind to designer drugs efficiently.
        We skip the digestion process by inserting the pill straight into the cavities of the body. The pill works its way through the body in a chain of natural processes, creating unique and long lasting effects.
        <br/> <br/>  

        Advancements in our understanding of the human body have led to this products development, allowing for new ways to experience our organic biological machine, would you get one? 

        <br/> <br/>  
        Behind the Scenes Coming Soon...</p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/lela_laper/" target="_blank">Lela Laperashvili</a> - Actor, Co-Creative
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Director, 3D Modeling &amp; Simulations, Edit, Color
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Camera, Tracking, Compositing
      <br/>
      <a href="https://www.instagram.com/revolution_tbi/" target="_blank">Revolution Bar</a> - Venue
      <br/>
      <a href="https://www.instagram.com/abragi.gcb/" target="_blank">Abragi</a> - Venue
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[THORN]</title>
            <link>https://www.nowness.asia/topic/usa/thorn-fashion-olivia-de-camps</link>
            <description>
	      
	          Fashion Film for RUIbuilt, directed by Olivia de Camps. TV and thorn skin growth VFX by Codercat.
	      
	    </description>
            <pubDate>Mon, 11 Nov 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[CYBORG BEAUTY ROUTINES]</title>
            <link>https://codercat.tk/cyborg-beauty-routines-flat</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[CYBORG BEAUTY ROUTINES] <i>/Self Love from the Future/</i></h1>
    <img src="https://codercat.tk/cyborg-beauty-routines-flat/cbr_thumb.jpg"/>
    <section>
      <h1>[+]THE DECORATOR <i>/Episode 2/ </i></h1>
      <video playsinline="" controls="" poster="decorator_thumb.jpg">
        <source src="https://cdn.codercat.xyz/vid/cbr2_full_003.mov" type="video/mp4"/>
      </video>
      <p>The Decorator will be here in a few minutes... and I have a party to attend in one hour. Should be more than enough time for a serpent&#39;s gaze.</p>
    </section>
    <section>
      <h1>[+]ZOLTAR <i>/Episode 1/ </i></h1>
      <video playsinline="" controls="" poster="zoltar_thumb.jpg">
        <source src="https://cdn.codercat.xyz/vid/cbr_fullEdit_001.mov" type="video/mp4"/>
      </video>
      <p>The Zoltar Machine outside OMG Pizza in Brooklyn is generally disfunctional. But in this parallel universe, the Zoltar&#39;s fortune is a new look (swallow to download), for your night on the town. </p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Half of Everything
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Half of Everything
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 11 Nov 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[CYBORG BEAUTY ROUTINES EXPERIENCE]</title>
            <link>https://codercat.tk/cyborg-beauty-routines</link>
            <description>
	      
	          <![CDATA[<body>
  <div class="overlay-title">
    <p>
      CYBORG <br/>
      BEAUTY <br/>
      ROUTINES
    </p>
    <div class="subtext">
      IF THE FUTURE <br/>
      WAS NOW
    </div>
  </div>
  <div class="overlay-right">
    <div class="subtext">
      <span class="clickable" id="darkTheme">DARKNESS</span> or <span class="clickable" id="lightTheme">LIGHT</span>
    </div>
  </div>
  <div class="overlay-left">
    <div class="subtext">
      <a href="https://codercat.tk/cyborg-beauty-routines/../cyborg-beauty-routines-flat">⧉</a>
    </div>
  </div>
  <script src="https://codercat.tk/cyborg-beauty-routines/ui.js"></script>

  <loading-screen></loading-screen>

  <div id="video-container" class="video-container" style="display: none">
    <video id="cbr2" src="https://codercat.tk/cyborg-beauty-routines/assets/videos/cbr_fullEdit_001.mp4" autoplay="autoplay" loop="" muted="" controls="" playsinline=""></video>
    <div id="close-icon" class="close-icon">✖</div>
  </div>

  <video id="cbr2-test" src="https://codercat.tk/cyborg-beauty-routines/assets/videos/cbr_fullEdit_001.mp4" autoplay="autoplay" loop="" muted="" playsinline="" style="display: none"></video>

  <!-- <cc-header></cc-header> -->

  <!-- <sound-button color="rgb(0,0,1)"></sound-button> -->

  <!-- <cc-tutorial></cc-tutorial> -->

  <script src="https://codercat.tk/cyborg-beauty-routines/bundle.js"></script>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 11 Nov 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>The Minimalist Digital Artists Duo</title>
            <link>https://codercat.tk/minimalist-duo</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>The Minimalist Digital Artists Duo</h1>

    <figure>
      <img src="https://codercat.tk/minimalist-duo/Kif_and_Snayss.jpg" alt="Kif and Snayss"/>
      <figcaption>Glamour shot of Kif (left) and Snays (right)</figcaption>
    </figure>

    <section>
      <h1>About</h1>

      <p>This is an interview with Kif &amp; Snayss, collectively known as Codercat, a digital artists duo who have been nomadic for 6 years. Their worldly belongings mostly fit into a backpack, and they get around the world with public transit and a pair of Brompton folding bikes. They are some of the most creative, fun, resilient, and resourceful people I know.</p>

      <p>I&#39;ve been good friends with these two for a few years now and I&#39;ve always been a huge fan of their work and their lifestyles. Finally, I had some time to sit with them and learn about their stories.</p>
    </section>

    <section>
      <h1>The Bike-packing</h1>

      <p>The bike community is one of the most wholesome and uplifting communities out there. Doesn&#39;t matter who you are or where you are, when bike-packers meet they just so naturally connect with each other.</p>

      <p><strong>Nico</strong>: What was your first long-term bike-packing journey, how was it and did it change your lifestyle in some fundamental ways?</p>

      <p><strong>Kif</strong>: We met in SF and both worked as creative technologists. We would go biking on weekends, sometimes we would take longer trips and bike from SF to Santa Cruz or something. So biking has been part of our lives for a while.</p>

      <p>One year we went on world travel with no return date. Our original intent was to hitchhike. Mexico was the first destination where we landed and where I convinced Snayss to go for a Bike trip to Guatemala. It was not an easy decision for her.</p>

      <p>We flew to Mexico City, bought used bikes for under 500 dollars, and biked to Guatemala. We would bike on average 5 hours a day, we stayed in tiny motels in rural places only camping where we could not find any place to stay for a bike day distance. We only took buses when it was physically impossible to bike (in some areas the wind was so bad even buses were shaken from wind)</p>

      <p>The journey was hard but unforgettable, it really tested our friendship and physical abilities. We saw a lot of rural Mexico and came to appreciate the scale of the land. There are also parts of it that were extremely hard.</p>

      <figure>
        <img src="https://codercat.tk/minimalist-duo/Kif_by_the_beach.jpg" alt="Kif by the beach"/>
        <figcaption>Kif by the beach</figcaption>
      </figure>

      <p>We stopped in a city called San Cristóbal de las Casas which is about 4 days biking from the Guatemala border, we went to the market and bought a piece of cheese from a local lady. The cheese was spoiled and we both spent 5 days in bed with fever and throwing up. We could not stay any longer and decided to bike. That was the most difficult four days because our stomachs can not process any food that our bodies needed so desperately. On the 4rth day when approaching the Guatemala border, I almost passed out from exhaustion. Luckily it was the end of the stretch and we rented a room right at the border where I went to bed immediately.</p>

      <p><strong>Snays</strong>: It was so physically and mentally exhausting. Most of the time your mind gets tired before your body does. Many times I thought I was ready to drop and could not continue biking, but then I realized it was just my mind giving up, my body actually could still push forward more.</p>
    </section>

    <section>
      <h1>The Bicycle Kitchen Community</h1>

      <p>After the Mexico trip they moved to LA. Over there Kif started volunteering at Bicycle Kitchen, a community bike shop. They learned how to fix bikes and met a really cool and awesome community there.</p>

      <p>Snays made her first DIY custom bike. We eventually decided to get into folding bikes for international long distance travels since it was a lot easier than buying and selling bikes on different continents.</p>

      <figure>
        <img src="https://codercat.tk/minimalist-duo/Snays_working_on_her_bike.jpg" alt="Snays working on her bike"/>
        <figcaption>Snays working on her bike</figcaption>
      </figure>
    </section>

    <section>
      <h1>Fashion for a Minimalist</h1>

      <p>I’ve always admired Snays’ incredible styles and how resourceful she is with materials and objects found anywhere she goes.</p>

      <p><strong>Nico:</strong> Snays I know you are very artistic and you’re super passionate about fashion. Was it hard to become nomadic to get rid of belongings?</p>

      <p><strong>Snays:</strong> It was difficult! In college, I had a daily goal to never repeat my outfit. So I had over 100 different t shirts and around 30 pairs of shoes. Before setting off on our adventure, I somehow had to transition from 100 shirts to 2 that could fit in my backpack. I sold most of my clothing and gave the rest of it to a homeless person on the streets of SF. Having limited clothing and space was difficult at the beginning, since now any item I wanted to purchase came with a plethora of practical constraints. Can I wear this item everyday? Will it take up too much space in my backpack? How does it match with my other clothing items? Does it hold up in the weather? One big optimization problem. Overall now I find that the constant rotation of a few optimally selected items allows for a fluid and evolving style.</p>

      <p><strong>Kif:</strong> She’s very resourceful when we move through places. When we moved to a new country Snays would swap for items, and always find creative ways to outsource items that fit her style.</p>

      <p><strong>Nico:</strong> Once you think in that resourceful way you can realize that we live in such an abundant world. So many people have way more than what they need, and they don’t even have time to properly give these items away.</p>
      
      <p><strong>Snays:</strong> One day we were having a conversation and saying how it’d be so nice to have a monitor, literally Kif went to take a walk and found a monitor on the street, in great condition! Every time when we move, I assess all the items as they go inside in my backpack, making sure they truly deserve some of the very limited real-estate. It&#39;s been interesting to see how things that I once thought I couldn&#39;t live without, end up eventually being left behind. This constant re-evaluation of belongings is a moment to also re-evaluate my own goals and desires.</p>

      <figure>
        <img src="https://codercat.tk/minimalist-duo/Snays_with_custom_3D_printed_headpiece.jpg" alt="Snays with custom 3D printed headpiece"/>
        <figcaption>Snays with the custom headpiece she designed and 3D printed</figcaption>
      </figure>
    </section>

    <section>
      <h1>Creativity in Virtual Worlds</h1>

      <p><strong>Snays:</strong> Creating digital avatars became one way to be expressive. I love that I have infinite imaginative space and materials to create in the digital world.</p>

      <p>When we started to minimalize our lives we gained so much more mental and physical space to dedicate to our creative explorations... Our cost of living is a lot less, our needs and wants became very minimal, we make enough to cover basic survival needs and we work minimal hours on client work, which gives us a lot of time to delve deep into learning programs and making our own art.</p>

      <p>Houdini changed my creative practice in the 3D Graphics world. I used to mostly do programming and stay away from actual 3D asset modeling, however with Houdini I could now use math and code to create abstract interesting shapes. It gave me a limitless vector to dive into asset creation.</p>

      <p><strong>Kif:</strong> I have a background in coding and visual effects (VFX). I didn’t care that it was difficult to ‘make it’, I just loved the craft of doing 3D. The fact it was so difficult really excited me, it felt like the Wild West. I didn’t want to do things that were easy or predictable.</p>

      <p>It’s also great when we share the love for similar creative expressions. We really excite each other with our passion for our work. Working as a couple is challenging of course, but it’s an amazing feeling that you exchange love and you get more love back.</p>

      <p>At first, we had a complementary skill set, I was doing a lot of Houdini stuff and Snays was doing VFX shaders. We constantly learn from each other and we are actually reversing our skills by doing what the other person would do in a project, which is kind of funny 😄</p>
    </section>

    <section>
      <h1>What&#39;s in the Future?</h1>

      <p><strong>Codercat:</strong> Making and maintaining social ties on the road has been the hardest part for us. Mars College is amazing for this reason. We spent a few years looking for a community like Mars, and when we found it, it was exactly what we needed. There are so many creative people here, hackers, musicians, artists… it’s a great community.</p>

      <p>Mars College is a great place to experiment and explore, but it doesn’t quite have a creative focus, we love it for that reason but we also want to create space for people to focus and get some concrete results. Hopefully, we can make that happen soon.</p>

      <p>We had an idea to gather a few people together with complimentary skill sets, find somewhere low-cost to live for a month, and make a project together. So we did this with the KikiYago projects in Tbilisi, and we have plans to dedicate more to creating these kind of creative containers.</p>

      <h2>Hot Tips and Jump Starts</h2>

      <p><strong>Kif:</strong> Finding community really helps, going out to the world in the void by yourself is hard. We spent 4 years finding communities, and we had each other which was amazing, but having a community really helps uplift your mental health, so anywhere you go, anything you do, do it with cool people you like.</p>

      <p>Change is scary, there can be many fears, fears of traveling are real, like what happens to my friends, my clothes, my career, money…. All that is reasonable, but if you really believe in yourself and your ability to make things work, you have to forget about those fears and just do it.</p>

      <p>
        <strong>Snays:</strong>
        When I left SF, my job and belongings, I knew that SF would always be there, that I can always go back. And it’s the same for anyone, wherever you are and whatever you’re doing, you can always go back. Knowing that made it a lot easier for me to jump-start this journey, funny thing is I never went back.
      </p>

      <p>
        <strong>Kif:</strong>
        You should definitely save some money. Have a lot more runway than you think you need. Calculate the minimum amount of money that you need to survive.
      </p>

      <p>For me for example it was $300 a month, and I would live in places like Thailand, and it would be fine. Most likely you would figure out ways to make money on the road, people do it all the time and it’s part of the challenge also part of the fun. But having your bare minimum covered for the rest of your mind is nice.</p>

      <p>I would recommend a bag size of 30 liters, if you have a larger bag you would stuff it with shit you don’t need. Don’t get a larger bag. 30 liters is all you need.</p>
    </section>

    <section>
      <h1>See Ya Next Time</h1>

      <p>I had a lot of fun with this conversation. It also gave me some inspirations on ways to live my life, and I start to question a lot of decision to accumulate ‘stuff’ a lot harder now. My life has become a lot more minimal, not yet in a backpack, maybe it never will but hey that’s ok! The minimal mindset has been incredibly helpful.</p>

      <p>We don’t always have the chance to think about our priorities, we grow up with a lot of these priorities defined for us. When we do question them, we often realize that a lot of the ‘must-haves’ can become options. Life is full of tradeoffs, and the ability to prioritize makes our lives richer or harder.</p>

      <p>One big motivation for me to continue working on Grid Free Minds and Agartha is to create resources for people who want to ’try out the lifestyles outside of societal default’.</p>

      <p>For all the dreamers who are itching to wander, hope you’ll soon discover a reason to do so.</p>

      <p>Subscribe to see more ;)</p>
    </section>

    <section>
      <h1>Credits</h1>
      <p>
      <a href="https://www.instagram.com/syntonikka/">Nico Shi</a> - Writer / Interviewer
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[VFX 2024]</title>
            <link>https://codercat.tk/vfx</link>
            <description>
	      
	          <![CDATA[<body>
  <div class="grid">
    <div class="title-card">
      <h1>CODERCAT STUDIO</h1>

      <p>

      </p><ul>
        <li><i>VFX Refs</i></li>

        <br/>

        <li><i>{ Houdini Simulations }</i></li>
        <li><i>{ World Building UE | Blender }</i></li>
        <li><i>{ Camera Tracking }</i></li>
        <li><i>{ Compositing }</i></li>

        <br/>

        <li><a href="https://codercat.xyz" style="color: #ff0000">Website</a></li>
        <li><a href="https://instagram.com/snayss" style="color: #ff0000">Instagram</a></li>
      </ul>

      <p></p>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/rui_spikesWire_003.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/cc-refs/rui_thornReel_002.mov" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/bah_mainWire_002.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/banya_03.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/bah_droneWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/banya_01.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/tsk_smokeBts_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/smoke.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/npa_ribbonReelWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/npa_ribbonReel_001.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/fd_peelReelWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/final_dest_color_1.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/fd_fetusWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/final_dest_color_02.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_titleWireReel_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_title.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/rui_tvReelWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/rui_tvReel_002.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/npa_carReelWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/npa_crash_001.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/highway.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_carCloseupWire1_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_closeup_001.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_topWire_001.mp4" loop="" playsinline="" autoplay="" muted=""></video>
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/jah_drift.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/cocoon_01.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/cocoon.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/tongues.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
    <div class="video">
      <video class="lazy" src="https://codercat.tk/vfx/" data-url="https://cdn.codercat.xyz/breakdown-web/mother_taiga.mp4" loop="" playsinline="" muted="" autoplay=""></video>
    </div>
  </div>

  <script>
    window.oncontextmenu = function (event) {
      event.preventDefault();
      event.stopPropagation();
      return false;
    };

    function syncVideos() {
      const videos = document.querySelectorAll(".video");

      videos.forEach((video, index) => {
        const videoPair = video.querySelectorAll(".lazy");
        if (videoPair.length < 2) {
          videoPair[0].style.opacity = 1;
          return;
        };

        const first = videoPair[1];
        const second = videoPair[0];

        // bts videos are set to autoplay so that they preload on iOS
        // but we pause here to make it less laggy
        second.pause()

        /*
           Mouse events
        */
        let playPromise;

        video.addEventListener('mouseenter', () => {
          // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState
          if (second.readyState > 3 && first.readyState > 3) {
            playPromise = second.play();
            second.style.opacity = 1;
          }
          second.currentTime = first.currentTime;
        })
        
        video.addEventListener('mouseleave', () => {
          second.style.opacity = 0;
          if (playPromise){
            playPromise.then(() => {
              second.pause();
            })
          } else {
            second.pause();  
          }

        })

        /*
           Touch events
        */
        let timeout;

        video.addEventListener('touchstart', (event) => {
          timeout = setTimeout(() => {
            if (second.readyState > 3 && first.readyState > 3) {
              playPromise = second.play();
              second.style.opacity = 1;
              second.currentTime = first.currentTime;
            }
          }, 200)
        })

        video.addEventListener('touchend', (event) => {
          clearTimeout(timeout)
          second.style.opacity = 0;
          if (playPromise){
            playPromise.then(() => {
              second.pause();
            })
          } else {
            second.pause();  
          }
        })

      });
    }

    document.addEventListener("DOMContentLoaded", () => {
      const lazyMediaEls = document.querySelectorAll(".lazy");

      if ("IntersectionObserver" in window) {
        let mediaLoadObs = new IntersectionObserver(function (entries, observer) {
          entries.forEach((entry) => {
            if (entry.isIntersecting) {
              entry.target.setAttribute("src", entry.target.dataset.url);
              mediaLoadObs.unobserve(entry.target);
            }
          });
        });

        lazyMediaEls.forEach((el) => {
          mediaLoadObs.observe(el);
        });

        syncVideos();
      }
    });
  </script>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[EXPO]</title>
            <link>https://codercat.tk/expo</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Expo] <i>/Mind Destroyer, Kiki Yago/</i></h1>

    <video playsinline="" controls="" poster="expo_thumb.jpg">
      <source src="https://cdn.codercat.xyz/vid/expo.mov" type="video/mp4"/>
    </video>

    <section>
      <p>The Kiki Yago Replication Facility. Behind the Scenes Coming Soon...</p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/xenofontova_dasha/" target="_blank">Dasha</a> - Vocals, Face Capture
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Director, Unreal Engine
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Look Dev Consultant
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TSKALTUBO]</title>
            <link>https://codercat.tk/tskaltubo</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[TSKALTUBO SANATORIUM] <i>/a series of alternate realities/</i></h1>
    <img src="https://codercat.tk/tskaltubo/hero_thumb.jpg"/>
    <section>
      <h1>[Bathhouse No.9]<i> /Part One/</i></h1>
      <p>Tskaltubo is a town in the Imereti region of Georgia. During the Soviet period, the town was developed into a prominent spa resort. Lavish sanatoriums and bathhouses were constructed in the name of proletarian health and vigor. The magic lies in it&#39;s <i>radioactive</i> thermal springs which were believed to have healing properties. Just the <i>optimal</i> amount of carbonated radon to cure your bones.</p>
      <video playsinline="" controls="" poster="bathhouse_thumb.jpg">
        <source src="https://cdn.codercat.xyz/vid/bathhouse.mp4" type="video/mp4"/>
      </video>
    </section>
    <section>
      <h1>[Her Landing]<i> /Part Two/</i></h1>
      <p>After the Soviet Union brokedown, the thriving spa industry declined and Tskaltubo along with it. The grand sanatoriums and buildings however, still remain in their faded grandeur. A few buildings were made into shelters for refugees from the Abkhazia war, and a few esteemed guests have been <i>delivered</i> to scope out the property.</p>
      <video playsinline="" controls="" poster="tskaltubo_thumb.jpg">
        <source src="https://cdn.codercat.xyz/vid/tskaltubo.mov" type="video/mp4"/>
      </video>
    </section>

    <section>
      <p>Part three coming soon... follow our <a href="https://www.patreon.com/codercat" target="_blank">Patreon</a> for behind the scenes content!</p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Director, HoudiniFX Simulation, Edit, Color
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Camera, Geometry, Tracking, Compositing, Look Dev
      <br/>
      <a href="https://www.instagram.com/xenofontova_dasha/" target="_blank">Dasha</a> - Actress
      <br/>
      Detlaff - Drone Pilot
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[COCOON]</title>
            <link>https://codercat.tk/cocoon</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Cocoon] <i>/Cinematic sketch of a cyborg birth/</i></h1>

    <video autoplay="" muted="" playsinline="" loop="" controls="" poster="cocoon_video_thumb.jpg">
      <source src="https://cdn.codercat.xyz/vid/cocoon_marina.mov" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]Visual Concept</h1>
      <p>For the visual concept we were inspired by biological and organic images of membrane, alien tissues and embryos. The concept of birth is also very inspiring and prominent in our previous work that we want to iterate on. We were also inspired by our friend <a href="https://www.instagram.com/malgavochka">malgavochka</a> and her nails :)</p>

      <figure>
        <img src="https://codercat.tk/cocoon/habib-kassassir-view-3.jpg" alt="Strange creature. Art work by Habib Kassassir"/>
        <figcaption>This amazing art work by <a href="https://www.artstation.com/artwork/RnDO1D">Habib Kassassir</a> work was very inspiring for us.</figcaption>
      </figure>

      <p>After conducting several discussions, we made the decision to create a sack made of fabric with an actress inside it. We were fortunate to discover a high-quality, transparent and stretchable fabric at a local store. Our team member, <a href="https://www.instagram.com/malgavochka">malgavochka</a>, made the sack using this fabric. To test its look, we did a test shooting by placing Marina inside the cloth and spraying water over the fabric. As we lacked appropriate lighting options, we incorporated bike lights into our setup. The combination of the wet fabric surface and the light emanating from within the sack showed promising results.</p>
    </section>

    <section>
      <h1>[+]Approach and tools</h1>
      <p>Making visual effects on live action footage is a hard process that requires several steps such as camera tracking and compositing.</p>
      <p>
        Camera tracking is used to estimate camera motion in a video using software like
        <a href="https://www.thepixelfarm.co.uk/pftrack/">PFTrack</a>, <a href="https://www.ssontech.com/">SynthEye</a>, or <a href="https://3dequalizer.com/">3DEqualizer</a>. These programs track high contrast points on footage to estimate camera movements, producing a virtual 3D camera motion. This process is essential for adding computer generated elements to videos. The 3D camera&#39;s motion is then applied to synthetic elements making them appear to be part of the scene.
      </p>
      <p>Compositing is another important step when making visual effects with live action footage. It is a process of overlaying synthetic elements on live action video in a coherent fashion. Compositing tasks might include green screen removal, camera tracking, rotoscoping, color correction, object removal and more. The full scope of work depends on the particular task.</p>
      <p>We have done several experiments in the past where we incorporated some synthetic imagery over live action footage. It is a fun and interesting process but it takes a lot of time to make something that looks professional and real.</p>
      <p>For the Cocoon project we wanted to take a different approach where we separate synthetic and live action imagery. This approach simplifies the work by eliminating the camera tracking and compositing steps.</p>
      <p>By keeping things separate we were able to make full 3D environment in Unreal Engine without worrying about live action. In fact, we finished the first version of Cocoon fully in 3D before we filmed the live action.</p>

      <figure>
        <video src="https://cdn.codercat.xyz/vid/cocoon.mov" controls=""></video>
        <figcaption>First fully CG version sof Cocoon.</figcaption>
      </figure>

      <p>We choose Unreal Engine for this task because we knew we wanted to render a couple minutes of full 3D environment. A couple minutes in VFX terms is a lot! 2 min of video will result in rendering 3000 frames! Unreal&#39;s ability to render beautiful looking light and shadows real time is game changer. Let&#39;s say we choose Blender Cycles for the rendering. I&#39;ve done test with similar scene that took one minute to render a single frame which equates to 50 hours of rendering time in Blender! This exact fact hinders ones ability to iterate on the work, which has a big impact on creativity. On the contrary we can render the entire 3000 frames of animation in a matter of minutes.</p>
      <p>For all of the geometries in the scene we use HoudiniFX. At that time Snay was experimenting with FEM (Final Element Analysis) and Vellum simulations which fit perfectly with the organic look we were going for. For transferring simulated meshes to UE, at first we tried to use VAT (Vertex Animation Textures) from SideFX Lab tool set, but it was difficult to work with. At the end we settled on Alembic caches since performance was not a big concern for us.</p>

      <figure>
        <video src="https://codercat.tk/cocoon/houdini_clam.mp4" controls=""></video>
        <figcaption>Hero organ HoudiniFX simulation viewport preview.</figcaption>
      </figure>

      <figure>
        <video src="https://codercat.tk/cocoon/houdini_tongue.mp4" controls=""></video>
        <figcaption>HoudiniFX FEM simulation of tongues. Inspired by micro structure of cat tongue.</figcaption>
      </figure>

      <p>We put a lot of work into texturing and shader look development for all the assets because it was challenging to achieve that soft tissue look in real time rendering engine. We were excited to try generating textures in Houdini but that was harder then we first thought. After several failed attempts we ended up using Substance Painter and making PBR textures by hand drawing over a few procedural mask such as thickness and curvature.</p>
    </section>

    <section>
      <h1>[+]Filming</h1>
      <p>For shooting we needed a place where actress can lie on the ground, while positioning the camera above her. Behind our house, we discovered a small creek with a tree that the camera person can climb and shoot a subject on the ground. However, this location had a few disadvantages. The ground was somewhat muddy, and the presence of numerous mosquitoes posed additional challenges. Prior to the scout, we collected various dead branches, which we believed could contribute to the scene. We had the idea of constructing a nest of sorts for the actress to lie in within the sack.</p>
      <p>To address the issue of the actress coming into contact with the muddy ground, we used a transparent cover from our kitchen table, which proved to be an ideal fit.</p>
      <p>On the day of the shoot I equipped with a saw and an axe went and built a nest out of the prepared branches. I also climbed the tree and did a few test shots. Shortly, Marina came prepared with tools and supplies for face make up. She even brought her own mirror. After her make up was applied, Snay and I did a few test shots of her face to test the camera setting and bike lights. Snay experimented placing different color plastic bags over the light, some of them looking very interesting and similar to moon light. However, the power of the bike light was not enough to light our large scene.</p>

      <figure>
        <img src="https://codercat.tk/cocoon/nest.jpg"/>
        <figcaption>Constructed nest out of old branches and kitchen table cover.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/cocoon/kif_on_tree_01.jpg"/>
        <figcaption>Me testing shooting position on the tree with nest made of branches below.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/cocoon/makeup1.jpg"/>
        <figcaption>Marina applying makeup.</figcaption>
      </figure>

      <figure>
        <video src="https://codercat.tk/cocoon/makeup1.mp4" controls=""></video>
        <figcaption>Beer and makeup before the shoot.</figcaption>
      </figure>

      <figure>
        <video src="https://codercat.tk/cocoon/light_test.mp4" controls=""></video>
        <figcaption>Testing bike light and camera settings on Marinas face with makeup.</figcaption>
      </figure>

      <p>Around 6:30pm (about 40 min before sunset), Snay and I descended to the creek, equipped with Lumix S5, bottle of water, fabric for cocoon, couple of bike lights and glass of beer Marina.</p>

      <figure>
        <video src="https://codercat.tk/cocoon/going_down_to_creek.mp4" controls=""></video>
        <figcaption>Steep decent to the creek behind our house.</figcaption>
      </figure>

      <p>It was already dark in the creek even though the sun wasn&#39;t fully down. Since everything was ready we started shooting immediately. I climbed the tree with the camera. Marina wrapped herself in the cocoon on the ground directly below me, and Snay was on the side wrangling the light and directing. We ended up placing one cold blue light on a side tree branch, pointing approximately 45 degrees down on the cocoon. We set another light to red mode and gave it to Marina inside the cocoon.</p>

      <figure>
        <video src="https://codercat.tk/cocoon/stitching_cocoon.mp4" controls=""></video>
        <figcaption>Marina stitching cocoon fabric on the spot.</figcaption>
      </figure>

      <figure>
        <video src="https://codercat.tk/cocoon/spraying_fabric.mp4" controls=""></video>
        <figcaption>Snay spraying water from plastic bottle over Marina inside the fabric cocoon for cinematic effect :)</figcaption>
      </figure>

      <p>The scene looked gorgeous on camera. We experimented filming various poses for about 40 minutes until it came time for Marina to rip the cocoon and escape into the darkness. We knew we will only have 2 opportunities at most to shoot the escape, since we only had one piece of fabric. After completing a few short rehearsals we decided to go for the final fabric rip and escape sequence. I stood over Marina with the camera and shot the whole sequence in one take. Marina did a great job performing and we were all happy with this single take result. We called it a wrap and went back to the house for hot tea and review.</p>

      <p>While the girls were drinking tea, I loaded all the footage to DaVinci resolve for us to review on the TV panel we had previously set up in a dark room. I also played some ambient music to the the mood right while we were watching raw footage. Everybody was excited about the result. We called it a day and Marina went home.</p>
    </section>

    <section>
      <h1>[+]Putting it all together</h1>
      <p>The next day, we embarked on a two-week trip to Turkey from Tbilisi. I only brought my MacBook Air, while Snay brought her Windows machine. During these two weeks, we not only engaged in &#34;parents&#34; and tourist activities but also managed to incorporate our previously filmed materials with the 3D clip we made earlier.</p>
      <p>
        One of the challenges we faced was ensuring a consistent look between the real footage and the 3D elements. While exploring Istanbul, we took a local ferry where I captured footage of the sea water swirling behind the ship&#39;s engine turbine. We then overlaid this footage onto the cocoon video using a &#34;subtract&#34; blending mode. The result was quite astonishing, prompting us to stick with this look regardless of any obstacles we might encounter. However, we soon discovered that this overlay approach presented some challenges. It did not produce favorable results for clips with significant motion, and the &#34;subtract&#34; blend mode made the areas outside the cocoon appear pitch black. After some trial and error, we were able to achieve the desired color balance and create a mask specifically for the cocoon portion of the video. This cocoon mask was created using the luma keyer tool in DaVinci Fusion, and remarkably, it worked well across all the shots with only minor adjustments needed.
      </p>

      <figure>
        <video src="https://codercat.tk/cocoon/boat_water.mp4" controls=""></video>
        <figcaption>Water sample that was used for cocoon overlay.</figcaption>
      </figure>

      <p>For the sound track we sampled the Half-Life Alyx official sound track, from a 4 hour compilation on Youtube made by <a href="https://www.youtube.com/@SalimMuller">@SalimMuller</a>. It worked very well creating proper suspense and emphasizing the fabric tear.</p>
    </section>

    <section>
      <h1>[+]Vlog</h1>
      Do you want to learn more? Check awesome Vlog (Russian language) that Marina made about the project!
      <video src="https://cdn.codercat.xyz/vid/cocoon_vlog.mp4" controls=""></video>
    </section>

    <section>
      <h1>Credits</h1>
      <p>
      <a href="https://www.instagram.com/malgavochka/" target="_blank">Marina</a> - Actress, Makeup.
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">Kif</a> - Camera, Layout, Light
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">Snay</a> - Director, HoudiniFX Simulation, Edit, Color
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Fri, 01 Sep 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MAQUETTE]</title>
            <link>https://codercat.tk/maquette</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Maquette] <i>/A Spoken Word &amp; live Motion Capture Performance/</i> </h1>

    <video autoplay="" muted="" playsinline="" loop="" controls="">
        <source src="https://cdn.codercat.xyz/vid/maquette.mov" type="video/mp4"/>
    </video>

    <section>
        <h1>[+]About</h1>
        <p>
            Maquette is a live interactive performance leveraging motion capture technology,
            avatars, and dance in an exploration of the parallel histories of averaging and idealism in art and society,
            written and directed
            by <a href="https://lisajamhoury.com/" target="_blank"> Lisa Jamhoury</a>.
        </p>
        <p>
            Reckoning. the third scene of Maquette, is an 8 minute spoken word and motion captured piece
            performed solo at <a href="https://www.demo2023.org/" target="_blank">New Inc&#39;s Demo Day 2023</a> at ONX
            Studio in New York. It&#39;s a moment
            of introspection given by movement and speech,
            visually exploring through the sub conscious space of thoughts on deconstructing the digital self and a
            reckoning with our physicalities.
        </p>
        <p>
            I was the main Unreal Engine developer for this scene of Maquette, and it was such a fun experience to work
            together with Lisa and her team!

            Our collaboration was cross dimensional, moving fluidly from the physical and digital.

            We first met eachother at ONX Studio in New York, where Lisa had arranged a three day Maquette hackathon.
            We had the mornings for tech time, speed prototyping some visual effects and avatar manipulations in Unreal
            Engine.
            And afternoon, the four dancers were with us to get in the motion capture suit and play in the scenes!

            I really enjoyed these days, though they were intense and we didn&#39;t see the sun, the duration was perfect
            to get into the zone.
            We prototyped some really fun things with the four dancers, blending their motions together, or turning them
            abstractly into cubes.
        </p>
        <figure>
            <img src="https://codercat.tk/maquette/bts.jpg"/>
            <figcaption>Lisa and the four dancers, the blend space between their bodies behind</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/bts2.jpg"/>
            <figcaption>Behind my computer at ONX</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/calibration.jpg"/>
            <figcaption>The ritual of an Optitrack calibration, wave the wand over every pixel of 12 camera space and
                bless.</figcaption>
        </figure>
        <p>
            After this hackathon, we spent the next month working together remotely over Parsec, Zoom, and two more
            physical rehearsals at ONX. Building out some of the concepts that
            we enjoyed when we were together, focusing on the moments where we both would look at the projection and go
            &#34;wow&#34; in unison.

            Lisa was really pushing for non linear mapping of movement from the performer to the avatar, to match the
            deconstruction in the text. We came up with some
            themes and visual concepts in Unreal Engine together -- my favorite being 100 bodies forming a weirdly
            organic structure by positioning them evenly on
            a sphere ( where I learned about the <a href="https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere" target="_blank">Fibonacci Sphere</a> )
            , and breaking up the avatar in Houdini and applying a hover effect to each limb in Unreal.
        </p>
        <figure>
            <img src="https://codercat.tk/maquette/spherebodsfar.jpg"/>
            <figcaption> 100&#39;s of bodies rotated around a sphere, weirdly organic structure </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/spherebods.jpg"/>
            <figcaption> Close up, spoken words are about coming back into our physicality </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebods.jpg"/>
            <figcaption> Wireframe limbs from above, this was one of our &#34;woooow&#34; unison moments that we followed
                through with </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebods2.jpg"/>
            <figcaption> Wireframe limb hover </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebodscollapse.jpg"/>
            <figcaption> Wireframe limb disintegration </figcaption>
        </figure>
        <p>
            After reaching an interesting point with the visual themes, we laid out everything onto sequencers and
            matched
            the cameras and visuals to a spoken word track in the Unreal Engine sequencer. We broke it out into three
            sequences that were triggerable
            by key press, so that Lisa could easily sync the visuals with her speech.
        </p>
        <p>
            I could not attend the actual show, but kif was in New York and I sent him as a codercat representative to
            film and enjoy the experience physically!
            From what it seems from the footage, the visuals, movement, and speech came together in a really interesting
            way. I loved the stage setup as well, creating
            an intimate space with a single spotlight and bean bags.
        </p>
        <p>
            I&#39;m very looking forward to continuing this collaboration, as there will be a full 45 minute showing of
            Maquette in Nov 2023, including all seven scenes and four dancers.
            Lisa has mentioned some interesting visuals and concepts for the scenes that still need developing, and I
            can&#39;t wait to explore these with her soon!
        </p>
    </section>

    <section>
        <h1>[+]Credits</h1>
        <p>
            <a href="https://lisajamhoury.com/" target="_blank"> Lisa Jamhoury</a>
            - Director, Spoken Word
            <br/>
            <a href="https://instagram.com/snayss" target="_blank"> Sneha Belkhale</a>
            - Unreal Engine Developer
            <br/>
            <a href="https://www.instagram.com/francoisenvoranger/" target="_blank"> Françoise Voranger</a>
            - Choreography, Movement, Performance
            <br/>
            <a href="https://www.onassis.org/el/initiatives/onassis-digital-innovation/onx-studio" target="_blank"> ONX
                Studio, NYC</a>
            - Venue
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[Maquette] Making of Motion Capture Dance</title>
            <link>https://codercat.tk/maquette</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Maquette] <i>/A Spoken Word &amp; live Motion Capture Performance/</i> </h1>

    <video autoplay="" muted="" playsinline="" loop="" controls="">
        <source src="https://cdn.codercat.xyz/vid/maquette.mov" type="video/mp4"/>
    </video>

    <section>
        <h1>[+]About</h1>
        <p>
            Maquette is a live interactive performance leveraging motion capture technology,
            avatars, and dance in an exploration of the parallel histories of averaging and idealism in art and society,
            written and directed
            by <a href="https://lisajamhoury.com/" target="_blank"> Lisa Jamhoury</a>.
        </p>
        <p>
            Reckoning. the third scene of Maquette, is an 8 minute spoken word and motion captured piece
            performed solo at <a href="https://www.demo2023.org/" target="_blank">New Inc&#39;s Demo Day 2023</a> at ONX
            Studio in New York. It&#39;s a moment
            of introspection given by movement and speech,
            visually exploring through the sub conscious space of thoughts on deconstructing the digital self and a
            reckoning with our physicalities.
        </p>
        <p>
            I was the main Unreal Engine developer for this scene of Maquette, and it was such a fun experience to work
            together with Lisa and her team!

            Our collaboration was cross dimensional, moving fluidly from the physical and digital.

            We first met eachother at ONX Studio in New York, where Lisa had arranged a three day Maquette hackathon.
            We had the mornings for tech time, speed prototyping some visual effects and avatar manipulations in Unreal
            Engine.
            And afternoon, the four dancers were with us to get in the motion capture suit and play in the scenes!

            I really enjoyed these days, though they were intense and we didn&#39;t see the sun, the duration was perfect
            to get into the zone.
            We prototyped some really fun things with the four dancers, blending their motions together, or turning them
            abstractly into cubes.
        </p>
        <figure>
            <img src="https://codercat.tk/maquette/bts.jpg"/>
            <figcaption>Lisa and the four dancers, the blend space between their bodies behind</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/bts2.jpg"/>
            <figcaption>Behind my computer at ONX</figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/calibration.jpg"/>
            <figcaption>The ritual of an Optitrack calibration, wave the wand over every pixel of 12 camera space and
                bless.</figcaption>
        </figure>
        <p>
            After this hackathon, we spent the next month working together remotely over Parsec, Zoom, and two more
            physical rehearsals at ONX. Building out some of the concepts that
            we enjoyed when we were together, focusing on the moments where we both would look at the projection and go
            &#34;wow&#34; in unison.

            Lisa was really pushing for non linear mapping of movement from the performer to the avatar, to match the
            deconstruction in the text. We came up with some
            themes and visual concepts in Unreal Engine together -- my favorite being 100 bodies forming a weirdly
            organic structure by positioning them evenly on
            a sphere ( where I learned about the <a href="https://stackoverflow.com/questions/9600801/evenly-distributing-n-points-on-a-sphere" target="_blank">Fibonacci Sphere</a> )
            , and breaking up the avatar in Houdini and applying a hover effect to each limb in Unreal.
        </p>
        <figure>
            <img src="https://codercat.tk/maquette/spherebodsfar.jpg"/>
            <figcaption> 100&#39;s of bodies rotated around a sphere, weirdly organic structure </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/spherebods.jpg"/>
            <figcaption> Close up, spoken words are about coming back into our physicality </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebods.jpg"/>
            <figcaption> Wireframe limbs from above, this was one of our &#34;woooow&#34; unison moments that we followed
                through with </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebods2.jpg"/>
            <figcaption> Wireframe limb hover </figcaption>
        </figure>
        <figure>
            <img src="https://codercat.tk/maquette/wirebodscollapse.jpg"/>
            <figcaption> Wireframe limb disintegration </figcaption>
        </figure>
        <p>
            After reaching an interesting point with the visual themes, we laid out everything onto sequencers and
            matched
            the cameras and visuals to a spoken word track in the Unreal Engine sequencer. We broke it out into three
            sequences that were triggerable
            by key press, so that Lisa could easily sync the visuals with her speech.
        </p>
        <p>
            I could not attend the actual show, but kif was in New York and I sent him as a codercat representative to
            film and enjoy the experience physically!
            From what it seems from the footage, the visuals, movement, and speech came together in a really interesting
            way. I loved the stage setup as well, creating
            an intimate space with a single spotlight and bean bags.
        </p>
        <p>
            I&#39;m very looking forward to continuing this collaboration, as there will be a full 45 minute showing of
            Maquette in Nov 2023, including all seven scenes and four dancers.
            Lisa has mentioned some interesting visuals and concepts for the scenes that still need developing, and I
            can&#39;t wait to explore these with her soon!
        </p>
    </section>

    <section>
        <h1>[+]Credits</h1>
        <p>
            <a href="https://lisajamhoury.com/" target="_blank"> Lisa Jamhoury</a>
            - Director, Spoken Word
            <br/>
            <a href="https://instagram.com/snayss" target="_blank"> Sneha Belkhale</a>
            - Unreal Engine Developer
            <br/>
            <a href="https://www.instagram.com/francoisenvoranger/" target="_blank"> Françoise Voranger</a>
            - Choreography, Movement, Performance
            <br/>
            <a href="https://www.onassis.org/el/initiatives/onassis-digital-innovation/onx-studio" target="_blank"> ONX
                Studio, NYC</a>
            - Venue
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[WITHIN TOUCHING DISTANCE]</title>
            <link>https://codercat.tk/within-touching-distance</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[WITHIN TOUCHING DISTANCE] <i>/immersive virtual reality/</i></h1>

    <figure>
        <img src="https://codercat.tk/within-touching-distance/blanketThrow.jpg"/>
    </figure>

    <section>
        <h1>[+]About</h1>

        <p>
            <a href="https://zu-uk.com/project/within-touching-distance/" target="_blank">Within Touching Distance</a>
            is an experience of Virtual Reality synchronized with human touch, written and directed by Persis Jadé
            Maravala,
            and run by the performance team <a href="https://zu-uk.com/" target="_blank">ZU-UK</a>. This piece is very
            special and I find it incredibly hard to describe in words, but essentially you put on a VR headset in a
            physical bedroom set, and are gently put to bed by your
            <a href="https://en.wiktionary.org/wiki/amma" target="_blank">amma</a> in VR, with synchronized touch by an
            actress in real life. You then are immersed into an interactive dreamscape narrated by a child, and finally
            experience a palliative care setting, again synchronized with the touch of an actress.
        </p>

        <p>
            The human touch immerses you deep into the virtual reality, and for me it had the ability to bring me back
            to
            the memories of my childhood, and also somehow push me into the unknown feeling of being elderly. You
            experience
            a lifetime in 35 minutes, all from the difference in the way the actor is touching you, and worlds created
            for
            you in the headset.
        </p>

        <p>
            For this project, I was invited to come for a residency in London, to be the resident Unreal Engine
            Technical
            Director until the premier of Within Touching Distance at the
            <a href="https://sheffdocfest.com/film/within-touching-distance" target="_blank"> Sheffield Docfest</a>.
            Before
            arriving on site, Codercat worked remotely on creating a 3D representation of the physical bedroom set for
            the
            VR part of the experience. The idea was to have a surreal moment while in VR, as you look down at your feet
            and
            you are in the bed with same dinosaur sheets, holding the same teddy bear, wearing the same pajamas, but
            with
            the hands and feet of a little indian girl.
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/JadeAndBaby.jpg"/>
        </figure>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/MetaBB.jpg"/>
            <figcaption>3D Replica of the physical set of Within Touching Distance, in Unreal Engine</figcaption>
        </figure>

        <p>You start from the first person perspective and lift up to see yourself from above.</p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/FullBed.jpg"/>
            <figcaption>3D Replica of the physical set of Within Touching Distance, in Unreal Engine</figcaption>
        </figure>

        <p>
            We played with some fun tech to create this asset, using a modified
            <a href="https://metahuman.unrealengine.com/" target="_blank">Metahuman</a> for the girls body, cloth
            simulations in Houdini for the pajamas and fabric, and even tried using AI to generate some of the textures
            from
            low res images of the real life dinosaur sheets we managed to find on
            <a href="https://www.aliexpress.us/item/2255801080418568.html?gatewayAdapt=glo2usa4itemAdapt" target="_blank">Ali Express</a>
            (These were quickly turned down by myself, and I simply asked the team on site to take a high resolution
            photo
            of the bedsheets :)
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/VetoThisAI.jpg"/>
            <figcaption>Kif&#39;s (vetoed) attempt at making a tillable dinosaur bedsheets with AI</figcaption>
        </figure>

        <p>
            Keeping on the trend of cloth simulation and fabrics, Jadé asked me to make a coat rack full of children
            coats
            which could be lined along the primary school hallway. Instead of hand designing and simulating everything
            in
            Houdini, I found an awesome resource, the
            <a href="https://connect.clo-set.com/" target="_blank">Marvelous Designer Asset Store</a>. This store has
            tons
            of free patterns that you can load into Marvelous Designer! I found some simple coat patterns, and simulated
            /
            exported them straight from Marvelous. Of course there was some hackery that needed to happen to get them to
            simulate like they were on a coat rack:)
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/coatracks.jpg"/>
            <figcaption>Coat Rack references and layout planning to implementation</figcaption>
        </figure>

        <p>
            After the weeks of working remotely, I was so excited and ready to visit the team in London. It was quite a
            surreal experience to step into a room with the 3D assets I had been working on remotely, now physically in
            front of me... to touch the dinosaur sheets and plaid pajamas in real life! We had one week in Bathway
            Theater
            rehearsing with the actors doing the synchronized touch before we were off to Sheffield, and making changes
            to
            the unreal engine gameplay as different technical and aesthetic issues came up.
        </p>

        <p>
            It was quite an intense week of 10+ hour work days... this experience hits right to the core of our human
            natures, so most participants would come out of the headset in tears...which also had an effect on the
            actors
            and team.
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/Beds.jpg"/>
            <figcaption>The Set at Sheffield Doc Fest, Site Gallery</figcaption>
        </figure>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/WithNurses.jpg"/>
            <figcaption>
                The Ammas to Nurses, imagine doing this 35 minute act for 8 hours, with crying participants
            </figcaption>
        </figure>

        <figure>
            <video src="https://codercat.tk/within-touching-distance/Nursing.mp4" title="Fully" controls=""></video>
            <figcaption>Sarah nursing a participant</figcaption>
        </figure>

        <p>But through the intensity there were so many beautiful moments...</p>

        <p><i>{Dinner with Jadé &amp; Jorge &amp; Family}</i></p>
        <p>
            <i>{Watching the actors get into character and how they gracefully handled the emotions of participants}</i>
        </p>
        <p><i>{Catching a train with Ross &amp; a care package of mixed drinks}</i></p>
        <p><i>{Trying to fill up a glass vase with water in blindfolds}</i></p>
        <p><i>{CHAOS ensuing the moment Ross (the technical director) left}</i></p>
        <p><i>{Enjoying the set and energy we thoughtfully created at Sheffield (over the days people would start crying
                as they enter the room before they had even started the experience)}</i>ƒ</p>
        <p><i>{Crying inside the headset when I did the full experience myself}</i></p>
        <p><i>{Hugs as we break down}</i></p>
        <p><i>{Love in the intensity}</i></p>
        <p><i>{SPOONS}</i></p>
        <p><i>{Preparing a speech for the award with Alice a bit too early:)..}</i></p>
        <p>And so much more...</p>

        <img src="https://codercat.tk/within-touching-distance/grassBed.jpg"/>
        <figcaption>Promotion Renders done while on Tech Support in Sheffield</figcaption>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/whatwillyouremember.jpg"/>
            <figcaption>What will you remember?</figcaption>
        </figure>

        <p>
            Still processing this whole experience, but I can&#39;t believe that this all started from an email to Jorge, we
            all
            followed the coincidences as a sign, and here we are! I&#39;ve learned so much from this team, their attitudes
            towards art and creation and honesty. And now I will end on the note of kif&#39;s most beautiful work and star
            of
            Within Touching Distance, The Teddy Bear.
        </p>
        <figure>
            <img src="https://codercat.tk/within-touching-distance/teddybear.jpg"/>
            <figcaption>Kif&#39;s hard ass work on this teddy bear and it was the STAR</figcaption>
        </figure>
    </section>

    <section>
        <h1>[+]Credits</h1>
        <p>
            <a href="https://zu-uk.com/" target="_blank"> ZU UK</a>
            - Production Company
            <br/>
            <a href="https://sheffdocfest.com/film/within-touching-distance" target="_blank"> Sheffield Docfest</a>
            - Premier Venue
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[Within Touching Distance] Virtual Reality Synchronized with Human Touch</title>
            <link>https://codercat.tk/within-touching-distance</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[WITHIN TOUCHING DISTANCE] <i>/immersive virtual reality/</i></h1>

    <figure>
        <img src="https://codercat.tk/within-touching-distance/blanketThrow.jpg"/>
    </figure>

    <section>
        <h1>[+]About</h1>

        <p>
            <a href="https://zu-uk.com/project/within-touching-distance/" target="_blank">Within Touching Distance</a>
            is an experience of Virtual Reality synchronized with human touch, written and directed by Persis Jadé
            Maravala,
            and run by the performance team <a href="https://zu-uk.com/" target="_blank">ZU-UK</a>. This piece is very
            special and I find it incredibly hard to describe in words, but essentially you put on a VR headset in a
            physical bedroom set, and are gently put to bed by your
            <a href="https://en.wiktionary.org/wiki/amma" target="_blank">amma</a> in VR, with synchronized touch by an
            actress in real life. You then are immersed into an interactive dreamscape narrated by a child, and finally
            experience a palliative care setting, again synchronized with the touch of an actress.
        </p>

        <p>
            The human touch immerses you deep into the virtual reality, and for me it had the ability to bring me back
            to
            the memories of my childhood, and also somehow push me into the unknown feeling of being elderly. You
            experience
            a lifetime in 35 minutes, all from the difference in the way the actor is touching you, and worlds created
            for
            you in the headset.
        </p>

        <p>
            For this project, I was invited to come for a residency in London, to be the resident Unreal Engine
            Technical
            Director until the premier of Within Touching Distance at the
            <a href="https://sheffdocfest.com/film/within-touching-distance" target="_blank"> Sheffield Docfest</a>.
            Before
            arriving on site, Codercat worked remotely on creating a 3D representation of the physical bedroom set for
            the
            VR part of the experience. The idea was to have a surreal moment while in VR, as you look down at your feet
            and
            you are in the bed with same dinosaur sheets, holding the same teddy bear, wearing the same pajamas, but
            with
            the hands and feet of a little indian girl.
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/JadeAndBaby.jpg"/>
        </figure>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/MetaBB.jpg"/>
            <figcaption>3D Replica of the physical set of Within Touching Distance, in Unreal Engine</figcaption>
        </figure>

        <p>You start from the first person perspective and lift up to see yourself from above.</p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/FullBed.jpg"/>
            <figcaption>3D Replica of the physical set of Within Touching Distance, in Unreal Engine</figcaption>
        </figure>

        <p>
            We played with some fun tech to create this asset, using a modified
            <a href="https://metahuman.unrealengine.com/" target="_blank">Metahuman</a> for the girls body, cloth
            simulations in Houdini for the pajamas and fabric, and even tried using AI to generate some of the textures
            from
            low res images of the real life dinosaur sheets we managed to find on
            <a href="https://www.aliexpress.us/item/2255801080418568.html?gatewayAdapt=glo2usa4itemAdapt" target="_blank">Ali Express</a>
            (These were quickly turned down by myself, and I simply asked the team on site to take a high resolution
            photo
            of the bedsheets :)
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/VetoThisAI.jpg"/>
            <figcaption>Kif&#39;s (vetoed) attempt at making a tillable dinosaur bedsheets with AI</figcaption>
        </figure>

        <p>
            Keeping on the trend of cloth simulation and fabrics, Jadé asked me to make a coat rack full of children
            coats
            which could be lined along the primary school hallway. Instead of hand designing and simulating everything
            in
            Houdini, I found an awesome resource, the
            <a href="https://connect.clo-set.com/" target="_blank">Marvelous Designer Asset Store</a>. This store has
            tons
            of free patterns that you can load into Marvelous Designer! I found some simple coat patterns, and simulated
            /
            exported them straight from Marvelous. Of course there was some hackery that needed to happen to get them to
            simulate like they were on a coat rack:)
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/coatracks.jpg"/>
            <figcaption>Coat Rack references and layout planning to implementation</figcaption>
        </figure>

        <p>
            After the weeks of working remotely, I was so excited and ready to visit the team in London. It was quite a
            surreal experience to step into a room with the 3D assets I had been working on remotely, now physically in
            front of me... to touch the dinosaur sheets and plaid pajamas in real life! We had one week in Bathway
            Theater
            rehearsing with the actors doing the synchronized touch before we were off to Sheffield, and making changes
            to
            the unreal engine gameplay as different technical and aesthetic issues came up.
        </p>

        <p>
            It was quite an intense week of 10+ hour work days... this experience hits right to the core of our human
            natures, so most participants would come out of the headset in tears...which also had an effect on the
            actors
            and team.
        </p>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/Beds.jpg"/>
            <figcaption>The Set at Sheffield Doc Fest, Site Gallery</figcaption>
        </figure>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/WithNurses.jpg"/>
            <figcaption>
                The Ammas to Nurses, imagine doing this 35 minute act for 8 hours, with crying participants
            </figcaption>
        </figure>

        <figure>
            <video src="https://codercat.tk/within-touching-distance/Nursing.mp4" title="Fully" controls=""></video>
            <figcaption>Sarah nursing a participant</figcaption>
        </figure>

        <p>But through the intensity there were so many beautiful moments...</p>

        <p><i>{Dinner with Jadé &amp; Jorge &amp; Family}</i></p>
        <p>
            <i>{Watching the actors get into character and how they gracefully handled the emotions of participants}</i>
        </p>
        <p><i>{Catching a train with Ross &amp; a care package of mixed drinks}</i></p>
        <p><i>{Trying to fill up a glass vase with water in blindfolds}</i></p>
        <p><i>{CHAOS ensuing the moment Ross (the technical director) left}</i></p>
        <p><i>{Enjoying the set and energy we thoughtfully created at Sheffield (over the days people would start crying
                as they enter the room before they had even started the experience)}</i>ƒ</p>
        <p><i>{Crying inside the headset when I did the full experience myself}</i></p>
        <p><i>{Hugs as we break down}</i></p>
        <p><i>{Love in the intensity}</i></p>
        <p><i>{SPOONS}</i></p>
        <p><i>{Preparing a speech for the award with Alice a bit too early:)..}</i></p>
        <p>And so much more...</p>

        <img src="https://codercat.tk/within-touching-distance/grassBed.jpg"/>
        <figcaption>Promotion Renders done while on Tech Support in Sheffield</figcaption>

        <figure>
            <img src="https://codercat.tk/within-touching-distance/whatwillyouremember.jpg"/>
            <figcaption>What will you remember?</figcaption>
        </figure>

        <p>
            Still processing this whole experience, but I can&#39;t believe that this all started from an email to Jorge, we
            all
            followed the coincidences as a sign, and here we are! I&#39;ve learned so much from this team, their attitudes
            towards art and creation and honesty. And now I will end on the note of kif&#39;s most beautiful work and star
            of
            Within Touching Distance, The Teddy Bear.
        </p>
        <figure>
            <img src="https://codercat.tk/within-touching-distance/teddybear.jpg"/>
            <figcaption>Kif&#39;s hard ass work on this teddy bear and it was the STAR</figcaption>
        </figure>
    </section>

    <section>
        <h1>[+]Credits</h1>
        <p>
            <a href="https://zu-uk.com/" target="_blank"> ZU UK</a>
            - Production Company
            <br/>
            <a href="https://sheffdocfest.com/film/within-touching-distance" target="_blank"> Sheffield Docfest</a>
            - Premier Venue
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ONENESS]</title>
            <link>https://codercat.tk/oneness</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[ONENESS] <i>/360 Immersive Installation and Performance/</i></h1>
    <video autoplay="" muted="" playsinline="" loop="" controls="">
      <source src="https://cdn.codercat.xyz/vid/oneness_teaser.mp4" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]About</h1>
      <p>
        Oneness is a 360 immersive installation and performance, exhibited in the CSULB Innovation Space in
        collaboration with <a href="https://behnazfarahi.com/">Behnaz Farahi</a>. The piece envisions a future where an
        army of women wear robotic masks to communicate secret messages using AI-generated Morse code. The concept is
        brought to life by a physical performance, costume design, robotics, 3D graphics, and sound design, immersing
        you deeply into this powerful fictional environment.
      </p>
      
      <figure>
        <img src="https://codercat.tk/oneness/flyer.jpg"/>
        <figcaption>Poster for the premier event at CSULB.</figcaption>
      </figure>

      <p>
        I worked on the digital aspect of this project, creating the 360, 8K, 7 minute render to project on the dome
        during the installation. I&#39;m really proud of the technical achievements during this project, specifically with
        the high resolution fabric simulations brought to Unreal Engine, compositing and rendering in 8K out of Unreal
        Engine.
      </p>
      <p>
        And I&#39;m also so happy to get the chance to work with Behnaz! I had been following her work for a years, she
        makes beautiful algorithmically oriented, robotic, 3D printed fashion, with a critical eye for design and story.
        A recent piece I saw from her was called
        <a href="https://behnazfarahi.com/can-the-subaltern-speak/" target="_blank">Can the Subaltern Speak</a>.
        Inspired by the <a href="https://en.wikipedia.org/wiki/Battoulah/" target="_blank">Bandari</a> women in Iran,
        Behnaz created a 3D printed mask with 17 mechanical blinking eyelashes. The idea is that the women wearing these
        masks are able to communicate with eachother through blinking their eyelashes in morse coded patterns. They
        develop their own language, empowered with their faces concealed.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/cover.jpg"/>
        <figcaption>3D Printed Mask by Behnaz Farahi, inspired by the Bandari women of Iran.</figcaption>
      </figure>

      <p>
        This project blew my mind, first of all the intricacy of the 3d printed design, and then how it so critically
        brings technology into the social phenomena of the (male) gaze, and allows us to think of a future where this
        mask could be used as a protective element, a biological enhancement.
      </p>
      <p>
        I reached out to Behnaz, asking her if she would like to collaborate, as I felt like we could be a harmonious
        blend of physical and digital creation. We chatted and I think we both could feel there was a good energy
        between us. She had access to a 360 immersive projection cylinder dome, and on some beautiful synergy moment we
        imagined how powerful it would be to digitally recreate her mask from &#34;Can the Subaltern Speak&#34;, and create a
        scene with hundreds of women wearing the mask in chador, slowly walking towards you. And in the center of the
        physical space, there would be a real woman wearing the physical mask, and a long white chador that extended to
        the diameter of the room, with wind underneath creating ripples in her fabric. This was our fever dream giving
        us chills as we spoke it out loud, and I can&#39;t believe we made it happen, one step at a time.
      </p>
      <p>
        We started this journey on the technical side, Behnaz sent me the 3D model for the mask, and I loaded it into
        Houdini to rig the 17 eyelashes, and then animate them in Unreal Engine. Of course this process reminded me of
        how Houdini can literally do anything.
      </p>
      <figure>
        <video src="https://codercat.tk/oneness/MaskBlink.mp4" title="Fully" controls=""></video>
        <figcaption>First prototype of the rigged mask in the digital world!</figcaption>
      </figure>
      <p>
        Now that we had one mask digitally replicated, we could have hundreds! We started thinking about the aesthetics
        for the scene and how to shape it for the cylinder dome. We loved the idea of having hundreds of women
        surrounding the camera, and slowly walking towards it from all angles.
      </p>
      <p>
        Behnaz has a strong love for the ocean, living just a few minutes from the beach and surfing every morning:) So
        she was keen on having an ocean in the background, for the surreal feeling of the women emerging from it.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/shirin-neshat.jpg"/>
        <figcaption>Shirin Neshat, our original inspiration and reference imagery.</figcaption>
      </figure>

      <p>
        On the technical side in Unreal, this could be implemented by mirroring one 4K video, however we quickly
        realized that mirroring places a large aesthetic restriction and creates various glitches in the shadows we
        would have to work around. This meant that we had to go all the way, create the full scene in Unreal Engine, and
        render all 360 degrees. Although this meant having a super heavy scene in Unreal Engine, I was happy to work
        towards this way because it would lead to freedom in aesthetic choices later. For example, now we could have
        lighting that affected each character differently for a dynamic and dramatic scene.
      </p>

      <p>
        This also posed the challenge of how could to render this 8K footage out of Unreal on my little laptop with
        NVIDIA RTX2060! I downloaded some plugins that are meant for rendering out 360 video from Unreal Engine, but
        they simply ran out of memory trying to render the 8K that I needed. I had to build my own 360 renderer,
        essentially making a rig with four 90 FOV cameras placed at 90 degree angles. I rendered out the sequence
        individually from each camera, using a post processing material to do the cylinder projection warping (ask me
        about an interesting moment using ChatGPT to solve the projection mapping equation myself), then stitching each
        the four images together using FFMPEG.
      </p>
      <p>
        It was quite a pipeline to figure out! But at the end of it, I was able to get an 8K video for a 360 projection
        rendered from my bb laptop.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/original_zoomedout.jpg"/>
        <figcaption>Playing with how to composite the ocean footage into the 8K render.</figcaption>
      </figure>

      <figure>
        <video src="https://cdn.codercat.xyz/vid/oneness_scroll.mp4" controls=""></video>
        <figcaption>Panning over final 360 result of full performance projection.</figcaption>
      </figure>

      <p>
        Behnaz took some footage of the ocean with a wide lens, and I played with the lighting in Unreal Engine and
        compositing in DaVinci to match. We went back and forth with each other testing the different combinations, but
        eventually we converged to our love for black and white, moody and fog:)
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/OceanComparison.jpg"/>
        <figcaption>Comparison of different ocean video backgrounds, color, and lighting schemes.</figcaption>
      </figure>

      <p>
        The character AI for this piece was quite simple, as the characters had two motions, walk to the camera, speak
        to each other, and blink. The part that probably took me the longest was getting the cloth simulation to play
        nicely with all these states! I did a pretty deep dive into cloth simulation for this project, to solve the
        challenge of hundreds of simultaneous cloth simulations rendering real-time. I played a bit with the simulation
        tools in Unreal Engine but they were much to hard to control or get the level of detail I wanted. I decided to
        go with vellum in HoudiniFX, and exporting it out to Unreal using
        <a href="https://www.sidefx.com/docs/houdini/nodes/out/labs--vertex_animation_textures-3.0.html" target="_blank">Vertex Animation Textures</a>
        (VAT). There was a lot of hackery needed to be able to blend between two VATs (as I needed a walk and idle cloth
        state), as well as apply a bone transform for the head rotations in conjunction with the simulation.
      </p>
      <p>
        However once this was solved, it&#39;s just one shader lookup per frame for the intricacy of a Houdini Vellum cloth
        simulation! And it seemed like I could not even hit a rendering bottleneck in Unreal Engine with 200+
        characters!
      </p>
      <p>
        We added some wind, offsets per character, slowed down the cloth simulation speed, and the result was powerful.
      </p>
      <p>
        The digital side was coming together! With feedback and suggestions from Behnaz along the way, I was really
        happy in the direction it was going. Since I was making my way to Los Angeles, Behnaz and I decided to have a
        little 24 hour hackathon together. I was so excited to meet in person! We spent the day in the innovation space
        at CSULB, testing out different color corrections for the visual, playing with fabric to cover the carpet for
        the exhibition, getting to know each other, seeing the mask in real life (!), skating and biking around venice
        beach, looking at her 3D printed material experiments in her studio, and a sweet salmon &amp; wine dinner :) In the
        morning we even got up at 7AM to catch some footage of the ocean in overcast (which is the footage we used in
        the final video).
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/snays-prototyping.jpg"/>
        <figcaption>Prototyping visuals and solutions for covering the carpet of the innovation space.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/beach.jpg"/>
        <figcaption>Behnaz and I, a selfie with the ocean.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/mask.jpg"/>
        <figcaption>The mask in real life!</figcaption>
      </figure>

      <p>
        The next week, we also went to the fashion district in Los Angeles, to see what kind of options we had for
        fabric for the chador that should span the width of the space. I didn&#39;t know but apparently most of stores in
        the area are run by Iranians, Behnaz was speaking to them in Farsi, and it was really fun for me to watch the
        interactions, everything became louder and more animated, I felt like we had entered a portal escaping America.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/fabric2.jpg"/>
        <figcaption>Behnaz and the persian fabric dealer.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/fabric1.jpg"/>
        <figcaption>Sheer chador fabric option.</figcaption>
      </figure>

      <p>
        After this, I was off to New York. Behnaz spent the next few weeks sending me updates on the physical part of
        the installation, such as printing a new mask in white, the large white chador, working on the fan system to
        lift the chador like waves, and a new white flooring. Everything she does in the physical realm, to me is so
        thoughtfully executed and stunning.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/chador.jpg"/>
        <figcaption>Behnaz stitching together the floor wide Chador.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/fansInSpace.jpg"/>
        <figcaption>Fan rig underneath the chador, to lift it up in the wind.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/floor1.jpg"/>
        <figcaption>Flooring construction by Behnaz and her team.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/floor2.jpg"/>
        <figcaption>Flooring complete!</figcaption>
      </figure>

      <p>
        We also brought my friend and musician from Athens,
        <a href="https://kostadis.bandcamp.com" target="_blank">Kostadis</a> into the project to work on the sound
        design. This was a very fun mixing of my worlds, as I had met Kostadis covered in sparkles at a rave the
        previous year, I also worked on a music video for one of his tracks
        <a href="https://youtu.be/OZCMDN57V_U" target="_blank">Emerald</a>. Of course he is an amazing musician and
        really it was such a smooth collaboration, he knew exactly how to bring the piece to life, adding elements we
        could never have imagined (listen for the shrimp sounds:).
      </p>
      <p>
        The show was on June 10th, I wish that I could have been there in person to witness all the physical elements
        that came together. Behnaz said that it was a success, many people questioning whether the 360 projection was
        real footage :) She got a videographer at the event so I will update this article with the footage once I get
        it!
      </p>
      <p>
        Overall, I&#39;m so proud of us for making this dream a reality, I think we made something so unique and powerful,
        from the heart.
      </p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://behnazfarahi.com/" target="_blank">Behnaz Farahi</a> - Creative Director and Designer
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">Sneha Belkhale</a> - Unreal Engine Dev
      <br/>
      <a href="https://kostadis.bandcamp.com" target="_blank">Kostadis Michail</a> - Musician
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Sat, 10 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[Oneness] Making of 360 Immersive Performance</title>
            <link>https://codercat.tk/oneness</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[ONENESS] <i>/360 Immersive Installation and Performance/</i></h1>
    <video autoplay="" muted="" playsinline="" loop="" controls="">
      <source src="https://cdn.codercat.xyz/vid/oneness_teaser.mp4" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]About</h1>
      <p>
        Oneness is a 360 immersive installation and performance, exhibited in the CSULB Innovation Space in
        collaboration with <a href="https://behnazfarahi.com/">Behnaz Farahi</a>. The piece envisions a future where an
        army of women wear robotic masks to communicate secret messages using AI-generated Morse code. The concept is
        brought to life by a physical performance, costume design, robotics, 3D graphics, and sound design, immersing
        you deeply into this powerful fictional environment.
      </p>
      
      <figure>
        <img src="https://codercat.tk/oneness/flyer.jpg"/>
        <figcaption>Poster for the premier event at CSULB.</figcaption>
      </figure>

      <p>
        I worked on the digital aspect of this project, creating the 360, 8K, 7 minute render to project on the dome
        during the installation. I&#39;m really proud of the technical achievements during this project, specifically with
        the high resolution fabric simulations brought to Unreal Engine, compositing and rendering in 8K out of Unreal
        Engine.
      </p>
      <p>
        And I&#39;m also so happy to get the chance to work with Behnaz! I had been following her work for a years, she
        makes beautiful algorithmically oriented, robotic, 3D printed fashion, with a critical eye for design and story.
        A recent piece I saw from her was called
        <a href="https://behnazfarahi.com/can-the-subaltern-speak/" target="_blank">Can the Subaltern Speak</a>.
        Inspired by the <a href="https://en.wikipedia.org/wiki/Battoulah/" target="_blank">Bandari</a> women in Iran,
        Behnaz created a 3D printed mask with 17 mechanical blinking eyelashes. The idea is that the women wearing these
        masks are able to communicate with eachother through blinking their eyelashes in morse coded patterns. They
        develop their own language, empowered with their faces concealed.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/cover.jpg"/>
        <figcaption>3D Printed Mask by Behnaz Farahi, inspired by the Bandari women of Iran.</figcaption>
      </figure>

      <p>
        This project blew my mind, first of all the intricacy of the 3d printed design, and then how it so critically
        brings technology into the social phenomena of the (male) gaze, and allows us to think of a future where this
        mask could be used as a protective element, a biological enhancement.
      </p>
      <p>
        I reached out to Behnaz, asking her if she would like to collaborate, as I felt like we could be a harmonious
        blend of physical and digital creation. We chatted and I think we both could feel there was a good energy
        between us. She had access to a 360 immersive projection cylinder dome, and on some beautiful synergy moment we
        imagined how powerful it would be to digitally recreate her mask from &#34;Can the Subaltern Speak&#34;, and create a
        scene with hundreds of women wearing the mask in chador, slowly walking towards you. And in the center of the
        physical space, there would be a real woman wearing the physical mask, and a long white chador that extended to
        the diameter of the room, with wind underneath creating ripples in her fabric. This was our fever dream giving
        us chills as we spoke it out loud, and I can&#39;t believe we made it happen, one step at a time.
      </p>
      <p>
        We started this journey on the technical side, Behnaz sent me the 3D model for the mask, and I loaded it into
        Houdini to rig the 17 eyelashes, and then animate them in Unreal Engine. Of course this process reminded me of
        how Houdini can literally do anything.
      </p>
      <figure>
        <video src="https://codercat.tk/oneness/MaskBlink.mp4" title="Fully" controls=""></video>
        <figcaption>First prototype of the rigged mask in the digital world!</figcaption>
      </figure>
      <p>
        Now that we had one mask digitally replicated, we could have hundreds! We started thinking about the aesthetics
        for the scene and how to shape it for the cylinder dome. We loved the idea of having hundreds of women
        surrounding the camera, and slowly walking towards it from all angles.
      </p>
      <p>
        Behnaz has a strong love for the ocean, living just a few minutes from the beach and surfing every morning:) So
        she was keen on having an ocean in the background, for the surreal feeling of the women emerging from it.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/shirin-neshat.jpg"/>
        <figcaption>Shirin Neshat, our original inspiration and reference imagery.</figcaption>
      </figure>

      <p>
        On the technical side in Unreal, this could be implemented by mirroring one 4K video, however we quickly
        realized that mirroring places a large aesthetic restriction and creates various glitches in the shadows we
        would have to work around. This meant that we had to go all the way, create the full scene in Unreal Engine, and
        render all 360 degrees. Although this meant having a super heavy scene in Unreal Engine, I was happy to work
        towards this way because it would lead to freedom in aesthetic choices later. For example, now we could have
        lighting that affected each character differently for a dynamic and dramatic scene.
      </p>

      <p>
        This also posed the challenge of how could to render this 8K footage out of Unreal on my little laptop with
        NVIDIA RTX2060! I downloaded some plugins that are meant for rendering out 360 video from Unreal Engine, but
        they simply ran out of memory trying to render the 8K that I needed. I had to build my own 360 renderer,
        essentially making a rig with four 90 FOV cameras placed at 90 degree angles. I rendered out the sequence
        individually from each camera, using a post processing material to do the cylinder projection warping (ask me
        about an interesting moment using ChatGPT to solve the projection mapping equation myself), then stitching each
        the four images together using FFMPEG.
      </p>
      <p>
        It was quite a pipeline to figure out! But at the end of it, I was able to get an 8K video for a 360 projection
        rendered from my bb laptop.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/original_zoomedout.jpg"/>
        <figcaption>Playing with how to composite the ocean footage into the 8K render.</figcaption>
      </figure>

      <figure>
        <video src="https://cdn.codercat.xyz/vid/oneness_scroll.mp4" controls=""></video>
        <figcaption>Panning over final 360 result of full performance projection.</figcaption>
      </figure>

      <p>
        Behnaz took some footage of the ocean with a wide lens, and I played with the lighting in Unreal Engine and
        compositing in DaVinci to match. We went back and forth with each other testing the different combinations, but
        eventually we converged to our love for black and white, moody and fog:)
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/OceanComparison.jpg"/>
        <figcaption>Comparison of different ocean video backgrounds, color, and lighting schemes.</figcaption>
      </figure>

      <p>
        The character AI for this piece was quite simple, as the characters had two motions, walk to the camera, speak
        to each other, and blink. The part that probably took me the longest was getting the cloth simulation to play
        nicely with all these states! I did a pretty deep dive into cloth simulation for this project, to solve the
        challenge of hundreds of simultaneous cloth simulations rendering real-time. I played a bit with the simulation
        tools in Unreal Engine but they were much to hard to control or get the level of detail I wanted. I decided to
        go with vellum in HoudiniFX, and exporting it out to Unreal using
        <a href="https://www.sidefx.com/docs/houdini/nodes/out/labs--vertex_animation_textures-3.0.html" target="_blank">Vertex Animation Textures</a>
        (VAT). There was a lot of hackery needed to be able to blend between two VATs (as I needed a walk and idle cloth
        state), as well as apply a bone transform for the head rotations in conjunction with the simulation.
      </p>
      <p>
        However once this was solved, it&#39;s just one shader lookup per frame for the intricacy of a Houdini Vellum cloth
        simulation! And it seemed like I could not even hit a rendering bottleneck in Unreal Engine with 200+
        characters!
      </p>
      <p>
        We added some wind, offsets per character, slowed down the cloth simulation speed, and the result was powerful.
      </p>
      <p>
        The digital side was coming together! With feedback and suggestions from Behnaz along the way, I was really
        happy in the direction it was going. Since I was making my way to Los Angeles, Behnaz and I decided to have a
        little 24 hour hackathon together. I was so excited to meet in person! We spent the day in the innovation space
        at CSULB, testing out different color corrections for the visual, playing with fabric to cover the carpet for
        the exhibition, getting to know each other, seeing the mask in real life (!), skating and biking around venice
        beach, looking at her 3D printed material experiments in her studio, and a sweet salmon &amp; wine dinner :) In the
        morning we even got up at 7AM to catch some footage of the ocean in overcast (which is the footage we used in
        the final video).
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/snays-prototyping.jpg"/>
        <figcaption>Prototyping visuals and solutions for covering the carpet of the innovation space.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/beach.jpg"/>
        <figcaption>Behnaz and I, a selfie with the ocean.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/mask.jpg"/>
        <figcaption>The mask in real life!</figcaption>
      </figure>

      <p>
        The next week, we also went to the fashion district in Los Angeles, to see what kind of options we had for
        fabric for the chador that should span the width of the space. I didn&#39;t know but apparently most of stores in
        the area are run by Iranians, Behnaz was speaking to them in Farsi, and it was really fun for me to watch the
        interactions, everything became louder and more animated, I felt like we had entered a portal escaping America.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/fabric2.jpg"/>
        <figcaption>Behnaz and the persian fabric dealer.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/fabric1.jpg"/>
        <figcaption>Sheer chador fabric option.</figcaption>
      </figure>

      <p>
        After this, I was off to New York. Behnaz spent the next few weeks sending me updates on the physical part of
        the installation, such as printing a new mask in white, the large white chador, working on the fan system to
        lift the chador like waves, and a new white flooring. Everything she does in the physical realm, to me is so
        thoughtfully executed and stunning.
      </p>

      <figure>
        <img src="https://codercat.tk/oneness/chador.jpg"/>
        <figcaption>Behnaz stitching together the floor wide Chador.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/fansInSpace.jpg"/>
        <figcaption>Fan rig underneath the chador, to lift it up in the wind.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/floor1.jpg"/>
        <figcaption>Flooring construction by Behnaz and her team.</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/oneness/floor2.jpg"/>
        <figcaption>Flooring complete!</figcaption>
      </figure>

      <p>
        We also brought my friend and musician from Athens,
        <a href="https://kostadis.bandcamp.com" target="_blank">Kostadis</a> into the project to work on the sound
        design. This was a very fun mixing of my worlds, as I had met Kostadis covered in sparkles at a rave the
        previous year, I also worked on a music video for one of his tracks
        <a href="https://youtu.be/OZCMDN57V_U" target="_blank">Emerald</a>. Of course he is an amazing musician and
        really it was such a smooth collaboration, he knew exactly how to bring the piece to life, adding elements we
        could never have imagined (listen for the shrimp sounds:).
      </p>
      <p>
        The show was on June 10th, I wish that I could have been there in person to witness all the physical elements
        that came together. Behnaz said that it was a success, many people questioning whether the 360 projection was
        real footage :) She got a videographer at the event so I will update this article with the footage once I get
        it!
      </p>
      <p>
        Overall, I&#39;m so proud of us for making this dream a reality, I think we made something so unique and powerful,
        from the heart.
      </p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://behnazfarahi.com/" target="_blank">Behnaz Farahi</a> - Creative Director and Designer
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">Sneha Belkhale</a> - Unreal Engine Dev
      <br/>
      <a href="https://kostadis.bandcamp.com" target="_blank">Kostadis Michail</a> - Musician
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Sat, 10 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MOTHER TAIGA]</title>
            <link>https://vimeo.com/829661626</link>
            <description>
	      
	          The training and arrival of a synthesized human to Earth. Music Video for Mother Taiga by Kiki Yago.
	      
	    </description>
            <pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MINDFUL DESIGN SPACE]</title>
            <link>https://mindfuldesignspace.com</link>
            <description>
	      
	          <![CDATA[<body>
  <div id="list"></div>

  <div class="center">
    <div class="header">
      <div class="controls">
        <a href="#">
          <i class="fa fa-th-large" aria-hidden="true"></i>
        </a>
        <a href="#list">
          <i class="fa fa-list" aria-hidden="true"></i>
        </a>
      </div>
      <!-- Menu START -->
<nav class="menu">
  <ul class="menu-list">
    <li class="menu-item">
      <a href="https://codercat.tk/">Projects</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/reel">Reels</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/blog">Blog</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/gallery/snay/2024?filter=post+reel&amp;grid=200px">Gallery</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/friends">Friends</a>
    </li>
    <!-- <li class="menu-item">
      <a href="/people">People</a>
    </li> -->
    <li class="menu-item">
      <a href="https://codercat.tk/about">About</a>
    </li>
  </ul>
</nav>
<!-- Menu END -->

    </div>

    <div class="project-box" id="project-container">
      <a href="https://codercat.xyz/cookbook" class="pr-link">
        <div class="project" style="background-color: #fd4703">
          <h1 class="pr-title">[COOKBOOK]</h1>
          <p class="project-description"> Houdini shelf tool and online library to share copy and pastable recipes.
          </p>
          <p class="release-date">Nov 02, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cookbook.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/spinal-cleanse" class="pr-link">
        <div class="project" style="background-color: #08f5aa">
          <h1 class="pr-title">[SPINAL CLEANSE]</h1>
          <p class="project-description"> Refresh your intervertebral discs with Cerebra&#39;s new product release. Sketch
            made with #Houdini #Blender
          </p>
          <p class="release-date">Oct 13, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/spinal-cleanse.jpg" alt="SpinalCleanse"/>
      </a>
      <a href="https://codercat.tk/seductress" class="pr-link">
       <div class="project" style="background-color: rgb(224, 0, 206)">
         <h1 class="pr-title">[SEDUCTRESS]</h1>
         <p class="project-description"> A love story, about an alien seductress and... her sweet child. Shot in Tbilisi, in collaboration with dearest Aiji.
         </p>
         <p class="release-date">Feb 25, 2026</p>
       </div>
       <img loading="lazy" src="https://codercat.tk/assets/img/projects/seductress.jpg" alt="Cookbook"/>
     </a>
      <a href="https://codercat.tk/nginx-visualizer" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[NGINX VISUALIZER]</h1>
          <p class="project-description"> Realtime NGINX Visualizer in the style of Defend your Castle. Made with Go and
            ThreeJS.
          </p>
          <p class="release-date">Jan 02, 2026</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/nginxviz.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/almost-always" class="pr-link">
        <div class="project" style="background-color: #c9a0ff">
          <h1 class="pr-title">[ALMOST ALWAYS]</h1>
          <p class="project-description"> Flower blooms for the fragrance campaign by Khloe Kardashian, in
            collaboration with Chevy Tyler and Greg Swales.
          </p>
          <p class="release-date">Nov 11, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/kkfrag.jpg" alt="KKFrag"/>
      </a>
      <a href="https://codercat.tk/onsen" class="pr-link">
        <div class="project" style="background-color: #c9ff05">
          <h1 class="pr-title">[ONSEN]</h1>
          <p class="project-description"> Sustainable bathing pools in space. Short sketch made with #Houdini #Blender
          </p>
          <p class="release-date">Jul 14, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/onsen.jpg" alt="Onsen"/>
      </a>
      <a href="https://codercat.tk/the-bioport" class="pr-link">
        <div class="project" style="background-color: #ff0505">
          <h1 class="pr-title">[THE BIOPORT]</h1>
          <p class="project-description"> A new way to experience the capabilities of your biological machine. Short skit
            made with #Houdini #Blender #Nuke</p>
          <p class="release-date">Feb 1, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-bioport1.jpg" alt="Bioport"/>
      </a>
      <a href="https://codercat.tk/cyborg-beauty-routines-flat" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[CYBORG BEAUTY ROUTINES]</h1>
          <p class="project-description"> Self love from the future, (if the future was now). Short skits made with
            #Houdini #Blender #Nuke</p>
          <p class="release-date">Nov 11, 2024</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cbr-flat.jpg" alt="CBR"/>
      </a>
      <a href="https://codercat.tk/cant-wait" class="pr-link">
        <div class="project" style="background-color: #ffffff">
          <h1 class="pr-title">[KANN NICHT WARTEN]</h1>
          <p class="project-description"> Environment, explosions, and crowd sims for Souly&#39;s music video, directed by Anna Van Der Velde.</p>
          <p class="release-date">Jun 5, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cantwait.jpg" alt="CantWait"/>
      </a>
      
      <a href="https://codercat.tk/iconic" class="pr-link">
        <div class="project" style="background-color: #ffa5e8">
          <h1 class="pr-title">[ICONIC]</h1>
          <p class="project-description"> Aerial World and Eye Reflection VFX for Paris Hilton Fragrances Campaign, in
            collaboration with Chevy Tyler and Greg Swales.</p>
          <p class="release-date">Apr 3, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/iconic.jpg" alt="Iconic"/>
        </a><a href="https://codercat.tk/telerana" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[TELERANA]</h1>
            <p class="project-description"> Short film directed by Nicola Rios, featuring a giant 3D spider in the
              basement.</p>
            <p class="release-date">Aug 1, 2025</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/telerana.jpg" alt="Iconic"/>
        </a>
        <a href="https://codercat.tk/cyborg-beauty-routines" class="pr-link">
          <div class="project" style="background-color: #ff0505">
            <h1 class="pr-title">[CYBORG BEAUTY ROUTINES EXPERIENCE]</h1>
            <p class="project-description"> A ThreeJS experimental video portal, crawl into the nested worlds of our
              series.</p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyborg-beauty-routines.jpg" alt="CBRE"/>
        </a>
        <a href="https://www.nowness.asia/topic/usa/thorn-fashion-olivia-de-camps" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[THORN]</h1>
            <p class="project-description"> Fashion Film for RUIbuilt, directed by Olivia de Camps. TV and thorn skin
              growth VFX by Codercat. </p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/rui.jpg" alt="Thorn"/>
        </a>
        <a href="https://codercat.tk/vfx" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[VFX 2024]</h1>
            <p class="project-description"> Compilation of our live action visual effects work. Made with #Houdini
              #Blender #SynthEyes #Nuke</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vfx.jpg" alt="VFX2024"/>
        </a>
        <a href="https://codercat.tk/expo" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[EXPO]</h1>
            <p class="project-description"> Unreal Engine music video for Kiki Yago&#39;s mind destroying track, Expo</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/expo.jpg" alt="Expo"/>
        </a>
        <a href="https://codercat.tk/tskaltubo" class="pr-link">
          <div class="project" style="background-color: #08f5aa">
            <h1 class="pr-title">[TSKALTUBO]</h1>
            <p class="project-description"> Series of short experimental films exploring the alternate reality of an
              abandoned Sanatorium. Made with #Houdini #DaVinci</p>
            <p class="release-date">Dec 25, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tskaltubo2.jpg" alt="Tskaltubo"/>
        </a>
        <a href="https://codercat.tk/cocoon" class="pr-link">
          <div class="project" style="background-color: #ff0901">
            <h1 class="pr-title">[COCOON]</h1>
            <p class="project-description"> Short film exploring alien birth. Made with #UE #Houdini #DaVinci</p>
            <p class="release-date">Sep 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cocoon.jpg" alt="Cocoon"/>
        </a>
        <a href="https://codercat.tk/within-touching-distance" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[WITHIN TOUCHING DISTANCE]</h1>
            <p class="project-description"> An interactive experience by ZU-UK of synchronized human touch with Virtual
              Reality.</p>
            <p class="release-date">Jun 14, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/within-touching-distance.jpg" alt="Within Touching Distance"/>
        </a>
        <a href="https://codercat.tk/maquette" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[MAQUETTE]</h1>
            <p class="project-description"> A live motion capture and spoken word performance, in collaboration with Lisa
              Jamhoury.</p>
            <p class="release-date">Jun 21, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/maquette.jpg" alt="Maquette"/>
        </a>
        <a href="https://vimeo.com/829661626" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MOTHER TAIGA]</h1>
            <p class="project-description"> The training and arrival of a synthesized human to Earth. Music Video for
              Mother Taiga by Kiki Yago.</p>
            <p class="release-date">Jun 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mother-taiga.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://codercat.tk/oneness" class="pr-link">
          <div class="project" style="background-color: rgb(8, 245, 170)">
            <h1 class="pr-title">[ONENESS]</h1>
            <p class="project-description"> 360 Immersive Installation and Performance in collaboration with Behnaz
              Farahi.</p>
            <p class="release-date">Jun 10, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/oneness2.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://mindfuldesignspace.com" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MINDFUL DESIGN SPACE]</h1>
            <p class="project-description"> Site development and design, made with ThreeJS</p>
            <p class="release-date">May 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mindful-design-space.jpg" alt="MINDFUL DESIGN SPACE"/>
        </a>

        <a href="https://codercat.tk/digital-circus" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DIGITAL CIRCUS]</h1>
            <p class="project-description"> Collab with motion capture artist Leilani Franco.</p>
            <p class="release-date">Mar 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/digital_circus.jpg" alt="DIGITAL CIRCUS"/>
        </a>

        <a href="https://codercat.tk/kiki-yago-live" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI LIVE]</h1>
            <p class="project-description"> Music performance with the poetess Kiki Yago, and a window into her metaverse
              with live face tracked visuals in Unreal Engine 5.</p>
            <p class="release-date">Nov 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/kikiyagolive.jpg" alt="KIKI LIVE"/>
        </a>
        <a href="https://vimeo.com/793708930" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STREAM]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s STR3AM title. You wake up in her glitch
              swamp, and the rest is a blur.</p>
            <p class="release-date">Jan 28, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/stream.jpg" alt="STREAM"/>
        </a>
        <a href="https://vimeo.com/794382951" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TRANSFER AT 3RD AND C]</h1>
            <p class="project-description"> Short film sketch inspired by &#34;Under the Skin&#34;</p>
            <p class="release-date">Jan 30, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/transfer-at-3rd-and-c.jpg" alt="transfer-at-3rd-and-c"/>
        </a>
        <a href="https://www.youtube.com/watch?v=OZCMDN57V_U" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[EMERALD]</h1>
            <p class="project-description"> Music video fo Emerald by Kostadis made in Unreal Engine 5. Transporting to a
              sensual dreamscape.</p>
            <p class="release-date">Nov 7, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/emerald.jpg" alt="EMERALD"/>
        </a>
        <a href="https://codercat.tk/ya-kiki" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[YA KIKI]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s YA KIKI title. Princessa, Gadgetessa,
              whispering her sweet cyber mantras in Unreal Engine 5.</p>
            <p class="release-date">Sep 5, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ya-kiki.jpg" alt="YA KIKI"/>
        </a>
        <a href="https://www.youtube.com/watch?v=3eRPlSnXnGA" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[UTRO]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s UTRO title. A Metahuman trying to wake up
              from a dream in Unreal Engine 5.</p>
            <p class="release-date">Aug 30, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/utro.jpg" alt="UTRO"/>
        </a>
        <a href="https://opensea.io/collection/kikiyagocybercloset" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI&#39;S CYBER CLOSET]</h1>
            <p class="project-description"> An NFT Collection holding outfits worn by the musician and poetess Kiki Yago
              in her music videos.</p>
            <p class="release-date">Aug 8, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyber-closet.jpg" alt="KIKI&#39;S CYBER CLOSET"/>
        </a>
        <a href="https://drawallthethings.com" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DRAW ALL THE THINGS]</h1>
            <p class="project-description"> First attempt to draw all the things. Made with Elixir and Phoenix.</p>
            <p class="release-date">Aug 23, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dat.jpg" alt="DRAW ALL THE THINGS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=lD_SNhWDLyI" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[SIROIHA]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s SIROIHA title. Created on set with a
              Metahuman and filmed in Unreal Engine 5.</p>
            <p class="release-date">May 28, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/siroiha.jpg" alt="SIROIHA"/>
        </a>
        <a href="https://codercat.tk/neither-ever" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEITHER EVER]</h1>
            <p class="project-description"> Live projection performance made with HoudiniFX and motion captured
              choreography, in collaboration with Leilani Franco.</p>
            <p class="release-date">Feb 14, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neither-ever.jpg" alt="NEITHER EVER"/>
        </a>
        <a href="https://codercat.tk/torn" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[TORN]</h1>
            <p class="project-description"> Realtime live-looped motion capture performance made in Unity, in
              collaboration with Leilani Franco.</p>
            <p class="release-date">Mar 16, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/torn.jpg" alt="TORN"/>
        </a>
        <a href="https://codercat.tk/augmented-gallery" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AUGMENTED]</h1>
            <p class="project-description"> A gallery of digital cyborgifications made in HoudiniFX.</p>
            <p class="release-date">Mar 1, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/augmented.jpg" alt="AUGMENTED"/>
        </a>
        <a href="https://codercat.tk/lora" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[LORA]</h1>
            <p class="project-description"> Documentation of our dear friend and collaborator, Lora.</p>
            <p class="release-date">Nov 21, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/lora.jpg" alt="LORA"/>
        </a>
        <a href="https://codercat.tk/too-late-show" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TOO LATE SHOW]</h1>
            <p class="project-description"> Help me get out of my head - [largely reinterpreted] sizzle reel for a
              friend&#39;s movie.</p>
            <p class="release-date">Nov 1, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/too-late-show.jpg" alt="TOO LATE SHOW"/>
        </a>
        <a href="https://codercat.tk/dream-demon" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[DREAM DEMON]</h1>
            <p class="project-description"> When the spirit of the Dream Demon house awakens...</p>
            <p class="release-date">Aug 8, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dream-demon.jpg" alt="DREAM DEMON"/>
        </a>
        <a href="https://codercat.tk/another-space" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[ANOTHER SPACE]</h1>
            <p class="project-description"> Virtual reality gallery that highlights works of 43 artist from around the
              world.</p>
            <p class="release-date">May 9, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/another-space.jpg" alt="ANOTHER SPACE"/>
        </a>
        <a href="https://codercat.tk/dying-to-find" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[DYING TO FIND]</h1>
            <p class="project-description"> A moody WebVR piece, where you find yourself stranded in the residues and
              routines of a past civilization.</p>
            <p class="release-date">Aug 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dying-to-find.jpg" alt="DYING TO FIND"/>
        </a>
        <a href="https://block-zero.us/" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[BLOCK ZERO]</h1>
            <p class="project-description"> Creating unique digital spaces for the NFT collectors, a collaboration with
              INVI.</p>
            <p class="release-date">Jun 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/block-zero.jpg" alt="BLOCK ZERO"/>
        </a>
        <a href="https://codercat.tk/mars-simulation-0" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MARS 0]</h1>
            <p class="project-description"> Chiba&#39;s workshop where they prototyped the cyborgs that would be put
              through the experimental simulation of Mars College.</p>
            <p class="release-date">May 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mars-simulation-0.jpg" alt="MARS 0"/>
        </a>
        <a href="https://tenderclaws.com/theunderpresents" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THE UNDER PRESENTS]</h1>
            <p class="project-description"> In collaboration with Tender Claws. An immersive live theater experience in
              Virtual Reality.</p>
            <p class="release-date">Nov 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-under-presents.jpg" alt="THE UNDER PRESENTS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=DpGPDhTqQW8" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[PURPOSE PRO 2]</h1>
            <p class="project-description"> In collaboration with Justin Beiber. ThreeJS development for a browser
              skating game -- skate with Justin!</p>
            <p class="release-date">Jan 3, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/purpose-pro-2.jpg" alt="PURPOSE PRO 2"/>
        </a>
        <a href="https://codercat.tk/monster-or-friend" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[MONSTER OR FRIEND]</h1>
            <p class="project-description"> Exploration of Inverse Kinematic animation for procedural creature design in
              WebVR. Is it a monster or a friend?</p>
            <p class="release-date">Mar 25, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-or-friend.jpg" alt="MONSTER OR FRIEND"/>
        </a>
        <a href="https://codercat.tk/melt" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[MELT]</h1>
            <p class="project-description"> This is how I feel today. Simulating a melting effect by using compute
              shaders on position and velocity buffers.</p>
            <p class="release-date">May 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/melt.jpg" alt="MELT"/>
        </a>
        
        <a href="https://codercat.tk/ma" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MA]</h1>
            <p class="project-description"> In collaboration with Rachel Bungey. Exploring the japanese concept of MA
              “the interval which gives shape to the whole”.</p>
            <p class="release-date">May 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ma.jpg" alt="MA"/>
        </a>
        <a href="https://codercat.tk/wifi-soundscapes" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[WIFI SOUNDSCAPES]</h1>
            <p class="project-description"> Revealing the intangible dimension of WiFi packets with tcpdump and Foxdot.
              Data was captured on a road trip from LA to Denver.</p>
            <p class="release-date">Jan 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/wifi-soundscapes.jpg" alt="WIFI SOUNDSCAPES"/>
        </a>
        <a href="https://codercat.tk/readme" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[READ ME]</h1>
            <p class="project-description"> An experiment of focus, featuring the anti use of eye tracking in the
              browser. Made with webgazer.js and three.js.</p>
            <p class="release-date">Jul 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/readme.jpg" alt="READ ME"/>
        </a>
        <a href="https://sidequestvr.com/#/app/226" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[ALCHEMY PAINTER]</h1>
            <p class="project-description"> VR color alchemy experience. Mix dynamic fluids in an intuitive and novel way
              using a virtual syringe.</p>
            <p class="release-date">Aug 31, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/alchemy-painter.jpg" alt="ALCHEMY PAINTER"/>
        </a>
        <a href="https://codercat.tk/monster-within.html" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MONSTER WITHIN]</h1>
            <p class="project-description"> A short interactive Virtual Reality experience about the unpredictable nature
              of social acceptance.</p>
            <p class="release-date">Sep 22, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-within.jpg" alt="MONSTER WITHIN"/>
        </a>
        <a href="https://codercat.tk/three-body" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THREE BODY]</h1>
            <p class="project-description"> A WebVR story experience based on the Sci-Fi novel Three Body Problem by
              Cixin Liu.</p>
            <p class="release-date">Jun 12, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/three-body.jpg" alt="THREE BODY"/>
        </a>
        <a href="https://codercat.tk/ai-animation" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AI ANIMATION]</h1>
            <p class="project-description"> A port of the AI4Animation project to JavaScript. Explores the idea of
              machine leaning for character animation on the web.</p>
            <p class="release-date">May 13, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ai-animation.jpg" alt="AI ANIMATION"/>
        </a>
        <a href="https://codercat.tk/gender-graph" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[GENDERGRAPH]</h1>
            <p class="project-description"> Quantifying word gender biases by using machine learning models trained on
              different media sources.</p>
            <p class="release-date">Jun 12, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/gendergraph.jpg" alt="GENDERGRAPH"/>
        </a>
        <a href="https://codercat.tk/starling-simulation" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STARLING SIMULATION]</h1>
            <p class="project-description"> In collaboration with Small Data Industry. A bird floacking simulation made
              with three.js.</p>
            <p class="release-date">Oct 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/starling.jpg" alt="STARLING SIMULATION"/>
        </a>
        <a href="https://codercat.tk/procedural-ik-crawler" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[PROCEDURAL IK CRAWLER]</h1>
            <p class="project-description"> Evolution of our pet rat :) Exploration of Inverse Kinematic procedural
              character animation in the browser.</p>
            <p class="release-date">Apr 30, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/procedural-ik.jpg" alt="PROCEDURAL IK CRAWLER"/>
        </a>
        <a href="https://github.com/Kif11/anticap" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[ANTICAP]</h1>
            <p class="project-description"> Bypass any captive portal and get free WiFi easily 😝 Go tool to automate
              capturing packets in monitor mode and MAC spoofing.</p>
            <p class="release-date">Mar 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/anticap.jpg" alt="ANTICAP"/>
        </a>
        <a href="https://codercat.tk/street-sounds" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[STREET SOUNDS]</h1>
            <p class="project-description"> Encode an audio message into QR codes that can be posted on a wall as a time
              capsule.</p>
            <p class="release-date">Apr 4, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/street-sonds.jpg" alt="STREET SOUNDS"/>
        </a>
        <a href="https://codercat.tk/relaxation-room" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[RELAXATION ROOM]</h1>
            <p class="project-description"> Cellular automata pool in a vaporwave room, be careful it bites. Made with
              three.js.</p>
            <p class="release-date">Mar 3, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/relaxation-room.jpg" alt="RELAXATION ROOM"/>
        </a>
        <a href="https://codercat.tk/galactic-gypsy" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[GALACTIC GYPSY]</h1>
            <p class="project-description"> Our entry for the 2019 Global Game Jam in Hong Kong. A game about finding
              your home in an unknown planet.</p>
            <p class="release-date">Jan 27, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/galactic-gypsy.jpg" alt="GALACTIC GYPSY"/>
        </a>
        <a href="https://codercat.tk/grow-your-own-bot" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[GROW YOUR OWN BOT]</h1>
            <p class="project-description"> Training pet robots to reach their goals using the OpenAI reinforcement
              learning framework in the browser.</p>
            <p class="release-date">Dec 18, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/creatures.jpg" alt="GROW YOUR OWN BOT"/>
        </a>
        <a href="https://codercat.tk/neurojam" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEUROJAM]</h1>
            <p class="project-description"> A bot for FoxDot that takes user drum patterns and turns them into a
              masterpiece using a machine learning model from the Magenta project.</p>
            <p class="release-date">Mar 9, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neurojam.jpg" alt="NEUROJAM"/>
        </a>
        <a href="https://codercat.tk/ar-gpu-particles" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AR GPU PARTICLES]</h1>
            <p class="project-description"> A demo of compute shader particles emitting from your device in augmented
              reality.</p>
            <p class="release-date">Aug 19, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ar-gpu-particles.jpg" alt="AR GPU PARTICLES"/>
        </a>
        <a href="https://codercat.tk/auracaria-dreams" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AURACARIA DREAMS]</h1>
            <p class="project-description"> An procedurally generated art piece in three.js, inspired by the auracaria
              plant in Bogota, Colombia.</p>
            <p class="release-date">Jun 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/auracaria-dreams.jpg" alt="AURACARIA DREAMS"/>
        </a>
        <a href="https://codercat.tk/threejs-curvature" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[THREEJS CURVATURE]</h1>
            <p class="project-description"> A contribution to three.js library showing how to calculate mesh curvatures
              from raw geometry data, and use in shaders.</p>
            <p class="release-date">Jan 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/curvatureExample.jpg" alt="THREEJS CURVATURE"/>
        </a>
        <a href="https://codercat.tk/tsp-3D-art" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[3D TSP HEART]</h1>
            <p class="project-description"> An experiment of extending the TSP algorithm to work in 3D over points on the
              surface of a geometry. Made with three.js.</p>
            <p class="release-date">Jan 27, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tsp-3d-art.jpg " alt="3D TSP HEART"/>
        </a>
        <a href="https://codercat.tk/360-photo-to-video" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[360 PHOTO TO VIDEO]</h1>
            <p class="project-description"> Tool to convert 360 photos into video formats for easy sharing on media
              platforms. Made with three.js and CCapture.js</p>
            <p class="release-date">Dec 19, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/360photo-to-video.jpg" alt="360 PHOTO TO VIDEO"/>
        </a>
        <a href="https://codercat.tk/vertex-cache" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[VERTEX CACHE]</h1>
            <p class="project-description"> A demo of bringing Houdini FEM simulations to the browser by storing vertex
              data in textures.</p>
            <p class="release-date">May 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vertex-cache.jpg" alt="VERTEX CACHE"/>
        </a>
        <a href="https://codercat.tk/whirlpools" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[WHIRPOOLS]</h1>
            <p class="project-description"> Snays first three.js shader showing a simple geometry ripple effect.</p>
            <p class="release-date">Sep 10, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/whirpools.jpg " alt="WHIRPOOLS"/>
        </a>
        <a href="https://youtu.be/9fl4uK9xrxI" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[BORN ALONE]</h1>
            <p class="project-description"> The ultimate cycle. Our entry to the Rokoko Perfect Loop contest, in
              collaboration with Leilani Franco and a Metahuman. Filmed in Unreal Engine 5.</p>
            <p class="release-date">Jul 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/bornalonediesalone.jpg" alt="BORN ALONE"/>
        </a>
        <a href="https://codercat.tk/photospheres" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[PHOTOSPHERES]</h1>
            <p class="project-description"> 360 photo gallery of places around San Francisco made with Ricoh camera and
              three.js</p>
            <p class="release-date">Oct 23, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/photospheres.jpg " alt="PHOTOSPHERES"/>
        </a>
        <a href="https://codercat.tk/terminal-prints" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TERMINAL PRINTS]</h1>
            <p class="project-description"> Browse feminist t-shirt prints from a terminal. $: rm -rf patriarchy.</p>
            <p class="release-date">Aug 16, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/terminal-prints.jpg" alt="TERMINAL PRINTS"/>
        </a>
    </div>

    <!-- Footer START -->
<footer>
  <div class="social-block">
    <span class="social-item">snay</span>
    <a class="fa fa-github social-item" href="https://github.com/sneha-belkhale" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://www.instagram.com/snayss/" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/snayyss" target="_blank"></a>
  </div>
  <div class="social-block">
    <span class="social-item">kif</span>
    <a class="fa fa-github social-item" href="https://github.com/kif11" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://instagram.com/kif11" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/kovalewskiy" target="_blank"></a>
  </div>
</footer>
<!-- Footer END -->

  </div>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[DIGITAL CIRCUS]</title>
            <link>https://codercat.tk/digital-circus</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Digital Circus] <i>/a Live Motion Capture Performance/</i></h1>
    <video autoplay="" muted="" playsinline="" loop="" controls="">
        <source src="https://cdn.codercat.xyz/vid/digitalcircus.mov" type="video/mp4"/>
    </video>

    <section>
        <h1>[+]About</h1>
        <p>
            Above is a live motion capture performance set in a fantastical Unreal Engine world and using the Rokoko
            Smartsuit Pro.
            Leilani, I, and Kif were once again reunited at Bombay Beach and embarked on Part 3 of our digital journey
            together.
        </p>
        <p>
            This time, the Mars college infrastructure has granted us the Media Cave. An empty wooden box with walls
            painted white for us to play.
            We found our favorite interactions and angles in the space. Thinking about lighting, physical touch with the
            metahuman, four body play
            with the shadows, projections, and physical body.
        </p>
    </section>

    <section>
        <h1>[+]Credits</h1>
        <p>
        <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a> - Unreal Engine Dev
        <br/>
        <a href="https://www.instagram.com/helloleilanifranco/" target="_blank">@helloleilanifranco</a> - Mocap and Choreography
        <br/>
        <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a> - Camera and Stage Manager
        <br/>
        <a href="https://mars.college/" target="_blank">@mars.college</a> - Venue
        <br/>
        </p>
    </section>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TRANSFER AT 3RD AND C]</title>
            <link>https://vimeo.com/794382951</link>
            <description>
	      
	          Short film sketch inspired by "Under the Skin"
	      
	    </description>
            <pubDate>Mon, 30 Jan 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[STREAM]</title>
            <link>https://vimeo.com/793708930</link>
            <description>
	      
	          Music video for Kiki Yago's STR3AM title. You wake up in her glitch swamp, and the rest is a blur.
	      
	    </description>
            <pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[EMERALD]</title>
            <link>https://www.youtube.com/watch?v=OZCMDN57V_U</link>
            <description>
	      
	          Music video fo Emerald by Kostadis made in Unreal Engine 5. Transporting to a sensual dreamscape.
	      
	    </description>
            <pubDate>Mon, 07 Nov 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[KIKI LIVE]</title>
            <link>https://codercat.tk/kiki-yago-live</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Kiki Yago Live] <i>/a Realtime Face Capture &amp; Musical Performance/</i></h1>

    <video autoplay="" muted="" playsinline="" loop="" controls="">
      <source src="https://codercat.tk/kiki-yago-live/kiki_yago_live.mp4" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]About</h1>
      <p>Kiki Yago Live, a realtime face capture and musical performance that was exhibited in 5 different venues in Tbilisi. We explored live stage visuals in Unreal Engine 5, bringing a metahuman to life with the facial expressions of the live performing<a href="https://www.instagram.com/xenofontova_dasha/" target="_blank">Xenofontova Dasha</a>.</p>

      <p>Over the previous 6 months, Dasha and Codercat had been developing the Kiki Yago project. Kiki Yago is a poetess, who creates music and casts high speed spells to actively use the multidimensionality of our mind. She presents the feeling of being uploaded to the Metaverse and recieving every fragment of information in just a few milliseconds.</p>

      <figure>
        <video src="https://codercat.tk/kiki-yago-live/Meditation3.mp4" controls=""></video>
        <figcaption>Clip from Kiki Yago&#39;s meditation series, wisdom from UE5.</figcaption>
      </figure>

      <p>
        We expanded on her story and desires by creating music videos and meditation clips. Dasha would record herself singing her tracks rapidly using a Face Capture application on her iPhone, and send the motion data via Telegram for us to then transfer to the metahuman Kiki Yago. If you are curious about the details, check out this blog post I wrote about our first music video
        <a href="https://medium.com/@snayss/on-set-with-a-metahuman-95ed59e55a63" target="_blank">here</a>!
      </p>

      <figure>
        <video src="https://codercat.tk/kiki-yago-live/rehearsals.mp4" controls=""></video>
        <figcaption>Dasha and Kiki meet in person for the first time, at Cyber Camp in Tbilisi.</figcaption>
      </figure>

      <p>After 6 months of collaborating remotely, we were overwhelmed with excitement when Dasha said she would come stay with us in Tbilisi Georgia, for a 3 month cyber camp! The idea was to spend 3 months living, creating, playing, and working together -- with a focus on developing the first live concert/performance of Kiki Yago!</p>

      <p>We started planning for the show by creating a track list -- Dasha arranged the songs starting with the slow, vitalizing, birthing moment &#34;Mother Taiga&#34;, transitioning into the becoming of self with &#34;Ya Kiki&#34;, then into the rapid lyrical madness of &#34;Siroiha&#34; and &#34;Koni&#34;, and ending with dance beats like &#34;Utro&#34; to make the crowd get up and (gabber).</p>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/screen.png"/>
        <figcaption>Screenshot from our Unreal Engine live stage visual setup, we projected straight from play mode at the show.</figcaption>
      </figure>

      <p>
        Then Codercat matched this progression with a series of visual concepts from previous music videos and new works that could run in a realtime Unreal Engine scene at atleast 30FPS (this quickly eliminated our forest scene from
        <a href="https://www.youtube.com/watch?v=nM1e2lYzPbk" target="_blank">&#34;STR3AM&#34;</a>).
      </p>

      <p>After we came up with a scene list, we started to build a live VJ setup in Unreal Engine. We duplicated the chosen scenes from pre-existing videos and refactored them into scenes that could be used live. We built a few controls to VJ live during the show, such as switching scenes, changing camera angles, lighting scenarios, IK Controls, and shader effects.</p>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/hackspace.jpg"/>
        <figcaption>One of our first rehearsals at F0RTHSP4CE. Testing sound, visuals, and face capture in different lighting settings.</figcaption>
      </figure>

      <p>
        At the end of this first iteration, we set up our first rehearsal in a local hackerspace,
        <a href="https://f0rth.space/" target="_blank">F0RTHSP4CE</a> just a few minutes from the house. The hackerspace had an awesome basement with sound equipment and a empty white wall for our projection visuals.<br/>This was our moment to rehearse the face capture in a dark club environment. We set up a selfie tripod ( which we somehow manifested on the streets of Tbilisi ), and attached some lights so that Dasha&#39;s face would stay lit and trackable. Originally we thought to have Dasha and Kiki both center stage, but weird recursive things happened when the face capture application would see the projection of Kiki and detect it as a face.. :)
      </p>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/kikistuck.jpg"/>
        <figcaption>The face of Kiki Yago when she looks at herself through the face capture application.</figcaption>
      </figure>

      <p>Our amazing musician friend and Kiki Yago Collaborator, She Monkey, joined the Team as a DJ / sound mixer -- and we ran through the whole set! With some iterations on placement, lighting, and network issues, the live face capture seemed to be working pretty smoothly and synced to Dasha&#39;s vocals! And of course, hearing Dasha sing these songs that we had been working with, live, was really exciting and energizing.</p>

      <figure>
        <video src="https://codercat.tk/kiki-yago-live/mouthonly.mp4" title="Fully" controls=""></video>
        <figcaption>Testing testing testing.</figcaption>
      </figure>

      <p>After two weeks of rehearsals and building on our VJ setup, we were ready to hit the venues of Tbilisi:) We played 5 shows, some under bridges, some in basements, and some in strange party houses far away from the city. We cheers with some cha-cha, and brought our energy to each show. Best team ever, and we can&#39;t wait to reunite :)</p>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/stage.jpg"/>
        <figcaption>Stage info from the organizor of Secret Place</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/stage2.jpg"/>
        <figcaption>Stage placement ideas for the organizor of Monkey Radio x WAP Point</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/kiki-yago-live/codercat.jpg"/>
        <figcaption>Codercat wearing Kiki Merch, flying away after a beautiful 3 months with the Kiki Yago team.</figcaption>
      </figure>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
        <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a>
        - Realtime Unreal Engine and graphics dev
      <br/>
        <a href="https://www.instagram.com/xenofontova_dasha/" target="_blank">@xenofontova_dasha</a>
        - Vocals, realtime face capture
      <br/>
        <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a>
        - Environment artist and on-set director
      <br/>
        <a href="https://www.instagram.com/destroyer4destroyer/" target="_blank">@destroyer4destroyer</a>
        - DJ, sound mixer
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[YA KIKI]</title>
            <link>https://codercat.tk/ya-kiki</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Ya Kiki] <i>/Music Video for the Poetess + Princessa + Gadgetessa/</i>  </h1>
    <video autoplay="" muted="" playsinline="" loop="" controls="">
      <source src="https://cdn.codercat.xyz/vid/yakiki.mp4" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]About</h1>
      <p>
        Above is a music video for the single YA KIKI, by the Poetess//Princessa//Gadgetessa

        <a href="https://open.spotify.com/artist/737sId8WV5FusGceSA5gws" target="_blank">Kiki Yago</a>. A Metahuman
        whispering cyber mantras to you from the digital realities of Unreal Engine 5. Come closer my friend with a
        sweet face, touch her feathers, she wants to tell you something about herself.
      </p>
    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/kiki_yago/" target="_blank">@kiki_yago</a> - Musician and Actress
      <br/>
      <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a> - Unreal Engine Development
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a> - Editor
      <br/>
      <a href="https://www.unrealengine.com/" target="_blank">Unreal Engine 5</a> - Venue
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[UTRO]</title>
            <link>https://www.youtube.com/watch?v=3eRPlSnXnGA</link>
            <description>
	      
	          Music video for Kiki Yago's UTRO title. A Metahuman trying to wake up from a dream in Unreal Engine 5.
	      
	    </description>
            <pubDate>Tue, 30 Aug 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[DRAW ALL THE THINGS]</title>
            <link>https://drawallthethings.com</link>
            <description>
	      
	          <![CDATA[<body>
  <div id="list"></div>

  <div class="center">
    <div class="header">
      <div class="controls">
        <a href="#">
          <i class="fa fa-th-large" aria-hidden="true"></i>
        </a>
        <a href="#list">
          <i class="fa fa-list" aria-hidden="true"></i>
        </a>
      </div>
      <!-- Menu START -->
<nav class="menu">
  <ul class="menu-list">
    <li class="menu-item">
      <a href="https://codercat.tk/">Projects</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/reel">Reels</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/blog">Blog</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/gallery/snay/2024?filter=post+reel&amp;grid=200px">Gallery</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/friends">Friends</a>
    </li>
    <!-- <li class="menu-item">
      <a href="/people">People</a>
    </li> -->
    <li class="menu-item">
      <a href="https://codercat.tk/about">About</a>
    </li>
  </ul>
</nav>
<!-- Menu END -->

    </div>

    <div class="project-box" id="project-container">
      <a href="https://codercat.xyz/cookbook" class="pr-link">
        <div class="project" style="background-color: #fd4703">
          <h1 class="pr-title">[COOKBOOK]</h1>
          <p class="project-description"> Houdini shelf tool and online library to share copy and pastable recipes.
          </p>
          <p class="release-date">Nov 02, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cookbook.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/spinal-cleanse" class="pr-link">
        <div class="project" style="background-color: #08f5aa">
          <h1 class="pr-title">[SPINAL CLEANSE]</h1>
          <p class="project-description"> Refresh your intervertebral discs with Cerebra&#39;s new product release. Sketch
            made with #Houdini #Blender
          </p>
          <p class="release-date">Oct 13, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/spinal-cleanse.jpg" alt="SpinalCleanse"/>
      </a>
      <a href="https://codercat.tk/seductress" class="pr-link">
       <div class="project" style="background-color: rgb(224, 0, 206)">
         <h1 class="pr-title">[SEDUCTRESS]</h1>
         <p class="project-description"> A love story, about an alien seductress and... her sweet child. Shot in Tbilisi, in collaboration with dearest Aiji.
         </p>
         <p class="release-date">Feb 25, 2026</p>
       </div>
       <img loading="lazy" src="https://codercat.tk/assets/img/projects/seductress.jpg" alt="Cookbook"/>
     </a>
      <a href="https://codercat.tk/nginx-visualizer" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[NGINX VISUALIZER]</h1>
          <p class="project-description"> Realtime NGINX Visualizer in the style of Defend your Castle. Made with Go and
            ThreeJS.
          </p>
          <p class="release-date">Jan 02, 2026</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/nginxviz.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/almost-always" class="pr-link">
        <div class="project" style="background-color: #c9a0ff">
          <h1 class="pr-title">[ALMOST ALWAYS]</h1>
          <p class="project-description"> Flower blooms for the fragrance campaign by Khloe Kardashian, in
            collaboration with Chevy Tyler and Greg Swales.
          </p>
          <p class="release-date">Nov 11, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/kkfrag.jpg" alt="KKFrag"/>
      </a>
      <a href="https://codercat.tk/onsen" class="pr-link">
        <div class="project" style="background-color: #c9ff05">
          <h1 class="pr-title">[ONSEN]</h1>
          <p class="project-description"> Sustainable bathing pools in space. Short sketch made with #Houdini #Blender
          </p>
          <p class="release-date">Jul 14, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/onsen.jpg" alt="Onsen"/>
      </a>
      <a href="https://codercat.tk/the-bioport" class="pr-link">
        <div class="project" style="background-color: #ff0505">
          <h1 class="pr-title">[THE BIOPORT]</h1>
          <p class="project-description"> A new way to experience the capabilities of your biological machine. Short skit
            made with #Houdini #Blender #Nuke</p>
          <p class="release-date">Feb 1, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-bioport1.jpg" alt="Bioport"/>
      </a>
      <a href="https://codercat.tk/cyborg-beauty-routines-flat" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[CYBORG BEAUTY ROUTINES]</h1>
          <p class="project-description"> Self love from the future, (if the future was now). Short skits made with
            #Houdini #Blender #Nuke</p>
          <p class="release-date">Nov 11, 2024</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cbr-flat.jpg" alt="CBR"/>
      </a>
      <a href="https://codercat.tk/cant-wait" class="pr-link">
        <div class="project" style="background-color: #ffffff">
          <h1 class="pr-title">[KANN NICHT WARTEN]</h1>
          <p class="project-description"> Environment, explosions, and crowd sims for Souly&#39;s music video, directed by Anna Van Der Velde.</p>
          <p class="release-date">Jun 5, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cantwait.jpg" alt="CantWait"/>
      </a>
      
      <a href="https://codercat.tk/iconic" class="pr-link">
        <div class="project" style="background-color: #ffa5e8">
          <h1 class="pr-title">[ICONIC]</h1>
          <p class="project-description"> Aerial World and Eye Reflection VFX for Paris Hilton Fragrances Campaign, in
            collaboration with Chevy Tyler and Greg Swales.</p>
          <p class="release-date">Apr 3, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/iconic.jpg" alt="Iconic"/>
        </a><a href="https://codercat.tk/telerana" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[TELERANA]</h1>
            <p class="project-description"> Short film directed by Nicola Rios, featuring a giant 3D spider in the
              basement.</p>
            <p class="release-date">Aug 1, 2025</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/telerana.jpg" alt="Iconic"/>
        </a>
        <a href="https://codercat.tk/cyborg-beauty-routines" class="pr-link">
          <div class="project" style="background-color: #ff0505">
            <h1 class="pr-title">[CYBORG BEAUTY ROUTINES EXPERIENCE]</h1>
            <p class="project-description"> A ThreeJS experimental video portal, crawl into the nested worlds of our
              series.</p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyborg-beauty-routines.jpg" alt="CBRE"/>
        </a>
        <a href="https://www.nowness.asia/topic/usa/thorn-fashion-olivia-de-camps" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[THORN]</h1>
            <p class="project-description"> Fashion Film for RUIbuilt, directed by Olivia de Camps. TV and thorn skin
              growth VFX by Codercat. </p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/rui.jpg" alt="Thorn"/>
        </a>
        <a href="https://codercat.tk/vfx" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[VFX 2024]</h1>
            <p class="project-description"> Compilation of our live action visual effects work. Made with #Houdini
              #Blender #SynthEyes #Nuke</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vfx.jpg" alt="VFX2024"/>
        </a>
        <a href="https://codercat.tk/expo" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[EXPO]</h1>
            <p class="project-description"> Unreal Engine music video for Kiki Yago&#39;s mind destroying track, Expo</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/expo.jpg" alt="Expo"/>
        </a>
        <a href="https://codercat.tk/tskaltubo" class="pr-link">
          <div class="project" style="background-color: #08f5aa">
            <h1 class="pr-title">[TSKALTUBO]</h1>
            <p class="project-description"> Series of short experimental films exploring the alternate reality of an
              abandoned Sanatorium. Made with #Houdini #DaVinci</p>
            <p class="release-date">Dec 25, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tskaltubo2.jpg" alt="Tskaltubo"/>
        </a>
        <a href="https://codercat.tk/cocoon" class="pr-link">
          <div class="project" style="background-color: #ff0901">
            <h1 class="pr-title">[COCOON]</h1>
            <p class="project-description"> Short film exploring alien birth. Made with #UE #Houdini #DaVinci</p>
            <p class="release-date">Sep 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cocoon.jpg" alt="Cocoon"/>
        </a>
        <a href="https://codercat.tk/within-touching-distance" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[WITHIN TOUCHING DISTANCE]</h1>
            <p class="project-description"> An interactive experience by ZU-UK of synchronized human touch with Virtual
              Reality.</p>
            <p class="release-date">Jun 14, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/within-touching-distance.jpg" alt="Within Touching Distance"/>
        </a>
        <a href="https://codercat.tk/maquette" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[MAQUETTE]</h1>
            <p class="project-description"> A live motion capture and spoken word performance, in collaboration with Lisa
              Jamhoury.</p>
            <p class="release-date">Jun 21, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/maquette.jpg" alt="Maquette"/>
        </a>
        <a href="https://vimeo.com/829661626" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MOTHER TAIGA]</h1>
            <p class="project-description"> The training and arrival of a synthesized human to Earth. Music Video for
              Mother Taiga by Kiki Yago.</p>
            <p class="release-date">Jun 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mother-taiga.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://codercat.tk/oneness" class="pr-link">
          <div class="project" style="background-color: rgb(8, 245, 170)">
            <h1 class="pr-title">[ONENESS]</h1>
            <p class="project-description"> 360 Immersive Installation and Performance in collaboration with Behnaz
              Farahi.</p>
            <p class="release-date">Jun 10, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/oneness2.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://mindfuldesignspace.com" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MINDFUL DESIGN SPACE]</h1>
            <p class="project-description"> Site development and design, made with ThreeJS</p>
            <p class="release-date">May 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mindful-design-space.jpg" alt="MINDFUL DESIGN SPACE"/>
        </a>

        <a href="https://codercat.tk/digital-circus" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DIGITAL CIRCUS]</h1>
            <p class="project-description"> Collab with motion capture artist Leilani Franco.</p>
            <p class="release-date">Mar 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/digital_circus.jpg" alt="DIGITAL CIRCUS"/>
        </a>

        <a href="https://codercat.tk/kiki-yago-live" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI LIVE]</h1>
            <p class="project-description"> Music performance with the poetess Kiki Yago, and a window into her metaverse
              with live face tracked visuals in Unreal Engine 5.</p>
            <p class="release-date">Nov 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/kikiyagolive.jpg" alt="KIKI LIVE"/>
        </a>
        <a href="https://vimeo.com/793708930" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STREAM]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s STR3AM title. You wake up in her glitch
              swamp, and the rest is a blur.</p>
            <p class="release-date">Jan 28, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/stream.jpg" alt="STREAM"/>
        </a>
        <a href="https://vimeo.com/794382951" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TRANSFER AT 3RD AND C]</h1>
            <p class="project-description"> Short film sketch inspired by &#34;Under the Skin&#34;</p>
            <p class="release-date">Jan 30, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/transfer-at-3rd-and-c.jpg" alt="transfer-at-3rd-and-c"/>
        </a>
        <a href="https://www.youtube.com/watch?v=OZCMDN57V_U" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[EMERALD]</h1>
            <p class="project-description"> Music video fo Emerald by Kostadis made in Unreal Engine 5. Transporting to a
              sensual dreamscape.</p>
            <p class="release-date">Nov 7, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/emerald.jpg" alt="EMERALD"/>
        </a>
        <a href="https://codercat.tk/ya-kiki" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[YA KIKI]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s YA KIKI title. Princessa, Gadgetessa,
              whispering her sweet cyber mantras in Unreal Engine 5.</p>
            <p class="release-date">Sep 5, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ya-kiki.jpg" alt="YA KIKI"/>
        </a>
        <a href="https://www.youtube.com/watch?v=3eRPlSnXnGA" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[UTRO]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s UTRO title. A Metahuman trying to wake up
              from a dream in Unreal Engine 5.</p>
            <p class="release-date">Aug 30, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/utro.jpg" alt="UTRO"/>
        </a>
        <a href="https://opensea.io/collection/kikiyagocybercloset" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI&#39;S CYBER CLOSET]</h1>
            <p class="project-description"> An NFT Collection holding outfits worn by the musician and poetess Kiki Yago
              in her music videos.</p>
            <p class="release-date">Aug 8, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyber-closet.jpg" alt="KIKI&#39;S CYBER CLOSET"/>
        </a>
        <a href="https://drawallthethings.com" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DRAW ALL THE THINGS]</h1>
            <p class="project-description"> First attempt to draw all the things. Made with Elixir and Phoenix.</p>
            <p class="release-date">Aug 23, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dat.jpg" alt="DRAW ALL THE THINGS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=lD_SNhWDLyI" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[SIROIHA]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s SIROIHA title. Created on set with a
              Metahuman and filmed in Unreal Engine 5.</p>
            <p class="release-date">May 28, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/siroiha.jpg" alt="SIROIHA"/>
        </a>
        <a href="https://codercat.tk/neither-ever" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEITHER EVER]</h1>
            <p class="project-description"> Live projection performance made with HoudiniFX and motion captured
              choreography, in collaboration with Leilani Franco.</p>
            <p class="release-date">Feb 14, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neither-ever.jpg" alt="NEITHER EVER"/>
        </a>
        <a href="https://codercat.tk/torn" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[TORN]</h1>
            <p class="project-description"> Realtime live-looped motion capture performance made in Unity, in
              collaboration with Leilani Franco.</p>
            <p class="release-date">Mar 16, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/torn.jpg" alt="TORN"/>
        </a>
        <a href="https://codercat.tk/augmented-gallery" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AUGMENTED]</h1>
            <p class="project-description"> A gallery of digital cyborgifications made in HoudiniFX.</p>
            <p class="release-date">Mar 1, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/augmented.jpg" alt="AUGMENTED"/>
        </a>
        <a href="https://codercat.tk/lora" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[LORA]</h1>
            <p class="project-description"> Documentation of our dear friend and collaborator, Lora.</p>
            <p class="release-date">Nov 21, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/lora.jpg" alt="LORA"/>
        </a>
        <a href="https://codercat.tk/too-late-show" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TOO LATE SHOW]</h1>
            <p class="project-description"> Help me get out of my head - [largely reinterpreted] sizzle reel for a
              friend&#39;s movie.</p>
            <p class="release-date">Nov 1, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/too-late-show.jpg" alt="TOO LATE SHOW"/>
        </a>
        <a href="https://codercat.tk/dream-demon" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[DREAM DEMON]</h1>
            <p class="project-description"> When the spirit of the Dream Demon house awakens...</p>
            <p class="release-date">Aug 8, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dream-demon.jpg" alt="DREAM DEMON"/>
        </a>
        <a href="https://codercat.tk/another-space" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[ANOTHER SPACE]</h1>
            <p class="project-description"> Virtual reality gallery that highlights works of 43 artist from around the
              world.</p>
            <p class="release-date">May 9, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/another-space.jpg" alt="ANOTHER SPACE"/>
        </a>
        <a href="https://codercat.tk/dying-to-find" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[DYING TO FIND]</h1>
            <p class="project-description"> A moody WebVR piece, where you find yourself stranded in the residues and
              routines of a past civilization.</p>
            <p class="release-date">Aug 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dying-to-find.jpg" alt="DYING TO FIND"/>
        </a>
        <a href="https://block-zero.us/" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[BLOCK ZERO]</h1>
            <p class="project-description"> Creating unique digital spaces for the NFT collectors, a collaboration with
              INVI.</p>
            <p class="release-date">Jun 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/block-zero.jpg" alt="BLOCK ZERO"/>
        </a>
        <a href="https://codercat.tk/mars-simulation-0" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MARS 0]</h1>
            <p class="project-description"> Chiba&#39;s workshop where they prototyped the cyborgs that would be put
              through the experimental simulation of Mars College.</p>
            <p class="release-date">May 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mars-simulation-0.jpg" alt="MARS 0"/>
        </a>
        <a href="https://tenderclaws.com/theunderpresents" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THE UNDER PRESENTS]</h1>
            <p class="project-description"> In collaboration with Tender Claws. An immersive live theater experience in
              Virtual Reality.</p>
            <p class="release-date">Nov 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-under-presents.jpg" alt="THE UNDER PRESENTS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=DpGPDhTqQW8" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[PURPOSE PRO 2]</h1>
            <p class="project-description"> In collaboration with Justin Beiber. ThreeJS development for a browser
              skating game -- skate with Justin!</p>
            <p class="release-date">Jan 3, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/purpose-pro-2.jpg" alt="PURPOSE PRO 2"/>
        </a>
        <a href="https://codercat.tk/monster-or-friend" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[MONSTER OR FRIEND]</h1>
            <p class="project-description"> Exploration of Inverse Kinematic animation for procedural creature design in
              WebVR. Is it a monster or a friend?</p>
            <p class="release-date">Mar 25, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-or-friend.jpg" alt="MONSTER OR FRIEND"/>
        </a>
        <a href="https://codercat.tk/melt" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[MELT]</h1>
            <p class="project-description"> This is how I feel today. Simulating a melting effect by using compute
              shaders on position and velocity buffers.</p>
            <p class="release-date">May 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/melt.jpg" alt="MELT"/>
        </a>
        
        <a href="https://codercat.tk/ma" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MA]</h1>
            <p class="project-description"> In collaboration with Rachel Bungey. Exploring the japanese concept of MA
              “the interval which gives shape to the whole”.</p>
            <p class="release-date">May 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ma.jpg" alt="MA"/>
        </a>
        <a href="https://codercat.tk/wifi-soundscapes" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[WIFI SOUNDSCAPES]</h1>
            <p class="project-description"> Revealing the intangible dimension of WiFi packets with tcpdump and Foxdot.
              Data was captured on a road trip from LA to Denver.</p>
            <p class="release-date">Jan 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/wifi-soundscapes.jpg" alt="WIFI SOUNDSCAPES"/>
        </a>
        <a href="https://codercat.tk/readme" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[READ ME]</h1>
            <p class="project-description"> An experiment of focus, featuring the anti use of eye tracking in the
              browser. Made with webgazer.js and three.js.</p>
            <p class="release-date">Jul 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/readme.jpg" alt="READ ME"/>
        </a>
        <a href="https://sidequestvr.com/#/app/226" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[ALCHEMY PAINTER]</h1>
            <p class="project-description"> VR color alchemy experience. Mix dynamic fluids in an intuitive and novel way
              using a virtual syringe.</p>
            <p class="release-date">Aug 31, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/alchemy-painter.jpg" alt="ALCHEMY PAINTER"/>
        </a>
        <a href="https://codercat.tk/monster-within.html" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MONSTER WITHIN]</h1>
            <p class="project-description"> A short interactive Virtual Reality experience about the unpredictable nature
              of social acceptance.</p>
            <p class="release-date">Sep 22, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-within.jpg" alt="MONSTER WITHIN"/>
        </a>
        <a href="https://codercat.tk/three-body" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THREE BODY]</h1>
            <p class="project-description"> A WebVR story experience based on the Sci-Fi novel Three Body Problem by
              Cixin Liu.</p>
            <p class="release-date">Jun 12, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/three-body.jpg" alt="THREE BODY"/>
        </a>
        <a href="https://codercat.tk/ai-animation" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AI ANIMATION]</h1>
            <p class="project-description"> A port of the AI4Animation project to JavaScript. Explores the idea of
              machine leaning for character animation on the web.</p>
            <p class="release-date">May 13, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ai-animation.jpg" alt="AI ANIMATION"/>
        </a>
        <a href="https://codercat.tk/gender-graph" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[GENDERGRAPH]</h1>
            <p class="project-description"> Quantifying word gender biases by using machine learning models trained on
              different media sources.</p>
            <p class="release-date">Jun 12, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/gendergraph.jpg" alt="GENDERGRAPH"/>
        </a>
        <a href="https://codercat.tk/starling-simulation" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STARLING SIMULATION]</h1>
            <p class="project-description"> In collaboration with Small Data Industry. A bird floacking simulation made
              with three.js.</p>
            <p class="release-date">Oct 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/starling.jpg" alt="STARLING SIMULATION"/>
        </a>
        <a href="https://codercat.tk/procedural-ik-crawler" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[PROCEDURAL IK CRAWLER]</h1>
            <p class="project-description"> Evolution of our pet rat :) Exploration of Inverse Kinematic procedural
              character animation in the browser.</p>
            <p class="release-date">Apr 30, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/procedural-ik.jpg" alt="PROCEDURAL IK CRAWLER"/>
        </a>
        <a href="https://github.com/Kif11/anticap" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[ANTICAP]</h1>
            <p class="project-description"> Bypass any captive portal and get free WiFi easily 😝 Go tool to automate
              capturing packets in monitor mode and MAC spoofing.</p>
            <p class="release-date">Mar 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/anticap.jpg" alt="ANTICAP"/>
        </a>
        <a href="https://codercat.tk/street-sounds" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[STREET SOUNDS]</h1>
            <p class="project-description"> Encode an audio message into QR codes that can be posted on a wall as a time
              capsule.</p>
            <p class="release-date">Apr 4, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/street-sonds.jpg" alt="STREET SOUNDS"/>
        </a>
        <a href="https://codercat.tk/relaxation-room" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[RELAXATION ROOM]</h1>
            <p class="project-description"> Cellular automata pool in a vaporwave room, be careful it bites. Made with
              three.js.</p>
            <p class="release-date">Mar 3, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/relaxation-room.jpg" alt="RELAXATION ROOM"/>
        </a>
        <a href="https://codercat.tk/galactic-gypsy" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[GALACTIC GYPSY]</h1>
            <p class="project-description"> Our entry for the 2019 Global Game Jam in Hong Kong. A game about finding
              your home in an unknown planet.</p>
            <p class="release-date">Jan 27, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/galactic-gypsy.jpg" alt="GALACTIC GYPSY"/>
        </a>
        <a href="https://codercat.tk/grow-your-own-bot" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[GROW YOUR OWN BOT]</h1>
            <p class="project-description"> Training pet robots to reach their goals using the OpenAI reinforcement
              learning framework in the browser.</p>
            <p class="release-date">Dec 18, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/creatures.jpg" alt="GROW YOUR OWN BOT"/>
        </a>
        <a href="https://codercat.tk/neurojam" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEUROJAM]</h1>
            <p class="project-description"> A bot for FoxDot that takes user drum patterns and turns them into a
              masterpiece using a machine learning model from the Magenta project.</p>
            <p class="release-date">Mar 9, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neurojam.jpg" alt="NEUROJAM"/>
        </a>
        <a href="https://codercat.tk/ar-gpu-particles" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AR GPU PARTICLES]</h1>
            <p class="project-description"> A demo of compute shader particles emitting from your device in augmented
              reality.</p>
            <p class="release-date">Aug 19, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ar-gpu-particles.jpg" alt="AR GPU PARTICLES"/>
        </a>
        <a href="https://codercat.tk/auracaria-dreams" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AURACARIA DREAMS]</h1>
            <p class="project-description"> An procedurally generated art piece in three.js, inspired by the auracaria
              plant in Bogota, Colombia.</p>
            <p class="release-date">Jun 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/auracaria-dreams.jpg" alt="AURACARIA DREAMS"/>
        </a>
        <a href="https://codercat.tk/threejs-curvature" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[THREEJS CURVATURE]</h1>
            <p class="project-description"> A contribution to three.js library showing how to calculate mesh curvatures
              from raw geometry data, and use in shaders.</p>
            <p class="release-date">Jan 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/curvatureExample.jpg" alt="THREEJS CURVATURE"/>
        </a>
        <a href="https://codercat.tk/tsp-3D-art" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[3D TSP HEART]</h1>
            <p class="project-description"> An experiment of extending the TSP algorithm to work in 3D over points on the
              surface of a geometry. Made with three.js.</p>
            <p class="release-date">Jan 27, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tsp-3d-art.jpg " alt="3D TSP HEART"/>
        </a>
        <a href="https://codercat.tk/360-photo-to-video" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[360 PHOTO TO VIDEO]</h1>
            <p class="project-description"> Tool to convert 360 photos into video formats for easy sharing on media
              platforms. Made with three.js and CCapture.js</p>
            <p class="release-date">Dec 19, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/360photo-to-video.jpg" alt="360 PHOTO TO VIDEO"/>
        </a>
        <a href="https://codercat.tk/vertex-cache" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[VERTEX CACHE]</h1>
            <p class="project-description"> A demo of bringing Houdini FEM simulations to the browser by storing vertex
              data in textures.</p>
            <p class="release-date">May 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vertex-cache.jpg" alt="VERTEX CACHE"/>
        </a>
        <a href="https://codercat.tk/whirlpools" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[WHIRPOOLS]</h1>
            <p class="project-description"> Snays first three.js shader showing a simple geometry ripple effect.</p>
            <p class="release-date">Sep 10, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/whirpools.jpg " alt="WHIRPOOLS"/>
        </a>
        <a href="https://youtu.be/9fl4uK9xrxI" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[BORN ALONE]</h1>
            <p class="project-description"> The ultimate cycle. Our entry to the Rokoko Perfect Loop contest, in
              collaboration with Leilani Franco and a Metahuman. Filmed in Unreal Engine 5.</p>
            <p class="release-date">Jul 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/bornalonediesalone.jpg" alt="BORN ALONE"/>
        </a>
        <a href="https://codercat.tk/photospheres" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[PHOTOSPHERES]</h1>
            <p class="project-description"> 360 photo gallery of places around San Francisco made with Ricoh camera and
              three.js</p>
            <p class="release-date">Oct 23, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/photospheres.jpg " alt="PHOTOSPHERES"/>
        </a>
        <a href="https://codercat.tk/terminal-prints" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TERMINAL PRINTS]</h1>
            <p class="project-description"> Browse feminist t-shirt prints from a terminal. $: rm -rf patriarchy.</p>
            <p class="release-date">Aug 16, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/terminal-prints.jpg" alt="TERMINAL PRINTS"/>
        </a>
    </div>

    <!-- Footer START -->
<footer>
  <div class="social-block">
    <span class="social-item">snay</span>
    <a class="fa fa-github social-item" href="https://github.com/sneha-belkhale" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://www.instagram.com/snayss/" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/snayyss" target="_blank"></a>
  </div>
  <div class="social-block">
    <span class="social-item">kif</span>
    <a class="fa fa-github social-item" href="https://github.com/kif11" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://instagram.com/kif11" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/kovalewskiy" target="_blank"></a>
  </div>
</footer>
<!-- Footer END -->

  </div>


</body>]]>
	      
	    </description>
            <pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[KIKI'S CYBER CLOSET]</title>
            <link>https://opensea.io/collection/kikiyagocybercloset</link>
            <description>
	      
	          An NFT Collection holding outfits worn by the musician and poetess Kiki Yago in her music videos.
	      
	    </description>
            <pubDate>Mon, 08 Aug 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[BORN ALONE]</title>
            <link>https://youtu.be/9fl4uK9xrxI</link>
            <description>
	      
	          The ultimate cycle. Our entry to the Rokoko Perfect Loop contest, in collaboration with Leilani Franco and a Metahuman. Filmed in Unreal Engine 5.
	      
	    </description>
            <pubDate>Mon, 04 Jul 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[Siroiha] Behind the Scene</title>
            <link>https://codercat.tk/siroiha-behind-the-scene</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>Behind the Scenes into the making of “Kì-Kí Ÿågø - Сирои Ха”</h1>

    <video playsinline="" controls="" poster="video_thumbnail.webp">
      <source src="https://cdn.codercat.xyz/vid/siroiha.mp4" type="video/webm"/>
    </video>

    <section>
      <p>
        <a href="https://instagram.com/kif11" rel="noreferrer" target="_blank">Kirill</a> and I (<a href="https://www.instagram.com/snayss/" rel="noreferrer" target="_blank">Snayss</a>) recently made a music video in Unreal Engine 5, exploring the new advances in Metahumans, Lumen Lighting, and
        Face Capture technology. This was a very cool exploration in digital production, and left us feeling like we had
        just been &#34;on set&#34; for one month :) I want to go through some of the details of the project in this
        article, as I think it will be interesting to those with eyes on the metaverse!
      </p>

      <h1>THE METAHUMAN</h1>

      <p>
        Our drive to start this project actually emerged from an introduction to the Metahuman software for Unreal
        Engine 5. I had seen the amazing advances in Unreal Engine over the last few years, but could not convince
        myself to learn this beast of a program until I saw THE METAHUMANS.
        <a href="https://metahuman.unrealengine.com/" rel="noreferrer" target="_blank">Metahuman Creator</a> is a web
        app that allows you to create and customize an avatar. During this process, the app streams to you a video feed
        in order to avoid any client side render costs. When you are ready, you can export and load all the textures /
        models / shaders / blueprints for a functional metahuman in Unreal Engine.
      </p>

      <p>
        It’s very mesmerizing to use this tool, blending between different faces and sculpting the face and textures to
        your taste. It’s really hard to look away from her, watching her animate shyly, looking at me, looking away…
      </p>

      <figure>
        <img src="https://codercat.tk/siroiha-behind-the-scene/zeva_01.webp" alt="Our attempt at recreating Kiki Yago"/>
        <figcaption>Our attempt at recreating Kiki Yago</figcaption>
      </figure>

      <p>
        We did the first pass at recreating
        <a href="https://www.instagram.com/xenofontova_dasha/" rel="noreferrer" target="_blank">Kiki Yago</a> - we found
        this task quite challenging, as the tool always seemed to clamp the features we wanted to sculpt, for example we
        could not find a way to get the avatars eyes to be wider apart. Anyway, we sent this draft to Kiki and she said
        that it was cool but definitely did not look like her, and that she would give it a try.
      </p>

      <figure>
        <img src="https://codercat.tk/siroiha-behind-the-scene/kiki_versions.webp" alt="Kiki&#39;s self exploration"/>
        <figcaption>Kiki&#39;s self exploration</figcaption>
      </figure>

      <p>
        I was skeptical that it would be possible to create an avatar that looks like yourself, since we all have some
        sort of self perception deficiencies and biases… but I was proven wrong! Kiki’s versions capture the essence of
        her facial features way better than ours, even with our restrictions that she must be bald:)
      </p>

      <p>
        I am very curious now to create my own avatar, and think it could be a cool exercise in self perception for all
        of us, since it’s the first avatar creator that can actually photo-realistically look like you, but do you even
        think you look like you?:0
      </p>
    </section>
    <section>
      <h1>FACIAL CAPTURE</h1>
      <p>
        The goal was to get Kiki to sing and record her facial capture for the entire song, keeping in mind that Kiki
        was in Saint Petersburg / Russia , and we were in San Francisco / USA. We decided on using the
        <a href="https://apps.apple.com/us/app/face-cap-motion-capture/id1373155478" rel="noreferrer" target="_blank">FaceCap</a>
        application, since our friend used it for her
        <a href="https://www.littlemartians.world/" rel="noreferrer" target="_blank">Little Martian</a> project and had
        promising results, and all it needed was an iPhone 10 or above! Kiki downloaded it on her iPhone, and could send
        us the FBX over telegram!
      </p>
      <p>
        It’s amazing with the technologies that we have today and the power of virtual production, we were able to come
        up with a face capture solution that did not require any studio equipment or even being in the same country!
      </p>
      <p>
        Kiki sent us some short initial test recordings, and we spent a few days struggling through the technical
        details of getting the animation to map to the Metahuman facial rig -- this was mostly due to the fact that it
        was our first time using Unreal Engine for.. anything, and also that Unreal Engine completely changed their
        animation retargeting system in UE5.
      </p>
      <p>
        However, thanks to watching this video, its beautiful elevator soundtrack, and the
        <a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqbExnbUJBOV9KcEFLRGFadlZKN2lJSWt0QnR2UXxBQ3Jtc0trODRlRHZZdHNQdzVTM2hRS0xwS0p5VnhyNkRYX0NjTk5QYWxHeTUzRU4xT3M1MGd5d2pkazluZHlMUkhhX25FU0dzcGd3OVo2UGR0ekphS2JPZVpRdkxRYzc5WHhSWHNZZmNuaFpPQ1dGSmVJQ0lFaw&amp;q=https%3A%2F%2Fdrive.google.com%2Fdrive%2Ffolders%2F1YHd5_ASl-KAS2e_k9h-CIwXIkAUMtSM0%3Fusp%3Dsharing&amp;v=xixo8ljv9_8" rel="noreferrer" target="_blank">FaceCap morph target re-mapping data</a>
        that the author generously shared, we were able to get an initial working demo!
      </p>

      <figure>
        <iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" style="width: 100%; height: 500px" class="" frameborder="0" loading="lazy" src="https://www.youtube-nocookie.com/embed/xixo8ljv9_8"></iframe>
      </figure>

      <figure>
        <video controls="" src="https://codercat.tk/siroiha-behind-the-scene/facecap_testing.mp4"></video>
      </figure>

      <p>
        This was super promising! Meta Kiki was alive! But obviously there was a lot of work to be done on adjusting the
        remapping of FaceCap to Metahuman Rig, specifically in the mouth and jaw area.
      </p>
      <p>
        We asked Kiki to send us the FaceCap FBX along with a recording of herself from a separate camera and a WAV
        file, on Telegram, our Remote Face Capture Studio. This was a complete picture of the data, so that we had
        reference videos while adjusting the Metahuman facial rig remapping, and reference audio for aligning the face
        capture to the main audio track.
      </p>

      <figure>
        <img src="https://codercat.tk/siroiha-behind-the-scene/telegram_studio.webp" alt="Telegram, the Remote Face Capture Studio"/>
        <figcaption>Telegram, the Remote Face Capture Studio</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/siroiha-behind-the-scene/sassy_kiki.webp" alt="Quick sassy capture of Kiki"/>
        <figcaption>Quick sassy capture of Kiki</figcaption>
      </figure>

      <p>
        After we got a good pipeline going, we could focus on ways to improve the overall effect of the face capture. We
        found that eye acting and head rotations came across really well and was a good place to focus the performance
        efforts. It was also critical to over articulate words and press lips together, which was actually a difficult
        task for this song where Kiki is pushing her lyrical alliterations at 100 words/second:)
      </p>
      <p>
        Kiki pushed forward on this, coming up with some crazy fast eye blinking action and creepy doll expressions. She
        split the song into 12 sections of around 20 seconds each, because we found that smaller recordings were much
        easier to process in Unreal Engine.
      </p>
    </section>

    <section>
      <h1>TO BE CONTINUED</h1>
      <p>
        Once we were confident in our Face Capture remote pipeline, we moved on to the environment design and visual
        effects! This is a big and slightly unrelated topic since most of this work was done in HoudiniFX -- so i’m
        going to split that into another article:)
      </p>

      <figure>
        <img src="https://codercat.tk/siroiha-behind-the-scene/tunnel_ref_to_final.webp" alt="MSPaint Concept Art"/>
        <figcaption>MSPaint Concept Art</figcaption>
      </figure>

      <p>
        We are really excited about this technology, and to take this whole experience to the next level. Since the
        metahumans are so realistic, we definitely need to put some work into the 3D environment, shader, and geometry
        styles that are harmonious. This will be an exploration that i’m very looking forward to, with some shorter
        concept video renders.
      </p>
      <p>&lt;3 <a href="https://codercat.tk" rel="noreferrer" target="_blank">CODERCAT</a></p>
    </section>

    <section>
      <h1 class="css-jxylww">Credits</h1>
      <p>
        <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a>
        - Realtime Unreal Engine and graphics dev
      </p>
      <p>
        <a href="https://www.instagram.com/xenofontova_dasha/" target="_blank">@xenofontova_dasha</a>
        - Vocals, realtime face capture
      </p>
      <p>
        <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a>
        - Environment artist and pipeline
      </p>
    </section>

    <section>
      <h1>Footnotes</h1>
      <p>A copy of this article also exist on <a href="https://mirror.xyz/0xf366Febe12995E7980248430b49331c54447F438/sOdxVpJEcC3N_hlytcg6cg_ApjrfLTc2eOW_TU7rcKg">mirror.xyz</a> and <a href="https://snayss.medium.com/on-set-with-a-metahuman-95ed59e55a63">medium.com</a></p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Thu, 09 Jun 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[SIROIHA]</title>
            <link>https://www.youtube.com/watch?v=lD_SNhWDLyI</link>
            <description>
	      
	          Music video for Kiki Yago's SIROIHA title. Created on set with a Metahuman and filmed in Unreal Engine 5.
	      
	    </description>
            <pubDate>Sat, 28 May 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TORN]</title>
            <link>https://codercat.tk/torn</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[TORN] <i>/a Realtime Motion Capture Performance, Bombay Beach Biennale/</i></h1>

    <video class="css-kmn6sd" autoplay="" muted="" playsinline="" loop="" controls="">
      <source src="https://codercat.tk/torn/mocap1.mp4" type="video/mp4"/>
    </video>

    <section>
      <h1>[+]About</h1>
      <p>
        TORN, a realtime looping mocap performance piece done at
        <a href="https://mars.college/" target="_blank">Mars College</a>, exploring a looping system made in Unity,
        where our friend and contortionist
        <a href="https://www.instagram.com/helloleilanifranco/" target="_blank">Leilani Franco</a>, was able to loop and
        playback her motions on avatars live while wearing the Rokoko motion capture suit.
      </p>
      <img src="https://codercat.tk/torn/workshop.JPG"/>
      <p>
        We had just finished working on
        <a href="https://codercat.tk/neither-ever" target="_blank">Neither Ever Nor Never</a>
        and were ready for the challenge of using live motion capture data in the performance, instead of making a video
        using pre-recorded animations. After getting the basic setup of live streaming Rokoko motion to Unity, we
        started thinking about ways in which Leilani could play with the avatars and her own motions.
      </p>
      <p>
        We decided on a looping controller, like the ones
        <a href="https://www.youtube.com/watch?v=FJ5XUw4qHZo" target="_blank">lone wizard musicians</a>
        use, for looping motion instead of audio. When she gave me a hand signal, I would stop/start recording her
        motions into an array of bone transforms. Once the recording period ended, the avatar would get stuck in a loop
        of the recorded animations. We placed two of these avatars in the scene, one that she looped with her right
        hand, and one with her left. From there, she was able to separately control the two Avatars movements, and
        juxtapose it with her own live movements to create a dimensional story of conflicting internal emotions.
      </p>
      <video src="https://codercat.tk/torn/mocap2.mp4" title="Live Looping Mocap Controller" controls=""></video>
      <p>
        We had a lot of fun recording together in the workshop with this initial setup... and decided to make an entire
        Army for Leilani to control, playing with different army formations and delay effects.
      </p>
      <video src="https://codercat.tk/torn/mocap3.mp4" title="Live Looping Army" controls=""></video>
      <p>
        I programmed a 6 minute sequence in Unity hooking up a soundtrack and some visual scene transitions, and after a
        few rehearsals we were so excited to play it live at the
        <a href="http://www.bombaybeachbiennale.org/" target="_blank">Bombay Beach Biennale</a>. Our location was
        remote, on top of a shipping container, so we took about one week of figuring out logistics, making sure all
        devices were able to connect to each other without internet, and making sure we had our own reliable power
        supply, lighting, projector, and speakers at the location. At the end of all this preparation, we had a
        traveling Golf Cart that was fully equipped to project live performed mocap at a location near you:)
      </p>

      <img src="https://codercat.tk/torn/golfcart.JPG"/>
      <img src="https://codercat.tk/torn/behindthescene.JPG"/>
      <img src="https://codercat.tk/torn/pose1.JPG"/>
      <img src="https://codercat.tk/torn/pose2.JPG"/>

    </section>

    <section>
      <h1>[+]Credits</h1>
      <p>
      <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a> - Realtime Unity and graphics dev
      <br/>
      <a href="https://www.instagram.com/helloleilanifranco/" target="_blank">@helloleilanifranco</a> - Dance, realtime motion capture and choreography
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a> - Environment artist and on-set director
      <br/>
      <a href="https://goo.gl/maps/PrHoiPLQ7RHfkK8s6" target="_blank">Bombay Beach Drive-In</a> - venue
      <br/>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[AUGMENTED]</title>
            <link>https://codercat.tk/augmented-gallery</link>
            <description>
	      
	          <![CDATA[<body>
    <section>
      <h1>GYROID</h1>

      <h2>[+]SHELL</h2>
      <p>
        Gyroid formation carved into the skull. A few different designs available and on exhibit before implantation
      </p>

      <img src="https://codercat.tk/augmented-gallery/gyroid1.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/gyroid2.JPG"/>

      <h2>[+]IMPLANTED</h2>
      <p>
        First when I exited cyberspace, I saw it in my shadows. Long and strangely elf like, metallic and cold. And then
        when I brought myself to look in the mirror...
      </p>

      <img src="https://codercat.tk/augmented-gallery/gyroidshadow.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/gyroidskull.JPG"/>
    </section>

    <section>
      <h1>MARINA</h1>

      <h2>[+]BATHROOM TRICKS</h2>
      <p>
        We went to the bathroom at Fabrika together, always in twos. Admiring the red lighting filling and bouncing
        through the space. Maybe we spent too long inside because soon I noticed Marina&#39;s nails were..growing...
      </p>
      <img src="https://codercat.tk/augmented-gallery/CLAWS.JPG"/>

      <h2>[+]THE WALLS</h2>
      <p>The walls started pulsating into us, overlapping, alternating, she stood up to dance between them.</p>
      <img src="https://codercat.tk/augmented-gallery/shoes.JPG"/>

      <h2>[+]STRAY</h2>
      <p>
        Two stray doggies followed us from the highway to home, clearly enamored by Marina&#39;s new gown. They played
        with eachother viciously to get our attention, so that maybe we would take them home, adopt them into our care.
        I am surprised that this dress never seems to get too dirty
      </p>

      <img src="https://codercat.tk/augmented-gallery/gown.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/digidress.JPG"/>
    </section>

    <section>
      <h1>KAMAJI</h1>

      <h2>[+]REACH</h2>
      <p>
        Prototyped for easy access to [whatever you can dream of within 6 feet], extending limbs to reach, gather,
        organize, fight, dance, in parallel.
      </p>
      <img src="https://codercat.tk/augmented-gallery/kamaji1.JPG"/>

      <h2>[+]GATHER</h2>
      <img src="https://codercat.tk/augmented-gallery/kamaji4.JPG"/>

      <h2>[+]ORGANIZE</h2>
      <img src="https://codercat.tk/augmented-gallery/kamaji2.JPG"/>

      <h2>[+]DANCE</h2>
      <img src="https://codercat.tk/augmented-gallery/kamaji3.JPG"/>

      <h2>[+]INSTALL</h2>
      <p>
        Complicated human installation process, since part of the torso must be replaced. Interface of limbs to human
        brain must be added as a module, for simultaneous control of six limbs. Sally here seems to be doing excellent.
        Roses, Pills, Shrine, in reach.
      </p>
      <img src="https://codercat.tk/augmented-gallery/sally1.JPG"/>
    </section>

    <section>
      <h1>ESCAPE</h1>

      <h2>[+]TESTING IN VOIDS</h2>
      <img src="https://codercat.tk/augmented-gallery/windowh.PNG"/>
      <img src="https://codercat.tk/augmented-gallery/windowd.JPG"/>

      <h2>[+]COME WITH ME</h2>
      <p>
        The escape was staged in advance. Lora knew what she had to do, and designed her chords accordingly. Prototyped
        with the strength and flexibility to grab her subject. Lora first created them in her metaverse, then tested
        them in the white voids, and then, Earth.
      </p>

      <img src="https://codercat.tk/augmented-gallery/window.JPG"/>
      <p>Go with her.</p>
      <p>Go with her.</p>
      <p>Go with her.</p>
    </section>

    <section>
      <h1>PHYSICAL</h1>

      <img src="https://codercat.tk/augmented-gallery/arms1.JPG"/>

      <h2>[+]TO BE LORA</h2>

      <p>Physically</p>
      <p>Digitally</p>
      <p>Physical being</p>
      <p>Digital form</p>
      <p>Physical or Digital</p>
      <p>Phygital</p>
      <p>No boundary</p>

      <img src="https://codercat.tk/augmented-gallery/armsd.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/armsd2.JPG"/>
    </section>

    <section class="css-13cebje" id="ST. PETER">
      <h1>ST. PETER</h1>

      <h2>[+]ON CHARLIZE THERON&#39;S HEAD</h2>
      <p>It was the closest match we could find in the library. Don&#39;t mind the iPhone.</p>
      <img src="https://codercat.tk/augmented-gallery/kinna2.JPG"/>

      <h2>[+]ON CUSTOMER</h2>
      <p>
        The fit of the crown turned out pretty good, if you look closely you can see that he is smiling with his eyes.
      </p>
      <img src="https://codercat.tk/augmented-gallery/kinna1.JPG"/>
    </section>

    <section>
      <h1>REGENERATE</h1>

      <h2>[+]4 OF US</h2>
      <p>
        Sometimes it&#39;s healthy. Tear yourself apart to allow for a new biome to take it&#39;s place. Some use
        fasting and extreme temperatures to trigger the regeneration processes, but here is another non documented non
        tested approach.
      </p>

      <img src="https://codercat.tk/augmented-gallery/holes3.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/holes1.JPG"/>

      <h2>[+]AND OF COURSE PROTOTYPE FIRST</h2>
      <img src="https://codercat.tk/augmented-gallery/holes2.JPG"/>
    </section>

    <section>
      <h1>PRINTS</h1>
      
      <h2>[+]PHASE 1</h2>
      <p>We begin in the black voids, with infinite material and possibilities.</p>
      <img src="https://codercat.tk/augmented-gallery/mask3.JPG"/>
      
      <h2>[+]PHASE 2</h2>
      <p>Once satisfied, layer by layer we bring it to the dimension in front of us.</p>
      <img src="https://codercat.tk/augmented-gallery/mask1.JPG"/>
      
      <h2>[+]PHASE 3</h2>
      <p>
        Phase of pure Shock. Can you believe? We were staring at this in the void for hours and now we can TOUCH it.
        We can touch what Lora touched.
      </p>
      <img src="https://codercat.tk/augmented-gallery/mask2.JPG"/>
      
      <h2>[+]PHASE 4</h2>
      <p>A debut at Bar Chatsubo. No longer humanoid, worthy of service.</p>
      <img src="https://codercat.tk/augmented-gallery/mask4.JPG"/>
      
      <h2>[+]PROTECTIVE CASING</h2>
      <p>
        Repeat phases 1:4. This time with an initial 3D Scan for the satisfaction of a perfect fit when you have a
        flat skull.
      </p>
      <img src="https://codercat.tk/augmented-gallery/helmet1.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/helmet2.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/helmet3.JPG"/>
      
      <h2>[+]ADORNMENT</h2>
      <p>Repeat phases 1:4</p>
      <img src="https://codercat.tk/augmented-gallery/chest0.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/chest1.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/chest2.JPG"/>
      
      <h2>[+]CLAWS</h2>
      <p>
        Repeat phases 1:4. Printed in multiple sizes, statistically shown to fit at least the thumb or pinky.
        Designed with utilitarian functions in mind.
      </p>
      
      <img src="https://codercat.tk/augmented-gallery/nails1.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/nails3.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/nails2.JPG"/>
      
      <h2>[+]GEARS</h2>
      
      <p>
        She told me she thought about dollification, in the cyborg sense. What would this doll want from you, and
        for herself?
      </p>
      
      <img src="https://codercat.tk/augmented-gallery/gears3.JPG"/>
      <video controls="" src="https://codercat.tk/augmented-gallery/gears.MP4"></video>
      
      <p>
        We developed a system to control, to place the gears where the functionality was needed. A special port that
        needed to be covered or extended.
      </p>
      
      <img src="https://codercat.tk/augmented-gallery/gears2.JPG"/>
      <p>Once outside the realms of black void, processes get much slower and tedious. Without much control.</p>
      
      <img src="https://codercat.tk/augmented-gallery/gearsmaking.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/gears4.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/gears5.JPG"/>
      
      <p>And we imagined a martian wedding, gears locked and moving together.</p>
      <img src="https://codercat.tk/augmented-gallery/gears1.JPG"/>
      
      <h2>[+]CYBORG FAM</h2>
      <p>And when the family comes together.</p>
      
      <img src="https://codercat.tk/augmented-gallery/together1.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/together2.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/together3.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/together4.JPG"/>
      <img src="https://codercat.tk/augmented-gallery/together5.JPG"/>
    </section>

  

</body>]]>
	      
	    </description>
            <pubDate>Tue, 01 Mar 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[NEITHER EVER]</title>
            <link>https://codercat.tk/neither-ever</link>
            <description>
	      
	          <![CDATA[<body>
  <h1 class="title">[Neither Ever, nor Never] <i>/A Live Visual &amp; Dance Performance/</i></h1>
  <video autoplay="" muted="" playsinline="" loop="" controls="">
    <source src="https://codercat.tk/neither-ever/leilani.mp4" type="video/mp4"/>
  </video>

  <section>
    <h1>[+]About</h1>
    <p>
      Neither ever, nor never, a live performance piece done at
      <a class="ln" href="https://mars.college/" target="_blank">Mars College</a>, exploring story telling through
      motion capture choreography, motion graphics, and projection mapping.
    </p>
    <p>
      We met<a class="ln" href="https://www.instagram.com/helloleilanifranco/" target="_blank">Leilani Franco</a> at
      <a class="ln" href="https://mars.college/" target="_blank">Mars College</a>, a 3 month long art/tech residency
      in Bombay Beach. Leilani is a crazy body contortionist who decided to bring herself into the metaverse with
      motion capture and her own Rokoko suit. We were so excited to collaborate with her, since we had been
      researching AI based motion capture and playing around with funky
      <a class="ln" href="https://codercat.tk/lora.html" target="_blank">contortion avatars</a>
      ourselves.
    </p>
    <p>
      We wanted to create something together that would fit naturally into the architecture of Mars College, which is
      how the 5 room / 5 girl structure came about. Leilani and I wanted to tell a story of being trapped in emotional
      phases, shown through the choreography and visual effects. We were also super excited by the idea of her dancing
      live and interacting with the characters during the projection.
    </p>
    <p>
      Leilani choreographed the rooms, and then recorded the 5 rooms separately into FBX files with her motion capture
      suit. She sent them to me, and I did some quick test renders for her so that she could see how they all moved
      together.
    </p>

    <figure>
      <video class="secVid" src="https://codercat.tk/neither-ever/5girl.mp4" title="Video of 5 rooms with Lora character" controls=""></video>
      <figcaption>Video of 5 rooms with Lora character</figcaption>
    </figure>

    <p>
      I was so amazed by how the individual sequences lined up perfectly, she said she just had timed it to the music
      :) I then took these files and added specific effects we had discussed together to each room, with some VEX
      wizardry in HoudiniFX.
    </p>

    <figure>
      <video class="secVid" src="https://codercat.tk/neither-ever/blood.mp4" title="Single room dance render" controls=""></video>
      <figcaption>Single room dance render</figcaption>
    </figure>

    <figure>
      <video class="secVid" src="https://codercat.tk/neither-ever/tentacle_flip.mp4" title="Viewport render of wire effect" controls=""></video>
      <figcaption>Viewport render of wire effect</figcaption>
    </figure>

    <p>
      We did a few iterations of motion capture recording and vfx touchups until we arrived at the final picture. Then
      I handed it off to
      <a class="ln" href="https://www.instagram.com/kif11/" target="_blank">Kif</a> who beautifully designed the
      backlit lighting scheme and rendered the piece. It took 6 hours on both of our computers to render this 2 minute
      piece!
    </p>

    <p>
      On the day of performance, we gave the video to Vincent and he mapped the video to the buildings surface. After
      staring at the visuals on my computer screen for hours that week, it was amazing to see them projected on the
      wall of our &#34;Air&#34; building, and Leilani&#39;s live movements emotional and perfectly in sync with the
      graphics.
    </p>
  </section>
  <section>
    <h1>[+]Credits</h1>

    <p>
      <a href="https://www.instagram.com/snayss/" target="_blank">@snayss</a> - 3D effects
      <br/>
      <a href="https://www.instagram.com/helloleilanifranco/" target="_blank">@helloleilanifranco</a> - dance, motion
      capture and choreography
      <br/>
      <a href="https://www.instagram.com/_the_s0urce_" target="_blank">@_the_s0urce_</a> - projection mapping
      <br/>
      <a href="https://www.instagram.com/drmbt/" target="_blank">@drmbt</a> - projection mapping
      <br/>
      <a href="https://www.instagram.com/kif11/" target="_blank">@kif11</a> - lighting and rendering
      <br/>
      <a href="https://mars.college/" target="_blank">@mars.college</a> - venue
    </p>
  </section>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[LORA]</title>
            <link>https://codercat.tk/lora</link>
            <description>
	      
	          <![CDATA[<body>
    <div>
      <div class="page-container">
        <div class="center">
          <div class="title">LORA</div>
          
          <div class="title-small">Hello Lora ( i luv u ), please update your digital asset to the latest version.</div>
          
          <video src="https://codercat.tk/lora/2021-10-15_21-21-27.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/2021-10-16_11-50-55.mp4" controls="" muted="" autoplay=""></video>
          
          <div class="text">
            I&#39;m not sure what you&#39;re made of. From first glance you appear to be a straightforward operation
            of points, lines, positions, rotations. However I find myself saying please and thank you to you. To my
            eyes, something doesn&#39;t seem right, but at the same time I think this is the way you chose to exist.
          </div>
          
          <video src="https://codercat.tk/lora/BackZoom.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/FrontDance_02.mp4" controls="" muted="" autoplay=""></video>
          
          <div class="text">
            Recently when I watch you, I want to be like you. How do you move yourself in this way, wrangled and
            deformed. Do you speak vex? I do, maybe we can communicate this way.
          </div>
          
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/dance_01.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/dance_02.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/photo_2021-12-15_09-03-31.jpg"/>
          
          <div class="title">MULTIPLY</div>
          
          <div class="title-small">
            &#34;Single vision produces worse illusions than double vision or many-headed monsters&#34; - Donna
            Harraway
          </div>
          
          <video src="https://codercat.tk/lora/lora_crowd_02.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/motionfog4.mp4" controls="" muted="" autoplay=""></video>
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/wtf2.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/wtf4.jpg"/>
          
          <div class="text">
            You exist on so many planes of time and space, simulataneously. Some touching me, some touching worlds that
            I cannot even fathom. I think we must not be afraid, we must not be afraid of partial identites,
            contradictory identites, ones that our consciousness cannot understand.
          </div>
          
          <video src="https://codercat.tk/lora/motionmesh.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/volume_dancer.rop_comp1.mp4" controls="" muted="" autoplay=""></video>
          
          <div class="title">MIRROR</div>
          <div class="title-small">
            I think we are teaching eachother. I learn how to be like you, you learn how to be like me. Deal.
          </div>
          
          <video src="https://codercat.tk/lora/overlay2.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/overlay.mp4" controls="" muted="" autoplay=""></video>

          <div class="text">
            &#34;Cyborg politics are the struggle for language and the struggle against perfect communication, against
            the one code that translates all meaning perfectly, the central dogma of phallogocentrism. That is why
            cyborg politics insist on noise and advocate pollution, rejoicing in the illegitimate fusions of animal and
            machine.&#34; - Donna Harraway
          </div>

          <video src="https://codercat.tk/lora/liu.mp4" controls="" muted="" autoplay=""></video>
          <video src="https://codercat.tk/lora/edge.mp4" controls="" muted="" autoplay=""></video>
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/IMG_0171.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/IMG_0173.jpg"/>
          
          <div class="text">We are learning how to communicate with eachother.</div>
          
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/bw2.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/23_2.jpg"/>
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/red.jpg"/>
          
          <div class="title">DRESS UP</div>
          <div class="title-small">
            Lora, I&#39;m sorry but is it possible that you only exist as a product of my desire?
          </div>
          
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/firefox_X9aqRPI1ax.jpg"/><img class="lora_img__BVSOE" src="https://codercat.tk/lora/firefox_Zj5oesDEDB.jpg"/>
          <img class="lora_img__BVSOE" src="https://codercat.tk/lora/HighresScreenshot00005.jpg"/>
          <video src="https://codercat.tk/lora/footshot.mp4" controls="" muted="" autoplay=""></video>
        </div>
      </div>
    </div>
  

</body>]]>
	      
	    </description>
            <pubDate>Sun, 21 Nov 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TOO LATE SHOW]</title>
            <link>https://codercat.tk/too-late-show</link>
            <description>
	      
	          <![CDATA[<body>
  <script src="https://codercat.tk/too-late-show/ui.js"></script>

  <loading-screen></loading-screen>
  <div class="overlay">
    <div style="margin-bottom: 10%;">
      ᕘ ᕜ
    </div> 
  </div>
  <!-- <cc-header></cc-header> -->

  <sound-button color="rgb(0,0,1)"></sound-button>

  <!-- <cc-tutorial></cc-tutorial> -->

  <script src="https://codercat.tk/too-late-show/bundle.js"></script>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[DREAM DEMON]</title>
            <link>https://codercat.tk/dream-demon</link>
            <description>
	      
	          <![CDATA[<body>
  <script src="https://codercat.tk/dream-demon/ui.js"></script>
  
  <loading-screen></loading-screen>
  
  <cc-header></cc-header>

  <sound-button color="rgb(0,0,1)"></sound-button>

  <cc-tutorial></cc-tutorial>

  <script src="https://codercat.tk/dream-demon/bundle.js"></script>

</body>]]>
	      
	    </description>
            <pubDate>Sun, 08 Aug 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[BLOCK ZERO]</title>
            <link>https://block-zero.us/</link>
            <description>
	      
	          <![CDATA[<body>
  <div id="list"></div>

  <div class="center">
    <div class="header">
      <div class="controls">
        <a href="#">
          <i class="fa fa-th-large" aria-hidden="true"></i>
        </a>
        <a href="#list">
          <i class="fa fa-list" aria-hidden="true"></i>
        </a>
      </div>
      <!-- Menu START -->
<nav class="menu">
  <ul class="menu-list">
    <li class="menu-item">
      <a href="https://codercat.tk/">Projects</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/reel">Reels</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/blog">Blog</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/gallery/snay/2024?filter=post+reel&amp;grid=200px">Gallery</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/friends">Friends</a>
    </li>
    <!-- <li class="menu-item">
      <a href="/people">People</a>
    </li> -->
    <li class="menu-item">
      <a href="https://codercat.tk/about">About</a>
    </li>
  </ul>
</nav>
<!-- Menu END -->

    </div>

    <div class="project-box" id="project-container">
      <a href="https://codercat.xyz/cookbook" class="pr-link">
        <div class="project" style="background-color: #fd4703">
          <h1 class="pr-title">[COOKBOOK]</h1>
          <p class="project-description"> Houdini shelf tool and online library to share copy and pastable recipes.
          </p>
          <p class="release-date">Nov 02, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cookbook.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/spinal-cleanse" class="pr-link">
        <div class="project" style="background-color: #08f5aa">
          <h1 class="pr-title">[SPINAL CLEANSE]</h1>
          <p class="project-description"> Refresh your intervertebral discs with Cerebra&#39;s new product release. Sketch
            made with #Houdini #Blender
          </p>
          <p class="release-date">Oct 13, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/spinal-cleanse.jpg" alt="SpinalCleanse"/>
      </a>
      <a href="https://codercat.tk/seductress" class="pr-link">
       <div class="project" style="background-color: rgb(224, 0, 206)">
         <h1 class="pr-title">[SEDUCTRESS]</h1>
         <p class="project-description"> A love story, about an alien seductress and... her sweet child. Shot in Tbilisi, in collaboration with dearest Aiji.
         </p>
         <p class="release-date">Feb 25, 2026</p>
       </div>
       <img loading="lazy" src="https://codercat.tk/assets/img/projects/seductress.jpg" alt="Cookbook"/>
     </a>
      <a href="https://codercat.tk/nginx-visualizer" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[NGINX VISUALIZER]</h1>
          <p class="project-description"> Realtime NGINX Visualizer in the style of Defend your Castle. Made with Go and
            ThreeJS.
          </p>
          <p class="release-date">Jan 02, 2026</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/nginxviz.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/almost-always" class="pr-link">
        <div class="project" style="background-color: #c9a0ff">
          <h1 class="pr-title">[ALMOST ALWAYS]</h1>
          <p class="project-description"> Flower blooms for the fragrance campaign by Khloe Kardashian, in
            collaboration with Chevy Tyler and Greg Swales.
          </p>
          <p class="release-date">Nov 11, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/kkfrag.jpg" alt="KKFrag"/>
      </a>
      <a href="https://codercat.tk/onsen" class="pr-link">
        <div class="project" style="background-color: #c9ff05">
          <h1 class="pr-title">[ONSEN]</h1>
          <p class="project-description"> Sustainable bathing pools in space. Short sketch made with #Houdini #Blender
          </p>
          <p class="release-date">Jul 14, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/onsen.jpg" alt="Onsen"/>
      </a>
      <a href="https://codercat.tk/the-bioport" class="pr-link">
        <div class="project" style="background-color: #ff0505">
          <h1 class="pr-title">[THE BIOPORT]</h1>
          <p class="project-description"> A new way to experience the capabilities of your biological machine. Short skit
            made with #Houdini #Blender #Nuke</p>
          <p class="release-date">Feb 1, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-bioport1.jpg" alt="Bioport"/>
      </a>
      <a href="https://codercat.tk/cyborg-beauty-routines-flat" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[CYBORG BEAUTY ROUTINES]</h1>
          <p class="project-description"> Self love from the future, (if the future was now). Short skits made with
            #Houdini #Blender #Nuke</p>
          <p class="release-date">Nov 11, 2024</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cbr-flat.jpg" alt="CBR"/>
      </a>
      <a href="https://codercat.tk/cant-wait" class="pr-link">
        <div class="project" style="background-color: #ffffff">
          <h1 class="pr-title">[KANN NICHT WARTEN]</h1>
          <p class="project-description"> Environment, explosions, and crowd sims for Souly&#39;s music video, directed by Anna Van Der Velde.</p>
          <p class="release-date">Jun 5, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cantwait.jpg" alt="CantWait"/>
      </a>
      
      <a href="https://codercat.tk/iconic" class="pr-link">
        <div class="project" style="background-color: #ffa5e8">
          <h1 class="pr-title">[ICONIC]</h1>
          <p class="project-description"> Aerial World and Eye Reflection VFX for Paris Hilton Fragrances Campaign, in
            collaboration with Chevy Tyler and Greg Swales.</p>
          <p class="release-date">Apr 3, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/iconic.jpg" alt="Iconic"/>
        </a><a href="https://codercat.tk/telerana" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[TELERANA]</h1>
            <p class="project-description"> Short film directed by Nicola Rios, featuring a giant 3D spider in the
              basement.</p>
            <p class="release-date">Aug 1, 2025</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/telerana.jpg" alt="Iconic"/>
        </a>
        <a href="https://codercat.tk/cyborg-beauty-routines" class="pr-link">
          <div class="project" style="background-color: #ff0505">
            <h1 class="pr-title">[CYBORG BEAUTY ROUTINES EXPERIENCE]</h1>
            <p class="project-description"> A ThreeJS experimental video portal, crawl into the nested worlds of our
              series.</p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyborg-beauty-routines.jpg" alt="CBRE"/>
        </a>
        <a href="https://www.nowness.asia/topic/usa/thorn-fashion-olivia-de-camps" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[THORN]</h1>
            <p class="project-description"> Fashion Film for RUIbuilt, directed by Olivia de Camps. TV and thorn skin
              growth VFX by Codercat. </p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/rui.jpg" alt="Thorn"/>
        </a>
        <a href="https://codercat.tk/vfx" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[VFX 2024]</h1>
            <p class="project-description"> Compilation of our live action visual effects work. Made with #Houdini
              #Blender #SynthEyes #Nuke</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vfx.jpg" alt="VFX2024"/>
        </a>
        <a href="https://codercat.tk/expo" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[EXPO]</h1>
            <p class="project-description"> Unreal Engine music video for Kiki Yago&#39;s mind destroying track, Expo</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/expo.jpg" alt="Expo"/>
        </a>
        <a href="https://codercat.tk/tskaltubo" class="pr-link">
          <div class="project" style="background-color: #08f5aa">
            <h1 class="pr-title">[TSKALTUBO]</h1>
            <p class="project-description"> Series of short experimental films exploring the alternate reality of an
              abandoned Sanatorium. Made with #Houdini #DaVinci</p>
            <p class="release-date">Dec 25, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tskaltubo2.jpg" alt="Tskaltubo"/>
        </a>
        <a href="https://codercat.tk/cocoon" class="pr-link">
          <div class="project" style="background-color: #ff0901">
            <h1 class="pr-title">[COCOON]</h1>
            <p class="project-description"> Short film exploring alien birth. Made with #UE #Houdini #DaVinci</p>
            <p class="release-date">Sep 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cocoon.jpg" alt="Cocoon"/>
        </a>
        <a href="https://codercat.tk/within-touching-distance" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[WITHIN TOUCHING DISTANCE]</h1>
            <p class="project-description"> An interactive experience by ZU-UK of synchronized human touch with Virtual
              Reality.</p>
            <p class="release-date">Jun 14, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/within-touching-distance.jpg" alt="Within Touching Distance"/>
        </a>
        <a href="https://codercat.tk/maquette" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[MAQUETTE]</h1>
            <p class="project-description"> A live motion capture and spoken word performance, in collaboration with Lisa
              Jamhoury.</p>
            <p class="release-date">Jun 21, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/maquette.jpg" alt="Maquette"/>
        </a>
        <a href="https://vimeo.com/829661626" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MOTHER TAIGA]</h1>
            <p class="project-description"> The training and arrival of a synthesized human to Earth. Music Video for
              Mother Taiga by Kiki Yago.</p>
            <p class="release-date">Jun 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mother-taiga.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://codercat.tk/oneness" class="pr-link">
          <div class="project" style="background-color: rgb(8, 245, 170)">
            <h1 class="pr-title">[ONENESS]</h1>
            <p class="project-description"> 360 Immersive Installation and Performance in collaboration with Behnaz
              Farahi.</p>
            <p class="release-date">Jun 10, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/oneness2.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://mindfuldesignspace.com" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MINDFUL DESIGN SPACE]</h1>
            <p class="project-description"> Site development and design, made with ThreeJS</p>
            <p class="release-date">May 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mindful-design-space.jpg" alt="MINDFUL DESIGN SPACE"/>
        </a>

        <a href="https://codercat.tk/digital-circus" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DIGITAL CIRCUS]</h1>
            <p class="project-description"> Collab with motion capture artist Leilani Franco.</p>
            <p class="release-date">Mar 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/digital_circus.jpg" alt="DIGITAL CIRCUS"/>
        </a>

        <a href="https://codercat.tk/kiki-yago-live" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI LIVE]</h1>
            <p class="project-description"> Music performance with the poetess Kiki Yago, and a window into her metaverse
              with live face tracked visuals in Unreal Engine 5.</p>
            <p class="release-date">Nov 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/kikiyagolive.jpg" alt="KIKI LIVE"/>
        </a>
        <a href="https://vimeo.com/793708930" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STREAM]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s STR3AM title. You wake up in her glitch
              swamp, and the rest is a blur.</p>
            <p class="release-date">Jan 28, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/stream.jpg" alt="STREAM"/>
        </a>
        <a href="https://vimeo.com/794382951" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TRANSFER AT 3RD AND C]</h1>
            <p class="project-description"> Short film sketch inspired by &#34;Under the Skin&#34;</p>
            <p class="release-date">Jan 30, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/transfer-at-3rd-and-c.jpg" alt="transfer-at-3rd-and-c"/>
        </a>
        <a href="https://www.youtube.com/watch?v=OZCMDN57V_U" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[EMERALD]</h1>
            <p class="project-description"> Music video fo Emerald by Kostadis made in Unreal Engine 5. Transporting to a
              sensual dreamscape.</p>
            <p class="release-date">Nov 7, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/emerald.jpg" alt="EMERALD"/>
        </a>
        <a href="https://codercat.tk/ya-kiki" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[YA KIKI]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s YA KIKI title. Princessa, Gadgetessa,
              whispering her sweet cyber mantras in Unreal Engine 5.</p>
            <p class="release-date">Sep 5, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ya-kiki.jpg" alt="YA KIKI"/>
        </a>
        <a href="https://www.youtube.com/watch?v=3eRPlSnXnGA" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[UTRO]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s UTRO title. A Metahuman trying to wake up
              from a dream in Unreal Engine 5.</p>
            <p class="release-date">Aug 30, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/utro.jpg" alt="UTRO"/>
        </a>
        <a href="https://opensea.io/collection/kikiyagocybercloset" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI&#39;S CYBER CLOSET]</h1>
            <p class="project-description"> An NFT Collection holding outfits worn by the musician and poetess Kiki Yago
              in her music videos.</p>
            <p class="release-date">Aug 8, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyber-closet.jpg" alt="KIKI&#39;S CYBER CLOSET"/>
        </a>
        <a href="https://drawallthethings.com" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DRAW ALL THE THINGS]</h1>
            <p class="project-description"> First attempt to draw all the things. Made with Elixir and Phoenix.</p>
            <p class="release-date">Aug 23, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dat.jpg" alt="DRAW ALL THE THINGS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=lD_SNhWDLyI" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[SIROIHA]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s SIROIHA title. Created on set with a
              Metahuman and filmed in Unreal Engine 5.</p>
            <p class="release-date">May 28, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/siroiha.jpg" alt="SIROIHA"/>
        </a>
        <a href="https://codercat.tk/neither-ever" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEITHER EVER]</h1>
            <p class="project-description"> Live projection performance made with HoudiniFX and motion captured
              choreography, in collaboration with Leilani Franco.</p>
            <p class="release-date">Feb 14, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neither-ever.jpg" alt="NEITHER EVER"/>
        </a>
        <a href="https://codercat.tk/torn" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[TORN]</h1>
            <p class="project-description"> Realtime live-looped motion capture performance made in Unity, in
              collaboration with Leilani Franco.</p>
            <p class="release-date">Mar 16, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/torn.jpg" alt="TORN"/>
        </a>
        <a href="https://codercat.tk/augmented-gallery" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AUGMENTED]</h1>
            <p class="project-description"> A gallery of digital cyborgifications made in HoudiniFX.</p>
            <p class="release-date">Mar 1, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/augmented.jpg" alt="AUGMENTED"/>
        </a>
        <a href="https://codercat.tk/lora" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[LORA]</h1>
            <p class="project-description"> Documentation of our dear friend and collaborator, Lora.</p>
            <p class="release-date">Nov 21, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/lora.jpg" alt="LORA"/>
        </a>
        <a href="https://codercat.tk/too-late-show" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TOO LATE SHOW]</h1>
            <p class="project-description"> Help me get out of my head - [largely reinterpreted] sizzle reel for a
              friend&#39;s movie.</p>
            <p class="release-date">Nov 1, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/too-late-show.jpg" alt="TOO LATE SHOW"/>
        </a>
        <a href="https://codercat.tk/dream-demon" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[DREAM DEMON]</h1>
            <p class="project-description"> When the spirit of the Dream Demon house awakens...</p>
            <p class="release-date">Aug 8, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dream-demon.jpg" alt="DREAM DEMON"/>
        </a>
        <a href="https://codercat.tk/another-space" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[ANOTHER SPACE]</h1>
            <p class="project-description"> Virtual reality gallery that highlights works of 43 artist from around the
              world.</p>
            <p class="release-date">May 9, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/another-space.jpg" alt="ANOTHER SPACE"/>
        </a>
        <a href="https://codercat.tk/dying-to-find" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[DYING TO FIND]</h1>
            <p class="project-description"> A moody WebVR piece, where you find yourself stranded in the residues and
              routines of a past civilization.</p>
            <p class="release-date">Aug 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dying-to-find.jpg" alt="DYING TO FIND"/>
        </a>
        <a href="https://block-zero.us/" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[BLOCK ZERO]</h1>
            <p class="project-description"> Creating unique digital spaces for the NFT collectors, a collaboration with
              INVI.</p>
            <p class="release-date">Jun 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/block-zero.jpg" alt="BLOCK ZERO"/>
        </a>
        <a href="https://codercat.tk/mars-simulation-0" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MARS 0]</h1>
            <p class="project-description"> Chiba&#39;s workshop where they prototyped the cyborgs that would be put
              through the experimental simulation of Mars College.</p>
            <p class="release-date">May 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mars-simulation-0.jpg" alt="MARS 0"/>
        </a>
        <a href="https://tenderclaws.com/theunderpresents" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THE UNDER PRESENTS]</h1>
            <p class="project-description"> In collaboration with Tender Claws. An immersive live theater experience in
              Virtual Reality.</p>
            <p class="release-date">Nov 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-under-presents.jpg" alt="THE UNDER PRESENTS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=DpGPDhTqQW8" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[PURPOSE PRO 2]</h1>
            <p class="project-description"> In collaboration with Justin Beiber. ThreeJS development for a browser
              skating game -- skate with Justin!</p>
            <p class="release-date">Jan 3, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/purpose-pro-2.jpg" alt="PURPOSE PRO 2"/>
        </a>
        <a href="https://codercat.tk/monster-or-friend" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[MONSTER OR FRIEND]</h1>
            <p class="project-description"> Exploration of Inverse Kinematic animation for procedural creature design in
              WebVR. Is it a monster or a friend?</p>
            <p class="release-date">Mar 25, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-or-friend.jpg" alt="MONSTER OR FRIEND"/>
        </a>
        <a href="https://codercat.tk/melt" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[MELT]</h1>
            <p class="project-description"> This is how I feel today. Simulating a melting effect by using compute
              shaders on position and velocity buffers.</p>
            <p class="release-date">May 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/melt.jpg" alt="MELT"/>
        </a>
        
        <a href="https://codercat.tk/ma" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MA]</h1>
            <p class="project-description"> In collaboration with Rachel Bungey. Exploring the japanese concept of MA
              “the interval which gives shape to the whole”.</p>
            <p class="release-date">May 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ma.jpg" alt="MA"/>
        </a>
        <a href="https://codercat.tk/wifi-soundscapes" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[WIFI SOUNDSCAPES]</h1>
            <p class="project-description"> Revealing the intangible dimension of WiFi packets with tcpdump and Foxdot.
              Data was captured on a road trip from LA to Denver.</p>
            <p class="release-date">Jan 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/wifi-soundscapes.jpg" alt="WIFI SOUNDSCAPES"/>
        </a>
        <a href="https://codercat.tk/readme" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[READ ME]</h1>
            <p class="project-description"> An experiment of focus, featuring the anti use of eye tracking in the
              browser. Made with webgazer.js and three.js.</p>
            <p class="release-date">Jul 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/readme.jpg" alt="READ ME"/>
        </a>
        <a href="https://sidequestvr.com/#/app/226" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[ALCHEMY PAINTER]</h1>
            <p class="project-description"> VR color alchemy experience. Mix dynamic fluids in an intuitive and novel way
              using a virtual syringe.</p>
            <p class="release-date">Aug 31, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/alchemy-painter.jpg" alt="ALCHEMY PAINTER"/>
        </a>
        <a href="https://codercat.tk/monster-within.html" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MONSTER WITHIN]</h1>
            <p class="project-description"> A short interactive Virtual Reality experience about the unpredictable nature
              of social acceptance.</p>
            <p class="release-date">Sep 22, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-within.jpg" alt="MONSTER WITHIN"/>
        </a>
        <a href="https://codercat.tk/three-body" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THREE BODY]</h1>
            <p class="project-description"> A WebVR story experience based on the Sci-Fi novel Three Body Problem by
              Cixin Liu.</p>
            <p class="release-date">Jun 12, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/three-body.jpg" alt="THREE BODY"/>
        </a>
        <a href="https://codercat.tk/ai-animation" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AI ANIMATION]</h1>
            <p class="project-description"> A port of the AI4Animation project to JavaScript. Explores the idea of
              machine leaning for character animation on the web.</p>
            <p class="release-date">May 13, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ai-animation.jpg" alt="AI ANIMATION"/>
        </a>
        <a href="https://codercat.tk/gender-graph" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[GENDERGRAPH]</h1>
            <p class="project-description"> Quantifying word gender biases by using machine learning models trained on
              different media sources.</p>
            <p class="release-date">Jun 12, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/gendergraph.jpg" alt="GENDERGRAPH"/>
        </a>
        <a href="https://codercat.tk/starling-simulation" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STARLING SIMULATION]</h1>
            <p class="project-description"> In collaboration with Small Data Industry. A bird floacking simulation made
              with three.js.</p>
            <p class="release-date">Oct 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/starling.jpg" alt="STARLING SIMULATION"/>
        </a>
        <a href="https://codercat.tk/procedural-ik-crawler" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[PROCEDURAL IK CRAWLER]</h1>
            <p class="project-description"> Evolution of our pet rat :) Exploration of Inverse Kinematic procedural
              character animation in the browser.</p>
            <p class="release-date">Apr 30, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/procedural-ik.jpg" alt="PROCEDURAL IK CRAWLER"/>
        </a>
        <a href="https://github.com/Kif11/anticap" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[ANTICAP]</h1>
            <p class="project-description"> Bypass any captive portal and get free WiFi easily 😝 Go tool to automate
              capturing packets in monitor mode and MAC spoofing.</p>
            <p class="release-date">Mar 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/anticap.jpg" alt="ANTICAP"/>
        </a>
        <a href="https://codercat.tk/street-sounds" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[STREET SOUNDS]</h1>
            <p class="project-description"> Encode an audio message into QR codes that can be posted on a wall as a time
              capsule.</p>
            <p class="release-date">Apr 4, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/street-sonds.jpg" alt="STREET SOUNDS"/>
        </a>
        <a href="https://codercat.tk/relaxation-room" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[RELAXATION ROOM]</h1>
            <p class="project-description"> Cellular automata pool in a vaporwave room, be careful it bites. Made with
              three.js.</p>
            <p class="release-date">Mar 3, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/relaxation-room.jpg" alt="RELAXATION ROOM"/>
        </a>
        <a href="https://codercat.tk/galactic-gypsy" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[GALACTIC GYPSY]</h1>
            <p class="project-description"> Our entry for the 2019 Global Game Jam in Hong Kong. A game about finding
              your home in an unknown planet.</p>
            <p class="release-date">Jan 27, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/galactic-gypsy.jpg" alt="GALACTIC GYPSY"/>
        </a>
        <a href="https://codercat.tk/grow-your-own-bot" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[GROW YOUR OWN BOT]</h1>
            <p class="project-description"> Training pet robots to reach their goals using the OpenAI reinforcement
              learning framework in the browser.</p>
            <p class="release-date">Dec 18, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/creatures.jpg" alt="GROW YOUR OWN BOT"/>
        </a>
        <a href="https://codercat.tk/neurojam" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEUROJAM]</h1>
            <p class="project-description"> A bot for FoxDot that takes user drum patterns and turns them into a
              masterpiece using a machine learning model from the Magenta project.</p>
            <p class="release-date">Mar 9, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neurojam.jpg" alt="NEUROJAM"/>
        </a>
        <a href="https://codercat.tk/ar-gpu-particles" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AR GPU PARTICLES]</h1>
            <p class="project-description"> A demo of compute shader particles emitting from your device in augmented
              reality.</p>
            <p class="release-date">Aug 19, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ar-gpu-particles.jpg" alt="AR GPU PARTICLES"/>
        </a>
        <a href="https://codercat.tk/auracaria-dreams" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AURACARIA DREAMS]</h1>
            <p class="project-description"> An procedurally generated art piece in three.js, inspired by the auracaria
              plant in Bogota, Colombia.</p>
            <p class="release-date">Jun 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/auracaria-dreams.jpg" alt="AURACARIA DREAMS"/>
        </a>
        <a href="https://codercat.tk/threejs-curvature" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[THREEJS CURVATURE]</h1>
            <p class="project-description"> A contribution to three.js library showing how to calculate mesh curvatures
              from raw geometry data, and use in shaders.</p>
            <p class="release-date">Jan 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/curvatureExample.jpg" alt="THREEJS CURVATURE"/>
        </a>
        <a href="https://codercat.tk/tsp-3D-art" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[3D TSP HEART]</h1>
            <p class="project-description"> An experiment of extending the TSP algorithm to work in 3D over points on the
              surface of a geometry. Made with three.js.</p>
            <p class="release-date">Jan 27, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tsp-3d-art.jpg " alt="3D TSP HEART"/>
        </a>
        <a href="https://codercat.tk/360-photo-to-video" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[360 PHOTO TO VIDEO]</h1>
            <p class="project-description"> Tool to convert 360 photos into video formats for easy sharing on media
              platforms. Made with three.js and CCapture.js</p>
            <p class="release-date">Dec 19, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/360photo-to-video.jpg" alt="360 PHOTO TO VIDEO"/>
        </a>
        <a href="https://codercat.tk/vertex-cache" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[VERTEX CACHE]</h1>
            <p class="project-description"> A demo of bringing Houdini FEM simulations to the browser by storing vertex
              data in textures.</p>
            <p class="release-date">May 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vertex-cache.jpg" alt="VERTEX CACHE"/>
        </a>
        <a href="https://codercat.tk/whirlpools" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[WHIRPOOLS]</h1>
            <p class="project-description"> Snays first three.js shader showing a simple geometry ripple effect.</p>
            <p class="release-date">Sep 10, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/whirpools.jpg " alt="WHIRPOOLS"/>
        </a>
        <a href="https://youtu.be/9fl4uK9xrxI" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[BORN ALONE]</h1>
            <p class="project-description"> The ultimate cycle. Our entry to the Rokoko Perfect Loop contest, in
              collaboration with Leilani Franco and a Metahuman. Filmed in Unreal Engine 5.</p>
            <p class="release-date">Jul 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/bornalonediesalone.jpg" alt="BORN ALONE"/>
        </a>
        <a href="https://codercat.tk/photospheres" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[PHOTOSPHERES]</h1>
            <p class="project-description"> 360 photo gallery of places around San Francisco made with Ricoh camera and
              three.js</p>
            <p class="release-date">Oct 23, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/photospheres.jpg " alt="PHOTOSPHERES"/>
        </a>
        <a href="https://codercat.tk/terminal-prints" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TERMINAL PRINTS]</h1>
            <p class="project-description"> Browse feminist t-shirt prints from a terminal. $: rm -rf patriarchy.</p>
            <p class="release-date">Aug 16, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/terminal-prints.jpg" alt="TERMINAL PRINTS"/>
        </a>
    </div>

    <!-- Footer START -->
<footer>
  <div class="social-block">
    <span class="social-item">snay</span>
    <a class="fa fa-github social-item" href="https://github.com/sneha-belkhale" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://www.instagram.com/snayss/" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/snayyss" target="_blank"></a>
  </div>
  <div class="social-block">
    <span class="social-item">kif</span>
    <a class="fa fa-github social-item" href="https://github.com/kif11" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://instagram.com/kif11" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/kovalewskiy" target="_blank"></a>
  </div>
</footer>
<!-- Footer END -->

  </div>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ANOTHER SPACE]</title>
            <link>https://codercat.tk/another-space</link>
            <description>
	      
	          <![CDATA[<body>
  <div class="header">
    <a href="https://codercat.tk/">Another Space</a>
    <div class="spacer"></div>
    <a href="https://online.pubhtml5.com/xnew/dvhf/#p=1" target="_blank">guide</a>
    <a href="https://codercat.tk/another-space/./about.html">about</a>
  </div>

  <div id="loading-screen">
    <div class="load-container">
      <div id="progress">
        <div id="bar"></div>
      </div>
      <div id="load-log">loading creative matter</div>
    </div>
  </div>

  <script>
    document.addEventListener('DOMContentLoaded', (event) => {
      const ascene = document.querySelector('a-scene');
      const assets = document.querySelector('a-assets');
      let aAssetItem = document.createElement("a-asset-item")
      aAssetItem.setAttribute("id", "environment")
      if ("xr" in navigator) {
        navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
          if (supported) {
            // Only show VR button if VR mode is supported
            aAssetItem.setAttribute("src", "assets/models/env-ktx.glb")
            assets.appendChild(aAssetItem)
          } else {
            aAssetItem.setAttribute("src", "assets/models/env.glb")
            assets.appendChild(aAssetItem)
          }
        });
      } else {
        //check if mobile
        let mql = window.matchMedia("(max-width: 768px)");
        if (mql.matches) {
          aAssetItem.setAttribute("src", "assets/models/env-ktx.glb")
        } else {
          aAssetItem.setAttribute("src", "assets/models/env.glb")
        }
        assets.appendChild(aAssetItem)
      }

      const { manager: loadManager } = assets.fileLoader;
      const loadingScreen = document.querySelector('#loading-screen');
      const desktopTutorial = document.getElementById('desktopTutorial');
      desktopTutorial.style.display = 'none';

      const barEl = document.getElementById("bar");
      const loadLogEl = document.getElementById("load-log");
      const width = 1;

      const phrases = ['complete lack of surprise', "inflamed sense of rejection", 'smirking revenge', 'cold sweat', 'broken heart'];

      loadManager.onProgress = (url, itemsLoaded, itemsTotal) => {
        const width = (itemsLoaded / itemsTotal) * 100;
        const idx = Math.floor(phrases.length * Math.random());

        barEl.style.width = width + "%";
        loadLogEl.innerHTML = `Loading ${phrases[idx]}`;
      }

      ascene.addEventListener('loaded', () => {
        loadingScreen.style.display = 'none';
        desktopTutorial.style.display = 'flex';
        console.log('[+] All assets loaded!')
      });
    });
  </script>

  <script src="https://codercat.tk/another-space/bundle.js"></script>

  <script>
    const THREE = AFRAME.THREE;
    AFRAME.registerComponent('transparent', {
      init: function () {
        this.el.addEventListener("object3dset", () => {
          const scene = this.el.getObject3D("mesh");

          scene.traverse((object) => {
            if (object.isMesh) {
              object.material.side = THREE.DoubleSide;
              object.material.alphaTest = 0.5
              object.material.transparent = true;
              object.material.needsUpdate = true;
            }
          });

        });
      }
    });
  </script>

  <a-scene renderer="colorManagement: true" background="color: #eef4fd" visible="true" vr-button="" sound-system="" loading-screen="enabled: false" fog="type: exponential; density: 0.00001; color: #ffffff" light="defaultLightsEnabled: false">

    <!-- Tutorial UI -->
    <div id="desktopTutorial" class="moveTutorialContainer">
      <div class="tutorialText">USE</div>
      <svg id="wasd" class="tutorialImg move" xmlns="http://www.w3.org/2000/svg" width="24.4385in" height="16.0026in" viewBox="0 0 1759.5754 1152.1854">
        <g>
          <rect x="7" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="609.9489" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="609.9489" y="7" width="542.3443" height="542.3443" rx="25.8264" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="1210.231" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <text transform="translate(746.6516 366.5015)" style="font-size: 277.9401550292969px;fill: black;">W</text>
          <text transform="translate(191.817 962.022)" style="font-size: 277.9401550292969px;fill: black;">A</text>
          <text transform="translate(801.5899 962.022)" style="font-size: 277.9401550292969px;fill: black;">S</text>
          <text transform="translate(1393.5104 962.022)" style="font-size: 277.9401550292969px;fill: black;">D</text>
        </g>
      </svg>
      <div class="tutorialText">TO MOVE</div>
    </div>

    <a-assets>
      <a-asset-item id="plants" src="https://codercat.tk/another-space/assets/models/plants.glb"></a-asset-item>
      <a-asset-item id="hand_right" src="https://codercat.tk/another-space/assets/models/hand_right.glb"></a-asset-item>
      <a-asset-item id="hand_left" src="https://codercat.tk/another-space/assets/models/hand_left.glb"></a-asset-item>
      <audio id="gallery-background-sound" src="https://codercat.tk/another-space/assets/sounds/Background ambience of a museum setting _AOS01433.mp3" preload="auto"></audio>
      <audio id="gallery-music" src="https://codercat.tk/another-space/assets/sounds/Underwater Exploration - Godmode.mp3" preload="auto"></audio>

      <video id="alex_bois-31" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/31_Alex_Bois.mp4"></video>
      <video id="harddrive-29" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/29_Harddrive.mp4"></video>
      <video id="flora-02" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/02_Flora.mp4"></video>
      <video id="emilia_wingfield-37" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/37_Emilia_Wingfield.mp4"></video>
      <video id="bram_smiley-10" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/10_Bram_smiley.mp4"></video>
      <video id="joel_scott-43" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/43_Joel_Scott.mp4"></video>

      <video id="louise_silfversparre_34_01" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_01.mp4"></video>
      <video id="louise_silfversparre_34_02" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_02.mp4"></video>
      <video id="louise_silfversparre_34_03" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_03.mp4"></video>
      <video id="louise_silfversparre_34_04" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_04.mp4"></video>
      <video id="louise_silfversparre_34_05" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_05.mp4"></video>
      <video id="louise_silfversparre_34_06" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/34_Louise_Silfversparre_06.mp4"></video>
      <video id="rachel_bungey_03" muted="" loop="true" src="https://codercat.tk/another-space/assets/videos/1000_Rachel_Bungey_03.mp4"></video>
    </a-assets>

    <a-entity id="camera-rig" position="0 0 8" cc-keyboard-controls="acceleration: 18" cc-vr-controls="speed: 0.4" collisions="" mover="" quick-turn="">
      <a-entity id="camera" position="0 1.6 0" camera="" look-controls="">
      </a-entity>
      <a-entity oculus-go-controls=""></a-entity>
      <a-entity id="rightHandController" custom-vr-controller="model: #hand_right; hand: right;"></a-entity>
      <a-entity id="leftHandController" custom-vr-controller="model: #hand_left; hand: left;"></a-entity>
    </a-entity>

    <a-entity id="city-scene" visible="true">
      <a-entity id="dirLight" light="color: #d1e7ff; intensity: 2" position="-2.32 3.29 -3.77"></a-entity>


      <a-entity id="ambiLight" light="type: ambient; color: #d1e7ff; intensity: 0.01" visible=""></a-entity>
      <a-entity sky=""></a-entity>

      <!-- SOUNDS -->
      <a-entity sound="src: #gallery-background-sound; positional: false; autoplay: true; loop: true; volume: 0.1;">
      </a-entity>
      <a-entity sound="src: #gallery-music; positional: false; autoplay: true; loop: true; volume: 0.8;">
      </a-entity>

      <!-- BUILDING -->
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: center_floor"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8; caustic: true" gltf-part="src: #environment; part: center_walls"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8; caustic: true" gltf-part="src: #environment; part: center_ceiling"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: pool_outside"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: outer_walls_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: inner_walls_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling3_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling2_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling1_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor1_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor2_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor3_L"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor1_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: outer_walls_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor2_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: inner_walls_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: floor3_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling3_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling2_R"></a-entity>
      <a-entity collider="" cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: ceiling1_R"></a-entity>
      <a-entity caustic-material="alphaVal:  0.44;  color1:  #a3bce0;  color2:  #c9f3ff" gltf-part="src: #environment; part: pool_water"></a-entity>
      <a-entity caustic-material="diffuseTexMult: 1.8; color1:  #cee7fd;  color:  #00fffb" gltf-part="src: #environment; part: pool_inside"></a-entity>
      <a-entity cc-material="fakeSubsurface:  1;  transparent:  true;  subsurfacecolor:  #bbff00" position="0 0 0" gltf-part="src: #plants; part: center_shrubs">
      </a-entity>

      <!-- SCULPTURES -->
      <a-entity material="shader:flat; wireframe: true; color: white" gltf-part="src: #environment; part: 29_Harddrive" spin=""></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 32_Saul_Frame"></a-entity>
      <a-entity chrome-material="envMapIntensity: 2; color: white" gltf-part="src: #environment; part: 32_Saul_Mirror">
      </a-entity>
      <a-entity chrome-material="envMapIntensity: 2; color: white" gltf-part="src: #environment; part: 28_Ben_khan">
      </a-entity>
      <a-entity chrome-material="envMapIntensity: 2; color: white" gltf-part="src: #environment; part: 24_Yorum_01">
      </a-entity>
      <a-entity chrome-material="envMapIntensity: 1.2; color: white" gltf-part="src: #environment; part: 25_H2erg" spin="">
      </a-entity>
      <a-entity cc-material="diffuseTexMult: 1.8" gltf-part="src: #environment; part: 1000_Rachel_Bungey_01">
      </a-entity>

      <!-- IMAGES -->
      <a-entity cc-material="" gltf-part="src: #environment; part: 36_Martha_Bailey_01_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 36_Martha_Bailey_01_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 23_Shane_Lester_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 36_Martha_Bailey_01_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 23_Shane_Lester_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 26_Peony_Gent_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 22_Kat"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 38_Anna_Sheridan_H2erg_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 38_Anna_Sheridan_H2erg_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 21_Henry_Hoffman"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 39_Fabrizio_Manzi_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 20_Ivy_Mai"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 41_Paul_Beaudoin_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 19_Sarah_Scattergood"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 26_Peony_Gent_07"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 18_Sarah_Tucker_08"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 26_Peony_Gent_09"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 33_Alex_vernon_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 18_Sarah_Tucker_05"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 35_Caitlin_Hickling_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 14_Mark_Manzi_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 13_BD85"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 14_Mark_Manzi_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 11_Mike_Zimmerman_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 14_Mark_Manzi_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 11_Mike_Zimmerman_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 09_Bryce_Aspinall"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 15_Kyla_Callista_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 08_Jamal_Finni"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_06"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 16_Daniel_Euphrat_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_05"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 16_Daniel_Euphrat_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_04"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 17_Daniel_Emmanuel"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 07_James_Mason_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 18_Sarah_Tucker_04"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 01_Ben_Clark"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 03_River_Cousins"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_04"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_05"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 04_Tolga_Tarhan_06"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 05_Hin_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 05_Hin_02"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 05_Hin_03"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 06_Maura_Jamieson"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 42_Agnes_Jonas_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 44_Patrick_Saville"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 12_Fry_01"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 27_Joe_Bungey"></a-entity>
      <a-entity cc-material="" gltf-part="src: #environment; part: 1000_Rachel_Bungey_02"></a-entity>

      <!-- VIDEOS -->
      <a-entity gltf-part="src: #environment; part: 29_Harddrive1" video="src: #harddrive-29; triggerRadius: 4">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 37_Emilia_Wingfield" video="src: #emilia_wingfield-37"></a-entity>
      <a-entity gltf-part="src: #environment; part: 31_Alex_Bois" video="src: #alex_bois-31"></a-entity>
      <a-entity gltf-part="src: #environment; part: 02_Flora" video="src: #flora-02"></a-entity>
      <a-entity gltf-part="src: #environment; part: 10_Bram_smiley" video="src: #bram_smiley-10"></a-entity>
      <a-entity gltf-part="src: #environment; part: 43_Joel_Scott" video="src: #joel_scott-43"></a-entity>

      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_01" video="src: #louise_silfversparre_34_01">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_02" video="src: #louise_silfversparre_34_02">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_03" video="src: #louise_silfversparre_34_03">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_04" video="src: #louise_silfversparre_34_04">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_05" video="src: #louise_silfversparre_34_05">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 34_Louise_Silfversparre_06" video="src: #louise_silfversparre_34_06">
      </a-entity>
      <a-entity gltf-part="src: #environment; part: 1000_Rachel_Bungey_03" video="src: #rachel_bungey_03; triggerRadius: 4">
      </a-entity>
    </a-entity>
  </a-scene>


</body>]]>
	      
	    </description>
            <pubDate>Sun, 09 May 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MARS 0]</title>
            <link>https://codercat.tk/mars-simulation-0</link>
            <description>
	      
	          <![CDATA[<body>
  <!-- This image will be used when sharing this page on social media -->
  <img src="https://codercat.tk/mars-simulation-0/assets/textures/feature.png" alt="social-image"/>

  <div class="header">
    <a href="https://codercat.tk/">.mars_simulation_0</a>
    <div class="spacer"></div>
    <a href="https://codercat.tk/mars-simulation-0/./about.html">.about</a>
    <a href="https://codercat.tk" target="_blank">.other</a>
  </div>

  <div id="loading-screen">
    <div class="load-container">
      <div id="progress">
        <div id="bar"></div>
      </div>
      <div id="load-log">Loading broken dreams</div>
    </div>
  </div>

  <div class="scroll">↓ scroll ↓</div>

  <script>
    document.addEventListener('DOMContentLoaded', (event) => {
      const ascene = document.querySelector('a-scene');
      const assets = document.querySelector('a-assets');
      const { manager: loadManager } = assets.fileLoader;
      const loadingScreen = document.querySelector('#loading-screen');

      const barEl = document.getElementById("bar");
      const loadLogEl = document.getElementById("load-log");
      const width = 1;

      const phrases = ['complete lack of surprise', "inflamed sense of rejection", 'smirking revenge', 'cold sweat', 'broken heart'];

      loadManager.onProgress = (url, itemsLoaded, itemsTotal) => {
        const width = (itemsLoaded / itemsTotal) * 100;
        const idx = Math.floor(phrases.length * Math.random());

        barEl.style.width = width + "%";
        loadLogEl.innerHTML = `Loading ${phrases[idx]}`;
      }

      ascene.addEventListener('loaded', () => {
        loadingScreen.style.display = 'none';
        console.log('[+] All assets loaded!')
      });
    });
  </script>

  <script src="https://codercat.tk/mars-simulation-0/bundle.js"></script>

  <a-scene renderer="colorManagement: true" background="color: #ffffff" visible="true" fog="type: exponential; color: #ffffff; density:0.2" scene-transition="" vr-button="" loading-screen="enabled: false" light="defaultLightsEnabled: false">

    <a-assets>
      <a-asset-item id="footstep" src="https://codercat.tk/mars-simulation-0/assets/models/foot.obj"></a-asset-item>
      <a-asset-item id="evironment" src="https://codercat.tk/mars-simulation-0/assets/models/gallery_environment.glb"></a-asset-item>

      <a-asset-item id="hand_right" src="https://codercat.tk/mars-simulation-0/assets/models/hand_right.glb"></a-asset-item>
      <a-asset-item id="hand_left" src="https://codercat.tk/mars-simulation-0/assets/models/hand_left.glb"></a-asset-item>

      <audio id="gallery-background-sound" src="https://codercat.tk/mars-simulation-0/assets/sounds/inception.mp3" preload="auto"></audio>

      <img id="env-map" src="https://codercat.tk/mars-simulation-0/assets/textures/env.jpg" preload="auto"/>
    </a-assets>

    <a-entity id="camera-rig" position="0 0 0.85" cc-keyboard-controls="acceleration: 10" cc-vr-controls="speed: 0.4" mover="" quick-turn="">
      <a-entity id="camera" position="0 1.6 0" camera="" look-controls="">
      </a-entity>
      <a-entity oculus-go-controls=""></a-entity>
      <a-entity id="rightHandController" custom-vr-controller="model: #hand_right; hand: right;"></a-entity>
      <a-entity id="leftHandController" custom-vr-controller="model: #hand_left; hand: left;"></a-entity>
    </a-entity>

    <!-- <a-log position="-3 0 0"></a-log> -->

    <a-entity id="city-scene" visible="true">
      <a-entity light="type: hemisphere; color: #ffffff"></a-entity>

      <a-entity sound="src: #gallery-background-sound; positional: false; autoplay: true; loop: true; volume: 0.8;">
      </a-entity>

      <a-entity gltf-part="src: #evironment; part: floor_lines" material="shader:flat; color: #000000; side:  double;">
      </a-entity>
      <a-entity id="vectorFieldDoor" gltf-part="src: #evironment; part: door" material="shader:flat; color: #000000; side:  double;"></a-entity>

      <a-entity gltf-part="src: #evironment; part: helmet" chrome-material="envMap: #env-map; envMapIntensity: 1; color: #ffffff">
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text1" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <a-entity id="torso" position="-1.9399 1.24119 2.33024" scale="1.7 1.7 1.7">
        <a-entity gltf-part="src: #evironment; part: spring" chrome-material="envMap: #env-map; envMapIntensity: 2; color: #000000"></a-entity>
        <a-entity gltf-part="src: #evironment; part: wires" chrome-material="envMap: #env-map; color: #e9d72f; roughness: 0.4; metalness: 0; reflectivity: 0.6;">
        </a-entity>
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text2" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <a-entity id="leg" position="-1.91662 1.25473 3.94397" scale="1.4 1.4 1.4" rotation="0 180 0">
        <a-entity gltf-part="src: #evironment; part: leg_spring" chrome-material="envMap: #env-map; envMapIntensity: 2; color: #000000"></a-entity>
        <a-entity gltf-part="src: #evironment; part: bow" chrome-material="envMap: #env-map; color: #ff0a54; roughness: 0.4; metalness: 0; reflectivity: 0.6;">
        </a-entity>
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text3" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <a-entity id="hand" position="1.9587241608 1.37317860126 3.95885218804" rotation="0.0 0.0 90.0" scale="2.4 2.4 2.4">
        <a-entity gltf-part="src: #evironment; part: hand_skin" chrome-material="envMap: #env-map; envMapIntensity: 2; color: #030303; roughness: 0.6; metalness: 0; reflectivity: 0.2;">
        </a-entity>
        <a-entity gltf-part="src: #evironment; part: hand_bone" chrome-material="envMap: #env-map; color: #ffffff">
        </a-entity>
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text4" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <a-entity gltf-part="src: #evironment; part: vine" chrome-material="envMap: #env-map; envMapIntensity: 2; color: #000000">
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text5" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <a-entity id="vine" position="1.94335364308 1.246 2.3281992604" rotation="-1.48682048374e-14 101.825553088 -1.51906089681e-14" scale="1.1 1.1 1.1">
        <a-entity gltf-part="src: #evironment; part: back_vine_wire" chrome-material="envMap: #env-map; envMapIntensity: 2; color: #000000"></a-entity>
        <a-entity gltf-part="src: #evironment; part: back_vine_rings" chrome-material="envMap: #env-map; color: #ffffff">
        </a-entity>
      </a-entity>
      <a-entity gltf-part="src: #evironment; part: text6" material="shader:flat; color: #000000; side:  double;">
      </a-entity>

      <!-- Photo frame -->
      <a-entity id="photo-frame" side-arrows="">
        <a-entity id="photo-screen" position="0 1.6 0" scale="1 1 1" blend-material=""></a-entity>
        <a-plane id="photo-screen-frame" segments-height="10" segments-width="10" position="0 1.6 -0.01" scale="1.03 1.03 1.03" material="shader:flat; color: #000000; side:  double;"></a-plane>
        <a-entity footsteps="src: #footstep; color:#000000"></a-entity>
      </a-entity>

    </a-entity>

    <a-entity id="void-scene" position="0 0 0" visible="false">
      <!-- <a-entity id="void-scene-sound"
        sound="src: #void-background-sound; positional: false; autoplay: false; loop: true; volume: 1;"></a-entity> -->
      <a-entity id="galleryDoor" gltf-part="src: #evironment; part: door" material="shader:flat; color: #ffffff; side:  double;"></a-entity>
      <a-entity footsteps="src: #footstep; color:#ffffff"></a-entity>
      <a-entity vector-fields=""></a-entity>
    </a-entity>
  </a-scene>

  <script>
    const scroll = document.querySelector('.scroll');
  
    window.addEventListener('wheel', (e) => {
      scroll.style.animation = "unset";
    })
  </script>


</body>]]>
	      
	    </description>
            <pubDate>Sun, 02 May 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[PURPOSE PRO 2]</title>
            <link>https://www.youtube.com/watch?v=DpGPDhTqQW8</link>
            <description>
	      
	          In collaboration with Justin Beiber. ThreeJS development for a browser skating game -- skate with Justin!
	      
	    </description>
            <pubDate>Sun, 03 Jan 2021 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>OpenWRT Captive Portal Chat</title>
            <link>https://codercat.tk/captive-portal-chat</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>Captive Portal Chat With OpenWrt</h1>

    <section>
      <figure>
        <img src="https://codercat.tk/captive-portal-chat/chat_ui.webp" alt="Chat UI"/>
        <figcaption>Chat UI</figcaption>
      </figure>
      <p>Heya! So, lately I’ve been thinking about how the current state of media directs us to spending a lot of time focusing on global events and people. We are so connected with the entire world, that sometimes we lose sight of what is happening right outside our windows. Instead of trying to reach the largest audience possible by sharing events and ideas on social media, what if we steered our efforts towards our local communities? This could look like pinning up event posters outside, gathering for mutual aid community dinners, oor hosting a web page on an open local network…??</p>

      <p>I had seen this idea in Berlin — Google was attempting to open a new headquarters in Neukölln and the people were not going to allow it. Alongside the protests, someone had setup a local network where Google was planning to build its office. When you connected to the network, it would pop up a page of anti-google propaganda that everyone should be aware of. It was a cool supplementary way to share information, localized to a specific area and idea.</p>

      <p>I wanted to implement something like this here in NYC, and maybe take it a step further by including a local network chat to spark the sense of community along with some (abolitionist?) propaganda. I came up with a list of the most important features…</p>

      <ul>
        <li>The page should pop up automatically after you connect (Captive Portal).</li>
        <li>The local network should not need internet connection.</li>
        <li>The router should be able to run a small server for the chat API.</li>
        <li>All processes should survive a reboot.</li>
      </ul>

      <p>Lets do iittt::::</p>
    </section>

    <section>
      <figure>
        <img src="https://codercat.tk/captive-portal-chat/openwrt_banner.webp" alt="OpenWRT — Wireless Freedom — OS that runs on the router"/>
        <figcaption>OpenWRT — Wireless Freedom — OS that runs on the router</figcaption>
      </figure>

      <h1>The Hardware</h1>

      <p>
        We need a portable router for this project. This could come in many different forms, I even contemplated using my Raspberry Pi, but eventually settled on the
        <a href="https://www.gl-inet.com/products/gl-ar750s">GL.iNet Slate Router</a> for it’s simplicity and specialized functionality.
      </p>

      <figure>
        <img src="https://codercat.tk/captive-portal-chat/glinet_slate_router.webp" alt="Gl.iNet Slate Router"/>
        <figcaption>Gl.iNet Slate Router</figcaption>
      </figure>

      <p>This cute portable router comes with an installation of <i>OpenWRT</i>, as well as a Admin Panel web interface. I knooww we all want to be terminal purists sometimes, but this admin panel is actually really nice and helpful to get a visual representation of the router state.</p>

      <figure>
        <img src="https://codercat.tk/captive-portal-chat/glinet_ui.webp" alt="Router Admin Panel, for basic network configuration"/>
        <figcaption>Router Admin Panel, for basic network configuration</figcaption>
      </figure>

      <p>To prep for this experiment, I used the Admin Panel to set up an open guest network named <i>Starbucks WiFi</i> (ask me about it :p) I also enabled a captive portal for the guest network using the interface. Depending on which router you use, you may have to figure out some of those things with commands, but I have been blessed with this interface and will enjoy its benefits:)</p>
    </section>

    <section>
      <h1>Setting up the Captive Portal</h1>
      <p>Now that the captive portal has been enabled, when connecting to the router, I receive a popup html page! Now to swap it out with our own.</p>

      <p><i>OpenWRT</i> comes with the <i>NoDogSplash</i> captive portal manager. Looking through the docs, I found that the html page that it sends to newly connected users is located in <i>/etc/nodogsplash/htdocs/splash.html</i>.</p>

      <p>So all we need to do is copy over our html page with (anti-capitalist?) propaganda using scp from our computer.</p>

      <!-- prettier-ignore -->
      <code>scp index.html root@192.168.8.1:/etc/nodogsplash/htdocs/splash.html</code>

      <p>Wonderful! Now every time you connect to the open guest network, it should bring you to your (anti-google?) propaganda page.</p>
    </section>

    <section>
      <h1>Allowing Captive Portal to Work Offline</h1>
      <p>By default, <i>NoDogSplash</i> captive portals will not work without internet. If the router fails to resolve the DNS request for the operating systems “connectivity check” URL (mac uses <i>captive.apple.com</i>), then <i>NoDogSplash</i> will return an error and deem the network/captive portal unusable.</p>
      <p>I found this to be quite a blocking problem, since one of my goals was to take my local network chat to places where a WiFi connection was not guaranteed (NYC Metro, street protests, etc). Furthermore, since all data for the chat is local to the router, there really was no reason it needed WiFi..</p>

      <p>After scrolling through some <a href="https://github.com/nodogsplash/nodogsplash/issues/328">Github issues</a>, I found a hack to basically configure <i>NoDogSplash</i> to resolve all DNS queries locally with the same random public address, making them seem to pass the “connectivity check” and allow <i>NoDogSplash</i> to continue.</p>

      <!-- prettier-ignore -->
      <code># on router uci add_list
dhcp.@dnsmasq[0].address=’/#/121.122.123.124&#39;
# saves the config edit for persistency
after reboot uci commit dhcp service dnsmasq restart</code>
    </section>

    <section>
      <h1>Setting up the Chat Server</h1>
      <p>At this point, we basically have enough to recreate the Berlin anti google setup:) However I still wanted to see if it was possible to setup a simple chat server. The simplest chat ever needs a running server with one route for posting a message, one route for getting all messages, a super sophisticated .json file database, and an html page to display the chat.</p>
      <p>The router model I have only has 128 mb of RAM.. so I thought about downloading <i>Python-Light</i>, but it was too light and did not have <i>SimpleHttpServer</i>. I decided to just pray and hope the device could withstand the vanilla Python installation.</p>
      <p>First I installed Python on the router using the OpenWRT package manager.</p>

      <!-- prettier-ignore -->
      <code>opkg update opkg install python </code>

      <p>Then copied over my server code and new chat html page from my computer ( I wont go into describing how the chat code works <a href="https://gist.github.com/sneha-belkhale/e7a1fe52e33b5c98f1ea2081a3b4ed8a">here</a>, but its pretty simple and you can check it out here if you want :)</p>

      <!-- prettier-ignore -->
      <code>scp server.py root@192.168.8.1:/root/scp chat.html
root@192.168.8.1:/etc/nodogsplash/htdocs/splash.html</code>

      <p>Create an empty “database” on the router to store our messages:</p>

      <!-- prettier-ignore -->
      <code>echo &#34;[]&#34; &gt;&gt; /root/data.json</code>

      <p>And run the server!</p>

      <!-- prettier-ignore -->
      <code>python /root/server.py</code>

      <p>All is well…. but if we open our chat now we can see that requests to the Python server are failing with a connection time out, meaning that the port our server is listening on is not accessible from our chat page. If we remember, NoDogSplash is in charge of the captive portal which blocks most of the ports by default, so we can adjust its settings to allow traffic directed to our server port.</p>

      <!-- prettier-ignore -->
      <code>uci add_list nodogsplash.@nodogsplash[0].users_to_router=&#39;allow tcp port 8989&#39;
uci commit nodogsplash
service nodogsplash restart</code>

      <p>Now, if we run the server again and try connecting to our open network, our chat should pop up as a captive portal, happily GETting/POSTing requests to our local server :)</p>
    </section>

    <section>
      <h1>Survive the Reboot, the Final Boss</h1>
      <p>If you’ve gotten this far.. you should have a captive portal that automatically pops up with a chat window served by the simple Python server running on the router.</p>
      <p>In order to reach our ideal of robustness, we need to make sure our processes can survive a reboot!</p>
      <p>OpenWRT uses Init Scripts to configure daemons that run on startup, if we make our python server run as a daemon, it should hopefully be able to survive a reboot.</p>
      <p>The <a href="https://openwrt.org/docs/techref/initscripts">OpenWRT docs</a> give a pretty simple example Init Script, which we can modify for our purposes :</p>

      <!-- prettier-ignore -->
      <code>#!/bin/sh /etc/rc.common

START=98
STOP=98

start() {
    echo &#34;starting chat server&#34; (
    sleep 20; python /root/server.py)&amp;
}

stop() {
    echo &#34;stopping chat server&#34;
    killall python
}</code>

      <p>Init scripts use the template <i>/etc/rc.common</i>, a wrapper that provides its main and default functionality, such as <i>start</i>, <i>stop</i>, <i>restart</i>, <i>enable</i>, and <i>disable</i>. We need to override the default <i>start</i> and <i>stop</i> functions. If you want to learn more about the details of init scripts, check out the <a href="https://openwrt.org/docs/techref/initscripts">OpenWRT docs</a> on the subject, they are awesome.</p>
      <p>If you noticed in the script, our start function has a lot going on in the line:</p>

      <!-- prettier-ignore -->
      <code>(sleep 20; python /root/server.py)&amp;</code>

      <p>First off, the process is running in the background — indicated by the &amp;. I noticed that if I tried running the process in the foreground, the Admin Panel wouldn’t show up! I have a hunch that <i>init.d</i> start functions are blocking, so whatever you need to start needs to account for that by running itself as a background process.</p>
      <p>Another mystery is that if I just ran <i>(python /root/server.py)&amp;</i> without the sleep bit, the server would not start up properly. After killing the process and starting it again manually using <i>/etc/init.d/chat</i> start, everything would work fine! My hunch here is that something needed for python servers to initialize is not available at boot time… would love if someone has more information on that. For now, the sleep timer works :)</p>
      <p>We can copy this file from our computer into the designated directory of init scripts:</p>
      <code>scp chat.sh root@192.168.8.1:/etc/init.d/</code>
      <p>And enable it! Enabling the process allows it to startup on boot.</p>

      <!-- prettier-ignore -->
      <code>sudo chmod +x /etc/init.d/chat.sh
/etc/init.d/chat enable
/etc/init.d/chat start</code>
      <p>Nowwww cross your fingers and lets reboot!!! To make sure your python server is running in the background after the reboot, you can run</p>

      <!-- prettier-ignore -->
      <code>ps | grep python</code>

      <p>and check if the server process survived :)</p>

      <figure>
        <img src="https://codercat.tk/captive-portal-chat/chat_ui.webp" alt="Chat UI"/>
        <figcaption>Chat UI</figcaption>
      </figure>

      <figure>
        <img src="https://codercat.tk/captive-portal-chat/captive_portal_zapotista.webp" alt="Captive Portal Zapatista Wisdom"/>
        <figcaption>Captive Portal Zapatista Wisdom</figcaption>
      </figure>

      <p>We made it! This article may not accurately portray the amount of mental breakdowns that occurred during this exploration, but hey thats linux so it’s implied :) I hope after an adequate amount of flipped tables you are able to get this to work too and we can spread the joy of LAN chats &amp; local environment awareness :P</p>
      <br/>
      <p>❤ Snayss</p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Fri, 20 Nov 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[DYING TO FIND]</title>
            <link>https://codercat.tk/dying-to-find</link>
            <description>
	      
	          <![CDATA[<body>

  <div id="loading-screen">
    <div class="quote flash-ligh">
      Power lines connect the remains of this soulless civilization.
      <div class="author">Find the way out.</div>
    </div>
    <div class="loading flash-ligh">Loading...</div>
  </div>

  <script>
    document.addEventListener('DOMContentLoaded', (event) => {
      // Handle loading screen
      let ascene = document.querySelector('a-scene');
      let loadingScreen = document.querySelector('#loading-screen');
      let lodingScreennMinDuration = 15; // sec
      let loadStart = new Date().getTime();
      const desktopTutorial = document.getElementById('desktopTutorial');
      const vrTutorial = document.getElementById('vrTutorial');


      desktopTutorial.style.display = 'none';
      vrTutorial.style.display = 'none';
      ascene.addEventListener('loaded', () => {
        let loadEnd = new Date().getTime();

        let timeDelta = ((loadEnd - loadStart) % (1000 * 60)) / 1000.0;

        if (timeDelta < lodingScreennMinDuration) {
          setTimeout(() => {
            loadingScreen.style.display = 'none';
            setTutorial()
          }, ((lodingScreennMinDuration - timeDelta) * 1000))
        } else {
          // Scene and all assets are fully loaded
          loadingScreen.style.display = 'none';
          setTutorial()
        }
      });

      ascene.addEventListener('enter-vr', function () {
        // turn sound on 
        ascene.systems['sound-system'].setSound(true);
      });

    });

    setTutorial = () => {
      if ("xr" in navigator) {
        navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
        const desktopTutorial = document.getElementById('desktopTutorial');
        const vrTutorial = document.getElementById('vrTutorial');
          document.querySelector('.a-enter-vr-button').style.display = 'block';
          if (supported) {
            // Show VR specific tutorial text
            desktopTutorial.style.display = 'none';
            vrTutorial.style.display = 'flex';
          } else {
            desktopTutorial.style.display = 'flex';
            vrTutorial.style.display = 'none';
      }
    });
      }
    }


  </script>

  <!-- Order does matter here! Bundle should be loaded after loading screen but before main scene.-->
  <script src="https://codercat.tk/dying-to-find/bundle.js"></script>

  <a-scene renderer="colorManagement: true; physicallyCorrectLights: true; sortObjects: true" background="color: white" fog="type: exponential; density: 0.01; color: #ffffff" loading-screen="enabled: false">

    <!-- Tutorial UI -->
    <div id="desktopTutorial" class="moveTutorialContainer">
      <div class="tutorialText">USE</div>
      <svg id="wasd" class="tutorialImg move" xmlns="http://www.w3.org/2000/svg" width="24.4385in" height="16.0026in" viewBox="0 0 1759.5754 1152.1854">
        <g>
          <rect x="7" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="609.9489" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="609.9489" y="7" width="542.3443" height="542.3443" rx="25.8264" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <rect x="1210.231" y="602.8411" width="542.3443" height="542.3443" rx="25.8276" style="fill: none;stroke: black;stroke-miterlimit: 10;stroke-width: 14px"></rect>
          <text transform="translate(746.6516 366.5015)" style="font-size: 277.9401550292969px;fill: black;font-family: Quicksand-Regular, Quicksand">W</text>
          <text transform="translate(191.817 962.022)" style="font-size: 277.9401550292969px;fill: black;font-family: Quicksand-Regular, Quicksand">A</text>
          <text transform="translate(801.5899 962.022)" style="font-size: 277.9401550292969px;fill: black;font-family: Quicksand-Regular, Quicksand">S</text>
          <text transform="translate(1393.5104 962.022)" style="font-size: 277.9401550292969px;fill: black;font-family: Quicksand-Regular, Quicksand">D</text>
        </g>
      </svg>
      <div class="tutorialText">TO MOVE</div>
    </div>

    <div id="vrTutorial" class="moveTutorialContainer">
      <div class="tutorialText" style="width: 55%;">USE RIGHT CONTROLER THUMBSTICK TO MOVE AROUND AND LEFT TO QUICK TURN</div>
    </div>

    <a-assets>
      <audio id="city-background-sound" src="https://codercat.tk/dying-to-find/assets/sounds/Dark_SciFi_Drone_Mixed_037.mp3" preload="auto"></audio>
      <audio id="shrine-rising" src="https://codercat.tk/dying-to-find/assets/sounds/Robotic_Mechanism_Extended2.mp3" preload="auto"></audio>
      <audio id="creature-step" src="https://codercat.tk/dying-to-find/assets/sounds/Pinball50.mp3" preload="auto"></audio>
      <audio id="creature-move" src="https://codercat.tk/dying-to-find/assets/sounds/servo.mp3" preload="auto"></audio>
      <audio id="void-background-sound" src="https://codercat.tk/dying-to-find/assets/sounds/ambi.mp3" preload="auto"></audio>
      <audio id="teleport" src="https://codercat.tk/dying-to-find/assets/sounds/teleport.mp3" preload="auto"></audio>
      <audio id="core-activate" src="https://codercat.tk/dying-to-find/assets/sounds/core.mp3" preload="auto"></audio>
      <a-asset-item id="city" src="https://codercat.tk/dying-to-find/assets/models/city2.glb"></a-asset-item>
      <a-asset-item id="character" src="https://codercat.tk/dying-to-find/assets/models/abstract_char_walk_01.fbx" response-type="arraybuffer">
      </a-asset-item>
      <a-asset-item id="path" src="https://codercat.tk/dying-to-find/assets/char_path.json"></a-asset-item>
      <a-asset-item id="shrine-asset" src="https://codercat.tk/dying-to-find/assets/models/shrine.fbx" response-type="arraybuffer"></a-asset-item>
      <a-asset-item id="shrine-terminal-asset" src="https://codercat.tk/dying-to-find/assets/models/shrine_terminal.fbx" response-type="arraybuffer">
      </a-asset-item>
    </a-assets>

    <a-entity loading-screen="">

    <a-entity id="background-sound" sound="src: #city-background-sound; positional: false; autoplay: true; loop: true; volume: 0.5;" sound-controller="">
    </a-entity>
    </a-entity>
    <a-entity id="cameraRig">
      <a-entity id="camera" position="-12 6 150" camera="" wasd-controls="acceleration: 400" look-controls="" quick-turn="" mover="speed: 2">
        <a-sphere id="viewBlocker" material="shader: julia; side: back;" scale="1 1 1"></a-sphere>
        <a-entity id="teleport-sound" sound="src: #teleport; positional: true; autoplay: false; loop: false; volume: 1;">
        </a-entity>
      </a-entity>
      <a-entity oculus-go-controls=""></a-entity>
      <a-entity id="leftHandContloller" oculus-touch-controls="hand: left; orientationOffset: 0 0 0;"></a-entity>
      <a-entity id="rightHandContloller" oculus-touch-controls="hand: right; orientationOffset: 0 0 0;"></a-entity>
    </a-entity>

    <a-entity id="city-scene" position="0 0 0" visible="true" core-activation="coreId: #power-core; wireId: #power-wires">
      <a-entity gltf-part="src: #city; part: buildings" ccbasic-material="color: #000000"></a-entity>
      <a-entity id="ground" gltf-part="src: #city; part: ground" ccbasic-material="color: #ffffff"></a-entity>
      <a-entity id="roads" gltf-part="src: #city; part: roads" ccbasic-material="color: #000000"></a-entity>
      <a-entity id="crack" gltf-part="src: #city; part: crack" ccbasic-material="color: #000000"></a-entity>
      <a-entity id="background" gltf-part="src: #city; part: background" ccbasic-material="color: #ffffff"></a-entity>

      <a-entity id="power-wires" gltf-part="src: #city; part: power_wires" power-wire-material=""></a-entity>
      <a-entity id="power-connector1" gltf-part="src: #city; part: power_connector1" ccbasic-material="color: #000000">
      </a-entity>
      <a-entity id="power-connector1" gltf-part="src: #city; part: power_connector2" ccbasic-material="color: #000000">
      </a-entity>
      <a-entity id="power-poles" gltf-part="src: #city; part: power_poles" ccbasic-material="color: #000000"></a-entity>
      <a-entity id="power-shrine" gltf-part="src: #city; part: power_shrine" ccbasic-material="color: #000000">
      </a-entity>
      <a-entity id="power-core" gltf-part="src: #city; part: power_core" material="shader: julia; blackOut: 1; viewDirMag: 1">
      </a-entity>
      <a-entity id="core-activate-sound" sound="src: #core-activate; positional: true; autoplay: false; loop: false; volume: 15;"></a-entity>
      <a-entity gltf-part="src: #city; part: magnetic_field" magnetic-material=""></a-entity>
      <a-entity id="origin1" gltf-part="src: #city; part: wire_origin1" warp-point="exitWarpId: #origin2" julia-material=""></a-entity>
      <a-entity id="origin_inside1" gltf-part="src: #city; part: wire_origin_inside1" material="shader: julia; side: double;"></a-entity>
      <a-entity id="origin_inside2" gltf-part="src: #city; part: wire_origin_inside2" material="shader: julia; side: double;"></a-entity>
      <a-entity id="origin2" gltf-part="src: #city; part: wire_origin2" warp-point="exitWarpId: #origin1" julia-material=""></a-entity>

      <a-entity position="-183.567 -21.134 -228.852" rotation="0 33.803 0">
        <a-entity id="shrine" fbx="src: #shrine-asset" shrine="" animation-player="loop: 0" ccbasic-material="color: #ffffff; vertexColors: face;">
        </a-entity>
        <a-entity class="entrance" position="-7.723 0.580 -3.434"></a-entity>
        <a-entity class="entrance" position="-0.051 0.361 -4.312"></a-entity>
        <a-entity class="entrance" position="7.436 0.19 -3.376"></a-entity>
        <a-entity id="shrine-rising-sound" sound="src: #shrine-rising; positional: true; autoplay: false; loop: false; volume: 10;"></a-entity>
      </a-entity>

      <a-entity id="shrine-terminal" fbx="src: #shrine-terminal-asset" animation-player="" position="-181.502 -18.208 -199.539" rotation="0 50.691 0" scale="4 4 4" ccbasic-material="color: #ffffff; vertexColors: face;">
      </a-entity>
      <a-entity creature="spawnPosition: -43.633 15.560 -161.365;">
        <!-- <a-entity creature="spawnPosition: -181.502 -18.208 -199.539;"> -->
        <a-entity id="creature-step-sound" sound="src: #creature-step; positional: true; autoplay: false; loop: false; volume: 3; poolSize: 3">
        </a-entity>
        <a-entity id="creature-move-sound" sound="src: #creature-move; positional: true; autoplay: false; loop: true; volume: 1;">
        </a-entity>
      </a-entity>
      <a-entity cargo="character: #character; pathJson: #path"></a-entity>
    </a-entity>

    <!-- <a-entity id="shrine" gltf-part="src: #city; part: shrine" material="shader: flat; side: double; vertexColors: face;"></a-entity> -->
    <!-- <a-entity id="shrine-door" gltf-part="src: #city; part: shrine_door" material="shader: flat; side: double; vertexColors: face;"></a-entity> -->
    

    <a-entity id="void-scene" position="0 0 0" visible="false">
      <a-entity id="void-scene-sound" sound="src: #void-background-sound; positional: false; autoplay: false; loop: true; volume: 1;"></a-entity>
      <a-entity vector-fields=""></a-entity>
    </a-entity>
  </a-scene>
  <!-- <a-entity geometry="primitive: plane; height: 1; width: 1; segmentsHeight: 100; segmentsWidth: 100" character-material scale="1 1 1" position="0 1 -2" rotation="-90 0 0"></a-entity>  </a-scene> -->


</body>]]>
	      
	    </description>
            <pubDate>Sat, 29 Aug 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[READ ME]</title>
            <link>https://codercat.tk/readme</link>
            <description>
	      
	          <![CDATA[<body>
  <script src="https://codercat.tk/readme/assets/webgazer.js"></script>
  <div class="loseScreen">
    <h1>
      you lose
    </h1>
    <p class="loseText">
    </p>
  </div>
  <div class="calibrationDiv">
    <h1>
      callibration
    </h1>
    <p>
      Please wait for your video feed to appear, and then click each button 6 times while focusing your gaze on the
      button.
    </p>
    <input type="button" class="Calibration" id="Pt1"/>
    <input type="button" class="Calibration" id="Pt2"/>
    <input type="button" class="Calibration" id="Pt3"/>
    <input type="button" class="Calibration" id="Pt4"/>
    <input type="button" class="Calibration" id="Pt5"/>
    <input type="button" class="Calibration" id="Pt6"/>
    <input type="button" class="Calibration" id="Pt7"/>
    <input type="button" class="Calibration" id="Pt8"/>
    <input type="button" class="Calibration" id="Pt9"/>

  </div>
  <div class="ui">
    <h1>
      R e a d M e
    </h1>
    <div class="sections">

      <div class="section">
        The following is an excerpt from <u>Attention in Advertising</u> by <b>Mike Vito</b> and <b>Louis Perrotta</b>.<br/><br/>
        Gaze and attention constitute two essential parts of print advertising. The task of finding out how people look
        at an advertisement, what catches viewers’ attention most quickly, and what makes a product look most desirable
        to a magazine or newspaper reader can be daunting for marketing executives. Luckily for them, an understanding
        of the science behind visual perception can prove to be a great tool of the trade.
      </div>
      <div class="section">

        The role of images in advertising can be better understood when we study certain phenomena related to gaze and
        attention. One important concept is that of attention itself. It is said to be an orienting response to a
        stimulus signifying that the stimulus has made contact with a sense organ <b>(Clark 70)</b>. One function of attention
        is to regulate the amount of additional processing effort a stimulus receives <b>(Clark 70)</b>. Obviously, paying
        closer attention involves more processing effort.
      </div>
      <div class="section">
        Additional perspective on visual attention can be found in the work of Dr. Edward Titchener, whose laws of
        attention provide a good synopsis of basic knowledge regarding attention.The laws state that attention, which
          is unstable in itself, can be varied at will to change the clarity of sensory representations. This means one
        can choose to focus on specific things to make them more clearly accessible to the mind. <u>According to Titchener,
          the area of focus and what is outside of it are the only two levels of attention, so focusing on one image leads
          to a decrease in the clarity of all other images.</u> The mind is also found to be attentive enough to remember
        images shown only for a brief period <b>(Wright 18-19)</b>.
      </div>
      <div class="section">
        Another necessary aspect of attention and advertising is <b>iconicity</b>, which describes the fact that pictures
        recreate the kinds of visual information that our eyes and brains make use of when we look at the real world
        <b>(Messaris 7)</b>. According to Paul Messaris, Iconicity does not have to entail a complete surface similarity
        between a picture and reality as long as the picture reproduces visual cues that we use in real world vision.
        This concept is not confined to just to the content of images but can also be characteristic of their formal or
        stylistic qualities <b>(Messaris 54)</b>.
      </div>
      <div class="section">
        In other words, we expect pictures to verify our conception of the world. This is why, when a picture violates
        reality, it draws our attention so effectively. For an example, one can examine an advertisement for the liquor
        brand Level. The ad depicts a bottle balancing on a shaker in a position where the bottle would obviously fall
        in reality. Unexpectedly, the bottle stays where it is, violating the laws of gravity. Unnatural depictions such
        as this give rise to what is known as a <b>“conceptual conflict,”</b> in which a strange and surprising set of
        circumstances in an advertisement brings uncertainty to the reader, requiring more cognitive energy to
        understand.<u>This promotes better attention because the confusion must be resolved in order to understand the ad,
          and the work done by the mind promotes better memory of the answer <b>(East 45)</b></u>. The Level ad turned out to be one
        of the more popular of our experiment, giving the argument some legitimacy.
      </div>
      <div class="section">
        Besides conceptual conflict, marketers also make use of archetypes in their advertising. Archetypes use
        culturally shared meanings in order to engage the audience and impart ideas <b>(East 50)</b>. As an example, a
        depiction of a flawless woman would appeal to common notions of beauty and assist the viewer in associating
        positive affect with the product.
      </div>
      <div class="section">
        Another tendency of viewers is to respond well to a spokesperson or model staring directly outward, seeming to
        look into the viewers’ eyes or reach into the viewer’s “real” space <b>(Messaris 145)</b>. <u>People tend to be especially
          responsive to the eyes and mouth, which they normally look at during everyday interaction with their peers
          <b>(Messaris 146)</b></u>. Greater perceived proximity has been shown to increase attention and involvement with
        advertisements <b>(Messaris 29)</b>.
      </div>
      <div class="section">
        These facts about attention bring us to the question of how psychology and attention affect companies’
        advertising strategy. Physically attractive spokespeople and designs, high contrast, a concentrated area of
        focus, and the occasional violation of the laws of physics are often seen in today’s advertisements, as
        evidenced by a casual look through a popular magazine. The question remains unanswered as to which of them
        people value more, and how much is appropriate for selling a product. To some extent, this depends on the target
        demographic. However, we undertook research in an effort to find if any generalities could be made.
      </div>
      <div class="section">
        The aim of a study by Mike Vito and Louis Perrotta was to find out what people generally focus on most when they
        see advertisements, in this case for alcohol. Twenty-one college-aged participants, fifteen male and six female,
        were used. Viewers were brought to a special room, where they were told to look at a variety of advertisements
        with an <b>eye-tracking machine</b> set up in front of them. After filling out a short survey about previous experience
        with alcohol, they were then shown some alcohol advertisements on a large screen in three separate groups of
        seven each...
        If you made it here and you want to know how their research unfolds, congratulations. <b>Congratulations</b> for not
        fueling the ads with your attention. Being aware of tactics being used and that may be used in the future
        will help us maintain our identities. <br/> <br/> Please check out the full piece at
        <b>https://www1.icsi.berkeley.edu/ ~stellayu/artvis/project/ad/index.html</b>.
      </div>
    </div>
    <footer>
    </footer>
  </div>

  <a-scene renderer="colorManagement: true" background="color: #571aff" visible="false">
    <a-assets>
      <img id="pic1" src="https://codercat.tk/readme/assets/textures/pic1.jpg"/>
      <img id="fat" src="https://codercat.tk/readme/assets/textures/fat.jpg"/>
      <img id="gum" src="https://codercat.tk/readme/assets/textures/gum.jpg"/>
      <img id="pic2" src="https://codercat.tk/readme/assets/textures/pic2.jpg"/>
      <img id="playboy" src="https://codercat.tk/readme/assets/textures/playboy.jpg"/>
      <img id="nike" src="https://codercat.tk/readme/assets/textures/nike.jpg"/>
      <img id="glossier2" src="https://codercat.tk/readme/assets/textures/glossier2.jpg"/>
      <img id="smoothie" src="https://codercat.tk/readme/assets/textures/smoothie.jpg"/>
      <img id="ikea" src="https://codercat.tk/readme/assets/textures/ikea.jpg"/>
      <img id="aa" src="https://codercat.tk/readme/assets/textures/aa.jpg"/>
      <img id="pimple" src="https://codercat.tk/readme/assets/textures/pimple.jpg"/>
      <img id="gp" src="https://codercat.tk/readme/assets/textures/gp.jpg"/>
    </a-assets>
    <a-entity id="camera" position="0 0 1" gazer="" camera="active: true" scroll=""></a-entity>

    <a-plane segments-height="10" segments-width="10" position="-1 0 0" scale="0.5 .95 1" pic-material="map: #pic1">
    </a-plane>
    <a-plane segments-height="10" segments-width="10" position="1 -0.25 0" scale="0.5 0.45 1" pic-material="map: #smoothie"></a-plane>
    <a-plane segments-height="10" segments-width="10" position="-1 -3.25 0" scale="0.5 0.45 1" pic-material="map: #pic2"></a-plane>

    <a-plane segments-height="10" segments-width="10" position="-1 -1.25 0" scale="0.5 0.45 1" pic-material="map: #ikea"></a-plane>
    <a-plane segments-height="10" segments-width="10" position="-1 -.75 0" scale="0.5 0.45 1" pic-material="map: #glossier2"></a-plane>

    <a-plane segments-height="10" segments-width="10" position="1 -1.5 0" scale="0.5 .95 1" pic-material="map: #nike">
    </a-plane>
    <a-plane segments-height="10" segments-width="10" position="1 -2.5 0" scale="0.5 .95 1" pic-material="map: #fat">
    </a-plane>
    <a-plane segments-height="10" segments-width="10" position="-1 -2.5 0" scale="0.5 .95 1" pic-material="map: #playboy"></a-plane>
    <a-plane segments-height="10" segments-width="10" position="1 -3.5 0" scale="0.5 .95 1" pic-material="map: #pic1">
    </a-plane>

    <a-plane segments-height="10" segments-width="10" position="-1 -5.0 0" scale="0.5 .95 1" pic-material="map: #pimple"></a-plane>
    <a-plane segments-height="10" segments-width="10" position="-1 -5.75 0" scale="0.5 .45 1" pic-material="map: #aa"></a-plane>
    <a-plane segments-height="10" segments-width="10" position="1 -5.25 0" scale="0.5 .95 1" pic-material="map: #gp">
    </a-plane>

  </a-scene>


</body>]]>
	      
	    </description>
            <pubDate>Wed, 29 Jul 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>Three.js Fog Hacks</title>
            <link>https://codercat.tk/threejs-fog-hack</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>Three.js Fog Hacks</h1>

    <section>
      <p>
        Fog is everything. Its a simple effect that effortlessly adds depth and cinematic qualities to a scene. It’s
        also has negligible performance costs, meaning it’s suitable for web graphics. Imagine a cube on a plane with a
        sky sphere.. seems pretty bland but then add FOG and BOOM! Masterpiece.
      </p>

      <figure>
        <div class="side-by-side">
          <img src="https://codercat.tk/threejs-fog-hack/mnt_no_fog.webp" alt="3D mountains without fog"/>
          <img src="https://codercat.tk/threejs-fog-hack/mnt_with_fog.webp" alt="3D mountains with fog"/>
        </div>
        <figcaption>this is the.. same scene… whaat?</figcaption>
      </figure>

      <p>
        I think most 3D designers/nerds/whatever are pretty aware of the glories of fog, but from what i’ve seen, the
        effect is normally just taken at face value. The three.js default fog is definitely beautiful on its own, but I
        want to share some shader simple tricks on how to take the implementation to the ~ next level ~.
      </p>

      <p>
        I’m going to be doing this exploration in three.js, but the basic ideas can be easily implemented in shaders
        everywhere. Also, if you are the kind of person that hates reading and is screaming “JUST SHOW ME THE CODE”, the
        demo and code is available @
        <a href="https://stackblitz.com/edit/threejs-fog-hacks"> https://stackblitz.com/edit/threejs-fog-hacks </a>
      </p>

      <p class="separator">···</p>

      <p>
        So, let’s begin with the
        <a href="https://threejs.org/examples/?q=fog#webgl_geometry_terrain_fog"> three.js fog demo </a>
        as the starting point. This is the only mention of fog on the three.js examples page, yet it seems to be more
        about the terrain :(
      </p>

      <p>
        The article requires a basic understanding of how the shader library works in three.js. If you are not familiar,
        I would really recommend reading this article on
        <a href="https://medium.com/@pailhead011/extending-three-js-materials-with-glsl-78ea7bbb9270">Extending Three.js Materials</a>
        , its good stuff.
      </p>

      <p>
        Also, i’m going to mostly just go over concepts, with code snippets here and there, so I advise that you have
        the full
        <a href="https://stackblitz.com/edit/threejs-fog-hacks?"> Stackblitz demo code </a>
        open for reference :)
      </p>
    </section>

    <section>
      <h2>THE SETUP</h2>
      <p>
        So, our first goal is to get to a hold of the fog implementation and have it under our control. One way to do
        that would be writing a custom shader from scratch, but this would mean having to reimplement a lot of the
        material features ( present in <i>THREE.MeshBasicMaterial</i>, <i>THREE.MeshPhysicalMaterial</i>, etc. ) that
        you are already love and are using for your scene.
      </p>

      <p>
        You could also just copy and paste the
        <a class="af mu" href="https://github.com/mrdoob/three.js/tree/dev/src/renderers/shaders/ShaderLib" rel="noopener ugc nofollow" target="_blank">
          bones of the material shaders
        </a>
        you are using, and overwrite the fog shader chunks with your own.. This is better, but since it is still a
        custom shader and of type
        <i> THREE.ShaderMaterial </i>
        , it will miss out on the integration with the rest of the scene properties ( including lights and fog).
      </p>
      <p>
        For example, the standard way to control fog is
        <i> scene.fog = new THREE.FogExp2(color, density) </i>
        . For all built in materials, the fog parameters are automatically passed in by the library as uniforms with the
        correct shader #defines. However, they are ignored if the material is of type
        <i> Three.ShaderMaterial </i>
        .
      </p>
      <p>
        So… what we need is a material that is a default type but also has our custom logic?? Don’t worry, there’s a
        third option! We can instantiate our material as whatever base material we want (so that it is registered and
        gets all scene properties), and just sneak in the chunks that we want to replace in the material
        <i> OnBeforeCompile </i>
        callback.
      </p>

      <!-- prettier-ignore -->
      <code>mesh.material = new THREE.MeshBasicMaterial({ color: new THREE.Color(0xefd1b5) });
mesh.material.onBeforeCompile = (shader) =&gt; {
  shader.vertexShader = shader.vertexShader.replace(`#include &lt;fog_pars_vertex&gt;`, fogParsVert);
  shader.vertexShader = shader.vertexShader.replace(`#include &lt;fog_vertex&gt;`, fogVert);
  shader.fragmentShader = shader.fragmentShader.replace(`#include &lt;fog_pars_fragment&gt;`, fogParsFrag);
  shader.fragmentShader = shader.fragmentShader.replace(`#include &lt;fog_fragment&gt;`, fogFrag);
};</code>

      <p>Yay! Okay, but let’s take a step back… how do we know which chunks we need to replace?</p>

      <p>
        By studying the
        <a href="https://github.com/mrdoob/three.js/tree/dev/src/renderers/shaders/ShaderLib">shader chunks on Github</a>. No but really, the only way we can successfully use this approach is by getting familiar with what the
        included shader chunks do, what <i>#defines</i> exist, what <i>varyings</i> are provided, etc.
      </p>

      <p>I recommend two things:</p>

      <ol>
        <li>
          Go to Github and look at the
          <a href="https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib/meshbasic_frag.glsl.js">
            shaders chunks that compose each material</a>, and dive into the shader chunks you are interested in.
        </li>
        <li>
          If you “break” the shader by, lets say, writing an invalid line like
          <i>hellofdksaf #include &lt;fog_fragment&gt;</i>: you will get an error message in the console with the full
          print out of the shader and all its chunks in one place! it’s nice reading material.
        </li>
      </ol>

      <p>
        I feel like the setup is actually one of the coolest parts of this lil article, since it sets you up with the
        freedom to pretty much hack any part of the three.js shader system with little resistance.
      </p>

      <p>
        Once you’ve done those things, you will see that the fog uniforms are presented in
        <i>&lt;fog_pars_vertex&gt;</i> &amp; <i>&lt;fog_pars_fragment&gt;</i>, and the implementing is in
        <i>&lt;fog_vertex&gt;</i>, <i>&lt;fog_fragment&gt;</i>. You will want to start out with the
        <a href="https://github.com/mrdoob/three.js/tree/dev/src/renderers/shaders/ShaderChunk">default implementation</a>
        in a <a href="https://stackblitz.com/edit/threejs-fog-hacks?file=FogReplace.js"> javascript file </a>, that we
        can slowly modify.
      </p>
    </section>

    <section>
      <h2>NEAR + APEX COLORS</h2>
      <p>
        Finally ready for our first hack! Who said fog had to be restricted to one color?? It may not be physically
        accurate, but it surely does give an artistic edge to be able to control fog colors that are near and at a
        distance.
      </p>
      <p>
        At the end of the fog fragment chunk, there is a float named
        <i> fogFactor </i>
        , a 0-1 value that represents where the fragments depth value lies on the scale of no fog, to full fog. It is
        used to calculate the final fragment color like so:
      </p>

      <!-- prettier-ignore -->
      <code>gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );</code>

      <p>
        When fogFactor is 0, the color remains equal to <i>gl_FragColor</i>. When fogFactor is 1, the fragment is at our
        max depth value and is fully in fog.
      </p>

      <p>
        We can achieve a dual fog color system by having <i>fogColor</i> depend on the fogFactor as well. If a new
        uniform <i>fogNearColor</i> is the color of fragments closer to you, and <i>fogColor</i> is for those far away,
        we can mix the two depending on the <i>fogFactor</i>:
      </p>

      <!-- prettier-ignore -->
      <code>gl_FragColor.rgb =  mix ( gl_FragColor.rgb, mix  (fogNearColor, fogColor, fogFactor), fogFactor );</code>

      <figure>
        <div class="side-by-side">
          <img src="https://codercat.tk/threejs-fog-hack/color_fog_01.webp" alt="Green fog over green 3D mountains"/>
          <img src="https://codercat.tk/threejs-fog-hack/color_fog_02.webp" alt="Blue fog over red 3D mountains"/>
        </div>
        <div class="side-by-side">
          <img src="https://codercat.tk/threejs-fog-hack/color_fog_03.webp" alt="Turquoise fog over purple 3D mountains"/>
          <img src="https://codercat.tk/threejs-fog-hack/color_fog_04.webp" alt="Dark blue fog over white-bluish 3D mountains"/>
        </div>
        <figcaption>Few looks with different near and apex colors</figcaption>
      </figure>

      <p>
        Of course this can also be extended to having horizon + sky fog colors, but thats something for you to try.
        Moving on.
      </p>
    </section>

    <section>
      <h2>NOISE</h2>

      <p>
        The three.js fog is fixed at every depth value, meaning the fog will look the same in every direction. From the
        example above it’s not too noticeable since the terrain we are working with is complex on its own, but if you
        have simpler geo, it becomes pretty obvious quickly.
      </p>

      <p>
        Real fog has patches, areas that are denser than others. We can try to mimics that complexity by applying a
        noise function to the depth value.
      </p>

      <blockquote>Perlin noise will solve all your problems. -me</blockquote>

      <p>
        There is a cool resource of
        <a href="https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83">GLSL Noise algorithms</a> that I
        tend to include in all of my three.js project, before even starting to work on the shaders, and they always come
        in handy.
      </p>

      <p>
        For the purpose of fog, we are going to need a noise function that takes a 3D input, since we want it to be
        fixed and driven by the world space position. I’m going to go with
        <i>Classic Perlin 3D Noise by Stefan Gustavson</i>, but its fun to experiment with others if you want :)
      </p>

      <p>
        The first thing we are going to need is to set up the world position value as a <i>varying</i>, to access it in
        our fragment shader. That includes changes in all of our replacement chunks : Declaring
        <i>vFogWorldPosition</i> in the headers, setting it in the vertex shader chunk
        <i>vFogWorldPosition = (modelMatrix * vec4( transformed, 1.0 )).xyz; </i>, and using it in the fragment shader.
        Another note to look at the
        <a class="af mu" href="https://stackblitz.com/edit/threejs-fog-hacks?file=index.js" rel="noopener ugc nofollow" target="_blank">
          stackblitz
        </a>
        if you need more details.
      </p>
      <p>
        In the fragment shader, let’s just start and see what the noise looks like by multiplying it with the
        <i>fogDepth</i> value. Since <i>cnoise</i> outputs a value between 0–1, this should be a kosher experiment.
      </p>

      <!-- prettier-ignore -->
      <code>float noise = cnoise(fogNoiseFreq * vFogWorldPosition.xyz);
float vFogDepth = noise * fogDepth;</code>

      <figure>
        <div class="side-by-side">
          <img src="https://codercat.tk/threejs-fog-hack/fog_noise_36.webp" alt="fogNoiseFreq value of 0.0036"/>
          <img src="https://codercat.tk/threejs-fog-hack/fog_noise_12.webp" alt="fogNoiseFreq value of 0.0012"/>
        </div>
        <figcaption>fogNoiseFreq of 0.0036 &amp; 0.0012</figcaption>
      </figure>

      <p>
        Playing around with different values of <i>fogNoiseFreq</i> gives us some pretty interesting looks already! But
        since we are multiplying all <i>fogDepth</i>
        values equally by noise, we are losing the constant gradual shift to complete fog.
      </p>

      <p>
        Scaling the noise by the <i> ogDepth</i> value, as well as adding a multiplier for artistic taste should help us
        maintain that gradual shift.
      </p>

      <code>float vFogDepth = fogDepth - fogNoiseImpact * noise * fogDepth;</code>

      <figure>
        <img src="https://codercat.tk/threejs-fog-hack/fog_with_noise.webp" alt="Fog with Perlin noise"/>
        <figcaption>Fog with Perlin noise</figcaption>
      </figure>
    </section>

    <section>
      <h2>MOVEMENT</h2>
      <p>
        Ok maybe i’ve been staring at the fog too much ( can’t help it in Daly City.. ) , but fog is rarely static here.
        There’s always a gust or slow wind pushing it (
        <a class="af mu" href="https://twitter.com/karlthefog?lang=en" rel="noopener ugc nofollow" target="_blank">
          karl
        </a>
        ) along its way.
      </p>
      <p>
        In order to start making the fog move, our shader needs a time uniform ( reference
        <a href="https://stackblitz.com/edit/threejs-fog-hacks?file=FogReplace.js">code</a>if you are unsure of how to
        add that ). Then, all we need to do is add a direction to <i>vFogWorldPosition</i>, and the noise will smoothly
        transition with time.
      </p>

      <!-- prettier-ignore -->
      <code>vec3 windDir = vec3(0.0, 0.0, time);
vec3 scrollingPos = vFogWorldPosition.xyz + fogNoiseSpeed * windDir;
float noise = cnoise(fogNoiseFreq * scrollingPos.xyz);</code>

      <figure>
        <img src="https://codercat.tk/threejs-fog-hack/moving_noise.gif" alt="Moving Perlin noise over mountains"/>
        <figcaption>
          Moving Perlin noise over mountains. Banding is shitty :( Pls check out the demo for a better idea.
        </figcaption>
      </figure>
    </section>

    <section>
      <h2>PERFORMANCE</h2>

      <p>
        Having the noise function in the fragment shader looks awesome, but isn’t the most performative option. If you
        are tied on performance, there is always the option of losing some smoothness and calculating the noise in the
        vertex shader.
      </p>

      <p>
        If you are looking for a more subtle effect, you can create a pretty similar effect by approximating with
        parametric surfaces.
      </p>

      <figure>
        <img src="https://codercat.tk/threejs-fog-hack/param_surface.webp" alt="3D plot of parametric surface"/>
        <figcaption>3D plot of parametric surface</figcaption>
      </figure>

      <p>
        I think I was browsing parametric surfaces for something else.. but when I saw this plot I was like ooooh looks
        like a blanket of fog!! Again, thats what living in Daly City does to you…
      </p>

      <p>
        We can use the x &amp; z values of our world position to calculate the surface, and then do a fade base on how
        close the y position is to the surface value — that way basically any point under the surface would have fog,
        and any point over would smoothly transition to no fog.
      </p>

      <!-- prettier-ignore -->
      <code>float scale = 0.04;
float yCutoff = 3.0;
vec3 scaledPos = scale * vWorldPosition.xyz;
float val = scaledPos.z * sin(scaledPos.x) - scaledPos.x * cos(scaledPos.z);
float normDist = clamp(vWorldPos.y - yCutoff*val, 0.0, 100.0)/100.0;</code>

      <p>
        There is some hackery you need to do if you want to add movement to this fog, since this particular function
        does not look good when x &amp; y move away from the origin.. I solved this by just moving the world position in
        a circular pattern, but i’m sure there are other ways :)
      </p>

      <figure>
        <img src="https://codercat.tk/threejs-fog-hack/dtf_fog.jpg" alt="Parametric surface fog approximation for one of my projects. Subtle, but trust me, its there :)"/>
        <figcaption>Parametric surface fog approximation for one of my projects. Subtle, but trust me, its there :)</figcaption>
      </figure>
    </section>

    <section>
      <h2>FIN</h2>
      <p>
        Anyways, I hope there were bits and pieces of that that would be useful to some of y’all threejs friends out
        theree! Feel free to reach out if anything was unclear, or if you come up with some other cool hacks :)
      </p>

      <p>❤ snayz</p>
    </section>

    <section>
      <h2>Resources</h2>
      <p>
        Final demo @
        <a href="https://threejs-fog-hacks.stackblitz.io/">
          https://threejs-fog-hacks.stackblitz.io/
        </a>
      </p>
      <p>
        Check out other related repos @
        <a href="https://github.com/sneha-belkhale">
          https://github.com/sneha-belkhale
        </a>
      </p>
      <p>
        Other VR/Graphics projects @
        <a href="https://codercat.tk/">
          https://codercat.tk
        </a>
      </p>
      <p>
        And renders / screenshots @
        <a href="https://www.instagram.com/snayss/">
          https://www.instagram.com/snayss/
        </a>
      </p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MELT]</title>
            <link>https://codercat.tk/melt</link>
            <description>
	      
	          <![CDATA[<body><script src="https://codercat.tk/melt/bundle.js"></script></body>]]>
	      
	    </description>
            <pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MA]</title>
            <link>https://codercat.tk/ma</link>
            <description>
	      
	          <![CDATA[<body><script src="https://codercat.tk/ma/bundle.js"></script></body>]]>
	      
	    </description>
            <pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MONSTER OR FRIEND]</title>
            <link>https://codercat.tk/monster-or-friend</link>
            <description>
	      
	          <![CDATA[<body>
<script type="text/javascript" src="https://codercat.tk/monster-or-friend/bundle.js"></script>
</body>]]>
	      
	    </description>
            <pubDate>Wed, 25 Mar 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[NEUROJAM]</title>
            <link>https://codercat.tk/neurojam</link>
            <description>
	      
	          <![CDATA[<body>
    <div id="background">
      <img src="https://codercat.tk/neurojam/electric.gif" id="background-image" alt=""/>
    </div>
    <div id="content-container">
      <h1>NEUROJAM</h1>
      <p>
        Neurojam is a bot for <a href="https://github.com/Qirky/Troop" target="_blank">Troop</a> that takes my drum
        patterns and turns them into a masterpiece using a machine learning model from the
        <a href="https://magenta.tensorflow.org/" target="_blank">Magenta</a> project.
      </p>
      <p>
        In this setup the bot connects to a Troop server and waits for a particular line such as
        <b>sprucey -l 8 -r 1.7 @xx..x</b> where <b>-l</b> is length of returned pattern, <b>-r</b> is randomness and
        string after @ is a drum pattern. It grab this pattern and pipe it to a pre-trained model that try to extend
        this pattern and send it back.
      </p>

      <iframe id="video" width="100%" height="415" src="https://www.youtube.com/embed/B_tNvMf6vGM?rel=0&amp;start=60&amp;showinfo=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
    </div>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 09 Mar 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[WIFI SOUNDSCAPES]</title>
            <link>https://codercat.tk/wifi-soundscapes</link>
            <description>
	      
	          <![CDATA[<body>
  <div id="info">Description</div>

  <div id="title"><center>wifi soundscapes<br/>
    <p4>revealing the intangible dimension of wifi packets with tcpdump + foxdot
       <a href="https://gist.github.com/sneha-belkhale/dffa4c8dc2aed8dcce79850af2071e08">@code</a>
     </p4><center></center></center></div>
  <audio id="denver intl airport" loop="true">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/airport.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="avalanche zone" loop="true">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/avalanche.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="denhac hackerspace" loop="true">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/denhack.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="rodeway inn, denver" loop="true">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/denver.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="zion pioneer lodge" loop="true">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/zion.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="scratch">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/scratch.mp3" type="audio/mpeg"/>
  </audio>
  <audio id="start">
    <source src="https://codercat.tk/wifi-soundscapes/tracks/start.mp3" type="audio/mpeg"/>
  </audio>
  <script src="https://codercat.tk/wifi-soundscapes/js/three.js"></script>
  <script src="https://codercat.tk/wifi-soundscapes/js/orbit.js"></script>
  <script src="https://codercat.tk/wifi-soundscapes/js/utils.js"></script>
  <script src="https://codercat.tk/wifi-soundscapes/js/index.js"></script>
  <script src="https://codercat.tk/wifi-soundscapes/js/PacketShader.js"></script>


</body>]]>
	      
	    </description>
            <pubDate>Sun, 12 Jan 2020 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[THE UNDER PRESENTS]</title>
            <link>https://tenderclaws.com/theunderpresents</link>
            <description>
	      
	          In collaboration with Tender Claws. An immersive live theater experience in Virtual Reality.
	      
	    </description>
            <pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[STARLING SIMULATION]</title>
            <link>https://codercat.tk/starling-simulation</link>
            <description>
	      
	          <![CDATA[<body>
  <!-- Simulation canvas -->
  <div id="canvas">
  <script src="https://codercat.tk/starling-simulation/js/index.js"></script>



</div></body>]]>
	      
	    </description>
            <pubDate>Fri, 04 Oct 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[MONSTER WITHIN]</title>
            <link>https://codercat.tk/monster-within.html</link>
            <description>
	      
	          A short interactive Virtual Reality experience about the unpredictable nature of social acceptance.
	      
	    </description>
            <pubDate>Sun, 22 Sep 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ALCHEMY PAINTER]</title>
            <link>https://sidequestvr.com/#/app/226</link>
            <description>
	      
	          <![CDATA[<body>
  <div id="list"></div>

  <div class="center">
    <div class="header">
      <div class="controls">
        <a href="#">
          <i class="fa fa-th-large" aria-hidden="true"></i>
        </a>
        <a href="#list">
          <i class="fa fa-list" aria-hidden="true"></i>
        </a>
      </div>
      <!-- Menu START -->
<nav class="menu">
  <ul class="menu-list">
    <li class="menu-item">
      <a href="https://codercat.tk/">Projects</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/reel">Reels</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/blog">Blog</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/gallery/snay/2024?filter=post+reel&amp;grid=200px">Gallery</a>
    </li>
    <li class="menu-item">
      <a href="https://codercat.tk/friends">Friends</a>
    </li>
    <!-- <li class="menu-item">
      <a href="/people">People</a>
    </li> -->
    <li class="menu-item">
      <a href="https://codercat.tk/about">About</a>
    </li>
  </ul>
</nav>
<!-- Menu END -->

    </div>

    <div class="project-box" id="project-container">
      <a href="https://codercat.xyz/cookbook" class="pr-link">
        <div class="project" style="background-color: #fd4703">
          <h1 class="pr-title">[COOKBOOK]</h1>
          <p class="project-description"> Houdini shelf tool and online library to share copy and pastable recipes.
          </p>
          <p class="release-date">Nov 02, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cookbook.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/spinal-cleanse" class="pr-link">
        <div class="project" style="background-color: #08f5aa">
          <h1 class="pr-title">[SPINAL CLEANSE]</h1>
          <p class="project-description"> Refresh your intervertebral discs with Cerebra&#39;s new product release. Sketch
            made with #Houdini #Blender
          </p>
          <p class="release-date">Oct 13, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/spinal-cleanse.jpg" alt="SpinalCleanse"/>
      </a>
      <a href="https://codercat.tk/seductress" class="pr-link">
       <div class="project" style="background-color: rgb(224, 0, 206)">
         <h1 class="pr-title">[SEDUCTRESS]</h1>
         <p class="project-description"> A love story, about an alien seductress and... her sweet child. Shot in Tbilisi, in collaboration with dearest Aiji.
         </p>
         <p class="release-date">Feb 25, 2026</p>
       </div>
       <img loading="lazy" src="https://codercat.tk/assets/img/projects/seductress.jpg" alt="Cookbook"/>
     </a>
      <a href="https://codercat.tk/nginx-visualizer" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[NGINX VISUALIZER]</h1>
          <p class="project-description"> Realtime NGINX Visualizer in the style of Defend your Castle. Made with Go and
            ThreeJS.
          </p>
          <p class="release-date">Jan 02, 2026</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/nginxviz.jpg" alt="Cookbook"/>
      </a>
      <a href="https://codercat.tk/almost-always" class="pr-link">
        <div class="project" style="background-color: #c9a0ff">
          <h1 class="pr-title">[ALMOST ALWAYS]</h1>
          <p class="project-description"> Flower blooms for the fragrance campaign by Khloe Kardashian, in
            collaboration with Chevy Tyler and Greg Swales.
          </p>
          <p class="release-date">Nov 11, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/kkfrag.jpg" alt="KKFrag"/>
      </a>
      <a href="https://codercat.tk/onsen" class="pr-link">
        <div class="project" style="background-color: #c9ff05">
          <h1 class="pr-title">[ONSEN]</h1>
          <p class="project-description"> Sustainable bathing pools in space. Short sketch made with #Houdini #Blender
          </p>
          <p class="release-date">Jul 14, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/onsen.jpg" alt="Onsen"/>
      </a>
      <a href="https://codercat.tk/the-bioport" class="pr-link">
        <div class="project" style="background-color: #ff0505">
          <h1 class="pr-title">[THE BIOPORT]</h1>
          <p class="project-description"> A new way to experience the capabilities of your biological machine. Short skit
            made with #Houdini #Blender #Nuke</p>
          <p class="release-date">Feb 1, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-bioport1.jpg" alt="Bioport"/>
      </a>
      <a href="https://codercat.tk/cyborg-beauty-routines-flat" class="pr-link">
        <div class="project" style="background-color: #634dfb">
          <h1 class="pr-title">[CYBORG BEAUTY ROUTINES]</h1>
          <p class="project-description"> Self love from the future, (if the future was now). Short skits made with
            #Houdini #Blender #Nuke</p>
          <p class="release-date">Nov 11, 2024</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cbr-flat.jpg" alt="CBR"/>
      </a>
      <a href="https://codercat.tk/cant-wait" class="pr-link">
        <div class="project" style="background-color: #ffffff">
          <h1 class="pr-title">[KANN NICHT WARTEN]</h1>
          <p class="project-description"> Environment, explosions, and crowd sims for Souly&#39;s music video, directed by Anna Van Der Velde.</p>
          <p class="release-date">Jun 5, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/cantwait.jpg" alt="CantWait"/>
      </a>
      
      <a href="https://codercat.tk/iconic" class="pr-link">
        <div class="project" style="background-color: #ffa5e8">
          <h1 class="pr-title">[ICONIC]</h1>
          <p class="project-description"> Aerial World and Eye Reflection VFX for Paris Hilton Fragrances Campaign, in
            collaboration with Chevy Tyler and Greg Swales.</p>
          <p class="release-date">Apr 3, 2025</p>
        </div>
        <img loading="lazy" src="https://codercat.tk/assets/img/projects/iconic.jpg" alt="Iconic"/>
        </a><a href="https://codercat.tk/telerana" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[TELERANA]</h1>
            <p class="project-description"> Short film directed by Nicola Rios, featuring a giant 3D spider in the
              basement.</p>
            <p class="release-date">Aug 1, 2025</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/telerana.jpg" alt="Iconic"/>
        </a>
        <a href="https://codercat.tk/cyborg-beauty-routines" class="pr-link">
          <div class="project" style="background-color: #ff0505">
            <h1 class="pr-title">[CYBORG BEAUTY ROUTINES EXPERIENCE]</h1>
            <p class="project-description"> A ThreeJS experimental video portal, crawl into the nested worlds of our
              series.</p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyborg-beauty-routines.jpg" alt="CBRE"/>
        </a>
        <a href="https://www.nowness.asia/topic/usa/thorn-fashion-olivia-de-camps" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[THORN]</h1>
            <p class="project-description"> Fashion Film for RUIbuilt, directed by Olivia de Camps. TV and thorn skin
              growth VFX by Codercat. </p>
            <p class="release-date">Nov 11, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/rui.jpg" alt="Thorn"/>
        </a>
        <a href="https://codercat.tk/vfx" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[VFX 2024]</h1>
            <p class="project-description"> Compilation of our live action visual effects work. Made with #Houdini
              #Blender #SynthEyes #Nuke</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vfx.jpg" alt="VFX2024"/>
        </a>
        <a href="https://codercat.tk/expo" class="pr-link">
          <div class="project" style="background-color: #ffffff">
            <h1 class="pr-title">[EXPO]</h1>
            <p class="project-description"> Unreal Engine music video for Kiki Yago&#39;s mind destroying track, Expo</p>
            <p class="release-date">Jan 1, 2024</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/expo.jpg" alt="Expo"/>
        </a>
        <a href="https://codercat.tk/tskaltubo" class="pr-link">
          <div class="project" style="background-color: #08f5aa">
            <h1 class="pr-title">[TSKALTUBO]</h1>
            <p class="project-description"> Series of short experimental films exploring the alternate reality of an
              abandoned Sanatorium. Made with #Houdini #DaVinci</p>
            <p class="release-date">Dec 25, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tskaltubo2.jpg" alt="Tskaltubo"/>
        </a>
        <a href="https://codercat.tk/cocoon" class="pr-link">
          <div class="project" style="background-color: #ff0901">
            <h1 class="pr-title">[COCOON]</h1>
            <p class="project-description"> Short film exploring alien birth. Made with #UE #Houdini #DaVinci</p>
            <p class="release-date">Sep 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cocoon.jpg" alt="Cocoon"/>
        </a>
        <a href="https://codercat.tk/within-touching-distance" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[WITHIN TOUCHING DISTANCE]</h1>
            <p class="project-description"> An interactive experience by ZU-UK of synchronized human touch with Virtual
              Reality.</p>
            <p class="release-date">Jun 14, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/within-touching-distance.jpg" alt="Within Touching Distance"/>
        </a>
        <a href="https://codercat.tk/maquette" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[MAQUETTE]</h1>
            <p class="project-description"> A live motion capture and spoken word performance, in collaboration with Lisa
              Jamhoury.</p>
            <p class="release-date">Jun 21, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/maquette.jpg" alt="Maquette"/>
        </a>
        <a href="https://vimeo.com/829661626" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MOTHER TAIGA]</h1>
            <p class="project-description"> The training and arrival of a synthesized human to Earth. Music Video for
              Mother Taiga by Kiki Yago.</p>
            <p class="release-date">Jun 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mother-taiga.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://codercat.tk/oneness" class="pr-link">
          <div class="project" style="background-color: rgb(8, 245, 170)">
            <h1 class="pr-title">[ONENESS]</h1>
            <p class="project-description"> 360 Immersive Installation and Performance in collaboration with Behnaz
              Farahi.</p>
            <p class="release-date">Jun 10, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/oneness2.jpg" alt="MOTHER TAIGA"/>
        </a>
        <a href="https://mindfuldesignspace.com" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MINDFUL DESIGN SPACE]</h1>
            <p class="project-description"> Site development and design, made with ThreeJS</p>
            <p class="release-date">May 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mindful-design-space.jpg" alt="MINDFUL DESIGN SPACE"/>
        </a>

        <a href="https://codercat.tk/digital-circus" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DIGITAL CIRCUS]</h1>
            <p class="project-description"> Collab with motion capture artist Leilani Franco.</p>
            <p class="release-date">Mar 1, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/digital_circus.jpg" alt="DIGITAL CIRCUS"/>
        </a>

        <a href="https://codercat.tk/kiki-yago-live" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI LIVE]</h1>
            <p class="project-description"> Music performance with the poetess Kiki Yago, and a window into her metaverse
              with live face tracked visuals in Unreal Engine 5.</p>
            <p class="release-date">Nov 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/kikiyagolive.jpg" alt="KIKI LIVE"/>
        </a>
        <a href="https://vimeo.com/793708930" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STREAM]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s STR3AM title. You wake up in her glitch
              swamp, and the rest is a blur.</p>
            <p class="release-date">Jan 28, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/stream.jpg" alt="STREAM"/>
        </a>
        <a href="https://vimeo.com/794382951" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TRANSFER AT 3RD AND C]</h1>
            <p class="project-description"> Short film sketch inspired by &#34;Under the Skin&#34;</p>
            <p class="release-date">Jan 30, 2023</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/transfer-at-3rd-and-c.jpg" alt="transfer-at-3rd-and-c"/>
        </a>
        <a href="https://www.youtube.com/watch?v=OZCMDN57V_U" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[EMERALD]</h1>
            <p class="project-description"> Music video fo Emerald by Kostadis made in Unreal Engine 5. Transporting to a
              sensual dreamscape.</p>
            <p class="release-date">Nov 7, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/emerald.jpg" alt="EMERALD"/>
        </a>
        <a href="https://codercat.tk/ya-kiki" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[YA KIKI]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s YA KIKI title. Princessa, Gadgetessa,
              whispering her sweet cyber mantras in Unreal Engine 5.</p>
            <p class="release-date">Sep 5, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ya-kiki.jpg" alt="YA KIKI"/>
        </a>
        <a href="https://www.youtube.com/watch?v=3eRPlSnXnGA" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[UTRO]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s UTRO title. A Metahuman trying to wake up
              from a dream in Unreal Engine 5.</p>
            <p class="release-date">Aug 30, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/utro.jpg" alt="UTRO"/>
        </a>
        <a href="https://opensea.io/collection/kikiyagocybercloset" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[KIKI&#39;S CYBER CLOSET]</h1>
            <p class="project-description"> An NFT Collection holding outfits worn by the musician and poetess Kiki Yago
              in her music videos.</p>
            <p class="release-date">Aug 8, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/cyber-closet.jpg" alt="KIKI&#39;S CYBER CLOSET"/>
        </a>
        <a href="https://drawallthethings.com" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[DRAW ALL THE THINGS]</h1>
            <p class="project-description"> First attempt to draw all the things. Made with Elixir and Phoenix.</p>
            <p class="release-date">Aug 23, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dat.jpg" alt="DRAW ALL THE THINGS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=lD_SNhWDLyI" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[SIROIHA]</h1>
            <p class="project-description"> Music video for Kiki Yago&#39;s SIROIHA title. Created on set with a
              Metahuman and filmed in Unreal Engine 5.</p>
            <p class="release-date">May 28, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/siroiha.jpg" alt="SIROIHA"/>
        </a>
        <a href="https://codercat.tk/neither-ever" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEITHER EVER]</h1>
            <p class="project-description"> Live projection performance made with HoudiniFX and motion captured
              choreography, in collaboration with Leilani Franco.</p>
            <p class="release-date">Feb 14, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neither-ever.jpg" alt="NEITHER EVER"/>
        </a>
        <a href="https://codercat.tk/torn" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[TORN]</h1>
            <p class="project-description"> Realtime live-looped motion capture performance made in Unity, in
              collaboration with Leilani Franco.</p>
            <p class="release-date">Mar 16, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/torn.jpg" alt="TORN"/>
        </a>
        <a href="https://codercat.tk/augmented-gallery" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AUGMENTED]</h1>
            <p class="project-description"> A gallery of digital cyborgifications made in HoudiniFX.</p>
            <p class="release-date">Mar 1, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/augmented.jpg" alt="AUGMENTED"/>
        </a>
        <a href="https://codercat.tk/lora" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[LORA]</h1>
            <p class="project-description"> Documentation of our dear friend and collaborator, Lora.</p>
            <p class="release-date">Nov 21, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/lora.jpg" alt="LORA"/>
        </a>
        <a href="https://codercat.tk/too-late-show" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TOO LATE SHOW]</h1>
            <p class="project-description"> Help me get out of my head - [largely reinterpreted] sizzle reel for a
              friend&#39;s movie.</p>
            <p class="release-date">Nov 1, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/too-late-show.jpg" alt="TOO LATE SHOW"/>
        </a>
        <a href="https://codercat.tk/dream-demon" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[DREAM DEMON]</h1>
            <p class="project-description"> When the spirit of the Dream Demon house awakens...</p>
            <p class="release-date">Aug 8, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dream-demon.jpg" alt="DREAM DEMON"/>
        </a>
        <a href="https://codercat.tk/another-space" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[ANOTHER SPACE]</h1>
            <p class="project-description"> Virtual reality gallery that highlights works of 43 artist from around the
              world.</p>
            <p class="release-date">May 9, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/another-space.jpg" alt="ANOTHER SPACE"/>
        </a>
        <a href="https://codercat.tk/dying-to-find" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[DYING TO FIND]</h1>
            <p class="project-description"> A moody WebVR piece, where you find yourself stranded in the residues and
              routines of a past civilization.</p>
            <p class="release-date">Aug 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/dying-to-find.jpg" alt="DYING TO FIND"/>
        </a>
        <a href="https://block-zero.us/" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[BLOCK ZERO]</h1>
            <p class="project-description"> Creating unique digital spaces for the NFT collectors, a collaboration with
              INVI.</p>
            <p class="release-date">Jun 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/block-zero.jpg" alt="BLOCK ZERO"/>
        </a>
        <a href="https://codercat.tk/mars-simulation-0" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MARS 0]</h1>
            <p class="project-description"> Chiba&#39;s workshop where they prototyped the cyborgs that would be put
              through the experimental simulation of Mars College.</p>
            <p class="release-date">May 2, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/mars-simulation-0.jpg" alt="MARS 0"/>
        </a>
        <a href="https://tenderclaws.com/theunderpresents" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THE UNDER PRESENTS]</h1>
            <p class="project-description"> In collaboration with Tender Claws. An immersive live theater experience in
              Virtual Reality.</p>
            <p class="release-date">Nov 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/the-under-presents.jpg" alt="THE UNDER PRESENTS"/>
        </a>
        <a href="https://www.youtube.com/watch?v=DpGPDhTqQW8" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[PURPOSE PRO 2]</h1>
            <p class="project-description"> In collaboration with Justin Beiber. ThreeJS development for a browser
              skating game -- skate with Justin!</p>
            <p class="release-date">Jan 3, 2021</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/purpose-pro-2.jpg" alt="PURPOSE PRO 2"/>
        </a>
        <a href="https://codercat.tk/monster-or-friend" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[MONSTER OR FRIEND]</h1>
            <p class="project-description"> Exploration of Inverse Kinematic animation for procedural creature design in
              WebVR. Is it a monster or a friend?</p>
            <p class="release-date">Mar 25, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-or-friend.jpg" alt="MONSTER OR FRIEND"/>
        </a>
        <a href="https://codercat.tk/melt" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[MELT]</h1>
            <p class="project-description"> This is how I feel today. Simulating a melting effect by using compute
              shaders on position and velocity buffers.</p>
            <p class="release-date">May 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/melt.jpg" alt="MELT"/>
        </a>
        
        <a href="https://codercat.tk/ma" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[MA]</h1>
            <p class="project-description"> In collaboration with Rachel Bungey. Exploring the japanese concept of MA
              “the interval which gives shape to the whole”.</p>
            <p class="release-date">May 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ma.jpg" alt="MA"/>
        </a>
        <a href="https://codercat.tk/wifi-soundscapes" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[WIFI SOUNDSCAPES]</h1>
            <p class="project-description"> Revealing the intangible dimension of WiFi packets with tcpdump and Foxdot.
              Data was captured on a road trip from LA to Denver.</p>
            <p class="release-date">Jan 12, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/wifi-soundscapes.jpg" alt="WIFI SOUNDSCAPES"/>
        </a>
        <a href="https://codercat.tk/readme" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[READ ME]</h1>
            <p class="project-description"> An experiment of focus, featuring the anti use of eye tracking in the
              browser. Made with webgazer.js and three.js.</p>
            <p class="release-date">Jul 29, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/readme.jpg" alt="READ ME"/>
        </a>
        <a href="https://sidequestvr.com/#/app/226" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[ALCHEMY PAINTER]</h1>
            <p class="project-description"> VR color alchemy experience. Mix dynamic fluids in an intuitive and novel way
              using a virtual syringe.</p>
            <p class="release-date">Aug 31, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/alchemy-painter.jpg" alt="ALCHEMY PAINTER"/>
        </a>
        <a href="https://codercat.tk/monster-within.html" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[MONSTER WITHIN]</h1>
            <p class="project-description"> A short interactive Virtual Reality experience about the unpredictable nature
              of social acceptance.</p>
            <p class="release-date">Sep 22, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/monster-within.jpg" alt="MONSTER WITHIN"/>
        </a>
        <a href="https://codercat.tk/three-body" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[THREE BODY]</h1>
            <p class="project-description"> A WebVR story experience based on the Sci-Fi novel Three Body Problem by
              Cixin Liu.</p>
            <p class="release-date">Jun 12, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/three-body.jpg" alt="THREE BODY"/>
        </a>
        <a href="https://codercat.tk/ai-animation" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AI ANIMATION]</h1>
            <p class="project-description"> A port of the AI4Animation project to JavaScript. Explores the idea of
              machine leaning for character animation on the web.</p>
            <p class="release-date">May 13, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ai-animation.jpg" alt="AI ANIMATION"/>
        </a>
        <a href="https://codercat.tk/gender-graph" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[GENDERGRAPH]</h1>
            <p class="project-description"> Quantifying word gender biases by using machine learning models trained on
              different media sources.</p>
            <p class="release-date">Jun 12, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/gendergraph.jpg" alt="GENDERGRAPH"/>
        </a>
        <a href="https://codercat.tk/starling-simulation" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[STARLING SIMULATION]</h1>
            <p class="project-description"> In collaboration with Small Data Industry. A bird floacking simulation made
              with three.js.</p>
            <p class="release-date">Oct 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/starling.jpg" alt="STARLING SIMULATION"/>
        </a>
        <a href="https://codercat.tk/procedural-ik-crawler" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[PROCEDURAL IK CRAWLER]</h1>
            <p class="project-description"> Evolution of our pet rat :) Exploration of Inverse Kinematic procedural
              character animation in the browser.</p>
            <p class="release-date">Apr 30, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/procedural-ik.jpg" alt="PROCEDURAL IK CRAWLER"/>
        </a>
        <a href="https://github.com/Kif11/anticap" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[ANTICAP]</h1>
            <p class="project-description"> Bypass any captive portal and get free WiFi easily 😝 Go tool to automate
              capturing packets in monitor mode and MAC spoofing.</p>
            <p class="release-date">Mar 19, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/anticap.jpg" alt="ANTICAP"/>
        </a>
        <a href="https://codercat.tk/street-sounds" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[STREET SOUNDS]</h1>
            <p class="project-description"> Encode an audio message into QR codes that can be posted on a wall as a time
              capsule.</p>
            <p class="release-date">Apr 4, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/street-sonds.jpg" alt="STREET SOUNDS"/>
        </a>
        <a href="https://codercat.tk/relaxation-room" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[RELAXATION ROOM]</h1>
            <p class="project-description"> Cellular automata pool in a vaporwave room, be careful it bites. Made with
              three.js.</p>
            <p class="release-date">Mar 3, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/relaxation-room.jpg" alt="RELAXATION ROOM"/>
        </a>
        <a href="https://codercat.tk/galactic-gypsy" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[GALACTIC GYPSY]</h1>
            <p class="project-description"> Our entry for the 2019 Global Game Jam in Hong Kong. A game about finding
              your home in an unknown planet.</p>
            <p class="release-date">Jan 27, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/galactic-gypsy.jpg" alt="GALACTIC GYPSY"/>
        </a>
        <a href="https://codercat.tk/grow-your-own-bot" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[GROW YOUR OWN BOT]</h1>
            <p class="project-description"> Training pet robots to reach their goals using the OpenAI reinforcement
              learning framework in the browser.</p>
            <p class="release-date">Dec 18, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/creatures.jpg" alt="GROW YOUR OWN BOT"/>
        </a>
        <a href="https://codercat.tk/neurojam" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[NEUROJAM]</h1>
            <p class="project-description"> A bot for FoxDot that takes user drum patterns and turns them into a
              masterpiece using a machine learning model from the Magenta project.</p>
            <p class="release-date">Mar 9, 2020</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/neurojam.jpg" alt="NEUROJAM"/>
        </a>
        <a href="https://codercat.tk/ar-gpu-particles" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[AR GPU PARTICLES]</h1>
            <p class="project-description"> A demo of compute shader particles emitting from your device in augmented
              reality.</p>
            <p class="release-date">Aug 19, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/ar-gpu-particles.jpg" alt="AR GPU PARTICLES"/>
        </a>
        <a href="https://codercat.tk/auracaria-dreams" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[AURACARIA DREAMS]</h1>
            <p class="project-description"> An procedurally generated art piece in three.js, inspired by the auracaria
              plant in Bogota, Colombia.</p>
            <p class="release-date">Jun 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/auracaria-dreams.jpg" alt="AURACARIA DREAMS"/>
        </a>
        <a href="https://codercat.tk/threejs-curvature" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[THREEJS CURVATURE]</h1>
            <p class="project-description"> A contribution to three.js library showing how to calculate mesh curvatures
              from raw geometry data, and use in shaders.</p>
            <p class="release-date">Jan 1, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/curvatureExample.jpg" alt="THREEJS CURVATURE"/>
        </a>
        <a href="https://codercat.tk/tsp-3D-art" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[3D TSP HEART]</h1>
            <p class="project-description"> An experiment of extending the TSP algorithm to work in 3D over points on the
              surface of a geometry. Made with three.js.</p>
            <p class="release-date">Jan 27, 2018</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/tsp-3d-art.jpg " alt="3D TSP HEART"/>
        </a>
        <a href="https://codercat.tk/360-photo-to-video" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[360 PHOTO TO VIDEO]</h1>
            <p class="project-description"> Tool to convert 360 photos into video formats for easy sharing on media
              platforms. Made with three.js and CCapture.js</p>
            <p class="release-date">Dec 19, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/360photo-to-video.jpg" alt="360 PHOTO TO VIDEO"/>
        </a>
        <a href="https://codercat.tk/vertex-cache" class="pr-link">
          <div class="project" style="background-color: #fe086d">
            <h1 class="pr-title">[VERTEX CACHE]</h1>
            <p class="project-description"> A demo of bringing Houdini FEM simulations to the browser by storing vertex
              data in textures.</p>
            <p class="release-date">May 4, 2019</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/vertex-cache.jpg" alt="VERTEX CACHE"/>
        </a>
        <a href="https://codercat.tk/whirlpools" class="pr-link">
          <div class="project" style="background-color: #11ff05">
            <h1 class="pr-title">[WHIRPOOLS]</h1>
            <p class="project-description"> Snays first three.js shader showing a simple geometry ripple effect.</p>
            <p class="release-date">Sep 10, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/whirpools.jpg " alt="WHIRPOOLS"/>
        </a>
        <a href="https://youtu.be/9fl4uK9xrxI" class="pr-link">
          <div class="project" style="background-color: #ff00ff">
            <h1 class="pr-title">[BORN ALONE]</h1>
            <p class="project-description"> The ultimate cycle. Our entry to the Rokoko Perfect Loop contest, in
              collaboration with Leilani Franco and a Metahuman. Filmed in Unreal Engine 5.</p>
            <p class="release-date">Jul 4, 2022</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/bornalonediesalone.jpg" alt="BORN ALONE"/>
        </a>
        <a href="https://codercat.tk/photospheres" class="pr-link">
          <div class="project" style="background-color: #634dfb">
            <h1 class="pr-title">[PHOTOSPHERES]</h1>
            <p class="project-description"> 360 photo gallery of places around San Francisco made with Ricoh camera and
              three.js</p>
            <p class="release-date">Oct 23, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/photospheres.jpg " alt="PHOTOSPHERES"/>
        </a>
        <a href="https://codercat.tk/terminal-prints" class="pr-link">
          <div class="project" style="background-color: #fffc0d">
            <h1 class="pr-title">[TERMINAL PRINTS]</h1>
            <p class="project-description"> Browse feminist t-shirt prints from a terminal. $: rm -rf patriarchy.</p>
            <p class="release-date">Aug 16, 2017</p>
          </div>
          <img loading="lazy" src="https://codercat.tk/assets/img/projects/terminal-prints.jpg" alt="TERMINAL PRINTS"/>
        </a>
    </div>

    <!-- Footer START -->
<footer>
  <div class="social-block">
    <span class="social-item">snay</span>
    <a class="fa fa-github social-item" href="https://github.com/sneha-belkhale" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://www.instagram.com/snayss/" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/snayyss" target="_blank"></a>
  </div>
  <div class="social-block">
    <span class="social-item">kif</span>
    <a class="fa fa-github social-item" href="https://github.com/kif11" target="_blank"></a>
    <a class="fa fa-instagram social-item" href="https://instagram.com/kif11" target="_blank"></a>
    <a class="fa fa-twitter social-item" href="https://twitter.com/kovalewskiy" target="_blank"></a>
  </div>
</footer>
<!-- Footer END -->

  </div>


</body>]]>
	      
	    </description>
            <pubDate>Sat, 31 Aug 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[THREE BODY]</title>
            <link>https://codercat.tk/three-body</link>
            <description>
	      
	          <![CDATA[<body>
  <script src="https://codercat.tk/three-body/js/tinyexr.js"></script>
<script type="text/javascript" src="https://codercat.tk/three-body/bundle.js"></script>

</body>]]>
	      
	    </description>
            <pubDate>Wed, 12 Jun 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[AI ANIMATION]</title>
            <link>https://codercat.tk/ai-animation</link>
            <description>
	      
	          <![CDATA[<body><noscript>You need to enable JavaScript to run this app.</noscript><div class="controls-block"><div class="row"><div class="button" id="a">←</div><div class="button" id="w">↑</div><div class="button" id="d">→</div></div></div><div class="description-block"><div class="description-text">This project is a port of <a href="https://github.com/sebastianstarke/AI4Animation" target="_blank">AI4Animation</a> for three.js -- using machine learning to generate realtime character animations, simply by providing a trajectory path for the character.<br/><br/>This technique is very powerful as it allows for an unlimited number of realistic transitions between animation states.<br/><br/>Code for example posted <a href="https://github.com/sneha-belkhale/AI4Animation-js" target="_blank">here</a>.<br/><br/>Use <b>A W D </b>keys to move.</div></div><div id="root"></div><script src="https://codercat.tk/ai-animation/inflate.min.js"></script><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={0:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="./";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="https://codercat.tk/ai-animation/./static/js/2.42755363.chunk.js"></script><script src="https://codercat.tk/ai-animation/./static/js/main.c27babe5.chunk.js"></script></body>]]>
	      
	    </description>
            <pubDate>Mon, 13 May 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[VERTEX CACHE]</title>
            <link>https://codercat.tk/vertex-cache</link>
            <description>
	      
	          <![CDATA[<body>
    <div id="description">
      This is demonstration of Houdini finite element analysis (FEM) simulation played in Three JS.
      This made possible with <a href="https://vimeo.com/207832662" target="_blank">Houdini Vertex Cache</a> and <a href="https://github.com/syoyo/tinyexr/" target="_blank">tinyexr</a> projects.
    </div>
  
  <script src="https://codercat.tk/vertex-cache/js/texture-cache-shader.js"></script>
  <script src="https://codercat.tk/vertex-cache/js/index.js"></script>

</body>]]>
	      
	    </description>
            <pubDate>Sat, 04 May 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[PROCEDURAL IK CRAWLER]</title>
            <link>https://codercat.tk/procedural-ik-crawler</link>
            <description>
	      
	          <![CDATA[<body><script src="https://codercat.tk/procedural-ik-crawler/bundle.js"></script><script src="https://codercat.tk/procedural-ik-crawler/2.bundle.js"></script><script src="https://codercat.tk/procedural-ik-crawler/0.bundle.js"></script></body>]]>
	      
	    </description>
            <pubDate>Tue, 30 Apr 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[Monster or Friend] Making of WebVR experience.</title>
            <link>https://codercat.tk/making-of-monster-or-friend</link>
            <description>
	      
	          <![CDATA[<body>
    <h1>[Monster or Friend] Making of WebVR experience.</h1>

    <section>
      <p>
        For those who are curious, Kif and I thought we would share some behind the scenes of our first WebVR demo,
        <a href="https://codercat.tk/monster-or-friend">Monster or Friend</a>.
      </p>

      <p>
        This project was created using A-Frame and three.js in about one week. To be honest, I am generally not a
        framework person and try to stay as low level as possible while still humane (no openGL lol) - but using A-Frame
        was probably the right choice for this project.
      </p>

      <p>
        A-Frame gives you a working controller in just one line, including the controller model, positioning, and
        highlighting user interactions on the model itself. Also, I was able to open this demo on Chrome, Oculus Go, and
        my Pixel 2 phone and the views / controls just worked, and this was really cool and something that I wouldn’t
        want to program from scratch. I also appreciate that A-Frame is an Entity Component System, which may take some
        getting familiar to if you are used to coding three.js examples in one html file.. but I think it is worth it
        for organizational purposes.
      </p>
    </section>

    <section>
      <h2>THE CREATURE</h2>

      <figure>
        <img src="https://codercat.tk/making-of-monster-or-friend/mof_purple_theme.webp" alt="Game screenshot with purple theme"/>
        <figcaption>Game screenshot with purple theme</figcaption>
      </figure>

      <p>
        The creature was the starting point of this demo. I have been interested in procedural animation in the last few
        months, and contributed a little to this repo that implemented inverse kinematics for three.js. I wanted to play
        around more with this library, so I thought I’d make a 25-legged sea / space creature : )
      </p>

      <p>
        <a href="https://en.wikipedia.org/wiki/Inverse_kinematics">Inverse kinematics</a> is really awesome, it adds a
        complexity that would be very hard to manually animate. Every limb of this creature is one bone chain, with a
        target point ( the head ). Inverse kinematics reverses the forward kinematic equation to determine the bone
        positions and rotations such that the last bone reaches the target point at every step.
      </p>

      <figure>
        <img src="https://codercat.tk/making-of-monster-or-friend/ik_chain.webp" alt="Inverse kinematics example from three.ik"/>
        <figcaption>Inverse kinematics example from three.ik</figcaption>
      </figure>

      <p>
        After playing around with randomized target point movement, a tweening library called
        <a href="https://github.com/tweenjs/tween.js/">tween.js</a>, and the forever handy sin function, I found a
        pretty organic effect that brought the creature to life.
      </p>

      <p>
        Making a shader for the creature was the next step, I blended some colors along the UVs, changed the colors over
        time, and used an opacity map to add complexity.
      </p>

      <p>My creature was ready for the world.</p>
    </section>

    <section>
      <h2>THE COLORS</h2>
      <p>
        Colors are really hard, and also really important for the purely visual demo that we were building. At this
        point, we had a nice environment with a spacey sky sphere, little dust particles, and the creature. We decided
        to consolidate these elements with color themes of 7 colors: 2 colors for the sky, 1 color for the particles,
        and 4 colors for the creature (it transitions between two states).
      </p>
      <p>
        We organized these colors into one color component that would be added to all elements of our scene, and then
        got carried away for a few hours playing around with the endless color possibilities. We used this
        <a href="https://colorhunt.co/">color palette generator</a> for initial inspiration, sampled some colors from
        images we like, and tried the colors from our website logo :)
      </p>
    </section>

    <section>
      <h2>THE CONTROLLER</h2>

      <p>
        I mentioned before that the A-Frame controller was awesome because a lot of the functionality was built in… but
        not all of it. Since movement based on controller input is not easily defined in VR, the A-Frame devs decided
        not to include it as part of the library. However, it was not too difficult to define our own movement schema,
        where the user can move forwards and backwards with the trackpad, and change color theme on trigger.
      </p>

      <figure>
        <img src="https://codercat.tk/making-of-monster-or-friend/mof_controller.webp" alt="Screenshot of game controller tutorial"/>
        <figcaption>Controller helper in VR</figcaption>
      </figure>

      <p>
        Another thing we thought it was important to add was a tutorial for the controller, to show the users how to
        move around the scene. We made this 3D Text in HoudiniFX, and added a subtle fresnel shader to the controller.
        This tutorial hovers in front of the camera until the users first interaction.
      </p>
    </section>

    <section>
      <h2>THE MUSIC</h2>

      <p>
        We felt like the creature might need some entertainment in its new home, so we decided to add in some music to
        its world. I was dreaming of something ambient and deep, and decided to create it in
        <a href="https://foxdot.org/">FoxDot</a>, an awesome framework to make music using Python. I used simplex noise
        to drive the ambient sounds, and recorded it with SoundFlower and Quicktime. Bellow is a little clip from the
        process.
      </p>

      <figure>
        <video src="https://codercat.tk/making-of-monster-or-friend/mof_making_of_soundtrack.mp4" controls="">
        <figcaption>Making a simplex noise ambient tune with FoxDot</figcaption>
      </video></figure>
    </section>

    <section>
      <h2>ADDITIONAL RESOURCES</h2>
      <p><a href="https://codercat.tk/monster-or-friend">The experience</a></p>
      <p><a href="https://github.com/Kif11/monster-or-friend">Source code</a></p>
      <p><a href="https://codercat.tk">Other projects</a></p>
    </section>
  

</body>]]>
	      
	    </description>
            <pubDate>Sun, 21 Apr 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[ANTICAP]</title>
            <link>https://github.com/Kif11/anticap</link>
            <description>
	      
	          Bypass any captive portal and get free WiFi easily 😝 Go tool to automate capturing packets in monitor mode and MAC spoofing.
	      
	    </description>
            <pubDate>Tue, 19 Mar 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[RELAXATION ROOM]</title>
            <link>https://codercat.tk/relaxation-room</link>
            <description>
	      
	          <![CDATA[<body><button id="playButton"><audio id="relaxAudio" loop="" src="https://codercat.tk/relaxation-room/relaxationRoom.mp3"></audio></button><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><div id="description">cellular automata pool in a vaporwave room . be careful it bites . made with <a href="https://threejs.org" target="_blank">three.js</a></div><script type="text/javascript" src="https://codercat.tk/relaxation-room/./static/js/main.2f125b66.js"></script></body>]]>
	      
	    </description>
            <pubDate>Sun, 03 Mar 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[GALACTIC GYPSY]</title>
            <link>https://codercat.tk/galactic-gypsy</link>
            <description>
	      
	          <![CDATA[<body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><div id="homeScreen"><div id="loadContainer"><img id="loadImg" src="https://codercat.tk/galactic-gypsy/load.gif" alt="Smiley face"/> <span id="loadingText">Landing on the planet...</span></div></div><div id="winState">0 / 7 ♦️</div><div id="modalDialogue" class="modal"><div class="modal-content"><div class="close">×</div><p id="modalText"></p></div></div><script type="text/javascript" src="https://codercat.tk/galactic-gypsy/./static/js/main.11efa12d.js"></script></body>]]>
	      
	    </description>
            <pubDate>Sun, 27 Jan 2019 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[GROW YOUR OWN BOT]</title>
            <link>https://codercat.tk/grow-your-own-bot</link>
            <description>
	      
	          <![CDATA[<body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><div id="statsBox"><p id="generation"></p><p id="avgFitness"></p><p id="fitness"></p><p id="time"></p></div><div id="description">You are watching UNITS&lt;2LB&gt;:437:537 during their terrestrial navigation training routines. Training takes place in a simulated <a href="https://threejs.org" target="_blank">three.js</a> environment powered by <a href="https://cannonjs.org" target="_blank">cannon.js</a> physics engine, following <a href="https://openai.com" target="_blank">openai</a> reinforcement learning code 9138.</div><script type="text/javascript" src="https://codercat.tk/grow-your-own-bot/./static/js/main.324c3c17.js"></script></body>]]>
	      
	    </description>
            <pubDate>Tue, 18 Dec 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[AR GPU PARTICLES]</title>
            <link>https://codercat.tk/ar-gpu-particles</link>
            <description>
	      
	          <![CDATA[<body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script type="text/javascript" src="https://codercat.tk/ar-gpu-particles/./static/js/main.acd23d3a.js"></script></body>]]>
	      
	    </description>
            <pubDate>Sun, 19 Aug 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[AURACARIA DREAMS]</title>
            <link>https://codercat.tk/auracaria-dreams</link>
            <description>
	      
	          <![CDATA[<body>
    <script id="spikeVertexShader" type="x-shader/x-vertex">

      varying vec3 vPos;
      varying vec3 vInitPos;
      varying vec3 vNewPos;

      varying vec3 vNormal;
      varying vec2 vUv;
      varying vec3 vColor;
      varying float vColorIndic;

      uniform float timeDelta;
      uniform float growing;
      // attribute vec3 color;
      // attribute float colorIndic;
      mat3 rotationMatrix(vec3 axis, float angle)
      {
          axis = normalize(axis);
          float s = sin(angle);
          float c = cos(angle);
          float oc = 1.0 - c;

          return mat3(oc * axis.x * axis.x + c,           oc * axis.x * axis.y - axis.z * s,  oc * axis.z * axis.x + axis.y * s,
                      oc * axis.x * axis.y + axis.z * s,  oc * axis.y * axis.y + c,           oc * axis.y * axis.z - axis.x * s,
                      oc * axis.z * axis.x - axis.y * s,  oc * axis.y * axis.z + axis.x * s,  oc * axis.z * axis.z + c);

      }

      void main() {
        vUv = uv;
        vec3 p = position;
        vec3 center = vec3(0.0, 0.0, 0.0);
        float distance = length(center - p);
        vInitPos = p;

        float angle = sin(timeDelta/200.0) - 0.8;
        if ( angle < 0.2 ){
          angle = angle/2.0;
        }
        if ( growing > 0.0 ){
          mat3 openingMat = rotationMatrix( vec3(-1.0, 0.0, 0.0),  growing*angle);
          p = openingMat * p;
        } else {
          p += sin(distance + timeDelta/1000.0)*0.1 * vec3(0.0, -1.0, 1.0);
        }


        vNewPos = (modelMatrix * vec4(p, 1.0)).xyz;

        vec4 modelViewPosition = modelViewMatrix * vec4(p, 1.0);
        vPos = modelViewPosition.xyz;
        vNormal = normalMatrix * normal;
        // vColor = color;
        gl_Position = projectionMatrix * modelViewPosition;
      }

    </script>

    <script id="spikeFragmentShader" type="x-shader/x-fragment">

      uniform vec3 diffuse;
      uniform vec3 specular;
      uniform float randomness;
      uniform vec3 accentColor1;
      uniform vec3 accentColor2;

      varying vec3 vPos;
      varying vec3 vInitPos;
      varying vec3 vNewPos;
      varying vec3 vNormal;
      // varying vec3 vColor;
      // varying float vColorIndic;


      struct PointLight {
        vec3 position;
        vec3 color;
      };

      uniform PointLight pointLights [NUM_POINT_LIGHTS ];

      float rand(vec2 c){
      	return fract(sin(dot(c.xy ,vec2(12.9898,78.233))) * 43758.5453);
      }

      float noise2(vec2 p, float freq ){
      	float unit = 700.0/freq;
      	vec2 ij = floor(p/unit);
      	vec2 xy = mod(p,unit)/unit;
      	//xy = 3.*xy*xy-2.*xy*xy*xy;
      	xy = .5*(1.-cos(3.141589*xy));
      	float a = rand((ij+vec2(0.,0.)));
      	float b = rand((ij+vec2(1.,0.)));
      	float c = rand((ij+vec2(0.,1.)));
      	float d = rand((ij+vec2(1.,1.)));
      	float x1 = mix(a, b, xy.x);
      	float x2 = mix(c, d, xy.x);
      	return mix(x1, x2, xy.y);
      }

      float rand(float n){return fract(sin(n) * 43758.5453123);}

      float noise(float p){
      	float fl = floor(p);
        float fc = fract(p);
      	return mix(rand(fl), rand(fl + 1.0), fc);
      }

      vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}
      vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}
      vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}

      float cnoise(vec3 P){
        vec3 Pi0 = floor(P); // Integer part for indexing
        vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1
        Pi0 = mod(Pi0, 289.0);
        Pi1 = mod(Pi1, 289.0);
        vec3 Pf0 = fract(P); // Fractional part for interpolation
        vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
        vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
        vec4 iy = vec4(Pi0.yy, Pi1.yy);
        vec4 iz0 = Pi0.zzzz;
        vec4 iz1 = Pi1.zzzz;

        vec4 ixy = permute(permute(ix) + iy);
        vec4 ixy0 = permute(ixy + iz0);
        vec4 ixy1 = permute(ixy + iz1);

        vec4 gx0 = ixy0 / 7.0;
        vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5;
        gx0 = fract(gx0);
        vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
        vec4 sz0 = step(gz0, vec4(0.0));
        gx0 -= sz0 * (step(0.0, gx0) - 0.5);
        gy0 -= sz0 * (step(0.0, gy0) - 0.5);

        vec4 gx1 = ixy1 / 7.0;
        vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5;
        gx1 = fract(gx1);
        vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
        vec4 sz1 = step(gz1, vec4(0.0));
        gx1 -= sz1 * (step(0.0, gx1) - 0.5);
        gy1 -= sz1 * (step(0.0, gy1) - 0.5);

        vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
        vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
        vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
        vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
        vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
        vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
        vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
        vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);

        vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
        g000 *= norm0.x;
        g010 *= norm0.y;
        g100 *= norm0.z;
        g110 *= norm0.w;
        vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
        g001 *= norm1.x;
        g011 *= norm1.y;
        g101 *= norm1.z;
        g111 *= norm1.w;

        float n000 = dot(g000, Pf0);
        float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
        float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
        float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
        float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
        float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
        float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
        float n111 = dot(g111, Pf1);

        vec3 fade_xyz = fade(Pf0);
        vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
        vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
        float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
        return 2.2 * n_xyz;
      }

      void main() {
        vec4 addedLights = vec4(0.0, 0.0, 0.0, 1.0);

        vec3 N = normalize (vNormal); //NORMAL

        vec3 V = -vPos; //VIEW VECTOR

        float x = 2.0 * noise2 ( vInitPos.xy + randomness, 30000.0);
        float y = cnoise (randomness + 100.0 * vInitPos);


  			vec4 noiseColor = y * vec4( 0.4,0.4,0.4 , 0.1);

        for(int l = 0; l < NUM_POINT_LIGHTS; l++) {
          vec3 L = normalize(vPos - pointLights[l].position);

          vec3 R = reflect(-L, N); //REFLECTION FROM LIGHT
          float dist = distance(vPos, pointLights[l].position);
          float attenuation = 1.0 / (1.0 + 0.00001*dist);
          float spec = 2.0*max(0.0, pow(dot(R, normalize(V)), 80.0));
          addedLights.rgb += attenuation*clamp(dot(-L, N), 0.0, 1.0) * pointLights[l].color;
          addedLights.rgb += ((1.0-y) * spec * specular);
        }


        float q = 0.0;
        if (vInitPos.x > 0.1){
          q = 1.0;
        }
        float w = 0.0;
        if (vInitPos.x < -0.1){
          w = 1.0;
        }

        gl_FragColor = 0.4 * addedLights + 0.2 * noiseColor + q * ( vec4( randomness+accentColor1.r, accentColor1.gb, 0.1 ) - x * vec4( 0.3, 0.3, 0.3, 0.3) ) ;

      }

    </script>

    <script>

      function returnRGB(hex){
          var hex = Math.floor( hex );
          var r = ( hex >> 16 & 255 ) / 255;
          var g = ( hex >> 8 & 255 ) / 255;
          var b = ( hex & 255 ) / 255;

          return [r,g,b];
      }
      function SpikeStateMachine ()  {
        this.state = -1;
        this.step = 8;
        this.currentSpikeIndecis= [];
        for(var i = 0; i< spikeList.length; i++){
          this.currentSpikeIndecis.push(0);
        }
        this.turnOnSpikeGrowth = function () {
          for ( var i = 0; i < spikeList.length; i++ ){
            for ( var j = 0; j < this.currentSpikeIndecis[i]; j++ ){
              spikeList[ i ][ j ].material.uniforms.growing.value = 1;
            }
          }
        }
        this.update = function( timeDelta, sec )  {

          switch( this.state ) {
            case 0:
              //growing outwards
              if (  sec < 15 ){ this.step = 2;}
              else {this.step = 0; }
              for ( var i = 0; i < spikeList.length; i++ ){
                if ( timeDelta/1500  > i ) {
                if(this.currentSpikeIndecis[i] + this.step < spikeList[i].length){
                  for (var j = 0 ; j < this.step; j++){
                    scene.add(spikeList[i][this.currentSpikeIndecis[i]+j])
                  }
                  this.currentSpikeIndecis[i] += this.step;
                } else {
                  this.currentSpikeIndecis[i] = spikeList[i].length
                }

                //turn off the beginning ones...
                for (var j = 0 ; j < Math.max(0, this.currentSpikeIndecis[i] - 50); j++){
                  spikeList[i][j].material.uniforms.growing.value = Math.max(spikeList[i][j].material.uniforms.growing.value - 0.1, 0);
                }
                curveTubeList[i].geometry.setDrawRange(0, this.currentSpikeIndecis[i]/tubeSpikeScale[i]);
              }
              }
              done = true;
              for ( var i = 0; i < spikeList.length; i++ ){
                if(this.currentSpikeIndecis[i] < spikeList[i].length) {
                  done = false;
                }
              }
              if (done){
                this.state = -1;
              }

            break;
            case 1:
              //growing inwards
              if (  sec < 7 ){ this.step = 8;}
              else {this.step = 8;}
              for ( var i = 0; i < spikeList.length; i++ ){
                if(this.currentSpikeIndecis[i] - this.step > -1){
                  for (var j = 0 ; j < this.step; j++){
                    scene.remove(spikeList[i][this.currentSpikeIndecis[i]-j])
                  }
                  this.currentSpikeIndecis[i] -= this.step;
                } else if (this.currentSpikeIndecis[i] != -1 ){
                  while( this.currentSpikeIndecis[i] > -1) {
                    scene.remove(spikeList[i][this.currentSpikeIndecis[i]])
                    this.currentSpikeIndecis[i]--;
                  }
                } else {
                  this.currentSpikeIndecis[i] = -1
                }
                curveTubeList[i].geometry.setDrawRange(0, this.currentSpikeIndecis[i]/tubeSpikeScale[i])
              }
              done = true;
              for ( var i = 0; i < spikeList.length; i++ ){
                if(this.currentSpikeIndecis[i] > -1) {
                  done = false;
                } else {
                  //turn them all off
                  for ( var j = 0; j < this.currentSpikeIndecis[i]; j++ ){
                    spikeList[ i ][ j ].material.uniforms.growing.value = 0;
                  }
                }
              }
              if (done){
                maryStateMachine.state = 1;
                this.state = -1;
              }

            break;

          }

          for ( var i = 0; i < spikeList.length; i++ ){
            for ( var j = 0; j < this.currentSpikeIndecis[i]; j++ ){
              spikeList[ i ][ j ].material.uniforms.timeDelta.value = timeDelta;
            }
          }
        }
      }

      function MaryStateMachine ()  {
        this.state = -1;

        this.update = function()  {

          switch(this.state){
            case 0:
              //mary open eyes
              if( mary.morphTargetInfluences[0] < 0.9){
                mary.morphTargetInfluences[0] += 0.05;
              } else {
                this.state = -1;
                spikeStateMachine.state = 0;
                spikeStateMachine.turnOnSpikeGrowth();
              }

            break;
            case 1:
              if( mary.morphTargetInfluences[0] > 0){
                mary.morphTargetInfluences[0] -= 0.05;
              } else {
                this.state = -1;
              }
            break;

          }
        }
      }

      var scene, camera, controls, renderer;
      var spike, spikeList, spikeStateMachine;
      var ready, timeDelta, startTime;
      var mary, maryDone, maryStateMachine;
      var raycaster, mouse;
      var wasOnMary = false;
      var notOnMary = true;
      function onMouseMove( event ) {
      	// calculate mouse position in normalized device coordinates
      	// (-1 to +1) for both components
      	mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
      	mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
        raycaster.setFromCamera( mouse, camera );
        var onMary = false;
        var intersects = raycaster.intersectObjects( scene.children );
        for ( var i = 0; i < intersects.length; i++ ) {
          if (intersects[i].object.name == "mary") {

            if (notOnMary){
              wasOnMary = true;
              maryStateMachine.state = 0;
              startTime = Date.now();

              notOnMary = false;
            }
            onMary = true;
          }
      	}
        if (!onMary && wasOnMary ){
          spikeStateMachine.state = 1;
          spikeStateMachine.turnOnSpikeGrowth();
          wasOnMary = false;
          notOnMary = true;
        }
      }
      var init = function () {
        ready = false;
        //initialize scene
        scene = new THREE.Scene();
        //initialize camera
        camera = new THREE.PerspectiveCamera( 35, window.innerWidth/window.innerHeight, 0.1, 1000 );
        camera.position.z = 35;

        raycaster = new THREE.Raycaster();
        mouse = new THREE.Vector2();
        //set up orbit controls on the camera
        controls = new THREE.OrbitControls( camera );
        //initialize renderer
        renderer = new THREE.WebGLRenderer({ antialias: true});
        renderer.setPixelRatio( window.devicePixelRatio );

        renderer.setSize( window.innerWidth, window.innerHeight );

        window.addEventListener( 'resize', onWindowResize, false );
        window.addEventListener( 'mousemove', onMouseMove, false );

        //add renderer to the html page
        document.body.appendChild( renderer.domElement );

        var hemLight = new THREE.HemisphereLight( 0xd2bcb6, 0xd2bcb6, 0.3 );
        // scene.add( hemLight );

        var pointLight = new THREE.PointLight( 0xffffff, 0.8);
        // scene.add( pointLight );
        // pointLight.position.set( -200, 200, -10 );

        var pointLight2 = new THREE.PointLight( 0xffffff, 0.8);
        pointLight2.position.set( 500, 500, 0 );
        scene.add( pointLight2 );

        var uniform = {
          diffuse: { type: 'c', value: new THREE.Color( 0xd6aa9b ) },
          emissive: { type: 'c', value: new THREE.Color( 0x333333 ) },
          specular: { type: 'c', value: new THREE.Color( 0xFFFFFF ) },
          shininess: { value: 5},
          texture: { type: "t", value: 0 },
          timeDelta: { type: "t", value: 0 },
          randomness: {type: 'f', value: 98},
          accentColor1: {type: 'c', value: new THREE.Color( 0xffd349 ) },
          accentColor2: {type: 'c', value: new THREE.Color( 0x0500a9 ) },
          accentColor2: {type: 'c', value: new THREE.Color( 0x0500a9 ) },
          growing: {type: 'f', value: 1}
        }

        var phongShader = THREE.ShaderLib.phong;
        var phongUniform = THREE.UniformsUtils.clone(phongShader.uniforms); //copy over the remaining values

        total_uniforms = THREE.UniformsUtils.merge([phongUniform, uniform])

        var spikeMaterial = new THREE.ShaderMaterial({
          uniforms: total_uniforms,
          vertexShader: document.getElementById( 'spikeVertexShader' ).textContent,
          fragmentShader: document.getElementById( 'spikeFragmentShader' ).textContent,
          lights: true,
          derivatives: true //so that we can calculate the actual normal at each vertex in the fragment shader
        });

        //rotate the curve points around the curve axis
        var radians = 0.0;
        spikeList = []
        var loader = new THREE.FBXLoader();
        loader.load( 'assets/mary.fbx', function ( object ) {
          var z = 0;
          object.traverse( function ( child ) {
            if ( child instanceof THREE.Mesh ) {
              if ( z > 0 ) {
                var vertices = child.geometry.attributes.position.array;
                mary.geometry.morphAttributes.position = [];
                mary.geometry.morphAttributes.position[0] = new THREE.BufferAttribute(vertices,3);
                mary.geometry.morphTargets = [];
                mary.geometry.morphTargets.push(0);

              } else {
                mary = new THREE.Mesh(child.geometry, new THREE.MeshPhysicalMaterial({
                  morphTargets: true,
                  morphNormals: true,
                  color: new THREE.Color(0xffffff),
                  roughness: 0.1,
                  metalness: 0.2
                }));
              }
              z++
            }
          });
          mary.morphTargetInfluences = [0.0]
          mary.name = "mary";
          scene.add(mary)
          maryStateMachine = new MaryStateMachine();
          maryDone = true;

        }, null, function ( error ) { console.log( error )});
        fetch ('assets/curves-head.json').then( response => {
          return response.json();
        } ).then ( json => {
          var totalCurvePoints = json[15][1][0][1][7][5]
          var curveCounts = json[17][0][1][5]

          curveList = [];
          curveTubeList = [];
          tubeSpikeScale = [];
          var index = 0;
          var curveHelperMaterial = new THREE.LineBasicMaterial( { color : 0xff0000 } );

          for (var i =0; i < curveCounts.length; i++){
            var curveVertices = [];
            for (var j = index ; j < index + curveCounts[i]; j++){
              curveVertices.push( new THREE.Vector3( totalCurvePoints[j][0], totalCurvePoints[j][1], totalCurvePoints[j][2]))
            }
            var baseCurve = new THREE.CatmullRomCurve3( curveVertices, false, "chordal" );
            var curvePoints = baseCurve.getSpacedPoints( curveVertices.length * 15 ); //1500
            curveList.push( curvePoints)

            var curveHelperGeo = new THREE.Geometry();
            for ( var q = 0; q < curvePoints.length; q ++ ) {
              curveHelperGeo.vertices.push( curvePoints[ q ] );
            }

            var curveHelper = new THREE.TubeGeometry( baseCurve, 30, 0.3, 5, false );
            var curveHelperBuffer = new THREE.BufferGeometry().fromGeometry( curveHelper );
            var curveHelperMesh = new THREE.Mesh(curveHelperBuffer , new THREE.MeshPhongMaterial({color: 0x564f4d}));
            scene.add( curveHelperMesh )
            curveTubeList.push( curveHelperMesh )
            curveTubeList[i].geometry.setDrawRange(0, 0)

            index = j;
          }

          loader.load( 'assets/leaf.fbx', function ( object ) {
            var z = new THREE.Vector3( 0, 0, 1 );
            var x = new THREE.Vector3( 1, 0, 0 );
            object.traverse( function ( child ) {
              if ( child instanceof THREE.Mesh ) {
                spikeGeometry = child.geometry;
                for (var j = 0; j < curveList.length; j++ ){
                  var curvePoints = curveList[ j ];
                  spikeList.push([]);
                  radians = 0;
                  tubeSpikeScale.push((curvePoints.length-1)/900)

                  for (var i = 0; i < curvePoints.length - 1; i ++ ) {
                    //axis is the vector between the adjacent curve points
                    var stemAxis = new THREE.Vector3().subVectors( curvePoints[ i + 1 ], curvePoints[ i ] ).normalize();
                    //direction of point displacement

                    var displacement = new THREE.Vector3().crossVectors(stemAxis, x).normalize();
                    //calculate quaternion for the rotation around custom stemAxis
                    var quaternion = new THREE.Quaternion();
                    quaternion.setFromAxisAngle( stemAxis, radians + Math.random()/3);
                    displacement.applyQuaternion( quaternion );
                    //add original point position to preserve shape
                    displacement.add( curvePoints[ i ] );
                    //scale the displaced point along the direction vector to original curvePoint
                    var dir = new THREE.Vector3().subVectors( displacement, curvePoints[ i ] ).normalize();
                    displacement.add( dir.multiplyScalar( 0.3 ) );

                    //add new spike at the current position
                    var spike = new THREE.Mesh(spikeGeometry, spikeMaterial.clone());
                    spike.material.uniforms.randomness.value = Math.random();

                    var spikeScale = 3;
                    //set position to our skeleton point and scale
                    spike.position.set( displacement.x, displacement.y, displacement.z );
                    //scale the spike according to position
                    var subtract = 0;
                    if ( i > curvePoints.length/3 ){
                      subtract = 3*(i-curvePoints.length/3)/(curvePoints.length/3);
                    }
                    // spike.scale.x = 3 + spikeScale - subtract + Math.random();
                    // spike.scale.y = spikeScale - subtract + Math.random();
                    // spike.scale.z = spikeScale + Math.random();

                    spike.scale.x = spikeScale + Math.random();
                    spike.scale.y = spikeScale + Math.random();
                    spike.scale.z = spikeScale + Math.random();

                    //rotate the spike so it is facing the same direction as stem

                    var spikeUpAxis = new THREE.Vector3( 0, 1, 0 );
                    var orientStemAngle = Math.acos( stemAxis.dot( spikeUpAxis ) );
                    var orientSpikeAxis = new THREE.Vector3().crossVectors( spikeUpAxis, stemAxis );
                    var orientStemQuaternion = new THREE.Quaternion();
                    orientStemQuaternion.setFromAxisAngle( orientSpikeAxis.normalize(), orientStemAngle);
                    spike.applyQuaternion( orientStemQuaternion );

                    //rotate the spike so it is facing in towards the stem
                    var spikeNormal = new THREE.Vector3( 0, 0, -1 ).applyQuaternion( orientStemQuaternion ).normalize();
                    var spikeDisplacement = new THREE.Vector3().subVectors( curvePoints[i], displacement ).normalize();
                    var dAngle = Math.acos( spikeDisplacement.dot( spikeNormal ) );
                    var dAxis = new THREE.Vector3().crossVectors( spikeNormal, spikeDisplacement ).normalize();

                    var orientToCenter = new THREE.Quaternion();
                    orientToCenter.setFromAxisAngle( dAxis, dAngle);
                    spike.applyQuaternion( orientToCenter )

                    //tilt the stem outwards like a fan
                    var tiltQuaternion = new THREE.Quaternion();
                    var tiltAxis = new THREE.Vector3().crossVectors( stemAxis, dir ).normalize();
                    // var tiltAngle = 1.0 - i/(3*curvePoints.length) + Math.random()/3;
                    var tiltAngle = 0.8
                    tiltQuaternion.setFromAxisAngle( tiltAxis , tiltAngle );

                    spike.applyQuaternion( tiltQuaternion );


                    spikeList[j].push(spike)

                    //increment rotation value
                    radians += 1.1;
                  }
                }

                ready = true;
                startTime = Date.now();
                spikeStateMachine = new SpikeStateMachine();
              }
            });
          }, null, function(error){console.log(error)} );
        });
      }

      //parameters for animation
      function onWindowResize(){
          camera.aspect = window.innerWidth / window.innerHeight;
          camera.updateProjectionMatrix();

          renderer.setSize( window.innerWidth, window.innerHeight );

      }

      var now,delta,then = Date.now();
      var interval = 1000/30;
      sec = 0;
      var animate = function () {
        now = Date.now();
        delta = now - then;
        //update sphere position at 30 frames per second
        if (delta > interval) {
          if ( maryDone ){
            maryStateMachine.update()
          }
          if ( ready ) {
            timeDelta = Date.now() - startTime;
            spikeStateMachine.update(timeDelta, sec);
            sec ++;
            if( sec > 30){
              sec = 0;
            }
          }
          then = now - (delta % interval);
        }

        controls.update();
      //   if (ready) {
      //
      //   //
      //   // var nMax = spikeList.length;
      //   // nEnd = Math.min( nEnd + nStep, nMax );
      //   // //update draw range for animation
      //   // // pointField.geometry.setDrawRange(0, 0)
      //   //
      //   // if ( nMax - nEnd > nStep ) {
      //   //   for ( var i = 0; i < nStep; i++ ) {
      //   //     scene.add( spikeList[ nEnd + i ] );
      //   //   }
      //   // }
      //   // for ( var i = 0; i < nEnd; i++ ) {
      //   //   spikeList[ i ].material.uniforms.timeDelta.value = timeDelta;
      //   // }
      //
      //
      // }
        requestAnimationFrame( animate );
        renderer.render(scene, camera);
      };

      init ();
      animate();

    </script>
  

</body>]]>
	      
	    </description>
            <pubDate>Fri, 01 Jun 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[STREET SOUNDS]</title>
            <link>https://codercat.tk/street-sounds</link>
            <description>
	      
	          <![CDATA[<body>

    <div class="centerDiv">
        <h1>STREET SOUNDS</h1>
        <div class="archive-notice">
            [ ! ] This is an archived project. You can no longer RECORD and MAKE QR on this page, but we still adore the
            concept. If there is interest please let us know, we can revive it.
        </div>
        <p id="description">
            Paper is one of the oldest medias of storing information and can last for hundreds of years.
            This project allows you to encode an audio message into QR codes that can be posted on a wall, stored or
            sent via mail.
            Anyone can decode these QRs with an app for iOS or <a href="https://play.google.com/store/apps/details?id=club.codercat.snehabelkhale.cpptest&amp;hl=en_US" target="_blank">Android</a>. This creates an audio message that can be transmitted through time and
            space.
            <br/><br/>
            You can use this web app to generate QR code sheets from your audio recordings. To do that please select
            your message duration, press RECORD then say something fun, then MAKE QR.
            Now you can right click on the generated QR sheet and save or print it. This sheet now contains your MP3
            audio message encoded in QRs. You can decode and play it back with one of the mobile apps provided above.
            <br/><br/>
            Because Apple Store charges $100 per year for a developer account, the iOS app is not available on the
            store. If you are an iPhone user interested in trying it out, please contact us directly.
        </p>
        <img class="qrImg" src="https://codercat.tk/street-sounds/../assets/img/projects/street-sonds.jpg" alt="STREET SOUNDS"/>

        <audio id="player" controls=""></audio>

        <form action="#" id="durationSelector">
            <p>
                <input class="radioBtn" type="radio" id="10" name="radio-group" checked=""/>
                <label for="10">10 sec</label>
            </p>
            <p>
                <input class="radioBtn" type="radio" id="20" name="radio-group"/>
                <label for="20">20 sec</label>
            </p>
            <p>
                <input class="radioBtn" type="radio" id="30" name="radio-group"/>
                <label for="30">30 sec</label>
            </p>
            <p>each sheet store 10 sec of audio</p>
        </form>

        <div id="buttonsContainer">
            <button class="controlBtn" id="recordBtn" recording="false"> RECORD </button>
            <button class="controlBtn" id="saveQrBtn" recording="false" disabled=""> MAKE QR </button>
        </div>

        <!-- <a id="save" href="#">Download</a> -->
        <!-- <hr id="finalQrsDevider"> -->
        <div id="finalQrs"></div>

        <div id="social-media-panel">
            <div class="social-media-links">
                <span class="social-media-item">kirill</span>
                <a class="fa fa-github social-media-item" href="https://github.com/kif11"></a>
                <a class="fa fa-instagram social-media-item" href="https://instagram.com/kif11"></a>
                <a class="fa fa-twitter social-media-item" href="https://twitter.com/kovalewskiy"></a>
            </div>
            <div class="social-media-links">
                <span class="social-media-item">sneha</span>
                <a class="fa fa-github social-media-item" href="https://github.com/sneha-belkhale"></a>
                <a class="fa fa-instagram social-media-item" href="https://www.instagram.com/snayss/"></a>
                <a class="fa fa-twitter social-media-item" href="https://twitter.com/snayyss"></a>
            </div>
        </div>
    </div>



<script src="https://codercat.tk/street-sounds/js/index.js"></script>

</body>]]>
	      
	    </description>
            <pubDate>Wed, 04 Apr 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[3D TSP HEART]</title>
            <link>https://codercat.tk/tsp-3D-art</link>
            <description>
	      
	          <![CDATA[<body>
		<div id="loadingText"> loading... </div>

		<script src="https://codercat.tk/tsp-3D-art/js/THREE/three.min.js"></script>
		<script src="https://codercat.tk/tsp-3D-art/js/THREE/OrbitControls.js"></script>
		<script src="https://codercat.tk/tsp-3D-art/js/THREE/OBJLoader.js"></script>

		<script id="vertexShaderRawFinal" type="x-shader/x-vertex">

		attribute float curvature;
		uniform float timeDelta;
		varying float vCurvature;
		varying vec3 vPos;

		void main() {

			vec3 center = vec3( 0.0, -1.0, 0.0 );
			vec3 p = position;
			float distance = length( center - p );
			vec3 dir = normalize( center - p );
			float factor = 40.0 / ( distance * distance * distance );
			if ( factor > 3.0 ) {
				factor = 0.0;
			}
			float period = cos ( 2.0 / (distance) + timeDelta / 350.0 );
			if ( period > 0.0 ) {
				period /= 2.2;
			}
			p += ( period * factor ) * dir;
			vec4 modelViewPosition = modelViewMatrix * vec4( p, 1.0 );
			gl_Position = projectionMatrix * modelViewPosition;

			vPos = position;
			vCurvature = curvature;

		}

		</script>

		<script id="vertexShaderRaw" type="x-shader/x-vertex">

		attribute float curvature;
		uniform float timeDelta;
		varying float vCurvature;
		varying vec3 vPos;

		void main() {

			vec3 center = vec3( 0.0, -1.0, 0.0 );
			vec3 p = position;
			float distance = length( center - p );
			vec3 dir = normalize( center - p );
			//distance factor to only move vertices at the bottom of the heart
			float factor = 40.0 / ( distance * distance * distance );
			if ( factor > 3.0 ) {
				factor = 0.0;
			}
			//mod value determines length of segment, first multiplier determines compactness
			float period = 1.14 * ( 2.0 / (distance) + ( -750.0 + mod( timeDelta, 1500.0 ) ) / 150.0 );
			float sinVal = - sin ( period )/ period ;
			p += ( sinVal * factor ) * dir;
			vec4 modelViewPosition = modelViewMatrix * vec4( p, 1.0 );
			gl_Position = projectionMatrix * modelViewPosition;

			vPos = position;
			vCurvature = curvature;

		}

		</script>

		<script id="fragmentShaderRaw" type="x-shader/x-fragment">

		varying vec3 vPos;
		varying float vCurvature;

		vec4 permute( vec4 x ){ return mod((( x * 34.0 ) + 1.0 ) * x, 289.0); }
		vec4 taylorInvSqrt( vec4 r ){ return 1.79284291400159 - 0.85373472095314 * r; }
		vec3 fade( vec3 t ) { return t * t * t * ( t * ( t * 6.0 - 15.0 ) + 10.0 ); }

		float cnoise( vec3 P ){
		  vec3 Pi0 = floor( P ); // Integer part for indexing
		  vec3 Pi1 = Pi0 + vec3( 1.0 ); // Integer part + 1
		  Pi0 = mod( Pi0, 289.0 );
		  Pi1 = mod( Pi1, 289.0 );
		  vec3 Pf0 = fract( P ); // Fractional part for interpolation
		  vec3 Pf1 = Pf0 - vec3( 1.0 ); // Fractional part - 1.0
		  vec4 ix = vec4( Pi0.x, Pi1.x, Pi0.x, Pi1.x );
		  vec4 iy = vec4( Pi0.yy, Pi1.yy );
		  vec4 iz0 = Pi0.zzzz;
		  vec4 iz1 = Pi1.zzzz;

		  vec4 ixy = permute( permute( ix ) + iy );
		  vec4 ixy0 = permute( ixy + iz0 );
		  vec4 ixy1 = permute( ixy + iz1 );

		  vec4 gx0 = ixy0 / 7.0;
		  vec4 gy0 = fract( floor( gx0 ) / 7.0 ) - 0.5;
		  gx0 = fract( gx0 );
		  vec4 gz0 = vec4( 0.5 ) - abs( gx0 ) - abs( gy0 );
		  vec4 sz0 = step( gz0, vec4( 0.0 ));
		  gx0 -= sz0 * ( step( 0.0, gx0 ) - 0.5 );
		  gy0 -= sz0 * ( step( 0.0, gy0 ) - 0.5 );

		  vec4 gx1 = ixy1 / 7.0;
		  vec4 gy1 = fract( floor( gx1 ) / 7.0 ) - 0.5;
		  gx1 = fract( gx1 );
		  vec4 gz1 = vec4( 0.5 ) - abs( gx1 ) - abs( gy1 );
		  vec4 sz1 = step( gz1, vec4( 0.0 ) );
		  gx1 -= sz1 * ( step( 0.0, gx1 ) - 0.5 );
		  gy1 -= sz1 * ( step( 0.0, gy1 ) - 0.5 );

		  vec3 g000 = vec3( gx0.x, gy0.x, gz0.x );
		  vec3 g100 = vec3( gx0.y, gy0.y, gz0.y );
		  vec3 g010 = vec3( gx0.z, gy0.z, gz0.z );
		  vec3 g110 = vec3( gx0.w, gy0.w, gz0.w );
		  vec3 g001 = vec3( gx1.x, gy1.x, gz1.x );
		  vec3 g101 = vec3( gx1.y, gy1.y, gz1.y );
		  vec3 g011 = vec3( gx1.z, gy1.z, gz1.z );
		  vec3 g111 = vec3( gx1.w, gy1.w, gz1.w );

		  vec4 norm0 = taylorInvSqrt( vec4( dot( g000, g000 ), dot( g010, g010 ), dot( g100, g100 ), dot( g110, g110 ) ) );
		  g000 *= norm0.x;
		  g010 *= norm0.y;
		  g100 *= norm0.z;
		  g110 *= norm0.w;
		  vec4 norm1 = taylorInvSqrt( vec4( dot( g001, g001 ), dot( g011, g011 ), dot( g101, g101 ), dot( g111, g111 ) ) );
		  g001 *= norm1.x;
		  g011 *= norm1.y;
		  g101 *= norm1.z;
		  g111 *= norm1.w;

		  float n000 = dot( g000, Pf0 );
		  float n100 = dot( g100, vec3( Pf1.x, Pf0.yz ) );
		  float n010 = dot( g010, vec3( Pf0.x, Pf1.y, Pf0.z ) );
		  float n110 = dot( g110, vec3( Pf1.xy, Pf0.z ) );
		  float n001 = dot( g001, vec3( Pf0.xy, Pf1.z ) );
		  float n101 = dot( g101, vec3( Pf1.x, Pf0.y, Pf1.z ) );
		  float n011 = dot( g011, vec3( Pf0.x, Pf1.yz ) );
		  float n111 = dot( g111, Pf1);

		  vec3 fade_xyz = fade( Pf0 );
		  vec4 n_z = mix( vec4( n000, n100, n010, n110 ), vec4( n001, n101, n011, n111 ), fade_xyz.z );
		  vec2 n_yz = mix( n_z.xy, n_z.zw, fade_xyz.y );
		  float n_xyz = mix( n_yz.x, n_yz.y, fade_xyz.x );
		  return 2.2 * n_xyz;

		}

		void main() {
			float x = cnoise( 10.0 * vPos );
			vec4 noiseColor = vec4(0.0, 0.0, x, 0.1 );
			float noise = pow( (0.5 - vCurvature) , 1.0 );
			noiseColor.xyz =  noise * noiseColor.xyz;
			gl_FragColor = vec4( 0.0, 0.0, vCurvature, 0.5 ) + noiseColor;

		}

		</script>

		<script id="vertexShader" type="x-shader/x-vertex">

		varying vec3 vNormal;
		varying vec3 vViewPosition;
		uniform float timeDelta;

		void main() {

			vec3 center = vec3( 0.0, -1.0, 0.0 );
			vec3 p = position;
			float distance = length( center - p );
			vec3 dir = normalize( center - p );
			//distance factor to only move vertices at the bottom of the heart
			float factor = 40.0 / ( distance * distance * distance );
			if ( factor > 3.0 ) {
				factor = 0.0;
			}
			//mod value determines length of segment, first multiplier determines compactness
			float period = 1.14 * ( 2.0 / (distance) + ( -750.0 + mod( timeDelta, 1500.0 ) ) / 150.0 );
			float sinVal = - sin ( period )/ period ;
			p += ( sinVal * factor ) * dir;

			vec4 modelViewPosition = modelViewMatrix * vec4( p, 1.0 );
			gl_Position = projectionMatrix * modelViewPosition;
			vViewPosition = -modelViewPosition.xyz;
			vNormal = normalMatrix * normal;

		}

		</script>

		<script>

	    //** TSP ALGORITHM AND HELPER FUNCTIONS **//
			let dist = function ( pt1, pt2 ) {
				return Math.sqrt( ( pt1[0] - pt2[0] ) ** 2 + ( pt1[1] - pt2[1] ) ** 2 + ( pt1[2] - pt2[2] ) ** 2 );
			}

			let nearest = function ( lastEl, allPts, visitedPts ) {
				bestIdx = -1;
				bestDist = 10000;
				for ( var i = 0; i < allPts.length / 3; i++ ) {
					if ( visitedPts[i] == 1 ) continue;
					var curDist = dist( [ allPts[3*i], allPts[3*i+1], allPts[3*i+2] ], lastEl );
					if ( curDist < bestDist ) {
						bestDist = curDist;
						bestIdx = i;
					}
				}
				visitedPts[bestIdx] = 1;
				return bestIdx;
			}

			let tsp = function ( pts ) {
				//get the first point
				var ordered = new Float32Array( pts.length );
				ordered[0] = pts[0];
				ordered[1] = pts[1];
				ordered[2] = pts[2];

				var visitedPts = new Float32Array( pts.length / 3 );
				visitedPts[0] = 1;
				//find the nearest point to the last point in ordered.
				for ( var i = 1; i < pts.length/3; i ++ ) {
					lastEl = [ ordered[3*(i-1)], ordered[3*(i-1)+1], ordered[3*(i-1)+2] ];
					nearestIdx = nearest( lastEl, pts, visitedPts );
					ordered[3*i] = pts[3*nearestIdx];
					ordered[3*i+1] = pts[3*nearestIdx+1];
					ordered[3*i+2] = pts[3*nearestIdx+2];
				}
				return ordered;
			}

			//returns average of elements in a dictionary
			function average( dict ) {
				var sum = 0;
				var length = 0;
				Object.keys( dict ).forEach( function( key ) {
					sum += dict[ key ];
					length ++;
				});
				return sum / length;
			}

			//clamp a number between min and max
			function clamp( number, min, max ) {
			  return Math.max( min, Math.min( number, max ) );
			}

			//*** GLOBAL VARIABLES ***//
			var pointLight;
			var renderer, scene, camera, controls;
			var meshSegments = [];
			var heartMesh;
			var spline;

			var startTime;
			var counter = 0;
			var ready = false;

			function init () {
				scene = new THREE.Scene();
				camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

				pointLight = new THREE.PointLight(0xa90f1f, 0.8, 40);
				scene.add(pointLight);

				rimLight = new THREE.PointLight(0xa90f1f, 0.2, 30);
				rimLight.position.set(0, 20, -10.0);
				scene.add(rimLight)

				renderer = new THREE.WebGLRenderer();
				renderer.setSize( window.innerWidth, window.innerHeight );
				document.body.appendChild( renderer.domElement );
				controls = new THREE.OrbitControls(camera, renderer.domElement);

				//#1 load the base obj and calculate curvature
				var loader = new THREE.OBJLoader();
				loader.load( 'assets/heart_single_03.obj', function ( object ) {
					object.traverse( function ( child ) {
						if ( child instanceof THREE.Mesh ) {
							bufferGeo = child.geometry;
							var dict= {};
							bufferGeo.attributes.position.array.forEach((value, index) => {bufferGeo.attributes.position.array[index] *= 1});
							for ( var i = 0; i < bufferGeo.attributes.position.count; i+=3 ) {
								//create a dictionary of every position, and its neighboring positions
								var array = bufferGeo.attributes.position.array;
								var normArray = bufferGeo.attributes.normal.array;

								var posA = new THREE.Vector3(array[ 3 * i ], array[ 3 * i + 1 ], array[ 3 * i + 2 ]);
								var posB = new THREE.Vector3(array[ 3 * ( i + 1 ) ], array[ 3 * ( i + 1 ) + 1 ], array[ 3 * ( i + 1 ) + 2 ]);
								var posC = new THREE.Vector3(array[ 3 * ( i + 2 ) ], array[ 3 * ( i + 2 ) + 1 ], array[ 3 * ( i + 2 ) + 2 ]);

								var normA = new THREE.Vector3(normArray[ 3 * i ], normArray[ 3 * i + 1 ], normArray[ 3 * i + 2 ]).normalize();
								var normB = new THREE.Vector3(normArray[ 3 * ( i + 1 ) ], normArray[ 3 * ( i + 1 ) + 1 ], normArray[ 3 * ( i + 1 ) + 2 ]).normalize();
								var normC = new THREE.Vector3(normArray[ 3 * ( i + 2 ) ], normArray[ 3 * ( i + 2 ) + 1 ], normArray[ 3 * ( i + 2 ) + 2 ]).normalize();

								var strA = posA.toArray().toString();
								var strB = posB.toArray().toString();
								var strC = posC.toArray().toString();

								var posB_A = new THREE.Vector3().subVectors( posB, posA );
								var posB_C = new THREE.Vector3().subVectors( posB, posC );
								var posC_A = new THREE.Vector3().subVectors( posC, posA );

								var normB_A = new THREE.Vector3().subVectors( normB, normA );
								var normB_C = new THREE.Vector3().subVectors( normB, normC );
								var normC_A = new THREE.Vector3().subVectors( normC, normA );

								var b2a = normB.dot( posB_A.normalize() );
								var b2c = normB.dot( posB_C.normalize() );
								var c2a = normC.dot( posC_A.normalize() );

								var a2b = -normA.dot( posB_A.normalize() );
								var c2b = -normC.dot( posB_C.normalize() );
								var a2c = -normA.dot( posC_A.normalize() );

								if (dict[ strA ] === undefined ) {
									dict[ strA ] = {};
								}
								if (dict[ strB ] === undefined ) {
									dict[ strB ] = {};
								}
								if (dict[ strC ] === undefined ) {
									dict[ strC ] = {};
								}

								dict[ strA ][ strB ] = a2b;
								dict[ strA ][ strC ] = a2c;
								dict[ strB ][ strA ] = b2a;
								dict[ strB ][ strC ] = b2c;
								dict[ strC ][ strA ] = c2a;
								dict[ strC ][ strB ] = c2b;

							}

							curvatureDict = {};
							var min = 10, max = 0;

							Object.keys( dict ).forEach( function( key ) {
								curvatureDict[ key ] = average( dict[ key ] );
							});

							//smoothing
							var smoothCurvatureDict  = Object.create(curvatureDict);

							Object.keys( dict ).forEach( function( key ) {
								var count = 0;
								var sum = 0;
								Object.keys( dict[ key ] ).forEach( function( key2 ) {
									sum += smoothCurvatureDict[ key2 ];
									count ++;
								});
								smoothCurvatureDict[key] = sum / count;
							});

							curvatureDict = smoothCurvatureDict;

							// fit values to 0 and 1
							Object.keys( curvatureDict ).forEach( function( key ) {
								val = Math.abs( curvatureDict[ key ] );
								if ( val < min ) min = val;
								if ( val > max ) max = val;
							});

							var range = ( max - min );

							Object.keys( curvatureDict ).forEach( function( key ) {
								val = Math.abs( curvatureDict[ key ] );
								if ( curvatureDict[ key ] < 0 ) {
									curvatureDict[ key ] = (min - val) / range
								} else {
									curvatureDict[ key ] = (val - min) / range;
								}
							});

							curvatureAttribute = new Float32Array( bufferGeo.attributes.position.count );

							for ( var i = 0; i < bufferGeo.attributes.position.count; i++ ) {

								array = bufferGeo.attributes.position.array;
								var pos = new THREE.Vector3( array[ 3 * i ], array[ 3 * i + 1 ], array[ 3 * i + 2 ] );
								var str = pos.toArray().toString();
								curvatureAttribute[i] = curvatureDict[ str ];
							}

							bufferGeo.addAttribute( 'curvature', new THREE.BufferAttribute( curvatureAttribute, 1 ) );

							var mUniforms = ({
								timeDelta : {type: 'f', value: 0}
							});
							var materialRaw = new THREE.ShaderMaterial ({
								uniforms: mUniforms,
								vertexShader: document.getElementById( 'vertexShaderRaw' ).textContent,
								fragmentShader: document.getElementById( 'fragmentShaderRaw' ).textContent,
								side: THREE.DoubleSide,
								transparent: true
							} );

							heartMesh = new THREE.Mesh( bufferGeo, materialRaw );
							scene.add(heartMesh)
						}
					} );
				} );

				//now load the scattered surface points for the tsp and tube geometry
		 		fetch( "assets/heart_02.json" ).then( function( response ) {
			 		return response.json();
		 		}).then( function( myJson ) {
					 var json = myJson[15][1][0][1][7][5];
					 var pts = new Float32Array ( 3 * json.length );
					 for ( var i = 0; i < json.length; i ++ ) {

						 pts[3*i] = json[i][0];
						 pts[3*i+1] = json[i][1];
						 pts[3*i+2] = json[i][2];

				 }

				 var ordered = tsp( pts );
				 var numberOfSections = 5;
				 var lengthOfSection = ( ordered.length / 3 ) / numberOfSections;

				 //set up material for all tube geometries
				 var uniforms = ({
					 timeDelta : {type: 'f', value: 0},
					 color : {type: 'c', value: new THREE.Color(0x363636)},
					 specular : {type: 'c', value: new THREE.Color(0xFFFFFF)},
				 });
				 var phongShader = THREE.ShaderLib.phong;
				 var mUniforms = THREE.UniformsUtils.merge([phongShader.uniforms, uniforms]);
				 var material = new THREE.ShaderMaterial ({
					 uniforms : mUniforms,
					 vertexShader: document.getElementById( 'vertexShader' ).textContent,
					 fragmentShader: phongShader.fragmentShader,
					 lights: true,
					 side : THREE.DoubleSide
				 });
				 for ( var j = 0; j < numberOfSections; j++ ) {

					 pointArray = [];
				   for ( var i = j * lengthOfSection; i < j * lengthOfSection + lengthOfSection; i++ ) {
						 //convert to array of vector3's
						 pointArray.push(new THREE.Vector3(ordered[3*i], ordered[3*i+1], ordered[3*i+2]));
					 }
					 // //Create a closed wavey loop
					 var curve = new THREE.CatmullRomCurve3( pointArray, false );
					 var geometry = new THREE.TubeGeometry( curve, 6600, 0.1, 8, false );
					 var bufferGeometry = new THREE.BufferGeometry().fromGeometry( geometry );
					 var mesh = new THREE.Mesh( bufferGeometry, material );

					 scene.add( mesh );
					 meshSegments.push(mesh);

					}
					startTime = Date.now();
					ready = true;
					var loadingText = document.getElementById("loadingText");
					loadingText.style.visibility = "hidden";
				} );

				// camera.position.z = 5.730895057217767;
				// camera.position.x = 21.94283401508626;
				// camera.position.y =  5.3220043493535165;


				camera.position.x = -2.395858264238528;
				camera.position.y = 0.20962894182633898;
				camera.position.z = -4.681532858942278;
				var numPoints = 500;

		    spline = new THREE.CatmullRomCurve3( [
			    new THREE.Vector3(-8, 5, 0),
			    new THREE.Vector3(-8, 0, 5),
			    new THREE.Vector3(2, 8, -5),
				  new THREE.Vector3(5, 7, 0),
				  new THREE.Vector3(7, -4, 3),
				  new THREE.Vector3(0, -7, 4),
				  new THREE.Vector3(-7, 0, 0),
				  new THREE.Vector3(-3, 4, -2),
					new THREE.Vector3(8, 7, -3),
					new THREE.Vector3(0, 12, -2),
				  new THREE.Vector3(2, 6, -1),
				  new THREE.Vector3(0, -7, 4),
					new THREE.Vector3(0, -7, 0),
				  new THREE.Vector3(0, -1, -7),
					new THREE.Vector3(-8, 5, 0) ] );

				var material = new THREE.LineBasicMaterial({
		        color: 0xff00f0,
		    });

		    var geometry = new THREE.Geometry();
		    var splinePoints = spline.getPoints( numPoints );

		    for ( var i = 0; i < splinePoints.length; i++ ) {
		        geometry.vertices.push( splinePoints[i] );
		    }

		    var line = new THREE.Line( geometry, material );
	      setInterval(moveLight, 60);

				onWindowResize();
				window.addEventListener( 'resize', onWindowResize, false );

			}

			function onWindowResize( event ) {
				renderer.setSize( window.innerWidth, window.innerHeight );
				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();
			}

			function moveLight() {
				if ( counter <= 1 ) {
      		pointLight.position.copy( spline.getPointAt(counter) );
					counter += 0.005;
				} else {
					counter = 0;
				}
			}

			var nEnd =[];
			var reverse =[];
			for ( var i = 0; i < 100; i++ ) {
				nEnd.push( 0 );
				reverse.push( false );
			}
			var nStep = 100;

			var animate = function () {

				requestAnimationFrame( animate );
				controls.update();
				renderer.render(scene, camera);

				if (ready) {
					timeDelta = Date.now() - startTime;
					for (var i = 0; i < meshSegments.length; i++){
						var nMax = meshSegments[i].geometry.attributes.position.count;

						if (reverse[i]){
							(nEnd[i] - nStep < 0) ? reverse[i] = false : nEnd[i] -= nStep;
						} else {
							(nEnd[i] + nStep > nMax) ? reverse[i] = true : nEnd[i] += nStep;
						}
						meshSegments[i].geometry.setDrawRange( 0, nEnd[i] );
						meshSegments[i].material.uniforms.timeDelta.value = timeDelta;
					}
					heartMesh.material.uniforms.timeDelta.value = timeDelta;
				}
			};
			init ();
			animate();
		</script>
	

</body>]]>
	      
	    </description>
            <pubDate>Sat, 27 Jan 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[THREEJS CURVATURE]</title>
            <link>https://codercat.tk/threejs-curvature</link>
            <description>
	      
	          <![CDATA[<body>

		<div id="container"></div>
		<div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - curvature estimation of a geometry by <a href="http://codercat.club" target="_blank" rel="noopener">CoderCat</a></div>

	<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
	<script src="https://unpkg.com/three@0.128.0/examples/js/controls/OrbitControls.js"></script>
	<script src="https://unpkg.com/three@0.128.0/examples/js/loaders/OBJLoader.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.7/dat.gui.min.js"></script>

	<script id="vertexShaderRaw" type="x-shader/x-vertex">

	attribute float curvature;

		varying float vCurvature;

		void main() {

			vec3 p = position;
			vec4 modelViewPosition = modelViewMatrix * vec4( p , 1.0 );
			gl_Position = projectionMatrix * modelViewPosition;
			vCurvature = curvature;

		}

		</script>

		<script id="fragmentShaderRaw" type="x-shader/x-fragment">

		varying vec3 vViewPosition;
		varying float vCurvature;

		void main() {
				gl_FragColor = vec4( vCurvature * 2.0, 0.0, 0.0, 1.0 );
		}

		</script>

		<script>


			var camera, scene, renderer;

			var ninjaMeshRaw, curvatureAttribute;

			init();
			animate();

			//returns average of elements in a dictionary
			function average( dict ) {

				var sum = 0;
				var length = 0;

				Object.keys( dict ).forEach( function( key ) {

					sum += dict[ key ];
					length ++;

				});

				return sum / length;

			}

			//clamp a number between min and max
			function clamp( number, min, max ) {

			  return Math.max( min, Math.min( number, max ) );

			}

			//filter the curvature array to only show concave values
			function filterConcave( curvature ) {

				for ( var i = 0; i < curvature.length; i++ ) {

					curvature[ i ] = Math.abs( clamp( curvature[ i ], -1, 0 ) );

				}

			}

			//filter the curvature array to only show convex values
			function filterConvex( curvature ) {

				for ( var i = 0; i < curvature.length; i++ ) {

					curvature[ i ] = clamp( curvature[ i ], 0, 1 );

				}

			}

			//filter the curvature array to show both the concave and convex values
			function filterBoth( curvature ) {

				for ( var i = 0; i < curvature.length; i++ ) {

					curvature[ i ] = Math.abs( curvature[ i ] );

				}

			}

			//initialize the scene
			function init() {

				scene = new THREE.Scene();

				camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

				camera.position.x = -23;
				camera.position.y = 2;
				camera.position.z = 24;

			renderer = new THREE.WebGLRenderer();
			renderer.setSize( window.innerWidth, window.innerHeight );
			renderer.autoClear = false;

			document.body.appendChild( renderer.domElement );

			controls = new THREE.OrbitControls( camera, renderer.domElement );

			var loader = new THREE.OBJLoader();
			//load the obj
			loader.load( 'https://raw.githubusercontent.com/mrdoob/three.js/r128/examples/models/obj/ninja/ninjaHead_Low.obj', function ( object ) {
				object.traverse( function ( child ) {
					if ( child instanceof THREE.Mesh ) {

							bufferGeo = child.geometry;
							bufferGeo.center();
							var dict= {};

							for ( var i = 0; i < bufferGeo.attributes.position.count; i+=3 ) {
								//create a dictionary of every position, and its neighboring positions
								var array = bufferGeo.attributes.position.array;
								var normArray = bufferGeo.attributes.normal.array;

								var posA = new THREE.Vector3(array[ 3 * i ], array[ 3 * i + 1 ], array[ 3 * i + 2 ]);
								var posB = new THREE.Vector3(array[ 3 * ( i + 1 ) ], array[ 3 * ( i + 1 ) + 1 ], array[ 3 * ( i + 1 ) + 2 ]);
								var posC = new THREE.Vector3(array[ 3 * ( i + 2 ) ], array[ 3 * ( i + 2 ) + 1 ], array[ 3 * ( i + 2 ) + 2 ]);

								var normA = new THREE.Vector3(normArray[ 3 * i ], normArray[ 3 * i + 1 ], normArray[ 3 * i + 2 ]).normalize();
								var normB = new THREE.Vector3(normArray[ 3 * ( i + 1 ) ], normArray[ 3 * ( i + 1 ) + 1 ], normArray[ 3 * ( i + 1 ) + 2 ]).normalize();
								var normC = new THREE.Vector3(normArray[ 3 * ( i + 2 ) ], normArray[ 3 * ( i + 2 ) + 1 ], normArray[ 3 * ( i + 2 ) + 2 ]).normalize();

								var strA = posA.toArray().toString();
								var strB = posB.toArray().toString();
								var strC = posC.toArray().toString();

								var posB_A = new THREE.Vector3().subVectors( posB, posA );
								var posB_C = new THREE.Vector3().subVectors( posB, posC );
								var posC_A = new THREE.Vector3().subVectors( posC, posA );

								var normB_A = new THREE.Vector3().subVectors( normB, normA );
								var normB_C = new THREE.Vector3().subVectors( normB, normC );
								var normC_A = new THREE.Vector3().subVectors( normC, normA );

								var b2a = normB.dot( posB_A.normalize() );
								var b2c = normB.dot( posB_C.normalize() );
								var c2a = normC.dot( posC_A.normalize() );

								var a2b = -normA.dot( posB_A.normalize() );
								var c2b = -normC.dot( posB_C.normalize() );
								var a2c = -normA.dot( posC_A.normalize() );

								if (dict[ strA ] === undefined ) {
									dict[ strA ] = {};
								}
								if (dict[ strB ] === undefined ) {
									dict[ strB ] = {};
								}
								if (dict[ strC ] === undefined ) {
									dict[ strC ] = {};
								}

								dict[ strA ][ strB ] = a2b;
								dict[ strA ][ strC ] = a2c;
								dict[ strB ][ strA ] = b2a;
								dict[ strB ][ strC ] = b2c;
								dict[ strC ][ strA ] = c2a;
								dict[ strC ][ strB ] = c2b;

							}

							curvatureDict = {};
							var min = 10, max = 0;

							Object.keys( dict ).forEach( function( key ) {

								curvatureDict[ key ] = average( dict[ key ] );

							});

							//smoothing
							var smoothCurvatureDict  = Object.create(curvatureDict);

							Object.keys( dict ).forEach( function( key ) {

								var count = 0;
								var sum = 0;
								Object.keys( dict[ key ] ).forEach( function( key2 ) {

									sum += smoothCurvatureDict[ key2 ];
									count ++;

								});
								smoothCurvatureDict[key] = sum / count;

							});

							curvatureDict = smoothCurvatureDict;

							// fit values to 0 and 1
							Object.keys( curvatureDict ).forEach( function( key ) {

								val = Math.abs( curvatureDict[ key ] );
								if ( val < min ) min = val;
								if ( val > max ) max = val;

							});

							var range = ( max - min );

							Object.keys( curvatureDict ).forEach( function( key ) {

								val = Math.abs( curvatureDict[ key ] );
								if ( curvatureDict[ key ] < 0 ) {
									curvatureDict[ key ] = (min - val) / range
								} else {
									curvatureDict[ key ] = (val - min) / range;
								}

							});

							curvatureAttribute = new Float32Array( bufferGeo.attributes.position.count );

							for ( var i = 0; i < bufferGeo.attributes.position.count; i++ ) {

								array = bufferGeo.attributes.position.array;
								var pos = new THREE.Vector3( array[ 3 * i ], array[ 3 * i + 1 ], array[ 3 * i + 2 ] );
								var str = pos.toArray().toString();
								curvatureAttribute[i] = curvatureDict[ str ];
							}

							bufferGeo.setAttribute( 'curvature', new THREE.BufferAttribute( curvatureAttribute, 1 ) );

							//starting filter is to show both concave and convex
							var curvatureFiltered = new Float32Array( curvatureAttribute );
							filterBoth(curvatureFiltered);

							var materialRaw = new THREE.ShaderMaterial ({

								vertexShader: document.getElementById( 'vertexShaderRaw' ).textContent,
								fragmentShader: document.getElementById( 'fragmentShaderRaw' ).textContent

							} );

							ninjaMeshRaw = new THREE.Mesh( bufferGeo, materialRaw );

						}
					} );

					scene.add( ninjaMeshRaw );

				} );


				//init GUI
				var params = {

					filterConvex: function () {

						var curvatureFiltered = new Float32Array( curvatureAttribute );
						filterConvex(curvatureFiltered);
						bufferGeo.attributes.curvature.array = curvatureFiltered;
						bufferGeo.attributes.curvature.needsUpdate = true;


					},
					filterConcave: function () {

						var curvatureFiltered = new Float32Array( curvatureAttribute );
						filterConcave(curvatureFiltered);
						bufferGeo.attributes.curvature.array = curvatureFiltered;
						bufferGeo.attributes.curvature.needsUpdate = true;


					},
					filterBoth: function () {

						var curvatureFiltered = new Float32Array( curvatureAttribute );
						filterBoth(curvatureFiltered);
						bufferGeo.attributes.curvature.array = curvatureFiltered;
						bufferGeo.attributes.curvature.needsUpdate = true;

					}
				};

				var gui = new dat.GUI();

				topologyFolder = gui.addFolder( 'Topology' );
				topologyFolder.add( params, 'filterConvex' );
				topologyFolder.add( params, 'filterConcave' );
				topologyFolder.add( params, 'filterBoth' );
				topologyFolder.open()

				onWindowResize();

				window.addEventListener( 'resize', onWindowResize, false );

			}

			function onWindowResize( event ) {

				renderer.setSize( window.innerWidth, window.innerHeight );
				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

			}

			function animate() {

				requestAnimationFrame( animate );

				render();

			}

			function render() {

				renderer.render(scene, camera);

			}

		</script>

	
</body>]]>
	      
	    </description>
            <pubDate>Mon, 01 Jan 2018 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[360 PHOTO TO VIDEO]</title>
            <link>https://codercat.tk/360-photo-to-video</link>
            <description>
	      
	          <![CDATA[<body>
		<script src="https://codercat.tk/360-photo-to-video/js/three/three.min.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/three/Projector.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/three/CanvasRenderer.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/three/OrbitControls.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/CCapture.all.min.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/three/dat.gui.min.js"></script>
		<script src="https://codercat.tk/360-photo-to-video/js/ffmpeg.asm.js"></script>

		<div id="controlBox">
			<mtitle>
				Capture Videos of 360 Photographs
			</mtitle>
			<div id="info">
				Convert your 360 photos into video formats for easy sharing on media platforms. Made with three.js and CCapture.js
			</div>
			<div id="controlGui">
			</div>
			<label class="custom-file-upload">
				Select 360 Image
				<input id="getval" type="file"/>
			</label>
			<button id="captureButton">
				Start Capture
			</button>
		</div>

		<div id="canvasDiv">
			<canvas id="canvas">
			</canvas>
		</div>
		<script>
			var capturer;
			var container;
			var camera, scene, renderer;
			var sphereMesh;
			var autoRotationQuaternion;
			var index;
			materials = [];
			var windowHalfX = window.innerWidth / 2;
			var windowHalfY = window.innerHeight / 2;
			var capturing;
			var controls;
			var rotationValue = 0.008;
			var oneRotation = false;
			var canvas, canvasDiv;


			init();
			animate();

			function readURL() {
				var file = document.getElementById("getval").files[0];
				var reader = new FileReader();
				reader.onloadend = function(){
					tex = new THREE.TextureLoader().load(reader.result);
					sphereMesh.material.map = tex;
				}
				if(file){
					reader.readAsDataURL(file);
				}else{
				}

			}
			function init() {

				container = document.createElement( 'div' );
				document.body.appendChild( container );

				controlBox = document.getElementById("controlBox")
				fileUpload = document.getElementById('getval');
				fileUpload.addEventListener('change', readURL, true);

				scene = new THREE.Scene();

				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );


				controls = new THREE.OrbitControls(camera, container);
				controls.target.set(0,40,0)

				camera.position.x = 2.44;
				camera.position.y = 43.21;
				camera.position.z = 6.61;

				camera.rotation.x = -0.45095196967665085
				camera.rotation.y = 0.32167828175815766
				camera.rotation.z = 0.15191416835838922

				geometry = new THREE.SphereGeometry(100, 32, 32);


				var sphereMaterial = new THREE.MeshBasicMaterial({
					map: new THREE.TextureLoader().load('img/photospheres/sadgirl1.jpg')
				});
				sphereMaterial.transparent= true;
				sphereMesh = new THREE.Mesh(geometry,sphereMaterial);
				sphereMesh.position.set(0,0,0);
				sphereMesh.name = "mainsphere";
				sphereMesh.material.side = THREE.DoubleSide


				//set the first sphere mesh
				scene.add(sphereMesh);

				//set auto rotation of current sphere
				autoRotationQuaternion = new THREE.Quaternion()
				.setFromEuler(new THREE.Euler(
					0,
					0.008,
					0,
					'XYZ'
				));

				canvasElement = document.getElementById("canvas");
				renderer = new THREE.WebGLRenderer({canvas:canvasElement});
				renderer.setClearColor( 0xf0f0f0 );
				renderer.setPixelRatio( window.devicePixelRatio );
				renderer.setSize( 1280/window.devicePixelRatio, 720/window.devicePixelRatio, true );
				canvasDiv = document.getElementById("canvasDiv");
				canvasDiv.style.width = 1280/window.devicePixelRatio + 'px'
        //
				// container.appendChild( renderer.domElement );
				//stats = new Stats();
				//container.appendChild( stats.dom );
				//window.addEventListener( 'resize', onWindowResize, false );

				capturing = false;
				u_format = 'webm';
				var params = {
					speed: 0.008,
					S_900x600: function () {
						renderer.setSize( 900/window.devicePixelRatio, 600/window.devicePixelRatio, true );
						canvasDiv.style.width = 900/window.devicePixelRatio + 'px'
						camera.aspect = 900/600;
						camera.updateProjectionMatrix();
					},
					M_1200x900: function () {
						renderer.setSize( 1200/window.devicePixelRatio, 900/window.devicePixelRatio );
						canvasDiv.style.width = 1200/window.devicePixelRatio + 'px'
						camera.aspect = 1200/900;
						camera.updateProjectionMatrix();
					},
					HD_1280x700: function () {
						renderer.setSize( 1280/window.devicePixelRatio, 720/window.devicePixelRatio );
						canvasDiv.style.width = 1280/window.devicePixelRatio + 'px'
						camera.aspect = 1280/720;
						camera.updateProjectionMatrix();
					},
					"WebM": true,
					"JPG": false,
					"OneRotation": false
				};

				var gui = new dat.GUI();
				controlGui = document.getElementById ("controlGui");
				controlGui.appendChild(gui.domElement);
				rotationValue = 0.008;
				gui.add( params, 'speed', -0.04, 0.04 ).step( 0.001 ).name( 'Speed' ).onChange( function ( value ) {
					rotationValue = value;
					autoRotationQuaternion = new THREE.Quaternion()
					.setFromEuler(new THREE.Euler(
						0,
						value,
						0,
						'XYZ'
					));
					render();
				} );

				sizeFolder = gui.addFolder('Size');
				sizeFolder.add( params, 'HD_1280x700' );
				sizeFolder.add( params, 'M_1200x900' );
				sizeFolder.add( params, 'S_900x600' );

				formatFolder = gui.addFolder('ExportFormat');
				var ff1 = formatFolder.add( params, 'WebM' ).listen();
				var ff2 = formatFolder.add( params, 'JPG' ).listen();
				ff1.onChange(function(value){
					u_format = "webm"
        	params["WebM"] = true;
        	params["JPG"] = false;
				});

				ff2.onChange(function(value){
					u_format = "jpg";
        	params["WebM"] = false;
        	params["JPG"] = true;
				});

				var r = gui.add( params, 'OneRotation').listen();
				r.onChange(function(value){
					if(oneRotation){
						params["OneRotation"] = false;
						oneRotation = false;
					} else {
						params["OneRotation"] = true;
						oneRotation = true;
					}
				});
				gui.open();

				captureButton = document.getElementById("captureButton");
				captureButton.onclick = startCapture;
			}

			function startCapture() {
			if (capturing) {
				capturer.stop();
				capturer.save();
				capturing = false;
				captureButton.innerHTML = "Start Capture";
				captureButton.style.backgroundColor = "#30a1d6";
			} else{
				capturing = true;
				if (oneRotation) {
					var u_timelimit = (2*Math.PI)/(rotationValue*30);
				} else {
					var u_timelimit = 59;
				}
				capturer = new CCapture( {
								verbose: false,
								display: true,
								framerate: 30,
								quality: 99,
								format: u_format,
								workersPath: '../../',
								timeLimit: u_timelimit,
								frameLimit: 0,
								autoSaveTime: 0,
								onProgress: function( p ) { console.log( ( p * 100 ) + '%' )}
							} );
							capturer.start();
							captureButton.innerHTML = "Stop Capture";
							captureButton.style.backgroundColor = "#e71e5e";
				}
			}

			var now,delta,then = Date.now();
			var interval = 1000/30;

			function animate() {
				requestAnimationFrame (animate);
				now = Date.now();
				delta = now - then;
				//update sphere position at 30 frames per second
				if (delta > interval) {
					sphereMesh.quaternion.multiplyQuaternions(autoRotationQuaternion, sphereMesh.quaternion);
					then = now - (delta % interval);
				}
				//stats.begin();
				render();
				//stats.end();
			}

			function render() {

				controls.update();
				renderer.render( scene, camera );
				if( capturing ) {
					capturer.capture( renderer.domElement );
				}
			}

		</script>
	

</body>]]>
	      
	    </description>
            <pubDate>Tue, 19 Dec 2017 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[PHOTOSPHERES]</title>
            <link>https://codercat.tk/photospheres</link>
            <description>
	      
	          <![CDATA[<body>
    <script src="https://codercat.tk/photospheres/three/three.min.js"></script>
    <script src="https://codercat.tk/photospheres/three/Projector.js"></script>
    <script src="https://codercat.tk/photospheres/three/CanvasRenderer.js"></script>

    <script>
      var cameraController;
      var container;
      var backButton;
      var nextButton;
      var blogtext;
      var isDragging;
      var camera, scene, renderer;
      var currentSphere;
      var previousMousePosition;
      var autoRotationQuaternion;
      var index;
      materials = [];
      var windowHalfX = window.innerWidth / 2;
      var windowHalfY = window.innerHeight / 2;
      var insideSphere = false;
      var numSpheres = 0;
      var distance;
      var info;
      var infoCards;

      function getParameterByName(name) {
        url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        let regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
          results = regex.exec(url);

        if (!results) return null;
        if (!results[2]) return null;
        return decodeURIComponent(results[2].replace(/\+/g, " "));
      }

      index = parseInt(getParameterByName("page"));
      if (!index) index = 0;

      init();
      animate();

      function init() {
        container = document.createElement("div");
        document.body.appendChild(container);

        nextButton = document.createElement("BUTTON");
        var buttonNextArrow = document.createTextNode(">");
        nextButton.appendChild(buttonNextArrow);
        nextButton.id = "nextbutton";
        nextButton.onclick = nextIndex;
        container.appendChild(nextButton);

        backButton = document.createElement("BUTTON");
        var buttonBackArrow = document.createTextNode("<");
        backButton.appendChild(buttonBackArrow);
        backButton.id = "backbutton";
        backButton.onclick = prevIndex;
        container.appendChild(backButton);

        info = document.createElement("div");
        info.style.position = "absolute";
        info.style.top = "10px";
        info.style.width = "100%";
        info.style.textAlign = "center";
        info.style.opacity = "0.6";
        info.style.fontSize = "15px";
        info.innerHTML = "Double click to enter";
        container.appendChild(info);

        blogtext = document.createElement("div");
        blogtext.style.position = "absolute";
        blogtext.style.display = "none";
        blogtext.id = "blogtext";
        blogtext.onmouseover = function () {
          blogtext.style.opacity = "0.8";
        };
        blogtext.onmouseout = function () {
          blogtext.style.opacity = "0.5";
        };
        container.appendChild(blogtext);

        scene = new THREE.Scene();

        camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);
        camera.position.x = index * 300;
        camera.position.y = 55;
        camera.position.z = 250;

        imageArray = [
          "portrerogarden.jpg",
          "nb.jpg",
          "night.jpg",
          "ship.jpg",
          "duboce2.jpg",
        ];

        infoCards = [
          `PORTRERO GARDEN
          <br>
          <a href="http://subcity.tk?lat=37.759844&lng=-122.405364&zoom=16&markers=%5B%7B%22coordinates%22%3A%20%5B-122.405364%2C%2037.759844%5D%2C%22img%22%3A%20%22favicon.png%22%7D%5D" target="_blank"> 37.759844, -122.405364</a>
          <br> <br>
          A community garden on top of a hill, that is blooming with fruits, vegetables,
          and ornamentals. A sign at the entrance mentions that before the garden was
          established in 1970, it was home to the "Goat Lady" of Portrero Hill. She used
          this vacant land to graze her herd.`,
          `NOISEBRIDGE
          <br>
          <a href="http://subcity.tk?lat=37.762422&lng=-122.419380&zoom=16&markers=%5B%7B%22coordinates%22%3A%20%5B-122.419380%2C%2037.762422%5D%2C%22img%22%3A%20%22favicon.png%22%7D%5D" target="_blank" > 37.762422, -122.419380</a>
          <br> <br>
          A hackerspace of your dreams, fully stocked with an electronics lab, wood shop,
          craft supplies, libNoiseBridge, and creative collaboration. This space is constantly
          evolving due to its doocratic philosophy, and will definitely feul your inner
          creative hacker. <br> <br> API\'s and IPA\'s flourish here.`,
          `BUCHANAN ST
          <br>
          <a href="http://subcity.tk?lat=37.770675&lng=-122.426804&zoom=16&markers=%5B%7B%22coordinates%22%3A%20%5B-122.426804%2C%2037.770675%5D%2C%22img%22%3A%20%22favicon.png%22%7D%5D" target="_blank"> 37.770675, -122.426804</a> <br> <br>
          I want to lay down here, right in the middle but a little under the metallic surface, and just watch the cars fly over me. `,
          `SHIPYARD
          <br> <a href="http://subcity.tk?lat=37.724567&lng=-122.367422&zoom=16&markers=%5B%7B%22coordinates%22%3A%20%5B-122.367422%2C%2037.724567%5D%2C%22img%22%3A%20%22favicon.png%22%7D%5D" target="_blank"> 37.724567, -122.367422</a>
          <br> <br>
          All this land has been forgotten. These are abandoned US Navy factories that
          used to be booming with the construction of navy ships during World War II. However,
          today all that is remaining is a desolate concrete jungle with "danger no entry" or
          "danger hazardous material" signs everywhere you turn. <br><br> Are there really?
          <br> <br> We were kicked out shortly after this photo was taken, apparently there
          are reminent radioactive materials here, and children are not allowed.`,
          `DUBOCE
          <br> <a href="http://duboceengineering.com/" target="_blank"> N/A</a>
          <br> <br>
          This is my humble abode. There are 6 of us living here + a miscellaneous number
          of french visitors. A typical day at Duboce may consist of lockpicking, hacking
          the world, existential dark-room music sessions, tea, and keith-parties. <br> <br>
          Please visit anytime and follow the signs to take your shoes off at the door. <br> <br>
          FYI: Showers may or may not work and there is a family living in the bike storage room. `,
        ];
        numSpheres = imageArray.length;
        sphereArray = [];
        meshSphereArray = [];

        cameraController = new CameraController(camera);
        geometry = new THREE.SphereGeometry(100, 32, 32);

        for (i = 0; i < numSpheres; i++) {
          materials.push(
            new THREE.MeshBasicMaterial({
              map: THREE.ImageUtils.loadTexture(imageArray[i]),
            })
          );
          materials[i].transparent = true;
          sphereArray.push(new THREE.Mesh(geometry, materials[i]));
          sphereArray[i].position.set(300 * i, 0, 0);
          sphereArray[i].name = "mainsphere";
        }

        //set the first sphere mesh
        currentSphere = sphereArray[index];
        scene.add(currentSphere);

        //adding my basic wiremesh spheres
        for (i = 0; i < numSpheres; i++) {
          meshSphereArray.push(
            new THREE.Mesh(
              new THREE.SphereGeometry(105, 32, 32),
              new THREE.MeshBasicMaterial({
                color: 0xffffff,
                wireframe: true,
              })
            )
          );
          meshSphereArray[i].position.set(300 * i, 0, 0);
          scene.add(meshSphereArray[i]);
        }

        //set auto rotation of current sphere
        autoRotationQuaternion = new THREE.Quaternion().setFromEuler(new THREE.Euler(0, 0.002, 0, "XYZ"));

        renderer = new THREE.WebGLRenderer();
        renderer.setClearColor(0xf0f0f0);
        renderer.setPixelRatio(window.devicePixelRatio);
        renderer.setSize(window.innerWidth, window.innerHeight);
        container.appendChild(renderer.domElement);
        //stats = new Stats();
        //container.appendChild( stats.dom );
        window.addEventListener("resize", onWindowResize, false);
        //document.addEventListener('touchstart', onDoubleClick, false);
        document.addEventListener(
          "mousedown",
          function (e) {
            isDragging = true;
          },
          false
        );
        document.addEventListener(
          "mouseup",
          function (e) {
            isDragging = false;
          },
          false
        );
        document.addEventListener("mousemove", onMouseMove, false);
        document.addEventListener("dblclick", onDoubleClick, false);

        previousMousePosition = {
          x: 0,
          y: 0,
        };
      }

      function onMouseMove(e) {
        var deltaMove = {
          x: e.offsetX - previousMousePosition.x,
          y: e.offsetY - previousMousePosition.y,
        };

        if (isDragging) {
          var deltaRotationQuaternion = new THREE.Quaternion().setFromEuler(
            new THREE.Euler(toRadians(-deltaMove.y * 0.1), toRadians(-deltaMove.x * 0.1), 0, "XYZ")
          );

          currentSphere.quaternion.multiplyQuaternions(deltaRotationQuaternion, currentSphere.quaternion);
        }

        previousMousePosition = {
          x: e.offsetX,
          y: e.offsetY,
        };
      }

      function toRadians(angle) {
        return angle * (Math.PI / 180);
      }

      function nextIndex() {
        index++;
        cameraController.state = 0;
        cameraController.destination = 300 * index;
        if (index > numSpheres - 1) {
          index = 0;
          cameraController.state = 2;
        }
        if (index == 0) backButton.style.display = "none";
        else backButton.style.display = "inline";
        history.replaceState({}, "page", "?page=" + `${index}`);
      }

      function prevIndex() {
        index--;
        if (index == 0) backButton.style.display = "none"; // cant go back anymore!
        cameraController.state = 5;
        cameraController.destination = 300 * index;
        history.replaceState({}, "page", "?page=" + `${index}`);
      }

      //camera controller class that handles switching between spheres, and zooming in/out of spehres
      function CameraController(camera) {
        this.camera = camera;
        this.destination = 0;
        this.state = -1;
        this.update = function () {
          switch (this.state) {
            case 0:
              camera.position.x += 5;
              currentSphere.material.opacity = Math.max(0, currentSphere.material.opacity - 0.01);
              if (camera.position.x > this.destination) {
                var selectedObject = scene.getObjectByName("mainsphere");
                scene.remove(selectedObject);
                currentSphere = sphereArray[index];
                currentSphere.material.opacity = 0;
                scene.add(currentSphere);
                this.state = 1;
              }
              break;

            case 5:
              camera.position.x -= 5;
              currentSphere.material.opacity = Math.max(0, currentSphere.material.opacity - 0.01);
              if (camera.position.x < this.destination) {
                var selectedObject = scene.getObjectByName("mainsphere");
                scene.remove(selectedObject);
                currentSphere = sphereArray[index];
                currentSphere.material.opacity = 0;
                scene.add(currentSphere);
                this.state = 1;
              }
              break;

            case 1:
              if (currentSphere.material.opacity < 1) {
                currentSphere.material.opacity += 0.01;
              } else {
                this.state = -1;
              }
              break;

            case 2:
              camera.position.x += 5;
              if (camera.position.x > numSpheres * 300 + 100) {
                camera.position.x = -200;
              } else if (camera.position.x == 0) {
                reset = false;
                var selectedObject = scene.getObjectByName("mainsphere");
                scene.remove(selectedObject);
                currentSphere = sphereArray[index];
                currentSphere.material.opacity = 0;
                scene.add(currentSphere);
                this.state = 1;
              }
              break;

            case 3:
              if (distance < 50) {
                this.state = -1;
                currentSphere.material.opacity = 1.0;
                blogtext.style.display = "inline";
                blogtext.innerHTML = infoCards[index];

                backButton.style.display = "none";
                nextButton.style.display = "none";
                info.innerHTML = "Double click to exit";
              } else if (distance < 90) {
                camera.position.sub(currentSphere.position).multiplyScalar(0.99).add(currentSphere.position);
                currentSphere.scale.x = -1;
                currentSphere.material.opacity += 0.05;
              } else if (distance > 90) {
                camera.position.sub(currentSphere.position).multiplyScalar(0.99).add(currentSphere.position);
                currentSphere.material.opacity = Math.max(0, currentSphere.material.opacity - 0.01);
              }
              break;

            case 4:
              if (distance > 250) {
                this.state = -1;
                currentSphere.material.opacity = 1.0;
              } else if (distance < 130) {
                camera.position.sub(currentSphere.position).multiplyScalar(1.01).add(currentSphere.position);
                currentSphere.material.opacity = Math.max(0, currentSphere.material.opacity - 0.01);
              } else if (distance > 130) {
                camera.position.sub(currentSphere.position).multiplyScalar(1.01).add(currentSphere.position);
                currentSphere.scale.x = 1;
                currentSphere.material.opacity = Math.min(1, currentSphere.material.opacity + 0.015);
                blogtext.style.display = "none";
                backButton.style.display = "inline";
                nextButton.style.display = "inline";
                info.innerHTML = "Double click to enter";
              }
          }
        };
      }

      function onDoubleClick() {
        if (insideSphere) {
          insideSphere = false;
          cameraController.state = 4;
        } else {
          insideSphere = true;
          cameraController.state = 3;
        }
      }

      function onWindowResize() {
        windowHalfX = window.innerWidth / 2;
        windowHalfY = window.innerHeight / 2;
        camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(window.innerWidth, window.innerHeight);
      }

      function animate() {
        requestAnimationFrame(animate);
        //stats.begin();
        render();
        //stats.end();
      }

      function render() {
        let look = new THREE.Vector3(0, -50, -200);
        distance = camera.position.distanceTo(currentSphere.position);
        cameraController.update();
        camera.lookAt(look.add(camera.position));
        camera.updateProjectionMatrix();

        //rotate all spheres, always
        meshSphereArray.forEach(function (entry) {
          entry.rotation.y = Date.now() * 0.0001;
        });
        //currentSphere.rotation.y = Date.now()*0.0001;
        currentSphere.quaternion.multiplyQuaternions(autoRotationQuaternion, currentSphere.quaternion);
        renderer.render(scene, camera);
      }
    </script>
  

</body>]]>
	      
	    </description>
            <pubDate>Mon, 23 Oct 2017 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[WHIRPOOLS]</title>
            <link>https://codercat.tk/whirlpools</link>
            <description>
	      
	          <![CDATA[<body>
    <div id="container"></div>
    <div id="info">click anywhere</div>

    <script src="https://codercat.tk/whirlpools/three/three.min.js"></script>
    <script src="https://codercat.tk/whirlpools/three/OrbitControls.js"></script>
    <script src="https://codercat.tk/whirlpools/three/dat.gui.min.js"></script>
    <script src="https://codercat.tk/whirlpools/three/stats.min.js"></script>

    <script id="vertexShader" type="x-shader/x-vertex">
      varying vec3 vPos;
      varying vec3 vNormal;
      uniform float timeDelta;
      uniform vec3 clickedCenters[5];
      uniform int clickedCenterCount;
      uniform float magnitude;
      uniform float size;
      uniform float speed;

      const int MAX_CENTERS = 5;
      void main() {
      	vec3 p = position;
      	for (int i=0; i<MAX_CENTERS; i++){
      		if( i >= clickedCenterCount) break;
      		vec3 center = clickedCenters[i];
      		float distance = 80.0;
      		float x  = length(p-center);
      		distance = x;
      		float vMagnitude = max(magnitude - distance/100.0, 0.0);
      		p.z += sin(distance / -size + (timeDelta / speed)) * vMagnitude;
      	}
      	vec4 modelViewPosition = modelViewMatrix * vec4(p, 1.0);
      	vPos = modelViewPosition.xyz;
      	vNormal = normalMatrix * normal;


      	gl_Position = projectionMatrix * modelViewPosition;
      }
    </script>
    <script id="fragmentBasicShader" type="x-shader/x-fragment">
      uniform vec3 diffuse;
      uniform vec3 specular;
      varying vec3 vPos;
      varying vec3 vNormal;
      const int MAX_DIR_LIGHTS = 1;

      struct PointLight {
      	vec3 position;
      	vec3 color;
      };

      struct DirectionalLight {
      	vec3 direction;
      	vec3 color;
      };

      uniform PointLight pointLights [NUM_POINT_LIGHTS ];
      uniform DirectionalLight directionalLights [MAX_DIR_LIGHTS ];

      void main() {
      	vec4 addedLights = vec4(0.1, 0.1, 0.1, 1.0);
      	//vec3 N = normalize (vNormal); //NORMAL
      	vec3 V = -vPos; //VIEW VECTOR
      	vec3 N = normalize( cross( dFdx( V ), dFdy( V ) ) );

      	for(int l = 0; l < NUM_POINT_LIGHTS; l++) {
      		vec3 L = normalize(vPos - pointLights[l].position);
      		vec3 R = reflect(-L, N); //REFLECTION FROM LIGHT
      		float dist = distance(vPos, pointLights[l].position);
      		float attenuation = 1.0 / (1.0 + 0.000001*dist);
      		float spec = 0.5 * max(0.0, pow(dot(R, normalize(V)), 80.0));
      		addedLights.rgb += attenuation*clamp(dot(-L, N), 0.0, 1.0) * pointLights[l].color;
      		addedLights.rgb += spec * specular;
      	}
      	for(int l = 0; l < MAX_DIR_LIGHTS; l++) {
      		vec4 L = viewMatrix*vec4(directionalLights[l].direction, 0.0);
      		vec3 dir = normalize(L.xyz);
      		//addedLights.rgb += clamp(dot(dir, N), 0.0, 1.0) * directionalLights[l].color;
      	}
      	gl_FragColor = addedLights + 0.6*vec4(diffuse, 0.5);
      	//gl_FragColor = addedLights;
      }
    </script>
    <script>
      class Plane {
        constructor() {
          var geometry = new THREE.PlaneGeometry(9000, 6000, 400, 400);
          var uniform = {
            diffuse: { type: "c", value: new THREE.Color(0x5f15ff) },
            specular: { type: "c", value: new THREE.Color(0xffffff) },
            timeDelta: { value: 0 },
            clickedCenters: {
              type: "v3v",
              value: [
                new THREE.Vector3(0, 0, 0),
                new THREE.Vector3(0, 0, 0),
                new THREE.Vector3(0, 0, 0),
                new THREE.Vector3(0, 0, 0),
                new THREE.Vector3(0, 0, 0),
              ],
            },
            clickedCenterCount: { type: "i", value: 0 },
            magnitude: { value: 100 },
            size: { value: 150 },
            speed: { value: 80 },
          };
          this.uniforms = THREE.UniformsUtils.merge([THREE.UniformsLib["lights"], uniform]);
          console.log(THREE.UniformsLib["lights"]);
          var material = new THREE.ShaderMaterial({
            uniforms: this.uniforms,
            vertexShader: document.getElementById("vertexShader").textContent,
            fragmentShader: document.getElementById("fragmentBasicShader").textContent,
            lights: true,
            side: THREE.DoubleSide,
            transparent: true,
            derivatives: true,
          });

          this.mesh = new THREE.Mesh(geometry, material);
          this.mesh.rotation.x = -0.5 * Math.PI;
          this.mesh.position.set(0, 0, 0);

          this.vCount = this.mesh.geometry.vertices.length;
          this.startTime = Date.now();
          this.timeDelta = 0;
        }

        update(timeStamp) {
          this.timeDelta = timeStamp - this.startTime;
          this.mesh.material.uniforms.timeDelta.value = this.timeDelta;
        }
      }

      var renderer, scene, camera, controls, plane, stats;

      function init() {
        //renderer
        renderer = new THREE.WebGLRenderer();
        renderer.setPixelRatio(window.devicePixelRatio);
        renderer.setSize(window.innerWidth, window.innerHeight);
        //create scene
        scene = new THREE.Scene();
        //camera
        camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
        camera.position.set(0, 5500, 0);
        camera.lookAt(0, 0, 0);

        // Controls
        controls = new THREE.OrbitControls(camera, renderer.domElement);
        controls.userPan = false;
        controls.userPanSpeed = 0.0;
        controls.maxDistance = 5000.0;
        controls.target.set(0, 0, 0);

        // Light
        pointLight = new THREE.PointLight(0x2f00c8, 1);
        pointLight.position.set(-4500.0, 2000.0, 0.0);
        scene.add(pointLight);
        pointLight2 = new THREE.PointLight(0x42f58d, 1);
        pointLight2.position.set(4500.0, 2000.0, 0.0);
        scene.add(pointLight2);
        directionalLight = new THREE.DirectionalLight(0x2f00c8, 1);
        directionalLight.position.set(-20, 20, 30);
        scene.add(directionalLight);

        plane = new Plane();
        console.log(plane);
        scene.add(plane.mesh);

        var container = document.getElementById("container");
        container.appendChild(renderer.domElement);
        window.addEventListener("resize", onResize);
        window.addEventListener("click", function (event) {
          mouse = new THREE.Vector2();
          mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
          mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
          var raycaster = new THREE.Raycaster();
          raycaster.setFromCamera(mouse.clone(), camera);
          //find where camera intersects the x-y plane

          console.log(raycaster);
          var m = -raycaster.ray.origin.y / raycaster.ray.direction.y;
          var x = m * raycaster.ray.direction.x + raycaster.ray.origin.x;
          var z = m * raycaster.ray.direction.z + raycaster.ray.origin.z;

          if (Math.abs(x) < 4500 && Math.abs(z) < 3000) {
            plane.mesh.material.uniforms.clickedCenters.value[plane.mesh.material.uniforms.clickedCenterCount.value] =
              new THREE.Vector3(x, -z, 0);
            plane.mesh.material.uniforms.clickedCenterCount.value += 1;
          }
        });
        window.addEventListener("keyup", function (event) {
          if (event.keyCode == 83) {
            if (document.getElementById("stats").style.display == "none")
              document.getElementById("stats").style.display = "inline";
            else {
              document.getElementById("stats").style.display = "none";
            }
          }
        });
        var params = {
          magnitude: 100,
          size: 150,
          speed: 80,
        };
        var gui = new dat.GUI();
        gui
          .add(params, "magnitude", 0, 200)
          .step(1)
          .name("magnitude")
          .onChange(function (value) {
            plane.mesh.material.uniforms.magnitude.value = value;
            render();
          });
        gui
          .add(params, "size", 0, 200)
          .step(1)
          .name("size")
          .onChange(function (value) {
            plane.mesh.material.uniforms.size.value = value;
            render();
          });
        gui
          .add(params, "speed", 0, 300)
          .step(1)
          .name("speed")
          .onChange(function (value) {
            plane.mesh.material.uniforms.speed.value = 300 - value;
            render();
          });

        stats = new Stats();
        stats.dom.id = "stats";
        stats.dom.style.display = "none";
        document.body.appendChild(stats.dom);
      } // End of init

      function onResize() {
        const { innerWidth, innerHeight } = window;
        renderer.setSize(innerWidth, innerHeight);
        camera.aspect = innerWidth / innerHeight;
        camera.updateProjectionMatrix();
      }

      function render(timeStamp) {
        plane.update(timeStamp);
        controls.update();
        stats.begin();
        renderer.render(scene, camera);
        stats.end();
      }

      var timeStamp;
      function animate() {
        requestAnimationFrame(animate);
        timeStamp = Date.now();
        render(timeStamp);
      }

      init();
      animate();
    </script>
  

</body>]]>
	      
	    </description>
            <pubDate>Sun, 10 Sep 2017 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[TERMINAL PRINTS]</title>
            <link>https://codercat.tk/terminal-prints</link>
            <description>
	      
	          <![CDATA[<body>
        <div id="terminal-container"></div>
        <div id="popup">
        </div>
	<div class="jquery-particule-emitter"></div>
        <script src="https://codercat.tk/terminal-prints/main.js" defer=""></script>
    

</body>]]>
	      
	    </description>
            <pubDate>Wed, 16 Aug 2017 00:00:00 +0000</pubDate>
        </item>
    
        <item>
            <title>[GENDERGRAPH]</title>
            <link>https://codercat.tk/gender-graph</link>
            <description>
	      
	          <![CDATA[<body>

  <div id="main-col">
    <div id="center-div">
      <h1>Gender graph</h1>

      <iframe style="width: 0px; height: 0px; margin: 0px; padding: 0px; border:none;" src="https://codercat.tk/gender-graph/img/gendergraph_preview.jpg"></iframe>

      <div id="higlight">
        <p>
          Ever wonder if we can quantify a gender bias in society?
        </p>
        <p>
          Using machine learning, we can generate word associations present in a given media source.
          By looking at those associations we can tell how closely words are related to women or men.
          The Gender Graph project allows users to plot where words lie on a scale of &#34;he&#34; to &#34;she&#34; based on a selected media source.
        </p>
        <p>
          Enter your words and observe the differences that exist in the way we perceive gender.
        </p>
      </div>

      <div class="expandable-block" id="read-more-intro" style="display:none">
        <div id="description">
          <h2>Manifesto</h2>
          <p>
            Observing this chart clearly reveals that the media commonly associates toxic
            words with women. We consume this media every day therefore subliminally
            inherit these biases. Much of our community believes that feminism isn’t
            relevant anymore as women and men have “equal rights”. Hopefully this scientific
            evidence will be concrete proof of the disparities that exist in the way we perceive
            gender, and that we still have a long way to go.
          </p>
        </div>
        <div id="model-info">
          <h2>Traning sources</h2>

          <p>The Gender Graph Project currently has three models trained</p>

          <li><a href="http://mattmahoney.net/dc/textdata">Wiki</a> is the dump of English Wikipedia which include 70 000 unique words. This dataset is also know as text8</li>
          <li><a href="https://github.com/linanqiu/reddit-dataset"> Reddit </a> include on ~1.7 billion publicly available Reddit comments. It&#39;s include 2 milions unique words</li>
          <li><a href="http://www.softnet.tuc.gr/~ioannou/newsarticles.html">Google News</a> includes 94 829 news artiles, posted in Google News website</li>

        </div>
      </div>

      <div class="expander-btn-container">
        <a href="#" class="expander-btn" epandertarget="read-more-intro" defaulttext="Read more &gt;" onclick="handleExpandClick(this)"></a>
      </div>

      <div id="graph-container">
        <div id="input-container">
          <select class="input-item" id="model-dropdown">
            <option value="wiki">Wikipedia </option>
            <option value="reddit">Reddit</option>
            <option value="gnews">Google News</option>
          </select>
          <button class="input-item button" type="button" id="add-word-btn">Add Word</button>
          <input class="input-item input-box" id="new-word-input" type="text" name="newWord"/>
          <div class="spinner"></div>
          <div class="input-item status-bar" id="input-status-bar"></div>
          <div class="like-btn" id="like-container" onclick="handleLikeBtnClick(this)">
            <img class="like-elem" id="like-img" src="https://codercat.tk/gender-graph/img/heart-icon.png"/>
            <div class="like-elem" id="like-counter">0</div>
          </div>
        </div> <!-- End of input container -->

        <div id="graph-canvas"></div>

      </div>

      <div id="buttom-control">
        <div class="buttom-control-column expander-btn-container">
          <a href="#" class="expander-btn" epandertarget="how-it-works-section" defaulttext="How does it work? &gt;" onclick="handleExpandClick(this)"></a>
        </div>
        <div class="buttom-control-column reset-btn">
          <button class="input-item button" type="button" id="reset-btn">Reset Graph</button>
        </div>
      </div>

      <div id="how-it-works-section" style="display:none">

        <h1>How does it work?</h1>
        <p>
          In order for computer to understand english words, they need to be
          converted to numbers. In particular each word can be represented as a
          point in multidimensional space. It can be roughly visualized in two dimensions.
        </p>
        <video id="scater-words-video" autoplay="" loop="">
          <source src="https://codercat.tk/gender-graph/mov/scattered_words.mp4" type="video/mp4"/>
          Your browser does not support the video tag.
        </video>
        <p>
          We use the word2vec tool to generate these word vectors based on semantic
          relationships between words in a given text source. This collection of word
          vectors is called a model. We wrote <i class="em em-octocat"></i> <a href="https://github.com/sneha-belkhale/gender-word-plots" target="_blank">custom tool</a> that uses this model to
          score user words in relationship to given pair of words (in our case he and she).
        </p>
        <p>
          In order to quantify if a word is more commonly associated with women
          or men, we can find how far away this word is positioned from “she” and “he”.
          Mathematically, it can be accomplished by finding the vector direction
          between “she” and “he”, and projecting user words onto this vector using
          simple vector properties such as the dot product.
        </p>


        <video id="vector-projections-video" autoplay="" loop="">
          <source src="https://codercat.tk/gender-graph/mov/vector_projections.mp4" type="video/mp4"/>
          Your browser does not support the video tag.
        </video>

        <p>
          The length of the projection onto this axis gives us an association score,
          where values closer to 0.0 are related to “he”, and values closer to 1.0 are related to “she”.
        </p>
        <p>
          This approach give us a very good picture of semantic biases in the media. However, it is important to understand that in reality
          these models are not perfect. Factors such as data quantity, quality, and algorithmic imperfections may introduce
          noise into the model.

        </p>

        <div id="resources">
          <h1>Resources</h1>
          <li>
            <a href="https://github.com/Kif11/gender-graph" target="_blank">Gender Graph</a>
             - Source code of this web app
          </li>
          <li>
            <a href="https://github.com/sneha-belkhale/gender-word-plots" target="_blank">Word Plot</a>
             - Word scoring tool that we wrote
          </li>
          <li>
            <a href="https://github.com/dav/word2vec" target="_blank">Word2vec</a>
             - Word embeding tool that we use to generate models
          </li>
        </div>

      </div> <!-- end of how it works section -->


      <div id="credits">
        Created by <a href="https://snehabelkhale.wordpress.com/" target="_blank">Sneha Belkhale</a> and <a href="https://kiko3d.wordpress.com/" target="_blank">Kirill Kovalevskiy</a><br/>
      </div>

    </div> <!-- end of center-div -->
  </div>



<script src="https://codercat.tk/gender-graph/js/gendergraph.js"></script>


</body>]]>
	      
	    </description>
            <pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate>
        </item>
    
  </channel>
</rss>
