Jump to content

[Tutorial] How To Create a Realistic Water Text Effect


K4rMa

Recommended Posts

How To Create a Realistic Water Text Effect

 

article-title-image-real.jpg

 

 

Introduction

 

In this tutorial we will be creating a realistic water text effect that is sure to catch someones eyes. This tutorial requires some basic knowledge of Photoshop and how to work in it’s environment. For our the text itself we will be using a specific font and will be downloading it later so some skills on how to install font’s will be necessary as well.

 

But that’s pretty basic knowledge and I am sure everyone that does tutorials knows these things by now. If not, feel free to comment and we’ll sort it out.

 

This tutorial consists of only 5 steps but the effective layering and blending modes will make your text look frightenly realistic if executed in the right way and with a bit of patience. Feel free to do any modifications after you’re done with the tutorial. Refine it and make changes. That way you will learn the mechanics of the tutorial and later on apply it to any project that it might fit for.

 

 

Step 1 - The Background

 

We will be needing a nice background to write out text in water on. You can pretty much pick whatever background you like as long as it suites your needs. I will go ahead and use scratched metal background. Feel free to download the image:

 

scratched-metal.jpg

 

Step 2 - Font & Typing

 

Time to type out our text. I will go with the name of this site “Minervity”. You can go ahead and type whatever you like, the tutorial is not dependant on it. The font we are going to use is “Ashcan BB” from 1001fonts.com and can be downloaded here: http://www.1001fonts.com/fonts/win/ttf/3113/ashcanbb_tt.zip

 

Make sure you use the color “#A0A0A0” for your text as this is crucial for the effect later on.

 

I am using font random font sizes for each letter when I type my text. One really important thing here is to make sure you’re just not typing out what you want to type. We need to mix it up a bit to make it look more realistic in it’s appearance. We can do this by typing one letter at a time each in it’s own layer. Why you might ask. Well, cause we want the possibility to rotate and mess around with the letters so they really look like they are “finger painted” using the water on the pane.

 

So, when typing make sure you work with the text and imagine how it would look if it was raining outside and you could play with the water droplets to form your desired text. This is how I typed it:

 

minervity-layout-text.jpg

 

When you feel you have a good layout of your text we have to get them all into one single layer. This we can achieve by selecting all our layers and then pressing “CTRL+E” which will “Merge” our layers into one single layer ready to be worked on.

 

Step 3 - Effects

 

 

Time to add some effects to the text layers to make it look like water. The effect in itself is really easy but it’s the massive randomness that makes the picture really. The more you work with the picture the more alive it will get. I will tell you how to do it later on in this tutorial. Now, let’s add those layer blending effects.

 

So, select the text layer, and change the “Blending Mode” for the layer to “Overlay“.

 

With our layer still selected, open up the “Blending Options…” panel by either right clicking the layer or choosing “Layer” -> “Layer Style” -> “Blending Options…”

 

There three “Tabs” we are going to work with here. First select the “Drop Shadow” tab and insert these settings:

 

drop-shadow-settings1.jpg

 

Now select the “Inner Shadow” tab and insert these settings:

 

inner-shadow-settings.jpg

 

Select the “Inner Glow” tab and insert these settings:

 

inner-glow-settings.jpg

 

And last we are going to set some settings in the “Bevel and Emboss” tab. Open it up and insert these settings:

 

bevel-and-emboss-settings.jpg

 

Important to remember here as well is to really check where you have the light source. Which direction is the light coming from and then set it in these settings as well for the best result possible.

 

 

Step 4 - Additional Water Droplets & Streams

 

 

Now our text should start to look like water. Here’s how my text is looking right now:

 

water-text-layout.jpg

 

 

We still have to add some elements in order for it to look really believable. We can accomplish that by adding a new layer. Call it “Rain” to more easily distinguish it from the “Text” layer.

 

Select our “Text” layer and right click. Select “Copy Layer Style“. Now select the “Rain” layer and right click on it. Select “Paste Layer Style“. Now we have copied all the “Text” layers attributes and effects into our new layer and we are ready to start adding new elements to our new layer. Here you can be really creative. You will be able to play with “Rain” in a way. It’s going to look like you are anyways. Try to mimic real drops of rain laying on a flat pane but also add some streams in various sizes and shapes. You can also play around a bit with the “Text” layer to make the text look a bit more naturally “drawn” in water.

 

Simply select the “Brush” tool and start drawing. Remember to pick different sizes of your brush to make it more random. Also remember to draw with the color “#A0A0A0” This is how I made my additional elements:

 

water-text-drip-layout.jpg

 

