170+ Free PBR Materials

Recently encountered with Struffel Production on Patreon. He is creating PBR materials. The best part is that you can download these for free from his website. There are an insane amount of PBR mats: 170+ and its growing.

All of the materials on the website are under the CC0 License. This means you can use them in whatever project you want to use (even redistribute with your model), and you don’t have to give credit to the author.

The website and the work are funded through Patreon

Hero Fantasy Pack Vol 1 (Asset Review)

  • Publisher: Kristian Grundström
  • Genre: Fantasy Music
  • Asset Store Rating: - star, 2 review (Personal Rating: 5 stars)
  • Asset Store Link

This is an epic medieval / fantasy music. The package contains 4 themes, all haver a loopable version, and package contains multiple variation of each theme.

Content Quality

The asset contains four themes each of the themes has parts with different dynamics and intensity, and each parts has multiple variation.

The music was designed to work well with third party audio solutions like FMOD or Wwise. These middlewares are great tools if you want to achive Adaptive music (also known as Dynamic Music) in your game.

The four themes are:

  • Embracing Fate: a highly dynamic orchestral. 
  • Disillusional: more emotional and cinematic feel.
  • In the Mids of Ruins: or as I called it the Dwarf theme. This theme has the most parts from a calm ambient to a very high intensity one.
  • What to Come: more of a menu or a cutscene music. However one of the stinger resembles of the music in Witcher III. Not sure if it’s intentional or not, but I really like it.
  • Third party audio solution support.
  • Multiple variety to prevent monotonity

Adaptive Music with Unity

FMOD and Wwise are awesome tools, but if you don’t want to learn a third party software, you can still achive Adaptive Music with Unity itself.

Unity created a great tutorial for this: Adding Music to Your Game

And depending on my experiences this asset works very will with the tutorial! The publisher also noted the BPM value of each theme that is super helpful!

Support & Updates

The asset was published in Feb 2, 2018. There was another update in June. This is quite a fresh asset. And according to the publisher comment more music will come!

Personal Experience

I never before worked with music yet. So I had to learn  a little about it, before I made this review. The tutorial I linked above helped me a lot, and after a few hours of experimenting I came up something really cool incombat-outcombat effect.

Final Conclusion

This asset is one of my WELL SPENT MONEY recomendation.

This asset is very well made. If you need a fantasy music for your game  you should consider to buy this one.

About the Author

Adam Galla

Adam is the founder and developer of the Runemark Studio. He graduated with BSC  degree in Software Engineering in 2013.

He is working as a freelancer game developer and asset store publisher since 2014.

Animator Parameter Name Field

Sometimes we want to refer to an Animator Parameter from the inspector by name. In this case there is a chance we don’t remember the names of the animator parameters. This doesn’t look like a big deal, but it’s proven that only a few clicks can increase the work time by a lot if these few clicks are frequent. The following code improves the single text field with a dropdown button. This will show you all the parameters of the Animator on this object. You can also filter the list by animator parameter type. Let’s get started!

Animator Parameter Attribute

First we need create a new Attribute. We need two variables for this class. A Type value that will be an AnimatorControlleParameterType, and the other variable will be the FilterByType boolean. This will tell us whether or not we want to filter our parameter names based on their types.

public class AnimatorParameterAttribute : PropertyAttribute
{
   // Determines whether or not we are using Type to filter the list.
   public bool FilterByType;

   // We will only show parameters of this type.
   public AnimatorControllerParameterType Type;

   public AnimatorParameterAttribute() { }
   public AnimatorParameterAttribute(AnimatorControllerParameterType type)
   {
      FilterByType = true;
      Type = type;
   }
}

Animator Parameter Drawer

The next step is to create our Property Drawer class. This will be more complex, but the basic idea is this: 

We will grab the property (or variable if you wish) that is marked with the previously created Animator Parameter Attribute. This will give us a SerializedProperty type of variable.

From this SerializedProperty object we can reach our actual script (.targetObject) and from there the GameObject it’s attached to, finally the Animator that is on this GameObject.

If we have the Animator as reference, we can go through its parameters and collect all the names we want (filtered or not by types).

Lastly we draw a PropertyField for our string variable (this will be a simple TextField) and a little button for the dropdown list.

[CustomPropertyDrawer(typeof(AnimatorParameterAttribute))]
public class AnimatorParameterDrawer : PropertyDrawer
{
   GUIStyle _popupStyle;

   int _index;
   List<string> _names = new List<string>();
 
   public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
   {
      // Reset Names
      _names.Clear();
      _index = -1;

      // Get the Attribute
      AnimatorParameterAttribute attr = attribute as AnimatorParameterAttribute;

      // Grab the animator from the property
      var go = (property.serializedObject.targetObject as MonoBehaviour).gameObject;
      Animator a = go.GetComponent<Animator>();
      if (a != null)
      { 
         a.Rebind();

         // Iterate through the parameters
         int cnt = -1;
         foreach (var p in a.parameters)
         {
            // If the attribute is not filtered, or it has the same type
            if (!attr.FilterByType || attr.Type == p.type)
            {
               _names.Add(p.name);
               cnt++;
               if (p.name == property.stringValue)
                  _index = cnt;
            }
         } 
      }
 
      // Init popupstyle
      if (_popupStyle == null)
      {
         _popupStyle = new GUIStyle(GUI.skin.GetStyle("PaneOptions"));
         _popupStyle.imagePosition = ImagePosition.ImageOnly;
      }
      
      // Draw the property
      label = EditorGUI.BeginProperty(position, label, property);
      position = EditorGUI.PrefixLabel(position, label);

      EditorGUI.BeginChangeCheck();
      int indent = EditorGUI.indentLevel;
      EditorGUI.indentLevel = 0;

      if (_names.Count == 0)
      {
         GUI.Label(position, "No Animator is attached or it has no parameters");
      }
      else
      { 
         // Calculate rect for configuration button
         Rect buttonRect = new Rect(position);
         buttonRect.yMin += _popupStyle.margin.top;
         buttonRect.width = _popupStyle.fixedWidth + _popupStyle.margin.right;
         position.xMin = buttonRect.xMax;

         // Show a simple text field
         EditorGUI.PropertyField(position, property, GUIContent.none);
 
         // Draw a dropdown button for selecting the parameter name.
         int result = EditorGUI.Popup(buttonRect, _index, _names.ToArray(), _popupStyle);
         if (_index != result && result >= 0 && result < _names.Count)
         {
            Debug.Log(_index);
            _index = result;
            property.stringValue = _names[_index];
         } 
      }

      if (EditorGUI.EndChangeCheck())
         property.serializedObject.ApplyModifiedProperties();

      EditorGUI.indentLevel = indent;
      EditorGUI.EndProperty(); 
   }
}

