# We simulate a realistic river in Houdini and the Unreal Engine 4

3r? 3577. 3r3-31. 3r? 3562. 3r33515. Prologue 3r33516. 3r? 3517. 3r? 3577. 3r? 3519. 3r? 3577. 3r33560. Download Assets 3r36262. Unreal and Houdini. Installation video - 3r33524. here 3r?662. . 3r33535. 3r? 3577. 3r33560. Most of the project I followed tutorials 3r3353534. Ben Shriver and 3r33939. Andreas Glad 3-333562. . 3r33535. 3r? 3577. 3r33560. Do not be afraid of nodes and scripts. It is not as difficult as it may seem. 3r33535. 3r? 3577. 3r33560. For water, I used the normal map from the Unreal Starter content. 3r33535. 3r? 3577. 3r33565. 3r? 3517. 3r? 3577. 3r33515. The introduction of 3r351616. 3r? 3517. 3r? 3577. My name is Simon. I started programming in QBasic and Pascal when I was young (here is Examples 3r36262.), I immediately realized that it was difficult to code, and I switched to 3D art. At the same time, I always kept my interest in the technical side of creating games - it turned out that I became a VFX artist. This profession combines art and technology well. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. I worked as a 3D artist on 3r350. Sacred 2 3r???. and 3r3352. X: Rebirth , and the VFX artist over 3r33535. RiME 3r33562. , 3r3356. The Invisible Hours

. Now I work over 3r3358. WiLD 3r?662. . 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. blog. Game Art Trick

German 3r371. Game Dev Podcast

and YouTube channels with tutorials on 3r3554. Unreal

and 3r33556. Houdini

. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Getting to know Houdini

3r? 3517. 3r? 3577. I made friends with Houdini while working on The Invisible Hours. Then I made a small fluid simulator that could be paused, deployed and played backwards in real time. The result was this:

3r? 3577. 3r? 3517. 3r? 3577. 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. I had no idea how to add fluid modeling to Unreal. Fortunately, an amazing technology called 3r33561. Vertex-Count-Agnostic Morph Target-Based Fluid Animation

was implemented in Houdini, and so I was able to add my fluid simulation to the game. The technology was originally developed Norman Shaar 3r33562. . 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r3108. 3r? 3517. 3r? 3577. 3r3186. Source: 3r33112. Vertex-Count-Agnostic Morph targets in UE4 Norman Shaar 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. If you want to learn more about the implementation, then look at this section of my report Cool Stuff with Textures:

3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. 3r33515. Effect of the river: the beginning of the project 3-333516. 3r? 3517. 3r? 3577. I wanted to learn how to make a procedurally-generated river for 3r33544. Realtime VFX River Challenge

but had no idea where to start. By chance I came across a posh tutorial from Ben Shriver 3r3-3562. where he talks about rivers at Horizon Zero Dawn. I was hooked and I decided to try it! 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r3148. 3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. By the way, there is another very cool tutorial along the Houdini rivers from 3r3155. Andreas Glada 3-333562. : 3r33517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r3164. 3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. These videos helped me a lot in the beginning and became the foundation. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. A very complex way to build landscapes 3r3-35166. 3r? 3517. 3r? 3577. The relief was very difficult. I will illustrate the creation process so that everyone understands:

3r? 3577. 3r? 3517. 3r? 3577. 3r3183. 3r? 3517. 3r? 3577. 3r3186. Source: 3r3187. Creating terrain in Houdini 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Just kidding It's too easy. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. The effect of the river 3r3-3516. 3r? 3517. 3r? 3577. The first steps are 100% copied from Ben's tutorial, and they are cool. First you create a spline and let it “fall” on the ground. This is done by reading the height of the relief at the points of the spline, and then moving the points to this height:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. A small Python script ensures that the spline point in 3D space will never be higher than the previous one:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Finally, we reach the step where I bring in my own ideas: add colors to the spline to mark where the slope is (green), where it starts (turquoise) and where it ends (red). This will help me later to mix different water textures and place particle systems. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Then for each point of the terrain you draw rays up. If they fall into the geometry of the river, then these points will move up to the point of entry:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. This gif shows what happens when the spline changes: 3r33517. 3r? 3577. 3r? 3517. 3r? 3577. 3r3304. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Then the height area of the landscape is converted into polygons and re-mixed. Now it is ready for use in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Now let's talk about UV conversion, materials, current maps and much more. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Geometry of the river 3-333516. 3r? 3517. 3r? 3577. The geometry of the river, which you saw before, was used only for cutting terrain. This river is a bit thinner, has UV and was divided (note that my colors of the slopes are still there):

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Generation of UV