As you can see I have randomized the droplets quite a lot to get that “Real Water” feeling. The spurs of droplets put into patters is done because we later will add some condense to the picture to make it a little bit more realistic. Condense occurs when the water is cold and reacts to the warmer surface. Remember, I have once again “Merged” my layers (”Text” layer and “Rain” layer into one to get that flow:y effect. What’s really important to remember here is that you have to take off any effects on the layer you want to merge with the layer underneath it. Otherwise the effect will be all wrong and you won’t be able to work it or adjust it if you feel creative.

 

So, once you are satisfied with you water layout take off the effects on the upper layer and then merge it with the one underneath. All should be OK now.

 

Step 5 - Adding Condense

 

Now it’s time to add some condense to the image to get that last realistic look. Create a new layer underneath you water layer. This is important ad you don’t want condense on your text or on any droplets as they are always on top. Then add with the “Polygon Selection Tool” straight lines and selections to really add that “cold” feeling to it. I have gone ahead and done the selection around the groups of droplets as the droplets usually are a bit more collected in the condense as it’s also generating water. Be creative and really think of how it might look. I had a reference picture to really mimic the natural way condense is occurring. Remember to still use the same color as before. Here’s the reference picture I used:

 

foggy-window.jpg

 

fter you are satisfied with the way your condense is added we need to make it more realistic as well. So, with the “Condense” layer selected go to “Filter” -> “Noise” and the select “Add Noise…” to open up the Noise panel. With it open insert these settings and press “OK“:

 

condense-noise-settings.jpg

 

Now our condense is a little bit more fuzzy in it’s appearance. But we are not done yet. If you have condense going directly underneath your text or streams make sure to delete those particular parts by using the “Polygon Selection Tool” once again and delete what you select.

 

After doing that we need to set the “Opacity” of the “Condense” layer to make it not so dominant in the picture. So, with the “Condense” layer selected set it’s “Opacity” to “15%“. Now it should blend in really nicely making it look like real condense.

 

After applying the condense to our image it should now look something like this:

 

water-text-finished.jpg

 

There, our image is all done. There are a million ways to create your water text. It’s entirely up to you and your creativity really.

 

 

CREDITS ~~> See first piC

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • I use l2fandc files. I need a java code, I've been searching a lot and waiting for help. What I want to do is to teleport to the players doing pvp. So it's like finding the flag player. I found some files but they did not fit my system. I'm waiting for help..   EXAMPLE:     package handlers.bypasshandlers; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.enums.ChatType; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; /**  * @author Mobius (based on Tenkai pvpzone)  */ public class FindPvP implements IBypassHandler {     private static final String[] COMMANDS =     {         "FindPvP"     };          @Override     public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)     {         if (!Config.ENABLE_FIND_PVP || !target.isNpc())         {             return false;         }                  L2PcInstance mostPvP = null;         int max = -1;         for (L2PcInstance player : L2World.getInstance().getPlayers())         {             if ((player == null) //                 || (player.getPvpFlag() == 0) //                 || (player.getInstanceId() != 0) //                 || player.isGM() //                 || player.isInsideZone(ZoneId.PEACE) //                 || player.isInsideZone(ZoneId.SIEGE) //                 || player.isInsideZone(ZoneId.NO_SUMMON_FRIEND))             {                 continue;             }                          int count = 0;             for (L2PcInstance pl : L2World.getInstance().getVisibleObjects(player, L2PcInstance.class))             {                 if ((pl.getPvpFlag() > 0) && !pl.isInsideZone(ZoneId.PEACE))                 {                     count++;                 }             }                          if (count > max)             {                 max = count;                 mostPvP = player;             }         }                  if (mostPvP != null)         {             // Check if the player's clan is already outnumbering the PvP             if (activeChar.getClan() != null)             {                 Map<Integer, Integer> clanNumbers = new HashMap<>();                 int allyId = activeChar.getAllyId();                 if (allyId == 0)                 {                     allyId = activeChar.getClanId();                 }                 clanNumbers.put(allyId, 1);                 for (L2PcInstance known : L2World.getInstance().getVisibleObjects(mostPvP, L2PcInstance.class))                 {                     int knownAllyId = known.getAllyId();                     if (knownAllyId == 0)                     {                         knownAllyId = known.getClanId();                     }                     if (knownAllyId != 0)                     {                         if (clanNumbers.containsKey(knownAllyId))                         {                             clanNumbers.put(knownAllyId, clanNumbers.get(knownAllyId) + 1);                         }                         else                         {                             clanNumbers.put(knownAllyId, 1);                         }                     }                 }                                  int biggestAllyId = 0;                 int biggestAmount = 2;                 for (Entry<Integer, Integer> clanNumber : clanNumbers.entrySet())                 {                     if (clanNumber.getValue() > biggestAmount)                     {                         biggestAllyId = clanNumber.getKey();                         biggestAmount = clanNumber.getValue();                     }                 }                                  if (biggestAllyId == allyId)                 {                     activeChar.sendPacket(new CreatureSay(0, ChatType.WHISPER, target.getName(), "Sorry, your clan/ally is outnumbering the place already so you can't move there."));                     return true;                 }             }                          activeChar.teleToLocation((mostPvP.getX() + Rnd.get(300)) - 150, (mostPvP.getY() + Rnd.get(300)) - 150, mostPvP.getZ());             activeChar.setSpawnProtection(true);             if (!activeChar.isGM())             {                 activeChar.setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_PVP_TIME);                 activeChar.startPvPFlag();             }         }         else         {             activeChar.sendPacket(new CreatureSay(0, ChatType.WHISPER, target.getName(), "Sorry, I can't find anyone in flag status right now."));         }         return false;     }          @Override     public String[] getBypassList()     {         return COMMANDS;     } }
    • How are you, fucking Nazi? Haven't you been sent to the front line yet, as cannon fodder? or are you Nazi scum still hiding in the basements? you whores destroyed the inhabitants of Donbass for 8 years, and now you are a fagot hiding behind the backs of women. Nazis in Ukraine will be physically destroyed! every! we will get each of you! if not immediately, then years later you will be punished for your crimes!
  • Topics

×
×
  • Create New...