Using this Attribute

Once you created these two classes, you can start to use your new Attribute. Important to note the Attribute only works with string variables. 

This is how you use it:

[AnimatorParameter] 
public string ParameterName;

This is a basic useage, the dropdown will contain every parameter name you have in the Animator that is on this GameObject. However you can define a type to show only those parameters that has the given type. 

You can do it this way:

[AnimatorParameter(AnimatorControllerParameterType.Float)] 
public string ParameterName;

You can use the following types:

  • AnimatorControllerParameterType.Float
  • AnimatorControllerParameterType.Int
  • AnimatorControllerParameterType.Bool
  • AnimatorControllerParameterType.Trigger

About the Author

Adam Galla

Adam is the founder and developer of the Runemark Studio. He graduated with BSC  degree in Software Engineering in 2013.

He is working as a freelancer game developer and asset store publisher since 2014.

30GB+ High Quality Sound Effects for FREE

SONNISS.COM giving away more than 30GB of royality-free and commercially useable high-quality sound effects as a celebration of GDC 2018.

The package contains about 1000 audio files in a wide range of topics: magic, door opening, human voices, lots of cars…etc. You can check the complete track list HERE.

About Sonniss.com

Sonniss was launched in 2014, nowdays they have more than 300.000 sound effects from city ambience to futuristic weapons. All of them are high-quality, and the company has a strict quality control procedure to assure it stays that way.

Their sounds have been used in Emmy-award winning films, worls-renowed TV shows, high-budget AAA games, indie productions and popular apps.

Village Interiors Kit (Asset Review)

  • Publisher: 3D Forge
  • Genre: 3D Fantasy Environment
  • Asset Store Rating: 5/5 star, 116 review
  • Asset Store Link

Quite hard to write an objective review about an asset like this. I bought this package in 2014, and I’m in love since then. 

The asset is an environment pack for medieval-fantasy Tavern, Castle, Cathedral, Catacomb and Crypt interiors. It contains an incredible amount of prefabs  (2800+), and it’s totaly modular.

Content Quality

The asset is well optimized and suitable for both Desktop and Mobile games.

The meshes are low poly models, and nicely UV-mapped: the thousands of meshes are using only a dozen of materials. 

Textures: the package contains two set of textures. There is an 1k resolution diffuse-only texture map, and a 2k resolution HD map set that includes diffuse, normal and ambient occlusion maps. 

The asset does not support PBR (Physical Based Rendering). However the texture quality is very nice, and without any advanced lightning setup, you can create very good looking scenes.

Worth noting, that the icluded scenes doesn’t use any post processing effects.

  • Low-poly meshes
  • Mobile Friendly
  • Multiple texture quality
  • Looks cool with simple lightning setup and without post-processing effects.
  • No PBR support

Asset Useage & Modularity

The package main feature is modularity. And it’s designed very nicely. You can build very wide variety of interiors from floors and walls. The idea is based on the 2.5m x 2.5m floor tiles that can be snapped together by vertexes (you can use the Unity built-in vertex snaping). You can also snap the walls to the floor tiles with vertex snapping.

The package contains 12 different texture for floor tiles, and 15 for walls. You can find 20 different wall shapes (corners, walls with doorway…etc). But this is just the top of the iceberg. You can find endless number of detail elements, pillars, beams, stairs, furnitures in the package.

What type of project can you use? 

Since the package already has demo scenes for Cathedrals, Catacombs, Crypts, Taverns and Castles. You obviously can use to create this type of environment.

But, becouse it uses a very basic pieces as building blocks, with some creativity you can create much more. I actually created a ship cabin with this package (you can check it below, but keep in mind this was a fast prototype, that I made within an hour)

Folders are well organized

This might or might not a preference when you want to buy a model package. But when you are working with a huge model library like this, not a bad thing if it’s organized well. 

Support & Updates

As I mentioned at the start, I bought this product in 2014. In these three years the package increased a lot. Every few months a new and free update comes out.

Cobus – the man behind this package – is a kind person, and pays attention on feedbacks and requests. Very good example of the good support term.

Personal Experience

Since I bought this asset I used it for several projects. I really like to work with this package and have lots of fun doing so. You can check some of my works above.

 

Final Conclusion

This asset is one of my MUST HAVE recomendation. If you are thinking about buying this, you definitly should do. Trust me, you won’t regret it!

About the Author

Adam Galla

Adam is the founder and developer of the Runemark Studio. He graduated with BSC  degree in Software Engineering in 2013.

He is working as a freelancer game developer and asset store publisher since 2014.