3r? 3517. 3r? 3577. Since the spline always varies in length, UV must adapt to this. Fortunately, it is very easy in Houdini. First you create UV in 0-1-UV-Space, and then measure the length of the spline. This value can be used to scale UV. Here you see how I change the spline, and at the bottom - how UV automatically adapts. Believe me, if you once tried this, then never again want to create UV manually. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. The mainstream

3r? 3517. 3r? 3577. Another detail: I wanted to make the course darker and wet. To do this, I spend up a few rays from each polygon of the landscape, and if I get into the river, I assign color to all points of this polygon. The created mask looks like this:

3r? 3577. 3r? 3517. 3r? 3577. 3r33356. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. And here is an example using a mask in a material to assign different values of vagueness and roughness:

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Map of the flow 3r3353516. 3r? 3517. 3r? 3577. Creating a flow map with Houdini is very easy. You just say to a special node “this is my river geometry, and this is a spline that indicates the direction of the river” and a boom, the geometry suddenly gets the vertex colors representing the flow of the river: 3r351717. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. To make foam on the water around the obstacles, I use the so-called isoOffset node. It basically stores the distance to the object in the color of the top of the river. Then I added some noise and the mask is ready:

3r? 3577. 3r? 3517. 3r? 3577. 3r3409. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. To make the foam mask less static, I use a simple cloud-based Photoshop template that I move along the river and subtract it from the original mask: 3r31717. 3r? 3577. 3r? 3517. 3r? 3577. 3r33418. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. And since we are talking about foam: the cascades also have a simple foam texture, which is shown only on the slope of the river. The structure of the foam scrolls faster than river water: 3r3353517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33427. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Particle systems 3r3516. 3r? 3517. 3r? 3577. I noted where the upper and lower parts of my cascade are located, so I can filter these elements (the lines were used to create the geometry of the river), create a point in their center and copy the dummy-box into it. Later we will replace it with the particle system in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33440. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. For particles around obstacles, I use a node called Intersection Analysis to get the intersection of obstacles and the river. These intersection edges have points. To their random number, I copy the dummy-box again (which later exchanges with the particle system in Unreal): 3r31717. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. The so-called Houdini engine is a plug-in for Unity, Unreal, 3ds Max, Maya and Cinema 4D and executes the network of nodes that you create in Houdini directly in the specified programs. I need to make the terrain and river appear to save the Houdini file as a digital asset. It can be imported and used like any other resource in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33471. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Now I can change the parameters (which I set in Houdini) or change the spline so that the river flows in a different way:

3r? 3577. 3r? 3517. 3r? 3577. 3r38080. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Materials are still being created and assigned to Unreal, but you can pre-assign them (my tutorial on this below). 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Should we study Houdini workflows in the same way? 3r? 3516. 3r? 3517. 3r? 3577. There is much to learn in Houdini. In addition, these are new development tools, so there will be inaccuracies in the documentation. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. But this is an ordinary sieve.for game developers. We are constantly working with advanced technologies that need to be tamed first. Most importantly: you are not alone. 3r? 3529. Thinking Procedural Discord

full of cool guys that will help and teach. You can even find SideFX developers in these chat rooms! 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. References

3r? 3517. 3r? 3577. 3r? 3519. 3r? 3577. 3r33560. 3r? 3522. Assets 3r36262. Unreal and Houdini. Installation video - 3r33524. here 3r?662. . 3r33535. 3r? 3577. 3r33560. 3r? 3529. Chat Discord: Houdini Thinking Procedural

3r33535. 3r? 3577. 3r33560. 3r? 3534. Ben Shriver Tutorial

3r33535. 3r? 3577. 3r33560. 3r? 3539. The tutorial of Andreas Glad 3r-3662. 3r33535. 3r? 3577. 3r33560. 3r3544. River Challenge Thread

3r33535. 3r? 3577. 3r33560. 3r3-3549. Report on Liquid Implementation in The Invisible Hours

3r33535. 3r? 3577. 3r33560. YouTube channels with tutorials on 3r33554. Unreal

and 3r33556. Houdini

3r33535. 3r? 3577. 3r33560. 3r33561. Vertex-count-agnostic Morph Targets by Norman Shaar

