# Welcome to ReneVerse

Smart Ads for a Better Gaming Experience

**ReneVerse is the in-game advertising layer for immersive experiences.**\
We enable Smart Ads (blended image/video) and Branded Objects (2D/3D in-world placements) across games of all genres and platforms.

***

### 🎯 What We Do

* **For Advertisers:** Reach players inside games—seamlessly, authentically, and at scale via programmatic or direct campaigns.
* **For Publishers:** Monetize your world with high-performing, non-disruptive ads—easily integrated via SDKs for Unity, Unreal, and Phaser.

***

### 🌍 Our Vision

> *“The future of advertising is immersive, because the future of entertainment is immersive.”*\
> — *M. Harris, VP Blizzard Media*

We believe immersive advertising should feel like a natural part of gameplay—not an interruption. We're building the future of brand-to-player connection.

***

### 🧭 Mission

Make immersive in-game advertising the global standard by helping advertisers engage authentically and enabling developers to monetize effortlessly.

***

### 🔗 [Explore More](https://linktr.ee/reneverse)

* [🌐 Website](https://reneverse.io)
* [✍️ Sign Up](https://app.reneverse.io/register)
* [📰 Blog](https://reneverse.io/learn)
* [💼 LinkedIn](https://www.linkedin.com/company/reneverse-io/)
* [🐦 X (Twitter)](https://x.com/ReneVerse_io)
* [💬 Discord](https://discord.gg/G2EGsEm3Pz)

***

{% embed url="<https://youtu.be/21hGL2JVoVk>" %}
ReneVerse Smart Ads & Branded Objects | Unreal Engine
{% endembed %}


# Smart Ads & Branded Objects

<figure><img src="/files/vX8JhtrqdXcwoDkejjXI" alt=""><figcaption></figcaption></figure>

ReneVerse offers two native ad formats—**Smart Ads** and **Branded Objects**—built for immersive monetization. Both blend seamlessly into your game world, prioritize player experience, and support live content delivery without breaking immersion.

***

### :vhs: Format Overview

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4>🖼️ <strong>Smart Ads</strong></h4></td><td><p>Smart Ads are image or video-based ad placements embedded into the game world—like digital billboards, loading screens, or signage. They are passive, non-disruptive, and ideal for brand awareness campaigns.</p><ul><li><strong>Best for:</strong> Banners, screens, signboards</li><li><strong>Dynamic Content:</strong> Yes, updates without game rebuilds</li><li><strong>Ad Performance Tracking:</strong> Yes, supports impression and view tracking, plus interactivity when enabled</li></ul></td><td><a href="/files/hsaQNWP0dMg9KjEcIB96">/files/hsaQNWP0dMg9KjEcIB96</a></td></tr><tr><td><h4>🎯 <strong>Branded Objects</strong></h4></td><td><p>Branded Objects are fully rendered 2D or 3D in-world assets—think of vending machines, branded furniture, or promotional objects that naturally fit your game's environment. These offer high visual impact and brand engagement.</p><ul><li><strong>Best for:</strong> Props, kiosks, crates, thematic assets &#x26; more</li><li><strong>Dynamic Content:</strong> Yes, loads in real-time via SDK</li><li><strong>Ad Performance Tracking:</strong> Yes, supports impression and view tracking, plus interactivity when enabled</li></ul></td><td><a href="/files/0jM44MtoxDCwOjRBeEEP">/files/0jM44MtoxDCwOjRBeEEP</a></td></tr></tbody></table>

***

### 🆚 Smart Ads vs. Branded Objects

| Feature                      | Smart Ads                  | Branded Objects                                       |
| ---------------------------- | -------------------------- | ----------------------------------------------------- |
| **Format**                   | Image or video             | 2D or 3D game object                                  |
| **Placement Method**         | Ad Surface in-game         | Placed as a standalone in-world object                |
| **Integration**              | Blends into UI/environment | Acts as a visible, interactive object                 |
| **Use Case**                 | Billboards, screens, signs | Vending machines, posters, branded crates + much more |
| **Supports Live Ad Updates** | ✅ Yes                      | ✅ Yes                                                 |

***

### 📊 In-Game Advertising Formats Comparison

| Ad Format              | Immersion | User Experience           | Best For                    | Limitations                                          |
| ---------------------- | --------- | ------------------------- | --------------------------- | ---------------------------------------------------- |
| **Smart Ads**          | High      | Non-intrusive             | Brand awareness             | Less suited for direct response campaigns            |
| **Branded Objects**    | High      | Non-intrusive & memorable | Deep brand engagement       | Requires 3D asset creation and integration           |
| **Banner Ads**         | Low       | Often intrusive           | Broad reach                 | Can disrupt gameplay and be ignored by players       |
| **Interstitial Ads**   | Low       | Highly disruptive         | Immediate visibility        | Interrupts gameplay, leading to potential user churn |
| **Rewarded Video Ads** | Medium    | User-initiated            | Monetizing non-paying users | Breaks immersion, may not align with game context    |

***

### 💡 Why Developers Use Them

#### 💸 Monetization, Simplified

* Earn revenue through **high-CPM formats**
* Revenue share: **65% to game developers**
* Unlock **new income streams** through branded placements

#### 🎮 Player-Friendly, Game-Friendly

* Non-intrusive and **context-aware**
* Fits your art style and **preserves immersion**
* **Boosts player retention** and in-world authenticity

#### ⚙️ Fast, Scalable, One-and-Done

* Define once, scale across levels
* **Drop-in SDKs** for Unity, Unreal, Phaser
* Minimize dev time with tools to manage inventory and track performance


# Smart Ads

Reach Gamers Where They Play with Smart Ads

## What are Smart Ads?

**Smart Ads** are ReneVerse's non-intrusive ad formats designed to blend seamlessly into the game environment. They are contextually relevant, dynamic and updated in real time, enhancing the realism of the game world.&#x20;

With immersive, scalable ad formats, Smart Ads introduces Web2 and Web3 games to non-intrusive advertising and product placement that both developers and players can appreciate. In games that have integrated the ReneVerse SDK, Smart Ads can deliver dynamic image and video ad content to the surface of any in-game asset as desired by the game developer.&#x20;

[**How does it work?**](#user-content-fn-1)[^1]

Our ReneVerse SDK makes the integration of Smart Ads quick and easy.&#x20;

To add a Smart Ad into a game, a game developer must first integrate an **Ad Surface** - essentially, an **ad slot** or placeholder where image and video content can be uploaded. After our SDK download, you will map Ad surfaces in your game - choosing as many as you like. &#x20;

By mapping, each surface gets an ID, which the SDK will use to serve the Smart Ad.

Once a game developer has determined where their Ad Surfaces will be placed within their game environments (with all Ad Surfaces readily mapped), the ReneVerse SDK handles receiving advertisement content from Advertisers via the **ReneVerse Portal**. &#x20;

That's it - quick and simple.&#x20;

**Why should I integrate Smart Ads into my game?**

By integrating our Smart Ads, game developers can **unlock new revenue streams** without compromising the integrity of their games. Through our ad revenue system and tracking of player-consumer data, ReneVerse offers **revenue-sharing** with 65%[^2] of all ad dollars distributed back to game developers.

Besides earning revenue, your game also benefits from ads that function non-intrusively and **protect gameplay sanctity**. ReneVerse can advise where ad surfaces are likely to perform best while complementing the natural flow of your game. The final decision is ultimately yours.

Finally, our platform is way **easier and faster than other ad-monetization tools**, which reduces development workloads and lead times. It provides you with the tools to manage ad inventory, track ad performance, and optimize your revenue.&#x20;

***

### Integrating Smart Ads

Visit [Publisher Flow](/publisher-flow/publisher-overview) to dive into the step-by-step guide for preparing your game for Smart Ads.

{% content-ref url="/pages/FSlogGyup4gt2iNEksqh" %}
[Publisher Flow](/publisher-flow/publisher-overview)
{% endcontent-ref %}

[^1]:

[^2]: 65%


# Branded Objects

2D/3D In-Game Objects for Custom Product Placement

### What Are Branded Objects?

**Branded Objects** are a first-in-class, immersive in-game **product placement** format that enhance in-game objects with advanced advertising functionalities.&#x20;

Designed to enable a wide range of creative implementations, Branded Objects are a premium format meant for custom brand awareness campaigns, without increasing the complexity of integration.

#### What do Branded Objects look like in-game?

In-game, they function like any other **2D or 3D in-game object** within the playable environment. As a player, you might see a "real-life" Unilever store inside of a virtual city environment that you can walk into and browse the shelves. Perhaps, you're playing a racing game, and you speed through a power-up item, shaped as a Redbull energy drink, to blow by your competition.&#x20;

These examples are just a few of virtually limitless creative implementations that let players interact with brands in-game naturally, augmenting their player experience with unique and memorable brand exposure.

#### How do Branded Objects perform as ad formats?

From an advertising standpoint, these Branded Objects aren't just hard-coded elements of the game. They are fluid, dynamic, and data-rich ad formats that can change their appearance independently of the game and track robust performance metrics.&#x20;

For one, Branded Objects are **dynamically-served**, just like Smart Ads; an advertiser can upload a Branded Object to ReneVerse, and it will be loaded into multiple ReneVerse-enabled games simultaneously to designed placeholders within those games.&#x20;

Second, they are **contextually-targeted**. This means that a Branded Object placement inside of one game may show objects from different brands to different players, depending on their demographics. For example, a sports car in a racing game may be a Chevrolet Corvette for a user in the United States and a Nissan GT-R for a user in Japan.&#x20;

Finally, like Smart Ads, they are **performance-tracking ad units** that capture data like no other in-game product placements on the market. More on this in the next section.

***

### Integrating Branded Objects

{% hint style="info" %}
Branded Object functionality is coming soon! Stay tuned.
{% endhint %}


# Advertising Demand via ReneVerse

How advertisers curate campaigns and bring brands into your game.

<figure><img src="/files/v9frb4UqwNnKADdwBrJk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/kW7UaGOLZO6LYsVKchBc" alt=""><figcaption></figcaption></figure>

ReneVerse connects your game to a growing ecosystem of high-quality advertising demand—ensuring that Smart Ads and Branded Objects feel immersive, brand-safe, and tailored to your players.

***

### 🔗 How Advertisers Reach Your Game

* Advertisers create an **Organization** in the ReneVerse Portal.
* They define a **campaign** by:
  * Selecting target games, genres, and regions
  * Uploading creative content (Smart Ads or Branded Objects)
  * Setting duration, budget, and audience tags
* If your **Ad Surfaces or Branded Object Placements** match those criteria, the ad content will be dynamically delivered to your game.

> 📸 **Screenshot suggestion**: Campaign Creation screen.

> 📦 Multiple advertisers may compete for the same surface. The ad served depends on priority, targeting fit, and real-time availability.

***

### 🚛 How Ads Are Delivered

#### 🧭 **Direct Uploads**

* Brands and agencies can directly upload ad content to ReneVerse.
* Offers **full creative control** and **brand safety** for custom campaigns.

#### 🔄 **Programmatic Access (via PubMatic)**

* ReneVerse is integrated with **PubMatic**, a leading sell-side platform.
* Enables scalable access to campaigns from global brands.
* Supports **OpenMeasurement (OM) SDK** for industry-standard viewability and interaction tracking.

<figure><img src="/files/iaYqms6haj24qpsfPHSY" alt=""><figcaption><p>Unlock premium programmatic access to Tier 1 brands.</p></figcaption></figure>

***

### 🛡️ Brand Control for Developers

Within the ReneVerse Portal, you can configure:

* **Allowed Brand Categories**
* **Targeting Tags** for each Ad Surface
* **Regional Ad Preferences**

This ensures only context-appropriate content appears in your game—protecting gameplay flow and your audience’s trust.

> 📸 **Screenshot suggestion**: Create Game, 2nd screen for IAB tagging

***

### Advertising with ReneVerse

Visit [Advertiser Flow](/advertiser-flow/advertiser-overview)to dive into the step-by-step guide for preparing your Smart Ad campaign.

{% content-ref url="/pages/KL5CTGqWX6lb3VXcTYxe" %}
[Advertiser Flow](/advertiser-flow/advertiser-overview)
{% endcontent-ref %}


# The Portal

The ReneVerse Portal is your all-in-one dashboard for managing games, ad inventory, campaigns, and organizations—built for both developers and advertisers to control their in-game ad experience.

The ReneVerse Portal is your command center for everything ad-related. Whether you're a **Publisher**, an **Advertiser**, or even a **Gamer**, this is where you manage content, campaigns, games, and teams—all in one place.

***

### 🔐 General Features

#### 👤 User Management

* Manage your profile and account settings
* Add credit to your user wallet
* Track rewards and notifications

#### 🏢 Organization Management

* Create, join, or manage an Organization
* Add and manage members
* Manage Brand(s) under your Organization
* Fund Organization-level wallets

***

### 🎮 Publisher Features

For game developers, the Portal is where you define in-game ad inventory, manage monetization, and sync with the SDK.

#### 🕹️ Game & SDK Management

* Create and configure games
* Generate API credentials
* Sync ad assets to SDKs (Unity, Unreal, Phaser)

#### 📦 Ad Inventory Management

* Create and duplicate Ad Surfaces
* Upload placeholders and define resolution
* Create Branded Object Placements
* Apply content filters and tag high-value placements

#### 💰 Ad Monetization Controls

* Configure header bidding and waterfall logic
* Cap daily ad impressions
* Monitor ad revenue in real time

***

### 📢 Advertiser Features

For brands and agencies, the Portal is where campaigns are built and launched across ReneVerse-enabled games.

#### 📋 Campaign Management

* Define campaign duration and goals
* Set targeting (Game, Genre, Region)
* Allocate budget and monitor performance
* Manage multiple Brands under one Organization

#### 🎨 Ad Content Curation

* Upload banner and video creatives
* Add Branded Object assets
* Assign creatives to active campaigns

***

### 🖥️ Portal Views

The Portal supports multiple user types with customized views:

* **Organization View** – For Advertisers and Publishers
* **Gamer View** – For players and community users

> 🧭 You can switch views anytime via the **User Profile Menu** (top-right corner).


# The SDKs

ReneVerse SDKs for Unity, Unreal Engine, and Phaser 3 enable seamless integration of Smart Ads and Branded Objects—letting developers place, serve, and track immersive in-game ads with minimal effort.

ReneVerse SDKs are your gateway to embedding immersive in-game ads directly into your project—whether you’re building in **Unity**, **Unreal**, or the **browser with Phaser 3**.

Built on a scalable API and designed for ease of use, these SDKs let you define ad placements, sync assets, and serve dynamic content—all with minimal dev overhead.

***

### 🎮 Supported Engines

#### :tools: [**Unity SDK**](/download/unity-sdk)

* Delivered as a Unity Package
* Includes in-editor placement tools and ReneVerse Settings panel
* Supports Smart Ads and Branded Object integration
* Works with Unity 2020.3+

#### 🎮 [**Unreal Engine SDK**](/download/unreal-engine-sdk)

* Available as a native Unreal plugin (UE 5.3+)
* Seamless in-editor ad placement and dynamic content serving
* Blueprint and C++ support
* OpenMeasurement-enabled for performance tracking

#### 🌐 [**Phaser 3 SDK**](/publisher-flow/sdk-integration/phaser-3)

* Available as an NPM package
* Designed for browser-based games
* Offers full control over Smart Ad display and tracking via JavaScript hooks
* NPM: [`@reneverse/rene-sdk-phaser`](https://www.npmjs.com/package/@reneverse/rene-sdk-phaser)

***

### ⚙️ Integration Flow

1. Choose your engine
2. Download the SDK
3. Follow the engine-specific guide in the [Publisher Flow](/publisher-flow/publisher-overview) →
   1. [Unity](/publisher-flow/sdk-integration/unity)
   2. [Unreal](/publisher-flow/sdk-integration/unreal-engine)
   3. [Phaser](/publisher-flow/sdk-integration/phaser-3)

You’ll be able to:

* Sync your ad surfaces and branded placements
* Serve dynamic ad content
* Track impressions, viewability, and interaction data

***

### 🚀 What’s Next?

Now that you’ve completed the ReneVerse Tour, it’s time to start building with ReneVerse!

Choose your path:

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>🎮 <strong>Game Developer?</strong></td><td>Head to the <a href="/pages/FSlogGyup4gt2iNEksqh">Publisher Flow</a> → to integrate Smart Ads and Branded Objects into your game using our SDKs.</td><td><a href="/pages/FSlogGyup4gt2iNEksqh">/pages/FSlogGyup4gt2iNEksqh</a></td></tr><tr><td>📢 <strong>Brand or Advertiser?</strong></td><td>Jump into the <a href="/pages/KL5CTGqWX6lb3VXcTYxe">Advertiser Flow</a> → to create immersive campaigns and connect with in-game audiences.</td><td><a href="/pages/KL5CTGqWX6lb3VXcTYxe">/pages/KL5CTGqWX6lb3VXcTYxe</a></td></tr></tbody></table>


# ReneVerse Platform

Explore ReneVerse's SDK and Portal to Leverage Borderless Ads

The ReneVerse platform is constructed of multiple layers to serve players, developers, advertisers, and creators, each with their own needs and objectives. For all parties, the toolkit is designed to be easy to use and does not require prior knowledge of web3 or blockchain tools. For game developers who wish to integrate Borderless Ads into their games, there are two key modules needed.

1. **ReneVerse Portal** – A management hub that lets developers connect their game to ReneVerse, create/manage/edit in-game assets including Branded Assets, define Ad Surfaces, and authenticate players.
2. **SDKs** (Unity) – The SDKs enable game developers to easily integrate ReneVerse Borderless Ads functionality directly into their game inside their game editor with intuitive drag-and-drop controls.&#x20;

*NOTE: Unreal Engine SDK is coming soon.*


# Getting Started with ReneVerse

Welcome to ReneVerse! Whether you're a game developer, advertiser, or creator, we’ve tailored our documentation to help you achieve your goals quickly and efficiently.

## 🧩 Preview of First Steps

1. **Register Your Account**\
   Sign up at [app.reneverse.io/register](https://app.reneverse.io/register) and verify your email with a One-Time Password (OTP).
2. **Create an Organization**\
   Set up your team’s workspace—this is where you’ll manage games, ads, and assets.
3. **Invite Members**\
   Collaborate by inviting teammates to your Organization. Each user can have specific roles and permissions.

## **Start Here** :point\_down:

{% content-ref url="/pages/wKnm4KHs5bYIc2FLVO0i" %}
[Registering as a New User](/getting-started/registering-as-a-new-user)
{% endcontent-ref %}

***

## 🙋 Choose Your Role

Once your Organization is set up, continue below based on how you'll use ReneVerse:

### 🎮 I’m a Publisher (Game Developer)

Start here if you want to monetize your game with Smart Ads & Branded Objects.

**You’ll Learn:**

* How to connect your game to ReneVerse
* How Smart Ads & Branded Objects work in-game
* Ways to optimize performance and user experience

{% content-ref url="/pages/FSlogGyup4gt2iNEksqh" %}
[Publisher Flow](/publisher-flow/publisher-overview)
{% endcontent-ref %}

***

### 📢 I’m an Advertiser (Brand or Agency)

Start here to create, launch, and manage intrinsic in-game ad campaigns.

**You’ll Learn:**

* How to launch targeted in-game campaigns
* How to design compliant ad assets
* How to monitor ad performance and ROI

{% content-ref url="/pages/KL5CTGqWX6lb3VXcTYxe" %}
[Advertiser Flow](/advertiser-flow/advertiser-overview)
{% endcontent-ref %}


# Registering as a New User

Welcome to ReneVerse! Let’s get you set up with your account so you can start exploring our platform. Follow these simple steps to create your ReneVerse account and join our community.

### 🔗 Step 1: Create Your Account

Go to [**app.reneverse.io/register**](https://app.reneverse.io/register) and complete the form with:

* Your Full Name
* A valid Email Address
* A secure Password

We’ll send a One-Time Password (OTP) to your email for verification.

<figure><img src="/files/zlcaJX97CzcCkCDOqdPW" alt=""><figcaption><p>ReneVerse Account Registration</p></figcaption></figure>

<figure><img src="/files/co7Jw2N2ekidgfQxYXsK" alt=""><figcaption><p>Enter the OTP Code sent to your email.</p></figcaption></figure>

<figure><img src="/files/2wYpd7eHzKToa5v4UYqU" alt=""><figcaption><p>Enter the OTP Code sent to your email.</p></figcaption></figure>

> 📸 **Screenshot suggestion**: Full-width screenshot of the registration form with example data filled in. Use callouts to highlight required fields.

***

### ✉️ Step 2: Check Your Email for the OTP

Open your inbox and find our email with your OTP code.

> ❗ **Can’t find it?**

* Check your **Spam** or **Promotions** folder.
* If it’s there, mark ReneVerse as “Not Spam” or “Trusted.”
* Still nothing? Click **“Send again”** on the form to get a new code.

> 📸 **Screenshot suggestion**: Mock email inbox showing the OTP email, with the OTP code clearly visible.

***

### 🔐 Step 3: Enter the OTP

Type the 6-digit OTP from your email into the verification field to confirm your account.

> 📸 **Screenshot suggestion**: OTP verification screen with sample code being entered.

***

### All set!

Welcome to ReneVerse! Your account is now active. Let’s help you set up your first Organization.

{% content-ref url="/pages/LlbhwsZzauQDd1GFgbSh" %}
[Creating a New Organization](/getting-started/creating-a-new-organization)
{% endcontent-ref %}

***

#### **Need Help?**

If you run into any issues during registration, feel free to reach out to our support team at <support@reneverse.com>. We’re here to help!


# Creating a New Organization

Your Organization is your team’s central hub in the ReneVerse Portal—where you’ll manage games, ad campaigns, and cross-game assets.

### 🧭 Step 1: Open the Organization Settings

1. Click your **Profile Image** at the top-right of the screen.
2. Select **“Organizations”** from the dropdown.

> 📸 **Screenshot suggestion**: Hover state on the profile image with the dropdown visible and “Organizations” highlighted.

***

### ➕ Step 2: Create a New Organization

Click the **“+ New Organization”** button to bring up the creation form.

#### Fill in the following:

* **Name**: Your company, game studio, or team name
* **Description**: A short intro about who you are
* **Organization Picture**: Upload a logo or team image

✅ Be sure to read and agree to our Privacy Policy before submitting.

> 📸 **Screenshot suggestion**: The New Organization form, filled in with sample data and the Privacy Policy checkbox highlighted.

<figure><img src="/files/1BNEvRd7YN6BPjBJUTjt" alt=""><figcaption><p>Click on <strong>+ New Organization</strong> to get started.</p></figcaption></figure>

<figure><img src="/files/VUmy2Snk36p5Eh9PaYmp" alt=""><figcaption><p>Add your Organization details in the pop-up window.</p></figcaption></figure>

***

### 🎉 Step 3: Welcome to your Dashboard!

Once submitted, your new Organization will appear in the list.

Click your Organization tile to enter its **Home Dashboard**. From here, you can:

* 🔌 Connect and manage your game
* :video\_game: Define your ad inventory & content specifications
* 🎯 Launch immersive Smart Ad campaigns
* 🪙 Design and Deploy 2D & 3D Branded Object product placements across games

> 📸 **Screenshot suggestion**: View of the Org dashboard.

<figure><img src="/files/MtbpMnlUZyZhyNj0yLww" alt=""><figcaption><p>Home Page of ReneVerse Portal.</p></figcaption></figure>


# Invite Members to Your Team

Once your Organization is set up, you can invite your teammates to join—assigning them specific roles to match their responsibilities.

### 🧭 Step 1: Open the Organization Settings

1. Click your **Profile Image** in the top-right corner.
2. From the dropdown, select **“Organizations.”**
3. Find your Organization and click the **⚙️ Settings** icon on its card.

> 📸 **Screenshot suggestion**: Organization list with the gear icon highlighted for an Organization.

***

### 👤 Step 2: Go to the Members Tab

1. Inside the Organization Settings, click on the **“Members”** tab from the left-side menu.

> 📸 **Screenshot suggestion**: Members tab selected with an “Invite Member” button clearly visible.

***

### ✉️ Step 3: Invite a Team Member

1. Click **“Invite Member.”**
2. In the search bar, type the **username** of your teammate.
3. Once the username appears, click to select it.

> 📸 **Screenshot suggestion**: "Invite Member" modal with a username being typed and auto-suggest showing.

***

### 🧩 Step 4: Assign a Role

Select a role that fits their responsibilities:

* **Admin** – Full access across the organization
* **Developer** – Game integration and technical tasks
* **Advertiser** – Campaign creation and analytics
* **Creator** – Branded Object and asset design

Click **Invite** to finish.

> 📸 **Screenshot suggestion**: Role dropdown expanded, showing all four roles with brief descriptions beside them.

***

### 📬 Step 5: Confirmation

Your teammate will receive a notification to accept the invite. Once accepted, they’ll appear in the Members list with their assigned role.

> 📸 **Screenshot suggestion**: Member list with sample usernames and roles, showing status (e.g., “Pending” or “Active”).

***

### ✅ You’re All Set!

You’ve completed the **Getting Started** steps—nice work! Now, choose your next path:

> 📸 **Screenshot suggestion**: Two clean buttons or cards side by side:\
> “Publisher Flow” with Unity/Unreal icons\
> “Advertiser Flow” with ad/branding icons

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Game Developer? → <span data-gb-custom-inline data-tag="emoji" data-code="1f3ae">🎮</span> <a href="/pages/FSlogGyup4gt2iNEksqh"><strong>Publisher Flow</strong></a></td><td><a href="/pages/FSlogGyup4gt2iNEksqh">/pages/FSlogGyup4gt2iNEksqh</a></td></tr><tr><td>Brand or Marketer? → <span data-gb-custom-inline data-tag="emoji" data-code="1f4e2">📢</span> <strong>Advertiser Flow</strong></td><td><a href="/pages/KL5CTGqWX6lb3VXcTYxe">/pages/KL5CTGqWX6lb3VXcTYxe</a></td></tr></tbody></table>


# Publisher Overview

Welcome to ReneVerse! This guide will help you integrate Smart Ads into your games using our SDK.

### 🛠️ What You Can Do

* Display **dynamically-served intrinsic in-game ads** within your 2D or 3D environments
* Enable **Smart Ads & Branded Objects** that blend into gameplay with zero disruption
* Monetize your game by connecting with real-world brands
* Track performance and control placements via SDK or Portal

***

### ✅ What You’ll Need

Before jumping in, make sure you have:

* A **ReneVerse account** → [Register here](https://app.reneverse.io/register)
* A working project in **Unity**, **Unreal Engine**, or **Phaser 3**
* Basic familiarity with SDK integration in your engine of choice

> 📸 **Screenshot suggestion**: Three game engine logos (Unity, Unreal, Phaser) with a “Get Started” badge

***

### 🚀 Next Up: Quick Start Guide

Head to our Quick Start Guide for a step-by-step overview of the integration process. From SDK setup to in-game ad placement—it’s all covered.

{% content-ref url="/pages/AktIAUpofHVkpdypUp9Y" %}
[Quick Start Guide](/publisher-flow/quick-start-guide)
{% endcontent-ref %}


# Quick Start Guide

This guide walks you through setting up ReneVerse for your game—from account creation to your first in-world Smart Ad implementation.

### 1. 🧾 Account Setup

If you haven’t yet, [create an account](https://app.reneverse.io/register) to access ReneVerse services and tools.

Once registered, you’ll get access to the **ReneVerse Portal**, where you can manage games, assets, campaigns, and more.

{% content-ref url="/pages/wKnm4KHs5bYIc2FLVO0i" %}
[Registering as a New User](/getting-started/registering-as-a-new-user)
{% endcontent-ref %}

***

### 2. 🏢 Organization Setup

Create an **Organization** to manage your games or campaigns and collaborate with your team. This is needed if you're a Game Developer (a Publisher) or a Brand (an Advertiser).&#x20;

{% content-ref url="/pages/LlbhwsZzauQDd1GFgbSh" %}
[Creating a New Organization](/getting-started/creating-a-new-organization)
{% endcontent-ref %}

***

> *The following steps apply specifically to **Publishers** integrating the ReneVerse SDK into their games.*

***

### 3. 🎮 Game Registration

Register your game in the Portal to receive your **API Key** and **Private Key**, which you’ll need for SDK integration.

{% content-ref url="/pages/VYSU0lMyIEF1Yz2A8zNk" %}
[Registering Your Game & Generating API Keys](/publisher-flow/registering-your-game-and-generating-api-keys)
{% endcontent-ref %}

***

### 4. 🧱 Define Placements In-Engine

With the latest SDK updates, you can now create **Ad Surfaces** and **Object Placeholders** directly inside Unity, Unreal Engine, or Phaser—no need to set them up in the Portal first (though you still can!)

* If you want to set these in your SDK, move on to Step 5.
* If you want to set these in the Portal, check out this page:

{% content-ref url="/pages/nVQJxIVlsxQFonkXf733" %}
[Defining Placeholders in the Portal](/publisher-flow/defining-placeholders-in-the-portal)
{% endcontent-ref %}

***

### 5. 📦 Integrate the SDK

With placements set, complete your integration by installing the ReneVerse SDK. It handles Smart Ad and Branded Object placement, ad performance tracking, and communication with ReneVerse services.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Unity</strong></td><td><a href="/pages/lJctA51HPsAh38s0zRV6">/pages/lJctA51HPsAh38s0zRV6</a></td></tr><tr><td><strong>Unreal Engine</strong></td><td><a href="/pages/Ay3VgYJIIzn9kxM7w6EW">/pages/Ay3VgYJIIzn9kxM7w6EW</a></td></tr><tr><td><strong>Phaser 3</strong></td><td><a href="/pages/qATnx6PQ4qvvVxjBsLJW">/pages/qATnx6PQ4qvvVxjBsLJW</a></td></tr></tbody></table>


# Registering Your Game & Generating API Keys

Connect your game to ReneVerse and unlock SDK functionality.

## :joystick: Creating Your Game

To utilize the ReneVerse SDK in your game, you'll need to **create a game** in the Portal and generate unique **API Credentials** that can be used to connect your game and ReneVerse's servers.

In the Portal's top navigation menu, go to **Games** → **+ New Game**.

<figure><img src="/files/izyK2RmIrOHbxmUcEBv7" alt=""><figcaption><p>Click on <strong>+ New Game</strong> to add a game to your Organization.</p></figcaption></figure>

### 📝 1: Basic Game Info

<figure><img src="/files/SXd81Qyu5Lx3mZOO0a8E" alt=""><figcaption><p>Add your game's relevant info in the <strong>New Game</strong> pop-up window.</p></figcaption></figure>

> 📸 **Screenshot suggestion**: Full-width screenshot of the + New Game 1st page

In the first step of the **+ New Game** form, fill in the following:

* **Name**\
  *The title of your game as it should appear across the platform.*
* **Description**\
  *A short introduction or pitch for your game.*
* **Game Genres**\
  *Choose one or more genres that apply to your game from our comprehensive list. These help ReneVerse deliver highly relevant ad content to your audience.*

> 💡 *Need help choosing the right genres? Don’t worry—your Account Manager from ReneVerse Support will assist you with recommendations to make sure your targeting is on point.*

* **Icon Image**\
  *A square image (96x96) that represents your game. Think of this like your game’s app icon — simple and recognizable.*
* **Cover Image**\
  *A wide banner image (recommended 512x256) used on your game’s profile. Great for key art or to convey the game’s mood.*

***

### 📊 2: Game Specifications

On the second page of the **+ New Game** form, you’ll provide more detailed information about your game. This helps enable precise ad targeting and performance analytics across the ReneVerse network.

> 📸 **Screenshot suggestion**: Full-width screenshot of the + New Game 2nd page

Fill out the following:

* **Platform & Game URL**\
  *Specify your game’s platform (iOS, Android, or Web) and provide the link where the game can be played or downloaded. For mobile games, be sure to include your iOS Bundle ID or Android Package Name.*
* **IAB Categories**\
  *Select the categories of ads your game is open to displaying. These correspond to globally recognized advertising segments and are used to match your game with the right brands.*

> 💡 *Not sure which categories to pick? Our ReneVerse Account Managers will offer personalized recommendations to ensure you're aligned with the best-matched advertisers.*

* **Reach Data: Monthly Active Users (MAU)**\
  *Enter your total MAU to help gauge inventory scale and potential advertiser demand.*
* **Top Countries by MAU**\
  *Select your top 5 countries by user base and provide an estimate of the MAUs in each. This data supports geo-targeted campaign capabilities.*

After this, just make sure to review your **+ New Game** details before confirming and creating your game!

> 📸 **Screenshot suggestion**: Full-width screenshot of the + New Game review page

***

## :closed\_lock\_with\_key: Generating API Credentials

Once your game is registered, you’ll need to generate API Credentials to allow your game to securely communicate with the ReneVerse backend and enable Smart Ads and Branded Objects.

Here’s how to do it:

1. From the top navigation menu in the Portal, go to **Games** and select your newly created game. *You'll also be redirected to the **Games Dashboard** after creating your game.*
2. Navigate to the **Settings** tab.
3. In the left-hand sidebar, go to **API Credentials**.
4. Click **Generate API Credentials**.

<figure><img src="/files/MoM9hz7foxzcLUnBgWmP" alt=""><figcaption><p>Navigate to <strong>Settings</strong> tab, find the <strong>Api Credentials</strong> sub-tab, and click <strong>Generate API Credentials</strong> to get your unique identification keys.</p></figcaption></figure>

> 📸 **Screenshot suggestion**: Zoomed in shot of **Generate API Credentials,** side-by-side with zoomed in shot of the pop-up

Once generated, you’ll receive a unique **API Key** and **API Secret**. These credentials are required for SDK initialization and enabling in-game ad delivery. Keep them secure!&#x20;

> ⚠️ **Important:** These credentials will only be shown once. Be sure to copy and store them securely. If you lose access to them, you’ll need to regenerate new ones.

You can also set an expiry date on your API Credentials as an additional precautionary security measure. Whenever your API Credentials expire, just remember that you will need to generate new API Credentials. ReneVerse will notify you near the expiration date via an in-Portal notification and email.

<figure><img src="/files/Wbq54M3Cb1QDvx3XoAY6" alt=""><figcaption><p>Save your API Key and API Secret Credentials in a safe place.</p></figcaption></figure>

Now, you're ready to begin the [**SDK Integration**](/publisher-flow/sdk-integration) process!


# SDK Integration

This section walks you through integrating the SDK for your preferred engine: Unity, Phaser 3, or Unreal Engine.

The ReneVerse SDK brings Smart Ads and Branded Objects into your game—seamlessly and with full control. SDKs are available for **Unity, Phaser 3,** and **Unreal Engine.**

Each engine has its own setup process, capabilities, and code examples tailored for real-time ad rendering, object placement, and performance tracking.

***

### 🚧 What You’ll Need Before You Begin

Make sure you’ve already:

* :white\_check\_mark: [Created an Organization](/getting-started/creating-a-new-organization)
* :white\_check\_mark: [Invited your team members](/getting-started/invite-members-to-your-team), especially your **core/lead developers**
* ✅ [Registered your game & Generated API Credentials](/publisher-flow/registering-your-game-and-generating-api-keys)

***

### 🛠️ Choose Your Engine

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f527">🔧</span> <a href="/pages/lJctA51HPsAh38s0zRV6"><strong>Unity</strong></a></td><td><em>Full SDK setup, in-editor ad placement, and campaign-ready tools for Unity devs.</em></td><td><a href="/pages/lJctA51HPsAh38s0zRV6">/pages/lJctA51HPsAh38s0zRV6</a></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f310">🌐</span> <a href="/pages/qATnx6PQ4qvvVxjBsLJW"><strong>Phaser 3</strong></a></td><td><em>Add ReneVerse to browser-based games using our lightweight JavaS</em></td><td><a href="/pages/qATnx6PQ4qvvVxjBsLJW">/pages/qATnx6PQ4qvvVxjBsLJW</a></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f3ae">🎮</span> <a href="/pages/Ay3VgYJIIzn9kxM7w6EW"><strong>Unreal Engine</strong></a></td><td><em>Powerful native SDK support for Unreal devs building immersive 3D worlds.</em></td><td><a href="/pages/Ay3VgYJIIzn9kxM7w6EW">/pages/Ay3VgYJIIzn9kxM7w6EW</a></td></tr></tbody></table>


# Unity

Set Up your ReneVerse SDK in Unity and Create Ad Surfaces in your environment.

Let's prepare you to integrate ReneVerse into your Unity game to enable Smart Ads and Branded Objects—all directly within your editor.

***

### 🧰 What You’ll Need

Before starting, make sure you have the following ready:

* ✅ Your **API Credentials** from the ReneVerse Portal
* ✅ A **Unity project** (version 2020.3 or later recommended)
* ✅ The **game build** you want to integrate Smart Ads and Branded Objects into

> 📸 **Screenshot suggestion**: Visual showing a Unity project open with the ReneVerse SDK folder in the Assets directory

***

### 📚 In This Section

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/OtqoTydIXjlAnBhIlzWI"><strong>Unity SDK Setup</strong></a></td><td><em>Step-by-step instructions for installing the ReneVerse SDK in your Unity project and syncing with your account.</em></td><td><a href="/pages/OtqoTydIXjlAnBhIlzWI">/pages/OtqoTydIXjlAnBhIlzWI</a></td></tr><tr><td><a href="/pages/WWreGGnwfk4huD3xnyHt"><strong>Using Unity SDK</strong></a></td><td><em>Learn how to define ad surfaces, serve ads, and work with Branded Objects directly in your scene—no need to switch back to the Portal.</em></td><td></td></tr></tbody></table>

***

Ready to get started? ➡️ Head to [Unity SDK Setup](/publisher-flow/sdk-integration/unity/unity-sdk-setup)


# Unity SDK Setup

Set Up the ReneVerse SDK inside of Unity.

### 📦 Step 1: Download the SDK

Get the latest Unity SDK package: [➡️ Download SDK (ZIP)](https://cdn.reneverse.io/sdk/unity/rene-sdk-unity-1.1.7.zip)

<figure><img src="/files/1c0nWoyaDJNgxV14gcbF" alt=""><figcaption></figcaption></figure>

Once downloaded, locate the **`.zip`** file in your Downloads folder and extract it.

<figure><img src="/files/0Cg8XThAvDUmgqrbp5QF" alt=""><figcaption></figcaption></figure>

***

### 🗂️ Step 2: Import the SDK into Unity

1. Open your Unity project.
2. In the top menu, go to **`Window`** → **`Package Manager`**.

<figure><img src="/files/gFALdLb6Db0gFZEG6EGN" alt=""><figcaption></figcaption></figure>

3. Click the **+** icon (top-left), then select **`Add package from disk…`**

<figure><img src="/files/QxruY0J2t3maF5bLSUER" alt=""><figcaption></figcaption></figure>

4. In the extracted SDK folder, select the **`package.json`** file and click **Open**.

<figure><img src="/files/fYQZFmCK7yYEWCyftLTx" alt=""><figcaption></figcaption></figure>

Once imported, you’ll see **`ReneVerse SDK`** listed in your Package Manager.

<figure><img src="/files/HqlxHpC1x2wTttC6GsxI" alt=""><figcaption></figcaption></figure>

***

### ⚙️ Step 3: Enter API Credentials

To connect your Unity project to the ReneVerse Portal:

1. In Unity’s top menu, go to **`Window` → `Reneverse Settings`**

<figure><img src="/files/7d7jZhN4a45TKQpHVL0C" alt=""><figcaption><p>To open ReneVerse SDK window in unity go to Window/ReneVerse Settings</p></figcaption></figure>

2. In the ReneVerse Settings window, enter the **API Key** and **Secret Key** you generated in the Portal.
   1. **`APIKey`** - Your ReneVerse API Key.
   2. **`PrivateKey`** - Your private ReneVerse Secret Key.

<figure><img src="/files/9vR6llXog2rTi4kN0MiL" alt=""><figcaption><p>Enter your API Key and API Secret into <strong><code>APIKey</code></strong> and <strong><code>PrivateKey</code></strong>, respectively.</p></figcaption></figure>

> 📸 **Screenshot suggestion**: ReneVerse Settings window with both fields visible and API credentials being pasted in.

***

### 🔁 In Case You Forgot

If you haven’t registered your game yet or don’t have your credentials handy, you can do that directly in the Settings window by clicking **`Need to register?`**&#x20;

This will guide you through linking your game to ReneVerse.

> 📸 **Screenshot suggestion**: ReneVerse Settings window "need to register?" highlighted

***

### 🔄 Step 4: Sync Game Assets

Once your credentials are entered:

* Click **`Sync Game Assets`** to pull in any Smart Ad surfaces or Branded Object templates associated with your game.
* You can now access and place these directly in your Unity scene.

***

### 📚 Need Help?

You can always click **`Check Out Our Docs!`** in the Settings panel for quick access to full documentation.

In the next step, [Using Unity SDK](/publisher-flow/sdk-integration/unity/wip-using-the-unity-sdk), we'll show you how to define placements, serve ads, and integrate everything directly into your Unity scenes.


# \[WIP] Using the Unity SDK

Create Ad Surfaces for your game in Unity using the SDK.

Once the Rene SDK is successfully installed and opened, you can start utilizing its features. If you have correctly added the API Credentials generated for your game on the ReneVerse Portal into the ReneVerse Settings menu in Unity, you can click **Sync Game Assets**. Once successfully synced through your API keys with the ReneVerse Portal, you'll see foldouts for **Ad Surfaces** and **Branded Object Placements** and  **Game spaces** which you had created and configured on the [portal](https://app.reneverse.io/).

<div align="left"><figure><img src="/files/2QDEo43y3LsKL61cf5hJ" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/kkD5yg2sQKPDIYfzQd8R" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/QVqmDvck5RvLgfj7JYpJ" alt="" width="375"><figcaption></figcaption></figure></div>

Within the **Ad Surfaces** section or a **Branded Object Placement**, you'll see a list of items created in the ReneVerse Portal or directly from the editor. These include associated metadata such as `AdSurfaceId`, `AdType`, `Interactivity`, `Emotional tag` , `Game spaces` and `TargetingTags`, along with a button to **Instantiate Ad Surface,** **Instantiate Branded Object Placement.** Clicking these buttons will generate the respective entity in your Unity project, predefined and linked to the data on the portal. There are as well options to **Edit** or **Delete** Branded Object or Ad Surface from the **Portal**. The details of the created object will be visible in the Inspector window for easy validation against the portal configurations.

<div><figure><img src="/files/tNaH6A2qlDdfuDBoHxOA" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="/files/ELxxvjLgI90JbjL8HlnZ" alt="" width="375"><figcaption></figcaption></figure></div>

**Creating, Editing and Deleteing**

You can create, edit or delete branded objects or ad surfaces, without leaving your project, directly from the editor. In each list section, there is corresponding button, **Create Ad Surface**, **Create Branded Object** and **Create Game Space.** That will open new for for creation of that type on the Portal. Then you can simply insert required data and submit it. Project data will be updated accordingly.

<div><figure><img src="/files/bBSfc46fdGrEIcNu9Ify" alt=""><figcaption></figcaption></figure> <figure><img src="/files/mw3nIZH3jpOfiMOZV9Nv" alt=""><figcaption></figcaption></figure> <figure><img src="/files/4845s8RwzAWU2NuW6HHG" alt=""><figcaption></figcaption></figure></div>

Same procedure is for the editing. Just find item that you want to edit in the list, click **Edit** button. After changing information in the form and submitting, you are ready to continue with your workflow.

On each item there is **Delete** button. After accepting warning prompt, that item will be deleted from your game data.

<figure><img src="/files/szYXUPCbbxXrD851VBg3" alt=""><figcaption></figcaption></figure>

**Key Features of Ad Surfaces and Branded Object Placements**

1. **Compatibility with Unity Rendering Pipelines**:
   * The SDK supports both [**Built-in** and **Universal Render Pipelines**](https://docs.unity3d.com/Manual/choose-a-render-pipeline.html). Materials for ad surfaces or branded object placements are automatically assigned based on your current graphics settings. However, you can customize these materials either in `Packages/com.reneverse.services/Resources/Materials` or directly on the instantiated objects to suit your project’s needs.
2. **Hierarchy Placement**:
   * New ad surfaces or branded object placements are created inside the currently selected GameObject in the hierarchy. This ensures seamless integration as child objects of assets representing potential advertising spaces, such as banners, shop windows, or branded displays.
3. **Prefab Workflow**:
   * Ad surfaces and branded object placements integrate with Unity's prefab system and are created as such.
4. **Inspector Configuration**:
   * The instantiated objects have parameters visible in the Inspector for validation. The relative scale of these objects corresponds to the resolution set in the portal. Transform manipulations should primarily occur on the parent GameObject to avoid unintended content distortions. Also keep in mind that you should universally change the scale of ad surfaces or branded object placements to adhere to content that is going to be sent.&#x20;
5. **Visual Representation**:
   * In the scene, a Gizmo represents the branded object placement and a mesh represents ad surface. The front-facing side is labeled for easy identification, and the ID is displayed for quick cross-referencing with the portal. Gizmos can be toggled on or off for convenience during debugging. As per unity workflow the front facing side is Z axis.
6. **Global Ad Serving**:
   * When creating globally identical ad surfaces or branded object placements. This ensures delivering the same ad content to the ad surface or branded object placement making level design more pattern driven and controllable.<br>

     <figure><img src="/files/0qx8ZHcvpZo04VPO7qpb" alt=""><figcaption></figcaption></figure>

* You can duplicate existing ad surfaces, meaning that even if in your profile on the Reneverse website you have just one ad surface, in the actual game there could be thousands of them, preferably in a prefab, since it will help you to modify it within seconds on each instance, but essentially it's going to be just one ad surface with one ID.<br>

  <figure><img src="/files/bkE1KYSH6d3clLvfLIQS" alt=""><figcaption></figcaption></figure>
* Once an individual ad surface is selected and play mode is on, meaning your game is running, there will appear a button to check the advertisement, how it will look. But keep in mind that it will serve the current advertisement if there is no advertisement campaign running, meaning you have no content to receive. You will get the correspondent log for it and you can check on the website what could be the issue.<br>
* However, there is implemented the possibility to play rene ads on multiple of them, meaning that if you select thousands of video ad surfaces, hit play button in unity and select play ad in the inspector, the ads will be playing. The only limitation is that they should be of the same type, meaning that you can select only video ad surfaces together or only banner ad surfaces together. This happens because of the Unity editor's way of calling derived objects, and is easily handled if you search the corresponding game objects in the hierarchy and select only them. In our case, it's either video ad surfaces or banner ad surfaces, and using CTRL-A you could select all of them.<br>

  <figure><img src="/files/VFnpfIhpfFzskaaNaxuj" alt=""><figcaption></figcaption></figure>
* Once you play multiple advertisements, you could see that they are played if the ad surface corresponds to currently present content in currently running ad campaign. And this play ad button corresponds to one of the two public methods that you might be using, namely, `PlayAd()` and `StopAd()`. And once the ad is played, you can stop it afterward. For now, the video and banner are cached, meaning that if it's served once to the user, another time it will be taken from the cache, meaning that the second time serving of the ad does not count as serving. Only the first one is considered to be serving the advertisement.

**Branded Object Placements**

Branded object placements represent 3D models or interactive spaces within your game that can dynamically load branded content. These objects:

* Automatically adjust to fit within designated collider bounds.
* Support custom scaling to ensure content visibility while maintaining aspect ratios.
* Include gradual tracking features to capture user interactions with branded content over time.

<figure><img src="/files/B78gQDtHduLMr3IYySSr" alt=""><figcaption></figcaption></figure>

**Game Spaces**

Game spaces are one of the ways you can group your ad surfaces and branded object. You can group then by scene, part of the level, theme etc. There is no constraint regarding that and provides you with more flexibility. One ad surface or branded object can also belong to multiple Game spaces.

In order to assign you ad surface or object placement to Game space, you can simply add Spaces to them in the editor during creation or editing process.

<figure><img src="/files/H7dXB2nQqT4AfSGPJYU4" alt="" width="175"><figcaption></figcaption></figure>

Creating Game space is also straightforward. At the top of the Game spaces foldout is **Create Game Space** button. Clicking on it, opens up creation form. Fill in the name and submit it.&#x20;

<figure><img src="/files/dZTBB5lLBJV2ffxISRmB" alt=""><figcaption></figcaption></figure>

Each Game space entry has **Delete This Game Space** button, that allows you to delete already existing Game space.

**Emotional tag**

Emotional tag is a way to define you ad surface or branded object placement as a REGULAR ad placement, or ENHANCED. In case of enhanced tag, it represents ad space that will serve ad in a moment of the game that will elicit higher emotional response of the player. For example: victory during a race, during a boss fight cutscene, during a important story moment etc.

This parameter can be changed at any time in the editor during creation or edit process for ad surfaces and branded objects.

**Automatic Tracking**

The SDK automatically tracks user engagement with both ad surfaces and branded objects:

* **Screen Coverage**: Monitors how much of the ad or branded object is visible to the user.

* **Interaction Time**: Measures the duration of engagement with the content.

* Tracking occurs lightweightly, requiring a camera tagged as `MainCamera` in Unity.

* Notice how once the advertisement is served, the system automatically starts showing the current percentage of the seen ad relative to the game screen. It happens automatically and is lightweight. However, the Camera that you will be using for looking at Ads should be marked `MainCamera` which is default in Unity.&#x20;

<figure><img src="/files/aGv2Ksd1iGPcLFnXGVHL" alt=""><figcaption></figcaption></figure>

* Coding is not necessary if you ticked Serve Ad On Start in the inspector of surface and you have camera tagged `MainCamera` (everything should start automatically). However, if you need more control over when ads are loaded, all you need to do is calling  public method `ServeAd()` on the surfaces you want the ads to be served to (no matter which type they have). Getting reference to particular ad surfaces is up to you.
* For letting your user to connect to ReneVerse portal to gain its benefits you can essentially use 3 methods:

1\) [Email & Password Login](/publisher-flow/player-authentication/email-and-password-login)

2\) [Game Connect](/publisher-flow/player-authentication/game-connect)

That should be it to integrate and use the ReneVerse SDK into your game! Feel free to check [Player Authentication](/publisher-flow/player-authentication) to see how to use our SDK from the code perspective.


# Batch Serve Ad

Quickly serve or disable ads across all scenes using ReneVerse’s Batch Serve Ad system.

### :pancakes: About Batch Serve Ad

The Batch Serve Ad functionality makes it easy to populate multiple ad surfaces across scenes in one go—perfect for efficient ad management at scale.

#### **🌍 Global Registration**

All ad surfaces are **automatically registered** globally once instantiated—no manual work required. Just place them in your scene, and the SDK takes care of the rest.

### **📦 How It Works**

1. **Batch Request**: A single request is sent to the server, asking for ad content for all registered surfaces.
2. **Even Distribution**: Ads are returned and evenly assigned to all eligible ad surfaces.
3. **Gizmos in Editor**: When selecting an ad surface in the editor, gizmos appear to help visualize ad placement and orientation.

***

### **🧪 Preview in Unity Editor**

You can trigger batch serving directly from the editor via:\
**`Window → ReneVerse → BatchServeAd`**

<figure><img src="/files/6AVCSNM8n5O5k5nS7W8a" alt=""><figcaption><p>BatchServeAd is only available in Play Mode.</p></figcaption></figure>

***

### **🧑‍💻 Runtime Integration**

#### **Example 1 – Simple Scene Use:**

```
using ReneVerse;
using UnityEngine;

public class InSceneScript : MonoBehaviour
{
    private void Awake()
    {
        ReneAPIManager.BatchServeAd();
    }
}
```

#### Example 2 – During Transition from Another Scene:

<pre><code>using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; using UnityEngine.SceneManagement; 
using ReneVerse;

public class LoadingManagerExample : MonoBehaviour {
public string nextSceneWithAdSurfaces; 
public GameObject loadingScreen;
<strong>
</strong><strong>private void Start()
</strong>{
    StartCoroutine(LoadSceneAndBatchServeAdCoroutine());
}

private IEnumerator LoadSceneAndBatchServeAdCoroutine()
{
    // Display the loading screen
    loadingScreen.SetActive(true);

    // Load the next scene asynchronously
    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(nextSceneWithAdSurfaces);

    // Wait until the asynchronous scene fully loads
    while (!asyncLoad.isDone)
    {
        yield return null;
    }

    // Ensure all ad surfaces are registered

    // Call the batch serve ad function asynchronously
    yield return BatchServeAdWrapper();

    // Hide the loading screen
    loadingScreen.SetActive(false);
}

private IEnumerator BatchServeAdWrapper()
{
    var task = ReneAPIManager.BatchServeAd();
    while (!task.IsCompleted)
    {
        yield return null;
    }

    if (task.Exception != null)
    {
        Debug.LogError($"BatchServeAd failed: {task.Exception}");
    }
}
}
</code></pre>

### **❌ Batch Disable Ads**

Need to clear ads all at once—for example, during testing? You can disable all currently served ads using:

```csharp
ReneAPIManager.BatchDisableAds();
```

Or directly from the editor:\
**`Window → ReneVerse → BatchDisableAds`**


# Unreal Engine

Set Up your ReneVerse SDK in Unreal Engine and Create Ad Surfaces in your environment.

### 🧰 What You’ll Need

Before starting, make sure you have:

* ✅ Your ReneVerse **API Credentials**
* ✅ A project built in **Unreal Engine v5.3 or later**
* ✅ A game ready to integrate ReneVerse ads and assets

***

### 📚 In This Section

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/RTHRqUZXmOSNUDcOPObx"><strong>UE SDK Setup</strong></a></td><td>Install and configure the ReneVerse SDK in your Unreal project.</td><td><a href="/pages/RTHRqUZXmOSNUDcOPObx">/pages/RTHRqUZXmOSNUDcOPObx</a></td></tr><tr><td><a href="/pages/HpFvGHTKbWO99kr1xpOr"><strong>Using the UE SDK</strong></a></td><td>Learn how to place ad surfaces, connect with the API, and serve Smart Ads directly in-game.</td><td><a href="/pages/HpFvGHTKbWO99kr1xpOr">/pages/HpFvGHTKbWO99kr1xpOr</a></td></tr></tbody></table>


# UE SDK Setup

Set Up the ReneVerse SDK inside of Unity.

### 📦 Step 1: Install the Plugin

{% hint style="warning" %}
If you are planning to develop you game for Android and submit it to store, please take into account minimal Android SDK requirements and Unreal Engine version that support it. For more information you can consult [Unreal Engine official documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/android-development-requirements-for-unreal-engine). Download ReneVerse SDK version accordingly. &#x20;
{% endhint %}

1. Download the Unreal SDK [here](/download/unreal-engine-sdk).
2. Move the unzipped **ReneVerseSDK** folder into your project’s `/Plugins` directory.

<figure><img src="/files/xF8Uof4ByhPb083oCEzM" alt=""><figcaption><p>If the <strong>Plugins</strong> folder is not already created, create one yourself.</p></figcaption></figure>

3. Rebuild or relaunch your project.

***

### ✅ Step 2: Enable the Plugin

1. In Unreal, go to **Edit → Plugins**.
2. Search for **ReneVerseSDK** and ensure it's enabled.

<figure><img src="/files/3XRAgT9yRlJMd9tnKlIE" alt=""><figcaption><p>Search and enable <strong>ReneVerseSDK</strong></p></figcaption></figure>

***

### 🔐 Step 3: Enter API Credentials

1. Open **Window → ReneVerse API Editor**.

<figure><img src="/files/SSdkdzh8bcte3F7kxSn9" alt=""><figcaption><p>ReneVerse API Editor</p></figcaption></figure>

2. Paste your **API Key** and **Private Key** from the ReneVerse Portal to sync the data you created for your [game in the ReneVerse Portal](/publisher-flow/registering-your-game-and-generating-api-keys).

<figure><img src="/files/s0R9nC3Afek60DNVokd1" alt=""><figcaption><p>Enter keys from the Portal and click <strong>Sync Data</strong>.</p></figcaption></figure>

{% hint style="warning" %}
In case you missed the previous step of [generating your API Credentials](/publisher-flow/registering-your-game-and-generating-api-keys), you must register your game and create API Credentials.
{% endhint %}

3. Click **Sync Data** to pull in your ad surfaces and branded object placements.

This will generate a `ReneAPIData` asset and two data tables inside a new **ReneVerse** folder in your project’s `/Content` directory. These assets hold data for the Ad Surface and Branded Object placements for your game, as well as your credentials.

<figure><img src="/files/5fSwD3iDXVpaKtZbT00w" alt=""><figcaption><p><strong>ReneVerse</strong> folder and contents should be kept in the root of your <strong>Content</strong> folder.</p></figcaption></figure>

{% hint style="danger" %}
🗂️ These hold your synced ad data and credentials—don’t move them!
{% endhint %}

Once synced, you're ready to start integrating ads into your scene.


# Using the UE SDK

Create Ad Surfaces and Branded Object Placements in your Unreal Engine project.

Once the SDK is installed and synced, you can begin placing Smart Ads and Branded Objects in your Unreal scenes—then serve them during gameplay using Blueprint or C++.

***

### 🔄 Syncing Your Game Data

Open **`Window` → `ReneVerse API Editor`** in Unreal.

1. Enter your **API Key** and **Private Key** from the Portal.
2. Click **`Sync Data`**.

You’ll now see foldouts for:

* **Ad Surfaces List**
* **Branded Object List**

Each entry includes metadata (e.g., ad type, ID) and a button to **`Add to Scene`**.

> 🗂️ A `ReneVerse` folder will be added to your Content directory, including data assets and data tables. Keep this folder in the root.

<div><figure><img src="/files/5l6bBFNFnhthmEYgpwCD" alt=""><figcaption><p>Ad Surface Data</p></figcaption></figure> <figure><img src="/files/bro00phyQOwc6xssOqNZ" alt=""><figcaption><p>Branded Object Placement Data</p></figcaption></figure></div>

***

### :frame\_photo: Placing Ad Surfaces

After selecting an Ad Surface from the list:

* Click **Add to Scene**.
* You can reposition, group, parent, or scale it like any other actor.
* **Types:**
  * **Plane Banner Ad** – A flat 2D surface.
  * **Decal Banner Ad** – Projects onto geometry using a Decal Component.

<figure><img src="/files/KLHcTk4PlEZZTYMtc2sd" alt=""><figcaption><p>Ad Surfaces: Planes &#x26; Decals</p></figcaption></figure>

***

### :game\_die: Placing Branded Objects

Click **Add to Scene** on a Branded Object entry. You can:

* Move or scale the actor.
* Adjust the bounding box to define the object’s space.

When served, a 3D object will be loaded and scaled to fit the bounds.

<figure><img src="/files/mPxW2LpLWgDWEws6z9kd" alt=""><figcaption><p>Branded Object Placeholders</p></figcaption></figure>

***

### ⚙️ Serving Ads at Runtime

Once you have setup ad surfaces and object placements, it is easy to serve them at any point during the game's runtime.

#### 🧩 Serving from Blueprint

There are multiple functions in **ReneAPISubsystem** that allow you to serve ads.&#x20;

To **batch-serve** **ads** in your scene, you can call:

* `ServeAllAds()` — Serve and populate all Ad Surfaces and Branded Objects in your scene.
* `ServeAdSurfaces()` — Serve all Ad Surfaces in scene.
* `ServeBrandedObjects()` — Serve all Branded Objects in scene.

<figure><img src="/files/oXskw2ZvAI5XdhMbSXhP" alt=""><figcaption><p>Serve all ads (Ad Surfaces &#x26; Branded Objects) in the scene.</p></figcaption></figure>

For granular control, you can **serve a single ad**, simply by passing the **AdSurfaceId** or **BrandedObjectId** to it. Other parameters are optional:

* `ServeAd(id)` — Serve a specific Ad Surface in scene.
* `ServeBrandedObject(id)` — Serve a specific Branded Object in scene.

<figure><img src="/files/mZdZcXpKevSSbwG5potV" alt=""><figcaption><p>Serve ad by ID</p></figcaption></figure>

You can also get a reference to the actor and call `ServeAd()`.

<figure><img src="/files/oEC5NdMEY8ct8YKHIxfu" alt=""><figcaption><p>Serve ads referenced in your blueprint</p></figcaption></figure>

***

#### :computer: **Serving from C++**

To use the ReneVerse SDK from C++, add **`ReneVerseSDK`** as a module to your **`.Build.cs`** file. Then:

```
using UnrealBuildTool;

public class YourAwesomeGame: ModuleRules
{
	public YourAwesomeGame(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Core", 
				"CoreUObject", 
				"Engine", 
				"InputCore", 
				"EnhancedInput", 
				"ReneVerseSDK" // <--- add ReneVerseSDK to your moddules
			});
	}
}
```

Just like with blueprints, you can serve ads from your code with all the same functionality. Simple get **ReneAPISubsystem** and call the function that suits your needs:

Batch-serving

* `ServeAllAds()` — Serve and populate all Ad Surfaces and Branded Objects in your scene.
* `ServeAdSurfaces()` — Serve all Ad Surfaces in scene.
* `ServeBrandedObjects()` — Serve all Branded Objects in scene.

Single Serving

* `ServeAd(id)` — Serve a specific Ad Surface in scene.
* `ServeBrandedObject(id)` — Serve a specific Branded Object in scene.

Or, as mentioned above, reference your desired actor and call  **`ServeAd`**:

```
// don't forget to include header
#include "ReneAPISubsystem.h"

UReneAPISubsystem* ReneAPISubsystem = Cast<UReneAPISubsystem>(GetWorld()->GetGameInstance());
if (ReneAPISubsystem)
{
	// serve all ads in the scene
	ReneAPISubsystem->ServeAllAds();

	//serve all ad surfaces
	ReneAPISubsystem->ServeAdSurfaces();

	// serve all branded objects
	ReneAPISubsystem->ServeBrandedObjects();

	// serve one ad surface
	FString AdSurfaceID;
	ReneAPISubsystem->ServeAd(AdSurfaceID, "", "", "");

	// serve one branded object
	FString BrandedObjectPlacementID;
	ReneAPISubsystem->ServeBrandedObject(BrandedObjectPlacementID, "", "");

	// serving individual referenced ads
	ABrandedObjectPlacement* BrandedObjectPlacement;
	BrandedObjectPlacement->ServeAd();

	APlaneBannerAd* PlaneBannerAd;
	PlaneBannerAd->ServeAd();

	ADecalBannerAd* DecalBannerAd;
	DecalBannerAd->ServeAd();
}
```

***

#### :octagonal\_sign: Stop Serving Ads

To stop serving ads,  call **`StopServingAllAds` — This works for Blueprint and C++.**

**Blueprint**

<figure><img src="/files/1OHn23X67zDu6g0O32Zr" alt=""><figcaption><p>Stop Serving Ads via Blueprint</p></figcaption></figure>

**C++**

```

// stop serving
ReneAPI->StopServingAllAds();
	
// stop individual ads
BrandedObjectPlacement->StopServingAd();
PlaneBannerAd->StopServingAd();
DecalBannerAd->StopServingAd();

```

***

### :bust\_in\_silhouette: ReneVerse Player Log-In

You can also allow players of your game to connect their ReneVerse account, made in the Portal.

Use `Login(email, password)` from Blueprint or C++ to authenticate your player with ReneVerse services.

**Blueprint**

<figure><img src="/files/Z1jSRXj7ahpZ9x8odgzM" alt=""><figcaption><p>Player Authentication via Blueprint</p></figcaption></figure>

**C++**

```
ReneAPISubsystem->Login(Username, Password);
```

***

### 🎨 Working with Blueprints & Data Tables

As mentioned before, after your enter your API credentials, your project will have a new `ReneVerse` folder that should be kept in the root of your `Content` folder.

Within it, you'll have `ReneAPIData` and `Data Tables` where every Ad Surface and Branded Object created within the editor will be referenced.

* `DT_AdSurfaceDataTable`
* `DT_BrandedObjDataTable`

<figure><img src="/files/CgBY7I2Zd4yPtHoeiies" alt=""><figcaption><p>ReneVerse Folder in Content Directory</p></figcaption></figure>

If you ever wish to modify a blueprint, you can create a child blueprint from `BP_BannerAdSurface` or `BP_BrandedObjectPlacement`**.**&#x20;

<figure><img src="/files/wuDLUNDWcFdC8BvQjPbn" alt=""><figcaption></figcaption></figure>

Once created, simply select the Data Table you need — `DT_AdSurfaceDataTable` for Ad Surfaces or `DT_BrandedObjDataTable` for Branded Objects. Then select the row containing the Ad Surface or Branded Object ID you wish to serve.

<figure><img src="/files/X7ngFrZr1JHjID39locs" alt=""><figcaption><p>Select your Data Table and then the Ad Surface or Branded Object ID.</p></figcaption></figure>

***

### 🧹 Cleanup & Repair

If data seems out-of-sync or corrupted:

* Click **Cleanup and Update Ads in Scene** in the ReneVerse Editor to refresh placements.

***

### 🛠️ Create, Edit, and Delete Ads from the SDK

You can manage ad assets directly from the ReneVerse Editor in Unreal, rather than having to log into the ReneVerse Portal.

#### :magic\_wand: **Create Ads in Editor**

1. Open **Window → ReneVerse API Editor** in Unreal.
2. Use **Create New Ad Surface** or **Create New Branded Object Placement**.

<figure><img src="/files/UQwZ0MrpC9R9T86N9uqO" alt="" width="375"><figcaption></figcaption></figure>

3. Then, configure the Ad Surface or Branded Object Placement as needed, and click **Submit.** Then you can add it to your scene.&#x20;

<div><figure><img src="/files/ldldKC9alEhIUPFLxOdi" alt=""><figcaption><p>Create Ad Surface</p></figcaption></figure> <figure><img src="/files/uBitK6EdWcZB81k2T68n" alt=""><figcaption><p>Create Branded Object Placement</p></figcaption></figure></div>

{% hint style="info" %}
**NOTE:** *You will need internet connection for this action to execute.*
{% endhint %}

***

:writing\_hand: **Edit Ads in Editor or Details Panel**

**From the Editor**

1. In the editor, open the **Ad Surfaces List** or **Branded Object List** to find your existing ad assets.
2. Select an item → click **Edit Ad Surface** or **Edit Branded Object Placement** → update fields → **Submit**.

<div align="right"><figure><img src="/files/pENkuaBR44aO9LbuPQwZ" alt="" width="375"><figcaption><p>Edit Ad Surface from List in Editor</p></figcaption></figure> <figure><img src="/files/tIxfihnrvu6kRexTDUWi" alt="" width="375"><figcaption><p>Edit Branded Object Placement from List in Editor</p></figcaption></figure></div>

**From the Details Panel**

1. Select your desired Ad Surface or Branded Object Placement in scene.
2. Under **Details**, find **Edit Ad Surface** or **Edit Branded Object Placement** → update fields → **Submit**.

<figure><img src="/files/cypJjJ8LhS9voCMbjNUl" alt="" width="317"><figcaption><p>Edit Ad Surface or Branded Object from Details.</p></figcaption></figure>

#### :wastebasket: Delete Ads

1. Find the Ad Surface or Branded Object placement you want to remove in the ReneVerse Editor
2. Click **Delete**, confirm the action.

> ⚠️ Deleting removes all actors with that ID in the current scene. Wait for the confirmation popup to ensure success.

<figure><img src="/files/bYTKaDVVNvnD1VpNt3ZU" alt=""><figcaption><p>Double check before clicking Confirm!</p></figcaption></figure>

{% hint style="info" %}
**NOTE:** *All changes might take couple of seconds to apply, so wait for a confirmation notification to appear before continuing with other tasks.*
{% endhint %}

***

## 🌌Game Spaces

Ad surfaces and branded objects can be grouped into game spaces. This allows you to have finer control over the type of ads served for specific group of ad surfaces or branded object placements. Game spaces are not constrained by any theme and functionality, so you can use them for use that serves your use case. You can create Game space that represents entire map, sub section, certain theme etc.<br>

To create Game space you can:<br>

1. Open **Window → ReneVerse API Editor** in Unreal.
2. Click **Create New Game Space**
3. In the newly opened window, enter the name of the Game space and click **Submit**

<figure><img src="/files/asDU3jRIVnF7uuagAgDl" alt=""><figcaption><p>Create game space window</p></figcaption></figure>

You can see all Game spaces created for your project in the **ReneVerse API Editor.** To delete Game space, simply find space in the list and click **Delete Game Space**.

<figure><img src="/files/OgR16RfmLnCfqGpBJdQ8" alt="" width="375"><figcaption></figcaption></figure>

You can always assign ad surface or branded object placement to one or multiple Game spaces during the creation or update process. In the create or update form, for ad surface or branded object, select one or multiple Game spaces before submitting.&#x20;

<figure><img src="/files/isuvn07ZQLX3XpdoAaH1" alt=""><figcaption></figcaption></figure>

***

## 🎭Emotional tagging

One of the features that allows you more control is a way to tag your ad surface or branded object, so that it signifies in what moment the ad is displayed.&#x20;

All ads when created are tagged as regular ads. But you can, during creation or when updating ad, tag them as **ENHANCED**. That means that the ad is visible during the event in your game that has higher emotional impact to the player, for example: victory in a multiplayer match, start of the boss fight, during in-game cutscene with important story reveal etc.&#x20;

<figure><img src="/files/VPOhVExfW9PZmPQHsRZZ" alt=""><figcaption><p>Changing emotional tag for ad surface</p></figcaption></figure>

***

### 🧪 Ad Impression Debugging

Open Console using the `~` key. Enable debug view with the console command:

```bash
Debug.DrawTrackingData 1
```

It shows:

* Screen coverage %
* View angle
* Occlusion checks

Use this to optimize ad placement and visibility.

***

## :tools:Building the game

There is only one thing that should be taken into account during the build process of your game and that is that you should make sure that the `/Game/ReneVerse/` folder is included into a build.&#x20;

You can do that by following these steps:

* Go to `Project Settings` -> `Project` -> `Packaging`.
* Under the main `Packaging` section (you might need to click the small triangle to expand advanced settings), find:
  * **`Additional Asset Directories to Cook`** and  add the directory `/Game/ReneVerse/`
* Package your build after changing these settings.

This will make sure that the all required data assets and data tables are packaged into you project and ready to be used by ReneVerseSDK.


# Phaser 3

This SDK makes it easy to integrate Smart Ads and Branded Objects directly into your browser-based games.

## 🚀 Get Started Fast

Want to jump right in? ➡️ Head to our [Quick Start Guide](/publisher-flow/sdk-integration/phaser-3/phaser-quick-start) for a streamlined setup walkthrough.

{% content-ref url="/pages/Y3Pd9eUNzedpu4S4Y6Mo" %}
[Phaser Quick Start](/publisher-flow/sdk-integration/phaser-3/phaser-quick-start)
{% endcontent-ref %}

### 🔍 Explore the API

Ready to go deeper? ➡️ Check out the [API Reference](/publisher-flow/sdk-integration/phaser-3/api-reference) to see all available functions, hooks, and how to customize your integration.

{% content-ref url="/pages/Zr8t4K1PsW9W0LV54ADS" %}
[API Reference](/publisher-flow/sdk-integration/phaser-3/api-reference)
{% endcontent-ref %}


# Phaser Quick Start

This guide walks you through setting up the ReneVerse JS SDK in your Phaser 3 game—from installing the SDK to serving your first ad.

### 🔐 Step 1: Get Your API Credentials

Before using the SDK, generate your **API Key** and **Private Key** by registering your game on the ReneVerse Portal.

{% content-ref url="/pages/VYSU0lMyIEF1Yz2A8zNk" %}
[Registering Your Game & Generating API Keys](/publisher-flow/registering-your-game-and-generating-api-keys)
{% endcontent-ref %}

{% hint style="danger" %}
Your Private Key will only be shown once—make sure to copy and store it securely.
{% endhint %}

<figure><img src="/files/RoG4hFnzkeMG6ESqZ1C0" alt=""><figcaption></figcaption></figure>

***

### 🧱 Step 2: Define Ad Surfaces in the Portal

To serve ads, you’ll first need to configure **ad surfaces** in the ReneVerse Portal. These act as placeholders that define where and how ads will appear in your game.

{% content-ref url="/pages/dUHoZRl9AUcXzZIndPV3" %}
[Creating Ad Surfaces in the Portal](/publisher-flow/defining-placeholders-in-the-portal/creating-ad-surfaces-in-the-portal)
{% endcontent-ref %}

***

### 📦 Step 3: Install the SDK

Install the ReneVerse Phaser SDK using npm:

{% tabs %}
{% tab title="JS" %}

```
# Install via NPM
npm install --save @reneverse/rene-sdk-phaser
```

{% endtab %}
{% endtabs %}

You can check for specific versions at [ ](https://www.npmjs.com/package/@reneverse/rene-sdk-phaser)<https://www.npmjs.com/package/@reneverse/rene-sdk-phaser> depending on your requirements.

***

## Initializing PhaserHooks and Serving Ads

The following code snippet shows how to initialize `PhaserHooks` provided in `rene-sdk-phaser` with your credentials, fetch ad surfaces, and serve a Smart Ad in your Phaser 3 scene.

```typescript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";
import { IRefPhaserGame, PhaserGame } from "./game/PhaserGame";
import { useRef } from "react";

function App() {

  //  References to the PhaserGame component (game and scene are exposed)
  const phaserRef = useRef<IRefPhaserGame | null>(null);
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const serveAd = async () => {
    if (phaserRef.current) {
      const scene = phaserRef.current.scene;

      if (scene) {
  
        // Fetch Ad surfaces configured in the ReneVerse portal
        const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
        // Check if there are any ad surfaces configured in the ReneVerse portal
        if (!adSurfaces.items.length) {
          console.log("No ad surfaces found");
          return;
        }
    
        // Fetch Ad from ReneVerse
        const ad = await phaserHooks
          .useReneVerse()
          .getAd(adSurfaces.items[0].adSurfaceId);
      
        // Load Ad image
        if (ad.adId) {
          scene.load.image("dynamicAd", ad.url as string);
          
          scene.load.once("complete", () => {
            
            // Get Random Position
            const x = Phaser.Math.Between(100, 900);
            const y = Phaser.Math.Between(100, 600);
            
            //  `add.sprite` is a Phaser GameObjectFactory method and it returns a Sprite Game Object instance
            const adSurface = scene.add.sprite(x, y, "dynamicAd");

            // Set display size
            adSurface.setDisplaySize(300, 200);
            
          };
          
          scene.load.start();
        }
      }
    }
  }
  
  // Creating a button to call the serveAd function
  return (
      <div>
        <PhaserGame ref={phaserRef} />
        <button onClick={serveAd}>
          Serve Ad
        </button>
      </div>
  );
}

export default App;
```

> 💡 Want to see the full example?\
> Head to [Full Implementation](/publisher-flow/sdk-integration/phaser-3/full-implementation-code) for a complete working sample.


# API Reference

Explore the full set of methods and hooks available in the ReneVerse Phaser SDK. These tools give you precise control over ad serving, surface configuration, and player tracking.

## 🧩 `useReneVerse`

Access all core methods for retrieving ad surfaces, requesting ads, and integrating with ReneVerse content delivery.

{% content-ref url="/pages/bj6MK3mfGdbYexPlnF9f" %}
[useReneVerse](/publisher-flow/sdk-integration/phaser-3/api-reference/usereneverse)
{% endcontent-ref %}

***

## 📊 `useTracking`

Track user interactions, viewability metrics, and impression data seamlessly within your Phaser game.

{% content-ref url="/pages/3EiJnHK6gsegEbtljofD" %}
[useTracking](/publisher-flow/sdk-integration/phaser-3/api-reference/usetracking)
{% endcontent-ref %}


# Authentication

There two levels of authentication

## Minimum Level

This authentication is absolutely always required, this is basically your Api Key and Private Key. This always needs to be part your requests.&#x20;

You can check [here](/publisher-flow/sdk-integration/phaser-3/phaser-quick-start#get-your-credentials) how to generate it.

All the calls that tagged as ***public***, are not essentially public but are callable using this minimum level of auth, basically for all requests private or public, you need the minimum level of auth.

## User Level

This is a complimentary auth layer on top of minimum level of auth, this auth is as the name suggests a user based auth, this is required when calling an endpoint which is tagged as ***private***.

To generate user level auth, there are two ways.

### Password Less Auth

[**`PUBLIC`**](#user-content-fn-1)[^1]

In this authentication scheme, the user does not have provide his/her password directly through the SDK, it's barrier free login, where SDK triggers a notification on Reneverse app for the user to accept the connection, and once they press confirm in the app, that information is relayed back to the SDK and it's then from that point onwards authenticated with user level auth as well.

```typescript
import { ReneSDK } from '@reneverse/game-sdk';

const reneSdk = new ReneSDK({
  privateKey: '<YOUR PRIVATE KEY>',
  apiKey: '<YOUR API KEY>'
});

const main = async () => {
  /**
  * This basically triggers a request for the user in the app 
  * ( app.reneverse.io ) to accept the connect for this game. 
  * This is a passwordless login for the user, where they just put 
  * in there email and once they accept in the app, the requests gets
  * automatically authenticated.
  **/
  const connectResponse = await reneSdk.connect('<EMAIL OF THE USER>');
  
  /**
  * This waits for the user to press the confirm button in the app, and once they
  * press it, this becomes true, ideally you would use this to manage user state
  * during user's first login
  **/
  const isConnected = await connectResponse.game.waitForGameConnect();
  console.log(isConnected);
}

main()
```

### Regular Auth

**`PUBLIC`**

This is a regular authentication scheme, where a user enters his password directly in-game and that information is relayed to the Reneverse, which then authenticates it and returns auth information back to the SDK, in a synchronous fashion.

```typescript
import { ReneSDK } from '@reneverse/game-sdk';

const reneSdk = new ReneSDK({
  privateKey: '<YOUR PRIVATE KEY>',
  apiKey: '<YOUR API KEY>'
});

const main = async () => {
  const loginResponse = await reneSdk.login('<EMAIL OF THE USER>', '<PASSWORD>');
  console.log(loginResponse);
}

main()
```

[^1]:


# User

## Get User Information

**`PRIVATE`**

This endpoint allows to to get the information about the current user.

```typescript
import { ReneSDK } from '@reneverse/game-sdk';

const reneSdk = new ReneSDK({
  privateKey: '<YOUR PRIVATE KEY>',
  apiKey: '<YOUR API KEY>'
});

const main = async () => {
  const connectResponse = await reneSdk.connect('<EMAIL OF THE USER>');
  const isConnected = await connectResponse.game.waitForGameConnect();

  const user = await connectResponse.user.getUser();
  console.log(user);
}

main()
```

###


# useReneVerse

The useReneVerse hook is your go-to for handling Smart Ad logic in Phaser 3.

These hooks enable ad serving, retrieval of ad surfaces, and ad tracking, simplifying the integration of advertising features into your projects.

***

### :inbox\_tray: getAdSurfaces()

**Description:**\
Fetches all ad surfaces configured for your game in the ReneVerse Portal.

```typescript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";

function App() {
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const getAdSurfaces = async () => {
    // Fetch all Ad surfaces configured in your game on the ReneVerse portal
    const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
    console.log(adSurfaces);
  }
  
  // Creating a button to call the getAdSurfaces function
  return (
      <div>
        <button onClick={getAdSurfaces}>
          Get Ad Surfaces
        </button>
      </div>
  );
}

export default App;
```

#### **Returns**

<pre><code>returns type AdSurfaceList {
    items: [AdSurface]
    limit: Int
    nextToken: String
}

type AdSurface {
    adSurfaceId: String
<strong>    adType: "BANNER" | "VIDEO"
</strong>    floorPrice: Float
    gameId: String
    interactivity: "INTERACTIVE" | "STATIC"
    maxHeight: String
<strong>    maxWidth: String
</strong>    resolutionIab: String
    targetingTags: [String]
    updatedAt: String
}
</code></pre>

***

### :dart: getAd()

**Description:**\
Fetches a Smart Ad for the given ad surface.

**Params**&#x20;

* `adSurfaceId : string`

```javascript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";

function App() {
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const serveAd = async () => {
    // Fetch all Ad surfaces configured in your game on the ReneVerse portal
    const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
    // Check if there are any ad surfaces configured in the ReneVerse portal
    if (!adSurfaces.items.length) {
      console.log("No ad surfaces found");
      return;
    }
    
    // Fetch Ad from ReneVerse
    const ad = await phaserHooks
      .useReneVerse()
      .getAd(adSurfaces.items[0].adSurfaceId);
      
    console.log(ad);
  }
  
  // Creating a button to call the serveAd function
  return (
      <div>
        <button onClick={serveAd}>
          Serve Ad
        </button>
      </div>
  );
}

export default App;
```

#### **Returns**

```
returns type ServeAd {
    adId: String
    adSurfaceId: String
    adType: "BANNER" | "VIDEO"
    hasOffer: Boolean
    placeholderUrl: String
    url: String
    viewId: String
}
```

***

### :eye: trackAdSingle()

**Description:**\
Tracks a single ad’s visibility and view time. Records impressions for served Ads.

**Params**&#x20;

* `ad : type ServeAd` — The served ad object
* `screenCoveragePercentage: number` — Percentage visible
* `timeInMilliseconds: number` — Time in ms the ad was visible
* `angleView?: number` — Viewing angle

```typescript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";

function App() {
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const trackAd = async () => {
    // Fetch all Ad surfaces configured in your game on the ReneVerse portal
    const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
    // Check if there are any ad surfaces configured in the ReneVerse portal
    if (!adSurfaces.items.length) {
      console.log("No ad surfaces found");
      return;
    }
    
    // Fetch Ad from ReneVerse
    const ad = await phaserHooks
      .useReneVerse()
      .getAd(adSurfaces.items[0].adSurfaceId);
    
    // Let's say the ad is covering 20% of the screen.
    const screenCoveragePercentage = 20;
    
    // Setting a 1 second delay before tracking Ads
    setTimeout(() => {
       const trackAds = await phaserHooks
          .useReneVerse()
          .trackAdSingle(
            ad,
            screenCoveragePercentage,
            1000, // 1 seconds = 1000 milliseconds
            0 // For 2d, The angle is always 0
          );
          
      console.log(trackAds);
    }, 1000);
  }
  
  // Creating a button to call the trackAd function
  return (
      <div>
        <button onClick={trackAd}>
          Track Ad
        </button>
      </div>
  );
}

export default App;
```

#### **Returns**

```
returns boolean
```

***

### :eyes: trackAdMultiple()

**Description:**\
Aggregate and record impressions for several served ads concurrently, reducing individual tracking overhead and streamlining analytics collection.

**Params**&#x20;

* `adDataList : [{`\
  &#x20; `ad : type ServeAd`\
  &#x20; `screenCoveragePercentage: number`\
  &#x20; `timeInMilliseconds: number`\
  &#x20; `angleView?: number`\
  `}]`

```typescript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";

function App() {
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const trackAds = async () => {
    // Fetch all Ad surfaces configured in your game on the ReneVerse portal
    const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
    // Check if there are more than 1 ad surfaces
    if (adSurfaces.items.length < 2) {
      console.log("Create more ad Surfaces");
      return;
    }
    
    // Fetch Ad from ReneVerse
    const ad = await phaserHooks
      .useReneVerse()
      .getAd(adSurfaces.items[0].adSurfaceId);
      
    // Fetch Second Ad from ReneVerse
    const ad2 = await phaserHooks
      .useReneVerse()
      .getAd(adSurfaces.items[1].adSurfaceId);
    
    // Let's say the first ad is covering 20% of the screen.
    const firstScreenCoveragePercentage = 20;
    
    // Let's say the second ad is covering 40% of the screen.
    const secondScreenCoveragePercentage = 40;
    
    // Setting a 1 second delay before tracking Ads
    setTimeout(() => {
       const trackAds = await phaserHooks
          .useReneVerse()
          .trackAdMultiple(
            [{
              ad: ad,
              screenCoveragePercentage: firstScreenCoveragePercentage,
              timeInMilliseconds: 1000, // 1 seconds = 1000 milliseconds
              angleView: 0 // For 2d, The angle is always 0
            },
            {
              ad: ad2,
              screenCoveragePercentage: secondScreenCoveragePercentage,
              timeInMilliseconds: 1000, // 1 seconds = 1000 milliseconds
              angleView: 0 // For 2d, The angle is always 0
            }]
          );
          
      console.log(trackAds);
    }, 1000);
  }
  
  // Creating a button to call the trackAds function
  return (
      <div>
        <button onClick={trackAds}>
          Track Ads
        </button>
      </div>
  );
}

export default App;
```

#### **Returns**

```
returns boolean
```


# useTracking

The useTracking hooks help you measure ad visibility and interaction in your Phaser game.

The `useTracking` hooks monitor visibility and screen coverage of served Ads, ensuring accurate impression counting based on ReneVerse viewability standards.

***

### :telescope: checkAdFullVisibility()

**Description:**\
Determines whether a specific ad is **fully visible** in the current scene and whether it’s being blocked by any other objects.

**Params**&#x20;

* `adSprite : Phaser Sprite Object`
* `scene: Phaser Scene Object`

```typescript
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";
import { IRefPhaserGame, PhaserGame } from "./game/PhaserGame";
import { useRef } from "react";

function App() {
  
  //  References to the PhaserGame component (game and scene are exposed)
  const phaserRef = useRef<IRefPhaserGame | null>(null);
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const checkVisibility = async () => {
    if (phaserRef.current) {
      const scene = phaserRef.current.scene;

      if (scene) {
  
        // Fetch Ad surfaces configured in the ReneVerse portal
        const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
        // Check if there are any ad surfaces configured in the ReneVerse portal
        if (!adSurfaces.items.length) {
          console.log("No ad surfaces found");
          return;
        }
    
        // Fetch Ad from ReneVerse
        const ad = await phaserHooks
          .useReneVerse()
          .getAd(adSurfaces.items[0].adSurfaceId);
      
        // Load Ad image
        if (ad.adId) {
          scene.load.image("dynamicAd", ad.url as string);
          
          scene.load.once("complete", () => {
          
            // Get Random Position
            const x = Phaser.Math.Between(100, 900);
            const y = Phaser.Math.Between(100, 600);
          
            //  `add.sprite` is a Phaser GameObjectFactory method and it returns a Sprite Game Object instance
            const adSurface = scene.add.sprite(x, y, "dynamicAd");

            // Set display size
            adSurface.setDisplaySize(300, 200);
            
            // Check if the Ad is visible or not
            const visibilityCheck = phaserHooks
                .useTracking()
                .checkAdFullVisibility(adSurface, scene);
                
            if (visibilityCheck.isFullyVisible) {
              console.log("Ad is Fully Visible");
            } else {
              console.log("Ad is blocked");
            }
            
          };
          
          scene.load.start();
        }
      }
    }
  }
  
  // Creating a button to call the serveAd function
  return (
      <div>
        <PhaserGame ref={phaserRef} />
        <button onClick={checkVisibility}>
          Check Visibility
        </button>
      </div>
  );
}

export default App;
```

#### Returns

```
interface CheckAdFullVisibility {
 isFullyVisible : Boolean
 blockingSprites : [Phaser Sprite Object]
}
```

***

### :triangular\_ruler: calculateAdCoverage()

**Description:**\
Calculates how much of the ad is visible to the player based on the current camera view. Useful for impression tracking and engagement analysis.

**Params**&#x20;

* `adSprite : Phaser Sprite Object`
* `camera : Phaser Camera Object`

```typescript
import { IRefPhaserGame, PhaserGame } from "./game/PhaserGame";
import { useRef } from "react";

function App() {
  
  //  References to the PhaserGame component (game and scene are exposed)
  const phaserRef = useRef<IRefPhaserGame | null>(null);
  
  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: '<YOUR API KEY>',
    privateKey: '<YOUR PRIVATE KEY>',
  });
  
  const checkVisibility = async () => {
    if (phaserRef.current) {
      const scene = phaserRef.current.scene;

      if (scene) {
  
        // Fetch Ad surfaces configured in the ReneVerse portal
        const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();
    
        // Check if there are any ad surfaces configured in the ReneVerse portal
        if (!adSurfaces.items.length) {
          console.log("No ad surfaces found");
          return;
        }
    
        // Fetch Ad from ReneVerse
        const ad = await phaserHooks
          .useReneVerse()
          .getAd(adSurfaces.items[0].adSurfaceId);
      
        // Load Ad image
        if (ad.adId) {
          scene.load.image("dynamicAd", ad.url as string);
          
          scene.load.once("complete", () => {
          
            // Get Random Position
            const x = Phaser.Math.Between(100, 900);
            const y = Phaser.Math.Between(100, 600);
          
            //  `add.sprite` is a Phaser GameObjectFactory method and it returns a Sprite Game Object instance
            const adSurface = scene.add.sprite(x, y, "dynamicAd");

            // Set display size
            adSurface.setDisplaySize(300, 200);
            
            // Check if the Ad is visible or not
            const visibilityCheck = phaserHooks
                .useTracking()
                .checkAdFullVisibility(adSurface, scene);
                
            if (visibilityCheck.isFullyVisible) {
              // if Fully visible, calculate ad coverage
              const adCoverage = phaserHooks
                .useTracking()
                .calculateAdCoverage(adSurface, scene.cameras.main);
              
              console.log(adCoverage);
            } else {
              console.log("Ad is blocked");
            }
            
          };
          
          scene.load.start();
        }
      }
    }
  }
  
  // Creating a button to call the serveAd function
  return (
      <div>
        <PhaserGame ref={phaserRef} />
        <button onClick={checkVisibility}>
          Check Visibility
        </button>
      </div>
  );
}

export default App;
```

#### Returns

```
interface CalculateAdCoverage {
  isVisible: Boolean
  screenCoveragePercentage: Number
  visibleArea: Number
  totalArea: Number
}
```


# Full Implementation (Code)

A complete working example showing how to integrate and serve Smart Ads in a Phaser 3 game using the ReneVerse SDK—from initialization to rendering and tracking.

```typescript
import { useRef } from "react";
import { IRefPhaserGame, PhaserGame } from "./game/PhaserGame";
import { useState } from "react";
import { PhaserHooks } from "@reneverse/rene-sdk-phaser";

function App() {
  //  References to the PhaserGame component (game and scene are exposed)
  const phaserRef = useRef<IRefPhaserGame | null>(null);

  // Initialize PhaserHooks with API Key and Private Key for ReneVerse
  const phaserHooks = new PhaserHooks({
    apiKey: process.env.NEXT_PUBLIC_API_KEY as string,
    privateKey: process.env.NEXT_PUBLIC_PRIVATE_KEY as string,
  });

  // Array to store adsf
  const [ads, setAds] = useState<any[]>([]);

  // Map to store ad impressions
  const [adImpressions, setAdImpressions] = useState<
    Map<
      string,
      {
        adCoverage: number;
        impressions: number;
      }
    >
  >(new Map());

  const serveAd = async () => {
    if (phaserRef.current) {
      const scene = phaserRef.current.scene;

      if (scene) {
        // Fetch Ad surfaces
        const adSurfaces = await phaserHooks.useReneVerse().getAdSurfaces();

        if (!adSurfaces.items.length) {
          console.log("No ad surfaces found");
          return;
        }

        // Fetch Ad from ReneVerse
        const ad = await phaserHooks
          .useReneVerse()
          .getAd(adSurfaces.items[0].adSurfaceId);

        console.log("Ad served", ad);

        // Load Ad image
        if (ad.adId) {
          // Add ad to the list
          setAds((prevAds) => [...prevAds, ad]);

          // Add ad to the impressions map
          setAdImpressions((prevImpressions) => {
            const newImpressions = new Map(prevImpressions);
            newImpressions.set(ad.adId!, {
              adCoverage: 0, // Initial coverage
              impressions: 0, // Initial impressions
            });
            return newImpressions;
          });

          scene.load.image("dynamicAd", ad.url as string);

          scene.load.once("complete", () => {
            // Add more stars
            const x = Phaser.Math.Between(100, 900);
            const y = Phaser.Math.Between(100, 600);

            //  `add.sprite` is a Phaser GameObjectFactory method and it returns a Sprite Game Object instance
            const adSurface = scene.add.sprite(x, y, "dynamicAd");

            // Set display size
            adSurface.setDisplaySize(300, 200);

            // Check visibility of the ad
            const trackAdVisibility = async () => {
              // Check if Ad is fully visible
              const visibilityCheck = phaserHooks
                .useTracking()
                .checkAdFullVisibility(adSurface, scene);

              if (visibilityCheck.isFullyVisible) {
                console.log(`Ad ${ad.adId} is fully visible`);

                // if Fully visible, calculate ad coverage
                const adCoverage = phaserHooks
                  .useTracking()
                  .calculateAdCoverage(adSurface, scene.cameras.main);

                console.log(adCoverage);

                // Track Ad
                const trackAds = await phaserHooks
                  .useReneVerse()
                  .trackAdSingle(
                    ad,
                    adCoverage.screenCoveragePercentage,
                    1000,
                    0
                  );

                if (trackAds) {
                  // If tracking is successful, update ad impressions
                  setAdImpressions((prevImpressions) => {
                    const newImpressions = new Map(prevImpressions);
                    const currentImpressionData = newImpressions.get(
                      ad.adId!
                    ) || {
                      adCoverage: 0,
                      impressions: 0,
                    };

                    newImpressions.set(ad.adId!, {
                      adCoverage: adCoverage.screenCoveragePercentage,
                      impressions: currentImpressionData.impressions + 1,
                    });

                    return newImpressions;
                  });
                } else {
                  console.log(`Failed to track ad ${ad.adId}`);
                }
              } else {
                // Ad is partially or fully blocked
                console.log(
                  `Ad ${ad.adId} is blocked by ${visibilityCheck.blockingSprites.length} sprites`,
                  {
                    blockingSprites: visibilityCheck.blockingSprites.map(
                      (sprite: any) => sprite.name || "Unnamed Sprite"
                    ),
                  }
                );
              }
            };

            // Track visibility every second
            const visibilityInterval = scene.time.addEvent({
              delay: 1000, // Check every second
              callback: trackAdVisibility,
              loop: true,
            });

            // Stop tracking after 5 minutes
            scene.time.delayedCall(5 * 60 * 1000, () => {
              visibilityInterval.remove();
              console.log(`Stopped tracking ad ${ad.adId}`);
            });
          });
        }
        scene.load.start();
      }
    }
  };

  return (
    <div className="parent">
      <PhaserGame ref={phaserRef} />

      <div className="stats">
        <button className="button" onClick={serveAd}>
          Serve Ad
        </button>

        <div>
          Total Ads: {ads.length} <br />
          Total Coverage:{" "}
          {Array.from(adImpressions.values())
            .reduce((acc, curr) => acc + curr.adCoverage, 0)
            .toFixed(2)}{" "}
          <br />
          Total Impressions:{" "}
          {Array.from(adImpressions.values()).reduce(
            (acc, curr) => acc + curr.impressions,
            0
          )}
        </div>
      </div>
    </div>
  );
}

export default App;

```


# Defining Placeholders in the Portal

This section explains how to create and configure Ad Surfaces and Branded Object Placements directly from the ReneVerse Portal.

This guide walks you through how to set up both **Ad Surfaces** and **Branded Object Placements** using the web-based Portal.&#x20;

This is particularly useful if anyone *other* than your developer team members need to manage placements (or your developers need to make changes while away from their main computer).

{% hint style="warning" %}
Already working inside Unity, Unreal, or Phaser?

You can also define placements directly within your engine using the ReneVerse SDK. If you've gone that route, this section is optional.
{% endhint %}

***

### 🧱 What You'll Learn

* How to create and configure **Ad Surfaces** (for Smart Ads)
* How to create and configure **Branded Object Placements** (for in-world 3D brandable assets)

***

### 📚 In This Section

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><a href="/pages/dUHoZRl9AUcXzZIndPV3"><strong>Creating Ad Surfaces</strong></a></td><td>Define where and how 2D Smart Ads (like banners and video panels) appear in your game world.</td></tr><tr><td><a href="/pages/FXHqT3vyFekW0jaxqyI8"><strong>Creating Branded Object Placements</strong></a></td><td>Set up branded 3D objects that can dynamically appear in your game environment.</td></tr></tbody></table>


# Creating Ad Surfaces in the Portal

### :bricks: About Ad Surfaces

**Ad Surfaces** are visual ad placements that exist at the game level. They aren't tied to specific in-game objects, making them simple to manage and ideal for both banner and video ads. These surfaces, once created, can be used across SDKs in Unity, Unreal, and Phaser.

***

### 🧭 Step 1: Access Your Game

* From your **Organization’s game list**, select the game you want to work with.
* Navigate to the **Ad Surfaces** tab.
* Click **+ New Ad Surface**.

<figure><img src="/files/5fX5fo6R1R0gCjeDQ4vz" alt=""><figcaption></figcaption></figure>

***

### ⚙️ Step 2: Configure the Ad Surface

<figure><img src="/files/IOEgrWwuu82Pl46phFVN" alt=""><figcaption></figcaption></figure>

Fill in the following fields:

* **Ad Type** – Choose the type of ad this surface will display:
  * `Banner` (image)
  * `Video` (auto-playing clip)
* **Resolution** – Define the display resolution (e.g., 300x250, 1024x512). This determines how the ad scales in your game.
* **Interactivity** – Choose one of the following:
  * `Static`: Non-clickable
  * `Interactive`: Clickable (opens landing pages or in-game actions)
* **Targeting Tags** – Add keywords that describe where the ad will appear or what kind of gameplay surrounds it (e.g., `"urban"`, `"sci-fi"`, `"puzzle"`). These improve ad targeting and campaign relevance.
* **Placeholder File** – Upload a fallback image or video that will be shown if no active ad is available.

***

### ✅ Step 3: Save & Generate

* Click **Add** to finalize the ad surface.
* A **unique Ad Surface ID** will be generated automatically—used to link this surface to in-game placements through the SDK.

<figure><img src="/files/3ieHDkfyRi4gkZuTuJgY" alt=""><figcaption></figcaption></figure>

***

### 🎮 Step 4: Use It In Your Game

Once created, this Ad Surface will sync automatically to your SDK when you click **Sync Game Assets** inside:

* Unity’s **ReneVerse Settings**
* Unreal’s **ReneVerse API Editor**
* Phaser’s **PhaserHooks setup**

You can now place, serve, and track this ad surface directly from within your game engine.


# Creating Branded Object Placements in the Portal

Learn how to create and configure Branded Object Placements in the ReneVerse Portal, including targeting tags, bounding box dimensions, and placeholder assets for dynamic in-game brand integration.

### :bus: About Branded Object Placements

**Branded Object Placements** are designated 3D spaces within your game that can dynamically load in branded models. These are ideal for in-world promotional items like billboards, vending machines, posters, or product displays that seamlessly integrate into gameplay.

***

### 🧭 Step 1: Access Your Game

* From your **Organization’s game list**, select the game you want to configure.
* Go to the **Branded Objects** tab.
* Click **+ New Branded Object Placement**.

***

### ⚙️ Step 2: Configure the Branded Object Placement

Fill in the following fields:

* **Placement ID** – This is generated automatically after saving and used by the SDK to identify the object in-game.
* **Targeting Tags** – Add keywords that describe the context of the object (e.g., `"futuristic"`, `"sports_area"`, `"shop_interior"`). These improve brand matching and campaign targeting.
* **Bounding Box Dimensions** – Define the size of the 3D space the branded object will occupy (width, height, depth). The model will be scaled to fit this box.
* **Placeholder Model or Asset** – Upload a fallback 3D model (optional) to show when no branded content is available. This helps maintain visual continuity in your game.

***

### ✅ Step 3: Save & Sync

* Click **Add** to create the Branded Object Placement.
* Once saved, a **unique Placement ID** is generated.

This placement will now appear in your SDK environment when you sync assets in Unity, Unreal, or Phaser.

***

### 🎮 Step 4: Use It In Your Game

Branded Object Placements can now be added directly into your game scene via the ReneVerse SDK tools in:

* Unity’s **ReneVerse Settings**
* Unreal’s **ReneVerse API Editor**
* Phaser via `useReneVerse()` methods

These placements support interaction tracking and screen visibility analytics by default once served.


# Creating Ownable Collections and Defining Ad Surfaces

Define your Ad Surfaces by creating Ownable Assets where these Ad Surfaces will reside.

To enable in-game Borderless Ads, you must first have an identifiable asset upon which a blank Ad Surface can be added. To do this, navigate to the **Games** tab within the Portal, enter one of your Organization's Games pages, and select **+ New Collection**. This is an **Asset Collection**, where all of your assets will be organized and managed.

<figure><img src="/files/1SA2JmuK6IIn1oD9pMpu" alt=""><figcaption><p>Click on <strong>+ New Collection</strong> to begin creating Assets that are home to your Ad Surfaces. </p></figcaption></figure>

In the **New Collection** pop-up window, add a `Name`, `Description`, and `Image`, for a picture or logo. Organizations are likely to have multiple collections to organize Assets (and the Ad Surfaces that will be added to those Assets) in various ways that make sense for them, so be sure to utilize the Description field wisely - perhaps to specify what kinds of assets you will add or to describe its purpose related to some event, release, or initiative.

<figure><img src="/files/k9f4aeHCDr9oS7Wrk0xZ" alt=""><figcaption><p>In the <strong>New Game Collection</strong> window, add the details for your Asset Collection.</p></figcaption></figure>

Click on your newly created Collection to view it and create Assets for your game.&#x20;

<figure><img src="/files/uqx6FDJHDwn0SCp5Vv6S" alt=""><figcaption><p>Click on your latest <strong>Collection</strong> to view &#x26; create Assets within it.</p></figcaption></figure>

Inside your Collection, you will need to create an **Ownable Asset** upon which the Ad Surfaces can be added. To create an Ownable Asset, click on **+**, we can create an Ownable Asset inside it, and let's start doing it by clicking on the correspondent button.<br>

<figure><img src="/files/xzqcdwO2kLZwUDJmtPaU" alt=""><figcaption><p>Click on <strong>+ New Ownable Asset.</strong></p></figcaption></figure>

Within the **New Ownable Asset** pop-up window, add a `Name`, `Description`,  `Image`, determine its, and select the `Storage` option for the asset. We recommend adding a clear image of the Asset itself for quick and easy navigation within your Asset Collection menu.&#x20;

<figure><img src="/files/jZyU51zwRUwI2m2qrna0" alt=""><figcaption><p>Enter the details of your new Ownable Asset.</p></figcaption></figure>

Now you've created your first Ownable Asset inside the Collection for your game. Let's open it up and define an Ad Surface!

<figure><img src="/files/sXfxYfEJKt1mVPlmhobs" alt=""><figcaption><p>Click on your Ownable Asset to view its properties.</p></figcaption></figure>

Within the page of the Ownable Asset you've made, there are a multitude of properties that can be manipulated. For the time being, we'll focus specifically on <mark style="color:purple;">defining an Ad Surface</mark>, which is a portion of the surface area of your Ownable Asset that you wish to display dynamic image or video advertising content. To start, click on **+ New Ad Surface**.&#x20;

<figure><img src="/files/IZS8CHOC5UTgO19BSyLZ" alt=""><figcaption><p>Click on <strong>+ New Ad Surface</strong> to define where ad content will show on your Ownable Asset, in-game.</p></figcaption></figure>

You have the option to create either a Banner (Image) or Video advertisement. In the following example, we've selected a Video Ad Surface. In the pop-up window that appears, define your desired resolution and whether or not the Ad Surface is **Interactive**. An **Interactive Ad Surface** is one that developers can define as having a triggered event when a particular action is completed by a player in-game. These Ad Surfaces can then send the player a message to their ReneVerse account email address upon a successful interaction, which is immensely useful for Advertisers.

A **Static Ad Surface** is simply **non-interactive**, and will only gather impression data, not interaction data. This kind of Ad Surface can still display both Banner (Image) and Video.

<figure><img src="/files/Ymd0q9NG6bIOU6wnmJzP" alt=""><figcaption><p>In the pop-up window, select your Resolution and Interactivity for the Ad Surface.</p></figcaption></figure>

With that, you've created your first **Ad Surface** with its own parameters that can be used in-game for dynamically-served, non-intrusive, in-game ads!&#x20;

<figure><img src="/files/Z0f2eZa64m5gjlQIlP5U" alt=""><figcaption><p>Your Ad Surface is now ready! Its Resolution and Interactivity parameters can be toggled at any time.</p></figcaption></figure>

To summarize what you've accomplished in this section:

1. You created an **Asset Collection** within your game within the Portal.
2. You created your first **Ownable Asset** inside this Collection.
3. For that Ownable Asset, you defined your first **Ad Surface**, which can now be filled with dynamically-served ad content.&#x20;

You'll utilize this asset to launch advertisements inside your game.&#x20;


# Adding Branded Collections

Branded collections are created by brands outside the game, meaning that it could be implemented by any game of any organization, and here we'll see how to add this collection of branded assets into your game to utilize its ad surfaces.

In your game, select the one for which you want to add the collection of branded assets and open it, and in there you will see the button Collections Catalog. Click on that.

<figure><img src="/files/9PEXb5g4s5yvmZOsSzVJ" alt=""><figcaption></figcaption></figure>

Once the collection catalog is open, you will see the available collections created by brands that you can drag and drop into your game, meaning adding this collection as a part of your game. The difference with the [ownable collection](/publisher-flow/defining-placeholders-in-the-portal/creating-ownable-collections-and-defining-ad-surfaces) is that such a branded collection is not unique to your game, but could be added by other games and organizations as well.

<figure><img src="/files/CsAE9uEjd1IdoA0jmtOt" alt=""><figcaption></figcaption></figure>


# Ads.txt

Learn what Ads.txt is, how it works, and how to implement it on your ReneVerse-connected website to enhance ad transparency, prevent fraud, and ensure only authorized partners can sell your ad invento

## :receipt: What is Ads.txt?

Ads.txt (Authorized Digital Sellers) is an IAB Tech Lab initiative designed to increase transparency in the programmatic advertising ecosystem. It enables publishers to declare which companies are authorized to sell their digital inventory, helping advertisers verify they are buying legitimate ad space and preventing unauthorized inventory sales.

***

## :white\_check\_mark: Benefits of Implementing Ads.txt

* :lock: **Prevents Ad Fraud**: Reduces domain spoofing and unauthorized reselling
* :eye: **Increases Transparency**: Clarifies your supply chain for buyers
* :handshake: **Builds Trust**: Signals professionalism and compliance with ad industry standards
* :moneybag: **Protects Revenue**: Ensures ad dollars flow to legitimate channels

***

## :gear: How to Implement Ads.txt on ReneVerse.io

Follow these steps to correctly implement `ads.txt` on your ReneVerse website:

### 1️⃣ Create the Ads.txt File

1. Open a plain text editor (such as Notepad, TextEdit, VS Code, etc.)
2. Add entries following this format:

   <pre><code><strong>reneverse.io, [OrgID], DIRECT
   </strong></code></pre>

   * `reneverse.io` is your domain name
   * `[OrgID]` is your unique organization ID provided by ReneVerse
   * `DIRECT` indicates a direct relationship with the seller

   **Example**:

   ```
   reneverse.io, OrgID123456789123456789123456789, DIRECT
   ```

{% hint style="warning" %}
Your OrgID is provided when your organization is registered or created by ReneVerse.
{% endhint %}

### 2️⃣ Upload Ads.txt to the Root Directory

* Connect to your web server using FTP, cPanel, or your preferred file manager
* Place `ads.txt` in the root directory of your domain (e.g.  `https://yourwebsite.com/ads.txt` )

### 3️⃣ Verify the Implementation

* Visit `https://yourwebsite.com/ads.txt` in your browser.
* If the file loads correctly as plain text, you're good to go!

{% hint style="danger" %}
If you see a 404 error or cannot access the file, check that:

* The file is named exactly "ads.txt" (lowercase, with no spaces)
* The file is placed in the correct root directory
* Your server permissions allow public access to the file
  {% endhint %}

***

## Troubleshooting

* :x: **File Not Found**: Ensure the file is named correctly and placed in the root directory
* :closed\_lock\_with\_key: **Permission Issues**: Check server permissions to make sure the file is readable
* :globe\_with\_meridians: **Subdomain Problems**: Each subdomain requires its own `ads.txt` file
* :receipt: **Content Type**: Ensure the file is served with the correct MIME type `text/plain`

***

## :pushpin: Best Practices

* Keep your file up to date 🗓️
* Regularly audit partners 🔍
* Only include authorized sellers ✅
* Follow IAB’s exact formatting guidelines 📄


# Borderless Gaming


# Creating Asset and Managing Metadata


# Minting Assets


# Player Authentication

ReneVerse Gamer Account Abstraction module.

### `ReneAPICreds`

The `ReneAPICreds` class stores your ReneVerse API credentials.

#### Fields

The following fields are available in the `ReneAPICreds` class:

* `APIKey` - Your ReneVerse API Key.
* `PrivateKey` - Your ReneVerse Private Key.
* `GameID` - Your ReneVerse Game ID.
* `HostName` - Your ReneVerse Host Name.

### `ReneAPIManager`

The `ReneAPIManager` class is used to initialize the ReneVerse API and connect to the ReneVerse game.

#### `Init()`

The `Init()` method initializes the ReneVerse API.

```
var reneApi = ReneAPIManager.Init();
```

#### `GameConnect()`

`ReneAPIManager.GameConnect(emailInputField.text, _onGraphQlHttpRequestException)` connects the user to the game by making an asynchronous call to the `GameConnect` method of the `ReneAPIManager` class. This method takes in the email (should be registered on the ReneVerse service) input field text and an optional callback function to handle GraphQL HTTP request exceptions. The boolean value `connectedGame` is returned if the connection is successful.

```
bool connectedGame = await ReneAPIManager.GameConnect(emailInputField.text, _onGraphQlHttpRequestException);

if (!connectedGame) return;
```

### **`reneApi.IsAuthorized()`**

\
`reneApi.IsAuthorized()` is a method of the `API` class that returns a boolean value indicating if the user is authorized to access the API.

### Connect() example method

Summing up everything mentioned above the following method could be created to connect to our services to use the assets in your awesome games

```
public async void Connect() { 
// Check if email input field is not empty 
if (emailInputField.text == "") return;
// Initialize reneApi instance
var reneApi = ReneAPIManager.Init();

// Connect to the game
bool connectedGame = await ReneAPIManager.GameConnect(emailInputField.text, _onGraphQlHttpRequestException);

// Check if the game is connected successfully
if (!connectedGame) return;

// Check if reneApi instance is authorized
if (reneApi.IsAuthorized())
{
    // Update UI and retrieve user assets
    _connecting = false;
    PlayButton.interactable = true;
    AssetsResponse.AssetsData userAssets = await reneApi.Game().Assets();
    SelectCharacterPanel.SetActive(true);
    // ...
}
```

}

### Extensions

The `Extensions` class contains some handy extension methods you can use in your Unity project.

#### `SeparateCamelCase()`

The `SeparateCamelCase()` method separates camel case strings.

#### `UnderscoresToSpaces()`

The `UnderscoresToSpaces()` method replaces underscores with spaces.

#### `ToLoginUrl()`

The `ToLoginUrl()` method creates a login URL.

#### `AddEnterYour()`

The `AddEnterYour()` method adds "Enter your" to a string.

#### `GetName()`

The `GetName()` method gets the name of a member.

### Conclusion

Congratulations! You have successfully learned how to use the ReneVerse Unity SDK to integrate NFTs into your Unity games. Now it's time to start building amazing games with the power of the blockchain! Happy coding!

### `ReneAPICreds`

The `ReneAPICreds` class stores your ReneVerse API credentials.

#### Fields

The following fields are available in the `ReneAPICreds` class:

* `APIKey` - Your ReneVerse API Key.
* `PrivateKey` - Your ReneVerse Private Key.
* `GameID` - Your ReneVerse Game ID.

### `ReneAPIManager`

The `ReneAPIManager` class is used to initialize the ReneVerse API and connect to the ReneVerse game.

#### `API()`

The `API()` method returns the ReneVerse API client.

```
var reneApi = ReneAPIManager.API();
```

#### `GameConnect()`

```
var connected = await reneApi.Game().Connect(emailInputField.text, _onGraphQlHttpRequestException);
```

connects the user to the game by making an asynchronous call to the GameConnect method of the ReneAPIManager class. This method takes in the email (should be registered on the ReneVerse service) input field text and an optional callback function to handle GraphQL HTTP request exceptions. The boolean value connectedGame is returned if the connection is successful.

## `Getting the Assets`

Afterwards you have many ways to implement loaded from ReneVerse service information about users' Assets and here is one of them. We can use Coroutines since they are Unity specific and less error prone:

```
StartCoroutine(ConnectReneService(reneApi));
```

&#x20;As you remember we are waiting for the user to accept his entry into the ReneVerse system and to get an access to their assets. In order to achieve this you could do the following \ <br>

```
private IEnumerator ConnectReneService(API reneApi)
{
    var counter = 0;
    var userConnected = false;
    //Interval how often the code checks that user accepted to log in
    var secondsToIncrement = 1;
    while (counter <= secondsToWait && !userConnected)
    {
        print(counter);
        if (reneApi.IsAuthorized())
        {
        
        
        //Here can be added any extra logic once the user logged in
        
        
        
            yield return GetUserAssetsAsync(reneApi);
            userConnected = true;
        }

        yield return new WaitForSeconds(secondsToIncrement);
        counter += secondsToIncrement;
    }
}
```

Now let's look at the GetUserAssetsAsync(reneApi) method that has the necessary information in it&#x20;

```
private async Task GetUserAssetsAsync(API reneApi)
{
    AssetsResponse.AssetsData userAssets = await reneApi.Game().Assets();
    //By this way you could check in the Unity console your NFT assets
    userAssets?.Items.ForEach
    (asset => Debug.Log
        ($" - Asset Id '{asset.NftId}' Name '{asset.Metadata.Name}"));
    userAssets?.Items.ForEach(asset =>
    {
        string assetName = asset.Metadata.Name;
        string assetImageUrl = asset.Metadata.Image;
        string assetStyle = "";
        asset.Metadata?.Attributes?.ForEach(attribute =>
        {
        //Keep in mind that this TraitType should be preset in your Reneverse Account
            if (attribute.TraitType == "Style")
            {
                assetStyle = attribute.Value;
            }
        });
        //An example of how you could keep retrieved information
        Asset assetObj = new Asset(assetName, assetImageUrl, assetStyle);
        //one of many ways to add it to the game logic 
        _assetManager.userAssets.Add(assetObj);
    });
}
```

Here is mine and indeed the name of the Attribute is "Style"

<figure><img src="/files/97AMp0fBH8KJdQmD1leS" alt=""><figcaption></figcaption></figure>

You set this values once you create assets and can modify them in this menu

<figure><img src="/files/GThuMGZINwmyk7KI2K0W" alt=""><figcaption></figcaption></figure>

## `An example of Asset entity`

Here is how Asset class is set up in our case but it is up to you how you hook up the retrieved information within your game.&#x20;

```
public class Asset
{
    public string AssetName { get; set; }
    public string AssetUrl { get; set; }

    public string AssetStyle {get; set;}
    public Asset(string assetName, string assetUrl, string assetStyle)
    {
        AssetName = assetName;
        AssetUrl = assetUrl;
        AssetStyle = assetStyle;
    }
}
```

#### Congratulations! You have successfully learned how to use the ReneVerse Unity SDK to integrate NFTs into your Unity games. Now it's time to start building amazing games with the power of the blockchain! Happy coding!


# Game Connect

GameConnect gives your users advantages of using playing the game as long as they are logged in the system. The difference with [Email & Password Login](/publisher-flow/player-authentication/email-and-password-login) is that the user should admitting the logging in attempt on the Reneverse website:

<figure><img src="/files/vMtX4bfLQ3G8ck7B3ZR4" alt=""><figcaption><p>Once GameConnect happens, the user should confirm it on the website </p></figcaption></figure>

The `ReneAPIManager` class is a utility class that manages connections and interactions with the ReneVerse API. It provides several static methods to initialize the API, handle user authentication, connect to games, and perform various other operations.

#### Methods: GameConnect and GameConnectWithUserName

**Method: `GameConnect`**

**Signature**:

```csharp
public static async Task<bool> GameConnect(string email)
```

**Description**: The `GameConnect` method connects to the ReneVerse game using the provided email. This connection requires user authorization on the ReneVerse website.

**Parameters**:

* `email` (string): The email address of the user. This email must be registered on the ReneVerse website.

**Returns**:

* `Task<bool>`: A task representing the asynchronous operation. The task result is a boolean indicating whether the connection was successful.

**Method: `GameConnectWithUserName`**

**Signature**:

```csharp
public static async Task<bool> GameConnectWithUserName(string userName)
```

**Description**: The `GameConnectWithUserName` method connects to the ReneVerse game using the provided username. This connection also requires user authorization on the ReneVerse website.

**Parameters**:

* `userName` (string): The username of the user. This username must be registered on the ReneVerse website.

**Returns**:

* `Task<bool>`: A task representing the asynchronous operation. The task result is a boolean indicating whether the connection was successful.

#### Usage

The `GameConnect` and `GameConnectWithUserName` methods can be called from any script within the Unity project. Typically, they would be called when the user attempts to connect to the game through the game's user interface.

**Example Usage in Unity**

Here's an example of how to use the `GameConnect` and `GameConnectWithUserName` methods within a Unity script. This example assumes you have a basic UI setup with input fields for the email or username and a button to trigger the connection process.

1. **Create a Connection UI**:
   * Add Input Fields for email or username.
   * Add a Button for the connection action.
2. **Attach a Script to the Button**:

   ```csharp
   csharpCopy codeusing UnityEngine;
   using UnityEngine.UI;
   using ReneVerse;

   public class ConnectionManager : MonoBehaviour
   {
       public InputField emailInputField;
       public InputField userNameInputField;
       public Text statusText;

       public async void OnConnectButtonClicked()
       {
           string email = emailInputField.text;
           string userName = userNameInputField.text;
           
           bool connectionSuccessful;
           if (!string.IsNullOrEmpty(email))
           {
               connectionSuccessful = await ReneAPIManager.GameConnect(email);
           }
           else
           {
               connectionSuccessful = await ReneAPIManager.GameConnectWithUserName(userName);
           }

           if (connectionSuccessful)
           {
               statusText.text = "Connection successful! Please authorize on the ReneVerse website.";
               // Proceed to the next scene or game state
               // Now players have the benefits of logging in
           }
           else
           {
               statusText.text = "Connection failed. Please check your credentials or registration status.";
           }
       }
   }
   ```
3. **Initialize the ReneVerse API**: Ensure that the API is initialized before calling the connection methods. This can be done in the `Start` method of a Unity script or any other appropriate place in your game.

   ```csharp
   csharpCopy codevoid Start()
   {
       ReneAPIManager.InitializeAPI();
   }
   ```

#### Detailed Explanation

**Initialization**

Before calling the `GameConnect or GameConnectWithUserName`method, it is crucial to initialize the ReneVerse API. The `InitializeAPI` method sets up the API using the credentials stored in the `ReneAPICreds` in the Reneverse Window that Rene Sdk Provides (Shift + R/ Window -> Reneverse Settings).

**Handling Game Connection**

The `GameConnect` and `GameConnectWithUserName` methods utilize the `GameAPI` class to send a connection request to the ReneVerse backend. Upon sending the request, users need to authorize the connection on the ReneVerse website.

```csharp
public static async Task<bool> GameConnect(string email)
{
    GameAPI gameAPI = api.Game();
    return await gameAPI.Connect(email);
}

public static async Task<bool> GameConnectWithUserName(string userName)
{
    GameAPI gameAPI = api.Game();
    return await gameAPI.ConnectWithUserName(userName);
}
```

**Customization**

Developers can customize the connection implementation as needed. For instance, input parameters can be gathered through different UI elements, such as text fields or dropdowns. The process of integrating the connection functionality into the game's flow is flexible and can be adapted to fit various design requirements.

#### Summary

The `ReneAPIManager.GameConnect` and `ReneAPIManager.GameConnectWithUserName` methods provide a straightforward way to connect to the ReneVerse game environment in Unity games. These methods require user authorization through the ReneVerse website, ensuring secure connections. By following the steps outlined above, developers can easily integrate connection functionality into their games, allowing users to connect using their registered email or username. The methods are asynchronous and return a boolean indicating the success of the connection attempt, enabling developers to handle successful and failed connections appropriately within their game.


# Email & Password Login

The `ReneAPIManager.Login` method provides an easy way to authenticate users on the Rene verse Portal  through your game, bringing many benefits of it. Below, you'll find comprehensive documentation that explains its usage and integration into your Unity project.

**Class Overview**

**Namespace**: `ReneVerse`

**Class**: `ReneAPIManager`

The `ReneAPIManager` class is a utility class that manages connections and interactions with the ReneVerse API. It provides several static methods to initialize the API, handle user authentication, and perform various other operations.

**Method: `Login`**

**Signature**:

```csharp
public static async Task<bool> Login(string email, string password)
```

**Description**: The `Login` method authenticates a user with the ReneVerse API using the provided email and password. If the login is successful, it retrieves and stores the user's profile data.

**Parameters**:

* `email` (string): The email address of the user.
* `password` (string): The password of the user.

**Returns**:

* `Task<bool>`: A task representing the asynchronous operation. The task result is a boolean indicating whether the login was successful.

**Usage**: The `Login` method can be called from any script within the Unity project. Typically, it would be called when the user attempts to log in through the game's user interface.

**Example Usage in Unity**

Here's an example of how to use the `Login` method within a Unity script. This example assumes you have a basic UI setup with input fields for the email and password, and a button to trigger the login process.

1. **Create a Login UI**:
   * Add Input Fields for email and password.
   * Add a Button for the login action.
2. **Attach a Script to the Button**:

   ```csharp
   csharpCopy codeusing UnityEngine;
   using UnityEngine.UI;
   using ReneVerse;

   public class LoginManager : MonoBehaviour
   {
       public InputField emailInputField;
       public InputField passwordInputField;
       public Text statusText;

       public async void OnLoginButtonClicked()
       {
           string email = emailInputField.text;
           string password = passwordInputField.text;

           bool loginSuccessful = await ReneAPIManager.Login(email, password);

           if (loginSuccessful)
           {
               statusText.text = "Login successful!";
               // Proceed to the next scene or game state.
               // Now players have the benefits of logging in
           }
           else
           {
               statusText.text = "Login failed. Please check your credentials.";
           }
       }
   }
   ```
3. **Initialize the ReneVerse API**: Ensure that the API is initialized before calling the `Login` method. This can be done in the `Start` method of a Unity script or any other appropriate place in your game.

   ```csharp
   csharpCopy codevoid Start()
   {
       ReneAPIManager.InitializeAPI();
   }
   ```

#### Detailed Explanation

**Initialization**

Before calling the `Login` method, it is crucial to initialize the ReneVerse API. The `InitializeAPI` method sets up the API using the credentials stored in the `ReneAPICreds` in the Reneverse Window that Rene Sdk Provides (Shift + R/ Window -> Reneverse Settings).

**Handling Login**

The `Login` method in `ReneAPIManager` utilizes the `UserAPI` class to send a login request to the ReneVerse backend. Upon successful authentication, the method fetches the user's profile.

**Customization**

Developers can customize the login implementation as needed. For instance, input parameters can be gathered through different UI elements, such as text fields or dropdowns. The process of integrating the login functionality into the game's flow is flexible and can be adapted to fit various design requirements.

#### Summary

The `ReneAPIManager.Login` method provides a straightforward way to handle user authentication to Reneverse in Unity games using the ReneVerse API. By following the steps outlined above, developers can easily integrate login functionality into their games, allowing users to authenticate with their ReneVerse credentials. The method is asynchronous and returns a boolean indicating the success of the login attempt, enabling developers to handle login success and failure appropriately within their game.


# Advertiser Overview

This section of the documentation is for those who want to <mark style="color:purple;">**create ad campaigns that will be used by games integrating them**</mark>. Below, you'll find step-by-step actions that are needed to start the process

1\) Of course, to start using ReneVerse services, you should have a registered account and if you don't have one yet, feel free checking [Registering as a New User](/getting-started/registering-as-a-new-user) section to perform it.

2\) Now you can successfully [create the advertisement campaign](/advertiser-flow/creating-ad-campaign) to implement dynamic advertisement possibilities into games.

3\) Once the advertisement campaign is created and the time when it's running is set, you can start [adding advertisements](/advertiser-flow/adding-ads-to-campaign) inside it to be projected in games.


# Creating Ad Campaign

You could be a game development company, an advertisement company, or both to create an advertisement campaign on our portal. To do it, you already should be registered at our portal and to have an organization in it. Besides that, you should have a particular role to be able to create an ad campaign. To start creating it, you should click on New and then select Campaign in the drop-down section.

<figure><img src="/files/odLOnC2uzEyORfV4mDjT" alt=""><figcaption></figcaption></figure>

The next step will be populating the advertisement campaign with the information required for it. Name is the name of the campaign, how it's going to be called, or to which event it belongs to. Description is a more detailed way to describe your campaign, what it is about, what it is dedicated to, maybe even what's the reason of this campaign, it's up to you.&#x20;

Image is what you will see on the portal, we advise putting there the image that will tell you immediately by looking at it, what is this campaign about, so to quickly navigate between campaigns.

Campaign Goal:&#x20;

-Product placement is for the particular product that you are about to launch, it could be a new mobile phone or a new model of a car.

-Brand awareness is about the distribution of your brand in general, to make people know about your company in general.&#x20;

Dates are the time when the advertisement campaign will be running on all games that implement your advertisement, it means that there is always a particular time period when the ad campaign is running on players' machines, in players' games and environments.&#x20;

Countries are about which countries you are about to roll out, also demographics is about which gender is going to see your ads.

Age is the same idea but about the age of the target audience.&#x20;

Game genres are about which games will actually implement your ad campaign and in which game genres and environments it will make most sense.&#x20;

Ad type:&#x20;

-Banner, which essentially is a texture, an image.&#x20;

-Video, which is pretty much a video.

<br>

<figure><img src="/files/KQOi6M6DbqzS63d9o35L" alt=""><figcaption></figcaption></figure>

Once the campaign is created and selected, you could open it to see some information there. There you will see, in addition to data that you had populated before: the name, the description, the time period when the campaign is active, you could also see the impressions and interactions.

Impressions are defined by how often the campaign is viewed, is looked at. I

Interactions are how often the advertisement inside the campaign is interacted with in some form that is defined by each particular game.

You could see these stats in the form of graphs to analyze the data.

<figure><img src="/files/qdeadlROnxIaCpxY8Zrn" alt=""><figcaption></figcaption></figure>

Inside the Advertisement Campaign, you can create a new ad and define its name, the type of it, is it going to be a banner or video, to select the image if it's a banner and to select a video if it is a video, and in addition to impression of the advertisement which essentially is looking at the advertisement, we have an interaction which is determined by developers integrating ReneVerse, and on this interaction you could set some message for the developers to implement in their gaming environments. Check [Adding Ads to Campaign](/advertiser-flow/adding-ads-to-campaign) for more information.<br>


# Managing Brands


# Creating Branded Collections

Create unique, in-game product placements with Branded Assets that can be integrated to any Game within an Organization.

**Branded Assets**, compared to Ownable Assets, exist on the Organizational level and can be integrated into any Game within the Organization by simply being dragged and dropped from its **Asset Collection**.&#x20;

To start, let's create a new **Asset Collection** by navigating to the **Assets** tab and clicking **+ New Collection.**&#x20;

<figure><img src="/files/fiJHo4bx4DeMUSwDQU4H" alt=""><figcaption><p>In the <strong>Assets</strong> menu tab, click on <strong>+ New Collection</strong> to create your first Branded Asset.</p></figcaption></figure>

In the **New Collection** pop-up window, enter your Name, Description, and Collection Picture, and select the Brand to which this Branded Asset Collection will belong. If you haven't yet created a Brand, you will see the following screen, prompting you to **create a Brand**. If you have already done this, you can proceed with creating your Branded Asset Collection (see "<mark style="background-color:orange;">\[continued]</mark>")

<figure><img src="/files/RhnwFmEBizr2OXQG1OwC" alt=""><figcaption><p>When creating a <strong>Branded Asset Collection</strong>, you will need to also <strong>create a Brand</strong>, if you haven't already.</p></figcaption></figure>

\[<mark style="background-color:purple;">Creating a Brand</mark>] Once you click on **Create a Brand**, you'll be sent to this Brand page, which you can also find under the menu for your Organization, located within your Organization Profile Picture (just left of the Notifications icon). Once here, click on **+ Add** to create a Brand.

<figure><img src="/files/USbHypkATAPQbybMEGQN" alt=""><figcaption><p>Click <strong>+ Add</strong> to create a Brand. Your Organization can have multiple Brands for which it advertises.</p></figcaption></figure>

In the **New Brand** pop-up menu that appears, add all relevant information, including `Name`, `Description`, `Brand Picture` or Logo, and a `Website URL` for the brand.

<figure><img src="/files/sZsDtxiLEtzJpKZM1qIY" alt=""><figcaption><p>Add your Brand's information and click <strong>Create</strong> to save the Brand to your Organization.</p></figcaption></figure>

<mark style="background-color:orange;">\[continued]</mark> Once you've created your Brand, you can continue creating your **Branded Asset Collection.** From the **New Collection** menu, select your Brand and click **Create.**

<figure><img src="/files/4kMUDr7HgzdD7mhs8B7p" alt=""><figcaption><p>Add the necessary information for your <strong>Branded Asset Collection</strong>, including the <strong>Brand</strong> you just created, and click <strong>Create</strong>.</p></figcaption></figure>

Once you have a Branded Asset Collection created, you can add a **+ New Branded Asset**.

<figure><img src="/files/O79e47NcNyihgG7w1Az8" alt=""><figcaption><p>Click on <strong>+ New Branded Asset.</strong></p></figcaption></figure>

In this new pop-up menu for your **New Branded Asset**, once again add the `Name`, `Description`, and `Picture` for the asset itself.&#x20;

<figure><img src="/files/9ie1c5piyMUzm5czvzLh" alt=""><figcaption><p>Add the necessary information for your <strong>New</strong> <strong>Branded Asset.</strong></p></figcaption></figure>

Once your Branded Asset is created, similar to that which was done for [Ownable Assets](/publisher-flow/defining-placeholders-in-the-portal/creating-ownable-collections-and-defining-ad-surfaces), you can view the Branded Asset and click on **New Ad Surface** to add either a **Banner or Video Ad Surface** to the Branded Asset. From here, simply define the Ad Surface as normal! Just like with Ownable Assets, Branded Assets' Ad Surfaces, once implemented by Games, will dynamically display ad content of active Borderless Ads campaigns.

The only difference with the Ad Surface created in this flow is that it is not tied up to a particular asset, as was the case with defining ad surfaces on Ownable Assets. Instead, **Branded Assets' Ad Surfaces** are related to the entire Game in general.&#x20;

<figure><img src="/files/W7YMxGRsqXLNGBj0jKRT" alt=""><figcaption><p>Click on <strong>New Ad Surface</strong> to add an Ad Surface to your Branded Asset.</p></figcaption></figure>


# Brand Creation

The organization of the advertiser before [creating assets](/advertiser-flow/managing-brands/asset-creation) to be distributed among games should define its brand or brands in the organization settings. This is done to connect an asset to a particular brand for better future integration with potential users.

Go to Organizations of your ReneVerse profile.

<figure><img src="/files/QGjAb5zFoH8yvWrdi6P3" alt=""><figcaption></figcaption></figure>

Go to settings of your organization.

<figure><img src="/files/wp0mflU981GPA9kY2xeZ" alt=""><figcaption></figcaption></figure>

In here, select the Brands tab and click on the Add button to add a new brand to your organization to be able to associate newly created assets with it to implement ads in games.

<figure><img src="/files/tUAr0XtGSoMbaA28ESYu" alt=""><figcaption></figcaption></figure>

In the creation of the brand, you can define its name, description, and the brand's picture. The website URL is recommended since it's needed for better end-user integration into your product, but it's not required.

<figure><img src="/files/p6zwh9lTp0Kan91hKLvb" alt=""><figcaption></figcaption></figure>

In this stage, we created our brand within the organization of ours and defined its parameters. Now, in the [asset creation](/advertiser-flow/managing-brands/asset-creation), we can connect this brand to a newly created advertisement asset.


# Asset Creation

Once we have our brand within an organization [created](/advertiser-flow/managing-brands/brand-creation), we can now create a new collection to store assets within it. These assets are global and could be implemented by all games that are integrated in ReneVerse environment. It means that the content of this asset and the brand of your organization will be accessible to user bases of all games that decide to incorporate your assets created in this collection.

<figure><img src="/files/iKQoTu8iy6kBAjStzr36" alt=""><figcaption></figcaption></figure>

Inside the creation of the collection of assets, you can define its name, description, and the picture of this collection. Besides that, you can select the brand that you want to represent it. You can select any brand that is [created](/advertiser-flow/managing-brands/brand-creation) within your organization. You can also associate this collection of assets with it.

<figure><img src="/files/p5TExknU5di4HPRNU4Lt" alt=""><figcaption></figcaption></figure>

Once the collection is created, we can open it up to create new branded assets for games on the ReneVerse portal to be able to integrate it into their environments.

<figure><img src="/files/eYa278015FUgDBPzEuTH" alt=""><figcaption></figcaption></figure>

While creating a new branded asset within your newly created collection, you can define its name, description, and upload a picture for this branded asset.

<figure><img src="/files/KVyyk48u6X3aAiCnJvqV" alt=""><figcaption></figcaption></figure>

In our newly created branded asset, let's open the Surface tab, and create a new App Surface to define it for the games. Implementing this asset integrates your advertisements on this Surface. Here you could also select whether your ad surface will be for the banner, which is essentially a texture or an image, or for a video.

<figure><img src="/files/8czp01g2wRWZRnNHHlUA" alt=""><figcaption></figcaption></figure>

In our example, we create a new video ad surface, but the banner ad surface would have the same settings. Namely, the resolution, defining the supported resolutions of advertisements, in our case it's videos, to be projected on the surfaces that games implement in their game. Also, there is an interactivity option, which could be either interactive or static. Meaning, the possibility to interact with your advertisement in the game in any way. It's defined by game creators, and it could be different from case-to-case scenario, but this interaction could increase the immersiveness of your advertisement in game world. And also, to give an interaction option that you define in your advertisement once you create it in ad campaign.

<figure><img src="/files/YldXzk912nYDWEu7z4uD" alt=""><figcaption></figcaption></figure>

We've just created an interactive video ad surface, and from now on, game creators can integrate your content into their games.

<figure><img src="/files/Dx8FK7WrZdZyht3ASc8M" alt=""><figcaption></figcaption></figure>

In this section, we created a collection for our branded assets to be stored there. As well, we created an asset inside it. And inside this asset itself, we defined an ad surface for game creators to integrate it. And once the ad campaign is active and [running](/advertiser-flow/creating-ad-campaign), this ad surface will be populated with the corresponding advertisements.


# Adding Ads to Campaign

Now, in the newly created Advertisement Campaign, you could create new ads by clicking on the button that says ”New Ads”, and there you could name it, then select a type of banner, and a type of advertisement: it's whether banner or video.&#x20;

Banner is a static image texture, which is essentially a picture.

Video is a dynamic texture, which is essentially a video.

Both of them are placed in a 2D space, however, there might be instances and scenarios when a 2D texture could wrap a complex 3D object, but we will not speak about that at the moment. Once the type of the ad is selected, you can upload it. Again, in case of the banner, it's an image, which means uploading an image, and in case of the video, it's a video. And when you click on ”Create”, the ad is created in this Advertisement Campaign.

<figure><img src="/files/qqz68TwSUBMquGXID5u0" alt=""><figcaption></figcaption></figure>

From now on, if the ad campaign is currently running and games implement advertising services integrated with your ad campaign, during the time period of the ad campaign, your ads from it will be running in these games.

<figure><img src="/files/NVBUEokipj9rX4rheS5Z" alt=""><figcaption></figcaption></figure>

Let's sum it up, what we did. So once an advertisement campaign is [created ](/advertiser-flow/creating-ad-campaign)and the content of it is populated, whether with banners or videos, if the time when the advertisement campaign is running is active, then all games implementing these advertisements of yours will be projecting them in their environments.<br>


# Creating Branded Assets


# Creator Flow - Borderless Ads Branded Assets Management


# Unity SDK

## **Version 1.3** (latest)

<https://cdn.reneverse.io/sdk/unity/rene-sdk-unity-1.3.zip>

**New Features:**

* **Game Spaces Support:**\
  Introduced the concept of **Game Spaces**, enabling you to segment your game into distinct areas or zones. You can now distribute ad surfaces, branded placements, and even specific content based on the selected game space. This brings much finer control to ad targeting and content management, letting you optimize player experience and engagement per game area.
* **Emotional Tagging:**\
  Added support for **emotional tagging** of content and placements. This makes it possible to assign an “emotional context” to in-game assets, which can be leveraged for more nuanced targeting, analytics, and adaptive gameplay or ad experiences.

**Enhancements:**

* Improved asset and space syncing logic to better reflect game structure when syncing assets and game data.
* In the Unity Editor, ad surfaces and branded object placements now display which game spaces they are assigned to, with an intuitive, expandable selector UI for editing and management.
* Expanded API endpoints and GraphQL support for creating, updating, and deleting game spaces, making the workflow seamless and editor-friendly.
* Batch operations and internal data consistency have been strengthened for scenarios involving multiple spaces and placements.

**Fixes & Edge Cases:**

* Addressed several edge cases related to the assignment and removal of game spaces from ad surfaces and branded placements.
* Fixed rare bugs with space sync not updating in the UI after asset changes.
* Various internal improvements to stability and error handling, especially for newly supported edge scenarios with complex game structures.

**Summary:**\
This release deepens the SDK’s flexibility for larger, more complex games—making content and ad management granular, emotionally intelligent, and future-proof. We continue to expand tooling based on your feedback, and appreciate your continued engagement with the ReneVerse SDK!

## **Version 1.1.8**&#x20;

<https://cdn.reneverse.io/sdk/unity/rene-sdk-unity-1.1.8.zip>

New Features:

* WebView Plugin Support:\
  Added support for embedding WebView content across Unity platforms, including WebGL and iOS. This enables integration of external web interfaces or dynamic content within the game environment.
* Branded Object and AdSurface Editing Improvements:\
  Introduced `ObjectEditingWindow` and `BrandedObjectPlacementEditorWindow` to unify and streamline the editing of ad surfaces and branded object placements within the Unity Editor.\
  Added configuration fields such as max width and height for more precise control over object dimensions.

Enhancements:

* API Refactoring and Initialization:\
  Simplified API initialization and handling logic, reducing dependency complexity and improving maintainability.\
  Sensitive credentials are now cleared properly from `ReneAPICreds.asset` to prevent data leakage.
* Scaling Adjustments:\
  Modified scale logic to correctly account for parent transform scale, ensuring proper rendering and sizing of nested objects.
* Editor Refactors and Clean-up:\
  Removed redundant code and outdated systems, including `DrawTags`, `CategoriesDrawer`, and legacy ad surface UI components.\
  Refactored asset synchronization, tag selector logic, and deletion workflows for consistency across UI components.
* Data Model and Serialization Improvements:\
  Updated data models (e.g. `GameApiData`, `GameAdvertisementConfig`) to use fields instead of properties to improve Unity serialization and performance.\
  Enhanced GraphQL request formatting and added fallback handling for scenarios with no available offers.
* Deletion Workflow:\
  Added reusable deletion logic for ad surfaces and branded objects, improving editor usability and reliability when removing items.

Fixes:

* Resolved inconsistencies and unnecessary logic in tag rendering, prefab creation, and asset template editing.\
  Improved caching and data visibility in the Game API layer to prevent stale data issues.\
  Removed unused SDK version retrieval method.\
  Standardized naming conventions and method consistency across multiple systems, including renaming to `SetLocalScale`.

We appreciate your continued feedback and are committed to improving the ReneVerse SDK. Thank you for using Version 1.1.8.

## Version 1.1.7

**New Features:**

* **Batch Serving Enhancements:**
  * Introduced batch serving support for both AdSurfaces and Branded Object Placements. Globally identical items now share a single view ID for unified tracking and reporting.
  * Improved instantiation logic for both ad surfaces and branded object placements, including automatic folder creation for prefab storage.
* **Branded Object Placement Support:**
  * Added support for branded object placements, allowing for enhanced tracking and management of 3D branded assets.

**Enhancements:**

* **Ad Tracking & Configuration:**
  * The game advertisement configuration is now loaded asynchronously to prevent null reference issues at runtime.
  * Additional tracking data is sent to provide more accurate ad impression and engagement metrics.
* **Editor & UI Improvements:**
  * Updated custom property drawers and foldouts for asset templates, improving organization and clarity in the Editor.
  * Gizmo indicators now display the ad surface ID and visual cues for globally identical items.
* **Performance & Stability:**
  * Refactored components to eliminate duplicate logic and ensure proper initialization.
  * Optimized caching, logging, and error handling across the SDK for a smoother experience in both the Editor and runtime.

**Fixes:**

* Resolved issues related to duplicate instantiation of the API manager and static field initialization.
* Fixed bugs in asynchronous data loading and prefab scaling that previously led to null reference errors.
* Corrected various query and UI issues, ensuring accurate prefab instantiation and ad rendering.

We appreciate your continued feedback and are committed to further improving the ReneVerse SDK. Enjoy the update!

## Version 1.1.6

* **Global Boolean for Checking**: A global boolean has been introduced to facilitate easier checking of certain states or conditions within the SDK.
* **Ad Surface Naming**: The ID is now added to the ad surface name for better identification and management within the hierarchy.
* **Hierarchy Selection for Gizmo Highlighting**: Selecting a parent object in the hierarchy now conveniently highlights all related ad surfaces, making it easier to visualize and manage them.
* **Legacy Render Pipeline Improvements**: Enhanced workflow and visualization for the legacy render pipeline, ensuring a smoother development process.

## Version 1.1.5

**New Features:**

* **Batch Serve Ad**:
  * Implemented a new feature for batch serving ads in a single API call, significantly optimizing ad serving in scenes.
  * There is a possibility of BatchDisableAds also for convinience.
  * Register ad surfaces globally, allowing batch serving to handle multiple surfaces efficiently.
  * Automatically cycles through ads per surface, distributing them evenly across all surfaces.

**Enhancements:**

* **Editor Improvements**:
  * Introduced built-in functionality for batch serve ad in the editor.
  * Implemented visual gizmo indicators that only appear when an ad surface is selected, improving clarity and performance.
  * Added camera selection functionality to streamline the ad setup process.
* **Performance Optimizations**:
  * Optimized ad tracking to its maximum potential, improving overall performance.
  * Enhanced UI tracking and made various UI changes to streamline the user experience.
* **Logging and Debugging**:
  * Improved logging for better tracking and debugging of ad serving processes.
  * Fixed issues with disabling ads and ensured reliable operation across different scenes and UI contexts.

**Bug Fixes:**

* Fixed several issues related to UI tracking and ad serving.
* Addressed various bugs and potential fixes to ensure stable operation.

## Version 1.1.4

**Key Changes:**

1. **UI Tracking Improvements**
   * Updated the UI tracking mechanism to ensure accurate tracking and performance monitoring of UI elements.
2. **Ad Tracking Optimization**
   * Optimized ad tracking to its maximum efficiency, improving performance and reliability.
3. **UI Functionality Enhancements**
   * Introduced a fully functional UI component, streamlining the user interface integration process.
   * Expanded the UI structure to support more complex layouts and interactions.
   * Implemented the instantiation process for UI elements, making it easier to dynamically create UI components.
   * Made experimental changes to the UI to enhance user experience and usability.
4. **Camera Selection Feature**
   * Added functionality to select and assign cameras, allowing greater flexibility in handling multiple camera setups.
5. **Bug Fixes and Enhancements**
   * General fixes to improve stability and performance.
   * Various additions to enhance functionality and user experience.
   * Potential fixes addressing specific issues reported by users.
   * Additional fixes to further refine the SDK’s performance.
   * Fixed issues related to disabling ads, ensuring proper functionality.

**Summary:**

This update brings robust enhancements to UI tracking and ad tracking, making them more efficient and reliable. The new camera selection feature adds flexibility for projects with multiple camera requirements. Numerous bug fixes and UI improvements have been made to ensure a smoother and more user-friendly experience.

We appreciate your feedback and are committed to continuously improving our SDK. Thank you for your support!

## Version 1.1.3

Features

* **Ad Tracking Enhancement**: Implemented an improved ad tracking system within the `AdTracker` script. The system now calculates the visibility of ads and reports the viewing time to the backend, ensuring more accurate tracking of ad impressions.

#### Changes

* **Ad Serving Logic Update**: Modified the `ServeAd` to longer increase the impressions count directly. Instead, impressions are calculated internally based on Rene tracking mechanism.
* **Gizmo Drawing Improvements**: Updated the gizmo drawing logic in the `AdTracker` and `BannerAdSurface` scripts to provide visual feedback in the Unity editor about the screen coverage of the ads.

#### Fixes

* **Screen Percentage Calculation**: Adjusted the calculation of the screen percentage coverage to handle cases where the ad surface is partially off-screen, ensuring more accurate visibility metrics.

#### Improvements

* **Asynchronous Updates**: Improved the `FixedUpdate` method in the `AdTracker` script to handle asynchronous ad view updates more efficiently.
* **Debug Logging**: Enhanced debug logging within the `AdTracker` script to provide detailed information about ad visibility and coverage during development.

#### Technical Details

* **Initialization**: The `AdTracker` script now automatically assigns the main camera if one is not specified, ensuring proper functionality out-of-the-box.
* **Coverage Calculation**: Refined the `CalculateScreenPercentage` and `CalculateCoverage` methods to clamp screen coordinates and normalize them, ensuring accurate area calculations even when parts of the ad surface are off-screen.
* **Ad View Reporting**: Implemented logic to report ad views to the backend when the visibility threshold is met, and the ad is no longer fully visible, improving the accuracy of ad impression tracking.

## Version 1.1.2

Features

* **Serve Ad On Start Logic**: Introduced logic to serve ads at the start of gameplay, enhancing the ad delivery experience.
* **One-Side Text in Play Mode**: Implemented text that appears on one side during play, providing better visual feedback for ad placements.
* **Custom Logger**: Added a custom logging system for better tracking and debugging of ads.
* **GUI Updates**: Made significant updates to the GUI, improving user interaction and interface clarity.
* **Foldout Logic and Behavior**: Implemented new foldout logic and behavior, enhancing the organization and accessibility of the SDK settings.
* **Read-Only Field for Counting**: Added a read-only field to keep track of ad counts, providing better visibility and control over ad metrics.
* Possibility to connect with UserName in addition to Email connection:

```
private async void ConnectionWithUserName()
{
    ReneAPIManager.InitializeAPI();
    await ReneAPIManager.GameConnectWithUserName("yourUser");
}
```

#### Improvements

* **Ad Tracker Enhancements**: Improved the ad tracker to show the percentage of screen coverage within the scene, giving more precise metrics for ad visibility.
* **Mathematical System Update**: Updated the mathematical equations and logic within the system to ensure more accurate calculations and results.
* **AdSurface Orientation and Vividness**: Made adjustments to the banner side for more vivid presentations and improved the orientation of the ad surfaces for better visibility.
* **Readability and Checks**: Enhanced code readability and implemented better checks, improving overall code quality and maintainability.
* **GUI Thing Updates**: Refined various elements of the GUI to improve user interaction and visual appeal.

#### Fixes

* **Compilation Adjustments**: Made necessary adjustments to ensure successful compilation, eliminating errors and improving the build process.
* **Ad Percentage Display Fixes**: Fixed issues related to displaying the ad percentage, ensuring accurate and consistent information is shown.
* **XML Method Descriptions**: Updated the descriptions for public methods in XML, providing clearer documentation and better understanding of the code.
* **Unnecessary References Removal**: Cleaned up the code by removing unnecessary references, optimizing performance and reducing clutter.

#### Removals

* **Stress Testing Scene Removal**: Removed the scene used for stress testing, streamlining the project and focusing on relevant components.

## Version 1.1.1

### Improvements

Added the additional parameter (email ) to method `ServeAd` to give benefits to players that are registered on [reneverse ](https://app.reneverse.io/)website.

### Features

* **Implemented the possibility for the Advertisement to be served to the player with an additional email parameter**, making him benefit from registering on [ReneVerse ](https://app.reneverse.io/)website

```
    public virtual void ServeAd(string email = null)
    {
        EnableAdMesh();
        IsAdServing = true;
        OnAdServed?.Invoke(true);
    }
```

You need to pass an email to the `SeveAd()` method as parameter to make your Ad be attached to a player seeing it. `VideoAdSurface.cs` and `BannerAdSurface.cs` has it overridden as well

* **Adjusted the Materials** so that they would accept PNGs images making the transparent parts of them actually transparent

### Fixes

* **Additional optimizations** including disposing of unnecessary data

## Version 1.1.0

### Features

* **Implemented the Sound Setting**: Introduced new settings for sound management, providing users with enhanced audio control capabilities within the SDK.
* **Set up the Audio Decrease Sound:** mechanisms for audio attenuation, allowing for more nuanced sound experiences based on distance or other parameters.

### Improvements

* **Made the Adsurfaces Mesh Disabled for Various Systems**: Optimized the SDK by disabling adsurface meshes where unnecessary, improving performance across different systems.
* **Changed the Adsurface Quad Orientation**: Updated the orientation of adsurface quads, enhancing the visual presentation and interaction with ads within the SDK environment.

### Fixes

* **Video Stutter**: Addressed and resolved issues with video stuttering, ensuring smoother video playback within the SDK.
* **Made the Synchronous Loading of Surface and Content**: Corrected the loading process to synchronize surface and content loading, eliminating timing issues and enhancing the user experience.

## Version 1.0.1

### Features

* **Initial Structure Towards Collections**: Laid down the groundwork for handling collections within the SDK, setting the stage for advanced data management and organization.
* **Implemented the Correct Show Up for No Branded Assets as Well**: Enhanced the visibility and management of assets within the SDK, ensuring a seamless experience even when no branded assets are found.

### Improvements

* **Updated the Version**: The SDK version was updated, indicating progression and refinement of the software.
* **More Decoupling and Hiding Unnecessary Data from User**: Improved SDK architecture by decoupling components and hiding non-essential data from the end-user, enhancing usability and security.
* **Correct Collections Renaming**: Improved clarity and consistency in the SDK by renaming collections appropriately.
* **Made the Correct Indenting for Hierarchy of Data**: Enhanced the readability and maintainability of the data hierarchy within the SDK.
* **Better Naming to See Name on Top in the Serialized Parts**: Improved the serialization structure for easier navigation and understanding of data components.

### Fixes

* **Fixed Issues with Editor Related Stuff on Build**: Addressed and resolved editor-related issues encountered during the build process, ensuring smoother development workflows.
* **Fixes Towards Legacy IsConnected Logic**: Corrected the logic related to legacy connection handling, improving reliability and performance.
* **Additional Fix Once There is No GameData**: Implemented a fix to handle scenarios where game data is absent, preventing potential errors and enhancing robustness.
* **Initial is Connected Fix**: Addressed issues in the initial connection logic, ensuring stable and reliable connectivity.
* **Privacy Fix**: Implemented a fix to enhance privacy, ensuring user data is handled securely and in compliance with best practices.
* **Removed Bug with Duplicating Assets**: Fixed a critical bug that caused asset duplication, ensuring data integrity and consistency.
* **Implemented the Correct Checking for No Ownable Assets Found**: Corrected the logic for detecting scenarios where no ownable assets are found, improving the accuracy of asset management.
* **Branded Part Removed for the Ownable Asset as Well**: Made adjustments to the handling of ownable assets, refining the differentiation between asset types for better clarity and management.

## Release Version 1.0.0


# Unreal Engine SDK

Download links for latest versions

## Version 1.3

* Added Game spaces support
* Added Emotional tagging support

<table><thead><tr><th width="135">Version (Win)</th><th>Download URL</th></tr></thead><tbody><tr><td>5.3</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.3.zip">https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.3.zip</a></td></tr><tr><td>5.4</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.3.zip">https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.3.zip</a></td></tr><tr><td>5.5</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.3.zip">https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.3.zip</a></td></tr><tr><td>5.6</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.6/ReneVerseSDK_1.3.zip">https://cdn.reneverse.io/sdk/unreal/5.6/ReneVerseSDK_1.3.zip</a></td></tr></tbody></table>

***

## Version 1.2.1

* Fixed offscreen update for web view ads
* Fixed crash issue in project build
* Fixed "not initialized properly" error
* Removed unused components
* Stability fixes

<table><thead><tr><th width="140">Version (Win)</th><th>Download URL</th></tr></thead><tbody><tr><td>5.3</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_v1.2.1.zip">https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.2.1.zip</a></td></tr><tr><td>5.4</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_v1.2.1.zip">https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.2.1.zip</a></td></tr><tr><td>5.5</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_v1.2.1.zip">https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.2.1.zip</a></td></tr></tbody></table>

***

## Version 1.2

* Added support for PubMatic web view ads
* Updated serving ads by brand selection
* Editor updates and quality of life
* Actor naming convention update
* API optimization

<table><thead><tr><th width="116">Version (Win)</th><th>Download URL</th></tr></thead><tbody><tr><td>5.3</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.2.zip">https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.2.zip</a></td></tr><tr><td>5.4</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.2.zip">https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.2.zip</a></td></tr><tr><td>5.5</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.2.zip">https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.2.zip</a></td></tr></tbody></table>

***

## Version 1.1

* Support for editing Ad Surfaces and Branded Object Placements
* Brand support
* Updated scene cleanup
* Video ad support
* Stability fixes

<table><thead><tr><th width="111">Version (Win)</th><th>Download URL</th></tr></thead><tbody><tr><td>5.3</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.1.zip">https://cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_1.1.zip</a></td></tr><tr><td>5.4</td><td><a href="https://s3.eu-central-1.amazonaws.com/cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.1.zip">https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.1.zip</a></td></tr><tr><td>5.5</td><td><a href="https://cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_1.1.zip">https://cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_1.1.zip</a></td></tr></tbody></table>

***

## **Version 1.0** <a href="#version-1.0" id="version-1.0"></a>

* Support for ad surfaces and branded objects
* Support for decal and plane ad surface banners
* Unreal Engine 5.0+

<table><thead><tr><th width="139">Version (WIN)</th><th>Download URL</th></tr></thead><tbody><tr><td>5.0</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.0/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.0/ReneVerseSDK_v1.0.zip</a>​</td></tr><tr><td>5.1</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.1/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.1/ReneVerseSDK_v1.0.zip</a>​</td></tr><tr><td>5.2</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.2/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.2/ReneVerseSDK_v1.0.zip</a>​</td></tr><tr><td>5.3</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.3/ReneVerseSDK_v1.0.zip</a>​</td></tr><tr><td>5.4</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.4/ReneVerseSDK_v1.0.zip</a>​</td></tr><tr><td>5.5</td><td>​<a href="https://​cdn.reneverse.io/sdk/unreal/5.0/ReneVerseSDK_v1.0.zip">https://​cdn.reneverse.io/sdk/unreal/5.5/ReneVerseSDK_v1.0.zip</a>​</td></tr></tbody></table>


