HNTB Uses Unreal Studio to Create Project-Winning VR Experiences

After over 100 years in the infrastructure solutions business, and with offices across 25 states, HNTB is still nimble enough to move with the times. Their visualization department creates the art the company uses to help win projects. For the last fiv…

2018 Architectural 3D Awards Winners Announced

CGArchitect’s annual Architectural 3D Awards saw an exciting debut this year: the inclusion of two categories for Unreal Studio projects! These categories were specifically for users of Unreal Studio, our suite of tools for Unreal Engine designed for n…

Sci-Fi Story “The Great C” Goes Real-Time with Unreal Engine

Stories by science fiction writer Philip K. Dick have been the basis for numerous films and TV shows like Blade Runner, The Man in the High Castle and Electric Dreams. 

The latest of Dick’s stories to inspire a visual adaptation is The Great C, a post…

Advanced Text Styling with Rich Text Block

When working with game UI, the typical UMG Text block offers a healthy variety of style options and customizations. However, many developers have found the need for more flexible text that supports markup for things like style changes, inline images, hyperlinks, and much more. Much of this has already been possible with the experimental Rich Text Block widget through code. 

For the 4.20 release, the widget was made available to UMG and in the process it’s workflow polished to be more flexible and extensible than before. As part of this polishing phase, rather than attempt to support every possible customization a developer may need, we’ve set the Rich Text Block up to accept Decorator classes, enabling you to define the markup behavior you need for your project. You’ll find that a single Decorator class has been provided as an example for setting up your own decorators with RichTextBlockImageDecorator.cpp.

In this blog post, I’ll go over both how to work with the new Rich Text Block widget in UMG as a UI designer and as a programmer. I’ll explain how you can extend it with additional functionality using Decorator classes. Before diving right into adding your own customizations, it may be helpful to familiarize yourself with the newly exposed Rich Text Block functionality in UMG. The Rich Text Block widget enables you to customize the contents of your block using text styles and decorators using Data Table Assets or your own Decorator classes. 

The Data Table Asset you create is used to store any type of data based on any user-defined struct. When you create a Data Table, you’ll notice there are two provided: Text Style Row and Image Row. Text Style Row structs are part of the built-in stylings provided with Rich Text Block that enables you to define the font type, whether it is outlined, what type of color and size it should be, and much more. The Image Row is part of the provided RichTextBlockImageDecorator example class that enables you to specify any Decorator classes in the Rich Text Block widget. With it, like the Text Style Row struct, you’ll be able to define properties for in-line images such as size scaling, tint, alignment, and more. 

The RichTextBlockImageDecorator class example provides you with a starting point to create your own markup text that can be replaced with whatever Slate content you want, including things such as images, hyperlinks, and even entire widgets! Data Tables can hold any type of data and be set up in the Editor through a Data Table Asset.

Getting Started

First of all, we’ll need to create a new Widget Blueprint and use the Palette to drag a Rich Text Block onto the Canvas. With the Rich Text Block selected, use the Details panel to locate the Text Styles Set. This asset assignment slot lets us pass in a data table of styles that defines both our Text Style and any number of additional styles we may wish to use. You can go ahead and create a new Data Table by selecting this assignment dropdown and selecting Data Table or by using the Content Browser and selecting Add New > Miscellaneous > Data Table. 

When you create a Data Table, you can go ahead and create it right from inside the Details panel in UMG. Choose Rich Text Style Row for the row struct from the Pick Structure window and dropdown.

Open up your new Data Table by double-clicking it in the Details panel in UMG or from the Content Browser. In the Data Table Editor, we’ll start by creating a new row name “Default.” This row represents our text in its default state and will automatically be used by the Rich Text Block for any text where it’s not been explicitly set to a different style. 

 
Explore the different options under your newly created Default row and set the baseline style you want for the type of font, size, typeface, and more. Once you’re happy with that, go ahead and add some additional styles by clicking the plus (+) button to add a new row and then enter a name in the Row Name text box.

Back in the Widget Blueprint with your Data Table asset assigned, go ahead and add some text to the Text section of the Rich Text Block through the Details panel.

In the UMG toolbar, you may need to click the Compile button to display text in the Rich Text Block widget.

The text here is using the Default row we set up. To apply another one of your styles created in your Data Table Asset, use the following format to apply style to the wrapped text: 

Text

In this example, we wrapped the text we want to inherit the style in our tag that is used in our Data Table Asset for this row using Rich. In doing so, the text now inherits the properties we set, in this case, orange text with a black outline.

Keep in mind that this style tag does not require any prefix or postfix, such as RichText.* to work, and it is not case-sensitive. 

Using Decorators