3r33535. 3r? 3577. 3r33565. 3r33573. 3r? 3577. 3r? 3577. 3r? 3577. 3r33570. ! function (e) {function t (t, n) {if (! (n in e)) {for (var r, a = e.document, i = a.scripts, o = i.length; o-- ;) if (-1! == i[o].src.indexOf (t)) {r = i[o]; break} if (! r) {r = a.createElement ("script"), r.type = "text /jаvascript", r.async =! ? r.defer =! ? r.src = t, r.charset = "UTF-8"; var d = function () {var e = a.getElementsByTagName ("script")[0]; e.parentNode.insertBefore (r, e)}; "[object Opera]" == e.opera? a.addEventListener? a.addEventListener ("DOMContentLoaded", d,! 1): e.attachEvent ("onload", d ): d ()}}} t ("//mediator.mail.ru/script/2820404/"""_mediator") () (); 3r33571. 3r? 3577. 3r33573. 3r? 3577. 3r? 3577. 3r? 3577. 3r? 3577.

. Now I work over 3r3358. WiLD 3r?662. . 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. blog. Game Art Trick

German 3r371. Game Dev Podcast

and YouTube channels with tutorials on 3r3554. Unreal

and 3r33556. Houdini

. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Getting to know Houdini

3r? 3517. 3r? 3577. I made friends with Houdini while working on The Invisible Hours. Then I made a small fluid simulator that could be paused, deployed and played backwards in real time. The result was this:

3r? 3577. 3r? 3517. 3r? 3577. 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. I had no idea how to add fluid modeling to Unreal. Fortunately, an amazing technology called 3r33561. Vertex-Count-Agnostic Morph Target-Based Fluid Animation

was implemented in Houdini, and so I was able to add my fluid simulation to the game. The technology was originally developed Norman Shaar 3r33562. . 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r3108. 3r? 3517. 3r? 3577. 3r3186. Source: 3r33112. Vertex-Count-Agnostic Morph targets in UE4 Norman Shaar 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. If you want to learn more about the implementation, then look at this section of my report Cool Stuff with Textures:

3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. 3r33515. Effect of the river: the beginning of the project 3-333516. 3r? 3517. 3r? 3577. I wanted to learn how to make a procedurally-generated river for 3r33544. Realtime VFX River Challenge

but had no idea where to start. By chance I came across a posh tutorial from Ben Shriver 3r3-3562. where he talks about rivers at Horizon Zero Dawn. I was hooked and I decided to try it! 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r3148. 3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. By the way, there is another very cool tutorial along the Houdini rivers from 3r3155. Andreas Glada 3-333562. : 3r33517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r3164. 3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. These videos helped me a lot in the beginning and became the foundation. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. A very complex way to build landscapes 3r3-35166. 3r? 3517. 3r? 3577. The relief was very difficult. I will illustrate the creation process so that everyone understands:

3r? 3577. 3r? 3517. 3r? 3577. 3r3183. 3r? 3517. 3r? 3577. 3r3186. Source: 3r3187. Creating terrain in Houdini 3r3189. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Just kidding It's too easy. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. The effect of the river 3r3-3516. 3r? 3517. 3r? 3577. The first steps are 100% copied from Ben's tutorial, and they are cool. First you create a spline and let it “fall” on the ground. This is done by reading the height of the relief at the points of the spline, and then moving the points to this height:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. A small Python script ensures that the spline point in 3D space will never be higher than the previous one:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Finally, we reach the step where I bring in my own ideas: add colors to the spline to mark where the slope is (green), where it starts (turquoise) and where it ends (red). This will help me later to mix different water textures and place particle systems. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Then for each point of the terrain you draw rays up. If they fall into the geometry of the river, then these points will move up to the point of entry:

3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. This gif shows what happens when the spline changes: 3r33517. 3r? 3577. 3r? 3517. 3r? 3577. 3r3304. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Then the height area of the landscape is converted into polygons and re-mixed. Now it is ready for use in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Now let's talk about UV conversion, materials, current maps and much more. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Geometry of the river 3-333516. 3r? 3517. 3r? 3577. The geometry of the river, which you saw before, was used only for cutting terrain. This river is a bit thinner, has UV and was divided (note that my colors of the slopes are still there):

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Generation of UV

3r? 3517. 3r? 3577. Since the spline always varies in length, UV must adapt to this. Fortunately, it is very easy in Houdini. First you create UV in 0-1-UV-Space, and then measure the length of the spline. This value can be used to scale UV. Here you see how I change the spline, and at the bottom - how UV automatically adapts. Believe me, if you once tried this, then never again want to create UV manually. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. The mainstream

3r? 3517. 3r? 3577. Another detail: I wanted to make the course darker and wet. To do this, I spend up a few rays from each polygon of the landscape, and if I get into the river, I assign color to all points of this polygon. The created mask looks like this:

3r? 3577. 3r? 3517. 3r? 3577. 3r33356. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. And here is an example using a mask in a material to assign different values of vagueness and roughness:

3r? 3577. 3r? 3517. 3r? 3577. 3r33333. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Map of the flow 3r3353516. 3r? 3517. 3r? 3577. Creating a flow map with Houdini is very easy. You just say to a special node “this is my river geometry, and this is a spline that indicates the direction of the river” and a boom, the geometry suddenly gets the vertex colors representing the flow of the river: 3r351717. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. To make foam on the water around the obstacles, I use the so-called isoOffset node. It basically stores the distance to the object in the color of the top of the river. Then I added some noise and the mask is ready:

3r? 3577. 3r? 3517. 3r? 3577. 3r3409. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. To make the foam mask less static, I use a simple cloud-based Photoshop template that I move along the river and subtract it from the original mask: 3r31717. 3r? 3577. 3r? 3517. 3r? 3577. 3r33418. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. And since we are talking about foam: the cascades also have a simple foam texture, which is shown only on the slope of the river. The structure of the foam scrolls faster than river water: 3r3353517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33427. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Particle systems 3r3516. 3r? 3517. 3r? 3577. I noted where the upper and lower parts of my cascade are located, so I can filter these elements (the lines were used to create the geometry of the river), create a point in their center and copy the dummy-box into it. Later we will replace it with the particle system in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33440. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. For particles around obstacles, I use a node called Intersection Analysis to get the intersection of obstacles and the river. These intersection edges have points. To their random number, I copy the dummy-box again (which later exchanges with the particle system in Unreal): 3r31717. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3577. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. The so-called Houdini engine is a plug-in for Unity, Unreal, 3ds Max, Maya and Cinema 4D and executes the network of nodes that you create in Houdini directly in the specified programs. I need to make the terrain and river appear to save the Houdini file as a digital asset. It can be imported and used like any other resource in Unreal:

3r? 3577. 3r? 3517. 3r? 3577. 3r33471. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Now I can change the parameters (which I set in Houdini) or change the spline so that the river flows in a different way:

3r? 3577. 3r? 3517. 3r? 3577. 3r38080. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. Materials are still being created and assigned to Unreal, but you can pre-assign them (my tutorial on this below). 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577.

3r33490.

3r33573. 3r33573. 3r33573. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. Should we study Houdini workflows in the same way? 3r? 3516. 3r? 3517. 3r? 3577. There is much to learn in Houdini. In addition, these are new development tools, so there will be inaccuracies in the documentation. 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. But this is an ordinary sieve.for game developers. We are constantly working with advanced technologies that need to be tamed first. Most importantly: you are not alone. 3r? 3529. Thinking Procedural Discord

full of cool guys that will help and teach. You can even find SideFX developers in these chat rooms! 3r? 3517. 3r? 3577. 3r? 3517. 3r? 3577. 3r33515. References

3r? 3517. 3r? 3577. 3r? 3519. 3r? 3577. 3r33560. 3r? 3522. Assets 3r36262. Unreal and Houdini. Installation video - 3r33524. here 3r?662. . 3r33535. 3r? 3577. 3r33560. 3r? 3529. Chat Discord: Houdini Thinking Procedural

3r33535. 3r? 3577. 3r33560. 3r? 3534. Ben Shriver Tutorial

3r33535. 3r? 3577. 3r33560. 3r? 3539. The tutorial of Andreas Glad 3r-3662. 3r33535. 3r? 3577. 3r33560. 3r3544. River Challenge Thread

3r33535. 3r? 3577. 3r33560. 3r3-3549. Report on Liquid Implementation in The Invisible Hours

3r33535. 3r? 3577. 3r33560. YouTube channels with tutorials on 3r33554. Unreal

and 3r33556. Houdini

3r33535. 3r? 3577. 3r33560. 3r33561. Vertex-count-agnostic Morph Targets by Norman Shaar

3r33535. 3r? 3577. 3r33565. 3r33573. 3r? 3577. 3r? 3577. 3r? 3577. 3r33570. ! function (e) {function t (t, n) {if (! (n in e)) {for (var r, a = e.document, i = a.scripts, o = i.length; o-- ;) if (-1! == i[o].src.indexOf (t)) {r = i[o]; break} if (! r) {r = a.createElement ("script"), r.type = "text /jаvascript", r.async =! ? r.defer =! ? r.src = t, r.charset = "UTF-8"; var d = function () {var e = a.getElementsByTagName ("script")[0]; e.parentNode.insertBefore (r, e)}; "[object Opera]" == e.opera? a.addEventListener? a.addEventListener ("DOMContentLoaded", d,! 1): e.attachEvent ("onload", d ): d ()}}} t ("//mediator.mail.ru/script/2820404/"""_mediator") () (); 3r33571. 3r? 3577. 3r33573. 3r? 3577. 3r? 3577. 3r? 3577. 3r? 3577.