5
\$\begingroup\$

I am trying to rebuild the fur effect in Viva Pinata.

enter image description here

Here each square becomes a pattern of fur

enter image description here

I imagine the process to be like this...

enter image description here

U lift one end of the triangles.

Now I need to achieve "lifting one end of square". I can do either vertex, fragment, geometry shader. However I am clueless when it comes to determining which vertex is "end of square", so that I know which vertex to lift up.

\$\endgroup\$
4
+100
\$\begingroup\$

This is actually an illusion. The vertices are not lifted: There aren't enough vertices in the model to create the pinata effect.

Here are the tricks:

  • The normal map has squares in it to create the illusion of bumps
  • The diffuse map as ambient occlusion baked-in to create the illusion of high-detail self-shadows or an ambient occlusion map is used.
  • The shadow calculation gets distorted by either the normal map or a displacement/height map to create more illusion of pinata-like bumps so the shadows aren't straight-edged.
  • "Fins" are added to the model to create the fluffy paper look you see on the sides where opacity is controlled by the fin's normal relative to the view (camera).

Additionally:

  • The diffuse texture can be displaced (parallax mapping) according to the view direction and a height map to create a higher sense of depth.

Shells are not needed for the pinata effect but look up "3d Fur effect" and/or "shell and fins" for example of generating fins


A very minimalistic example (fins and baked ambient occlusion only):

Create your pinata color pattern:

Pinata flat

Add some ambient occlusion:

ambient occlusion-->mixed

Take your 3D model (A simple cube in this example so we can see how its done) and extrude the edges. These are the "fins".

enter image description here

Create a texture for those fins that reproduces how the pinata paper looks sideways:

enter image description here

Apply this texture to the fins

enter image description here

enter image description here

Voila.

Left to do: Add normal map and parallax mapping or an extra shell.


Shells are extra copies of your original geometry extruded along the vertex normal that are rendered with a mostly transparent layer to create the illusion of depth.

Fins and shells

Usually a shader is created that takes a height map and the diffuse texture to make every texel below the height threshold of each shells transparent.

Pinata flat --> One shell texture

By creating an extra layer above the original mesh a slight illusion of depth is created:

closeup with shells

The more shells are created, the better the effect.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.