At this point, we’re now able to apply different styles to text within the Rich Text Block but what if we wanted to inject something other text? We can use Decorators to do that by setting up our own markup tags. These markup tags let us use Slate to render anything we want seamlessly within our text. 

To get you started, we’ve included an example RichTextBlockImageDecorator class that can be used to add an image to a Rich Text Block using a Decorator class. Like the built-in stylings of the Rich Text Style Row, the Rich Image Row struct defines all the images we would want to support with in line text.

Now, we’ll continue by extending the provided RichTextBlockImageDecorator class so that we can point our subclass at the Rich Image Row Data Table that we just created. The simplest way to do this is to create a new Blueprint class, choose the RichTextBlockImageDecorator class that is provided as the parent class, open the Blueprint and assign the Data Table to the Image Set property of the class. 

Take note that in 4.20, the image decorator doesn’t appear in the list of parent classes, however, this will be supported in 4.21. For the time being, you can extend it as a C++ class and either assign your data table in the C++ file or add Blueprintable to the UCLASS macro at the top of the header in order to extend your subclass as a Blueprint. 

Once your Decorator is set up, add it to your Rich Text Block’s Decorator Classes array and insert images from your table using the following markup:
 

You may need to hit the Compile button in the toolbar for the changes to display and take effect. 

Adding New Decorators

While we do provide the RichTextBlockImageDecorator class as an example, the best part about the Rich Text Block is that you can now define your own custom decorators that leverage the full power of Slate, enabling you to add anything you want in line with your your text. To do this, you’ll need to write two classes: a URichTextBlockDecorator and an FRichTextDecorator. Once these classes are set up, you’ll be able to add your decorator to any Rich Text Block via the DecoratorClasses array in the Rich Text Block widget in UMG. You’ll also be able to use your markup to parse text with your decorators.

URichTextBlockDecorator defines an UObject class that can expose properties to the Editor’s Details panel. At a bare minimum, you’ll need to implement CreateDecorator, which should return a SharedPtr to the FRichTextDecorator instance you’ll create to do all your heavy lifting. You’re welcome to also implement any properties and utility functions here, which will let your designers create subclasses of your Decorator as a Blueprint in order to pass in whatever data they need. You might recall that the RichTextBlockImageDecorator defines a data table property so that we can pass in our table of images. Anything you want to be modified in Blueprint should exist here on the UObject. 

FRichTextDecorator is responsible for the actual parsing/substitution of markup tags and requires two functions to be implemented. The first function, Supports, is given the contents of the markup tag via an FTextRunParseResults and simply returns true or false depending on whether the decorator is actually responsible for handling of this tag. Supports will be called for every decorator in your DecoratorClasses array before falling back to just displaying the tag as regular text if we can’t find the decorator to handle it. The second function, CreateDecoratorWidget, is called to actually construct and return the widget by replacing the supported markup tag. You’ll have access to FTextRunInfo if you need any text or metadata in the tag. 

In the case of the RichTextBlockImageDecorator class, we define an SRichInlineImage widget and populate it with the correct image from our data table that is passed to the UObject wrapper class before passing it as the return value for the CreatorDecoratorWidget. 

Using Rich Text in Your Project

We’ve gone over how to use the Rich Text Block’s built-in features and how to write Decorator classes to add your own functionality. Now, how does this fit into your project’s workflow?

If you find yourself setting up the Decorator Classes array with the same set of decorators every time you make a Rich Text Block, it can be useful to your own subclass of the Rich Text widget with a default set of decorators. If you need even more control, you’ll also notice that SRich Text Block has support for custom parsers and marshallers. You can write your own parsers to change the rules on how markup tags are detected and processed, and a custom marshaller will give you control over how your text is laid out within the widget. 

While it may be tempting to start using Rich Text Blocks widgets in place of all your project’s text areas, there is a performance cost associated with parsing the text in search of tags. For anything where performance may be a concern, you’ll want to continue to use regular text blocks wherever the extra features of the Rich Text Block are not needed. 

The Rich Text Block widget opens up a plethora of possibilities for applying interesting effects to your project’s text. With it, you’ll be able to apply simple effects like text highlighting and gamepad buttons or more interactive effects like inline buttons and loot links, with decorators letting you add in anything you can imagine! 

Visit our documentation for Rich Text Block to dive in and get started using it!

Connect with Unreal Engine Throughout Europe This October

Hello Unreal Engine developers! We are excited to let you know that we will soon be travelling all throughout Europe to witness with our own eyes the quality of your projects and meet you face to face! During our extensive road trip we will strive to meet as many developers as possible as we host various gatherings and technical sessions designed to help you succeed with Unreal Engine.

We will be present in seven European cities this October and we can’t wait to connect with you while in town. Alongside our activities we will have indie booths at multiple game conferences with over 50 Unreal Engine games on display as we help European devs show off their games to press, the public and the entire industry. 

You are welcome to join one of our many events and chat with us at any time as we are here to support and help you however we can!

CIAO MILAN!

The first stop on our European tour will be Milan, Italy, where we will be taking part in Milan Games Week, October 5-7

On October 3, Epic Games will co-host a mixer in association with AESVI. The mixer will take place at Birreria “La Fontanella” in the charming district Navigli in Milan. 

Do not miss the chance for great networking with Epic’s Sjoerd De Jong and Michael Wiessmueller as you enjoy tasty, free beverages! Interested in attending? RSVP here!  

On October 5 you can attend the talk ‘Unreal Engine & The Future’ and stick around for one-on-one discussion with Sjoerd, who is very eager to meet attendees and give advice to anyone in need. More info and registration can be found here.
  

ALO BUCHAREST!

Meanwhile, field marketing manager Milena Koljensic and Unreal Engine evangelist Joseph Azzam will be visiting Bucharest in Romania, where they will participate in the Dev.Play conference, October 4-5
  

Joseph Azzam will deliver two presentations during the conference, so if you are around, don’t miss his talks on the first day, October 4! You can view the speaker agenda here.

Also, be sure to stop by the Indie Expo where you can try out projects by eight Unreal Engine developers as they are showcased throughout the conference. Of course, if you are feeling thirsty, visit us at our Networking Mixer, which will take place at Dev.Play Lounge on October 4, between 6-7PM! 

HALLO MUNICH!

While in Germany we are partnering with Games/Bavaria to put on the second edition of the Munich Unreal Engine Evening on October 8

This productive event, which will be hosted by Epic’s Sjoerd De Jong and our Munich resident- Michael Wiessmueller, will be packed with speakers coming from Bulkhead Darkhorse, FFF Bayern, and Aesir Interactive.

More info about the event and how to RSVP can be found here

CZEŚĆ WARSAW!

Our major presence in Poland starts off with an Unreal Engine Mixer in the capital city of Poland, Warsaw, on October 9!

In partnership with the Warsaw Unreal Engine Meetup group, we are inviting you to join us for talks, soft drinks, snacks and free beer! In Warsaw you can also meet up with Sjoerd De Jong and Roman Goroshkin as you network with us throughout the night. Please do RSVP for our Unreal Mixer here, as the spots are limited .

CZEŚĆ POZNAŃ!  

After Warsaw, Sjoerd and Roman will travel to Poznan where they will be present at two major events. You can meet us at PGA, October 12-14, and visit our large and prominent booth with 24 pods as Unreal developers display their projects to public and press. If you’re in attendance, please stop by and say hello to your fellow devs and our team!
  

You can also meet us at GIC and visit our talks October 12-14. Our friends from Fool’s Theory will be giving a talk on ‘Storytelling Tools Development for an RPG Game in UE4’ and you can also visit two more talks by Sjoerd, including the very first look at his new in-depth Blueprint class, which is described below:

In this advanced talk Epic’s Sjoerd De Jong will go into detail on how to use Blueprint in a future proof and scalable way. Best practices, dos and donts, and recommendations on how to utilize BP to its full potential. Collaboration topics, C++/BP workflow, as well as recommendations regarding Blueprint compilation, run-time performance, and its impact on memory. He will go over crucial but rarely covered topics with the goal of leveling up attendees who already have working knowledge of Blueprint to the point where they are fully proficient in our unique language and all of its finer details.

To pick out the talks you would like to attend, please view the GIC agenda here

We are looking forward to catching up with y’all in Poland!

ПРИВЕТ MOSCOW!

Russia, here we come! October 16-17 is reserved for participation in one of the biggest game conferences in Russia, White Nights
  

If you want to check out the latest games from our developers, please visit the Indie Area powered by Unreal Engine where you will find 10 amazing projects, waiting to be discovered! 

And, if you somehow manage to miss our evangelists during the day, we have another epic party happening during the evening on October 16! More info can be found here

HALLÅ SWEDEN!  

Last but not least is Skovde, Sweden, October 17-19, where Sjoerd will participate in SGC and hold a talk on October 18. The speaker agenda can be viewed here

As we know that conferences can be very exhausting, we have decided to host the fun Award Dinner where we hope you will join us for yummy food, drinks and mingling! Check out the SGC page for Award Dinner updates.

Finally, as we all know that one party is never enough, we connected with our close friends from Goodbye Kansas to host an after party on October 18 at Scandic Billingen, where we wish to network, enjoy drinks and celebrate our developer’s achievements. 

Questions?

We are always here to help you, so if you have any questions regarding these events or how to get in touch with us, please connect with Sjoerd (@Hourences) directly on Twitter.

We can’t wait to see you soon in Europe!

Unreal Dev Days 2018 Details Announced

Taking place first at the JW Marriott in downtown Los Angeles on October 18 and then at the beautiful St. James Theater in Montreal on November 14, Dev Days 2018 is an exclusive series of events designed for developers looking to take their pipeline to the next level with Unreal Engine.

First announced in early September, Epic has today revealed the details of what attendees can expect during this year’s event. The below sessions are geared towards game developers currently in production and are designed to help them be as successful as possible in Unreal Engine.

The Dev Days 2018 presentations are:

Session: Unreal Engine Roadmap
Presenter: Nick Penwarden, Director, Engineering, Unreal Engine, Epic Games
We’ll kick off the day with a discussion of the features and developments coming to Unreal Engine.
        
Session: Overcoming Common Early Challenges in Unreal Engine
Presenter: Zak Parrish, Senior Dev Rel Tech Artist, Epic Games

This practical discussion will present an overview of common issues that arise during a studio’s first six months on a UE4 project, focusing on solutions. Topics will include general best practices, optimization guidelines, and how to avoid common pitfalls of game development.

Session: Introduction to Niagara
Presenters: 
Los Angeles – Wyeth Johnson, Lead Technical Artist, Epic Games 
Montreal – Alan Willard, Senior Dev Rel Tech Artist, Epic Games

In this Q&A-based session we’ll give an overview of Niagara, our new VFX simulation tool, and the philosophy behind our new VFX paradigms. We’ll talk about the Niagara feature roadmap and our new suite of content examples, and discuss the tool and its uses.

Session: Making the Most of Animation Blueprints
Presenter: Kaye Vassey, Senior Technical Animator, Epic Games

This talk will cover Fortnite’s use of animation Blueprints. We’ll cover the use of Blueprints for gluing together character parts after retargeting, dynamic solutions for low LODs, and faking dynamics in higher LODs with procedural animation techniques.

Session: Adjusting Your Content to Perform on Target Hardware
Presenter: Joe Conley, Support Engineer, Epic Games

When building new content for a given platform, or porting from one platform to another, it’s very common to end up with assets that are too demanding for the target hardware. There are many tools inside of Unreal Engine that can help you align the content you made with what the hardware can actually run. In this session, we’ll compare different methods for asset reduction such as polygon reduction, LODs, merging actors, and resizing textures to see which optimizations are effective in improving performance in which scenarios. We’ll also discuss how to make your game load faster and hitch less through profiling and optimizing asset loading and garbage collection.

Session: What’s New for Animation in UE4
Presenter: Jay Hosfelt, Senior Animator, Epic Games

This talk will provide an overview of the latest animation tools in UE4. Topics include the Live Link and Control Rig plugins, and the Animation Retargeting feature.

Interested in attending? Registration is open via the links below. 

Unreal Dev Days 2018 – Los Angeles | Thursday, October 18, 2018 | 10AM – 6PM

Unreal Dev Days 2018 – Montreal | Wednesday, November 14, 2018 | 10AM – 6PM

We hope to see you there!

Epic Games to Bring Unreal Engine Expertise to Magic Leap’s L.E.A.P. Conference

Epic Games Technical Director of XR Nick Whiting has been announced as one of the keynote speakers for Magic Leap’s first-ever developer conference, L.E.A.P., taking place October 9-10 in Los Angeles. During Wednesday’s keynote, which runs from 9am to …

Unreal Engine Workshops Coming to Melbourne and Adelaide

Epic Games’ Chris Murphy (@highlyspammable), Unreal Engine evangelist for Australia, New Zealand and Southeast Asia, will be touring Melbourne and Adelaide over the next couple of weeks to lead a series of Unreal Engine workshops. 

Registration is still open, we have a few seats left and it’s free!

“Getting Started with Unreal Engine”
Thursday, October 4, 6:30-9:30pm
Location: The Arcade in South Melbourne
https://ue-4-melbourne.eventbrite.com

“Getting Started with Unreal Engine”
Saturday, October 6, 9am-12pm
Location: Torrens University
https://unreal-4-adelaide.eventbrite.com

“Advanced VFX and Technical Art in Unreal Engine”
Saturday, October 6, 12:30-3:30pm
Location: Torrens University
https://unreal-vfx-adelaide.eventbrite.com

In case you’re just getting started making games with Unreal, Chris has published a popular course on Udemy, with more than 37,000 students taking “Unreal Engine 4: How to Develop Your First Two Games.”