Released: Athena Terrain Creator

This has been under development for a while but we are proud to have it released today!

Using a Chrome extension you can subscribe and load our libraries directly inside the PlayCanvas editor.

We are determined in providing a list of editor extensions that empower PlayCanvas and solve case specific problems.

Coming soon:

Learn more: https://pic.pirron-rodon.one/


Athena Terrain Creator
Create dynamic terrains from heightmaps with adjustable quality and multiple textures that render directly inside the PlayCanvas editor.

Terrain creator is an editor extension that integrates seamlessly with the PlayCanvas editor. It provides tools that help you add natural terrains in your scenes and the ability to do object placement in a WYSIWYG way.

Features list:

  • In editor terrain generator from heightmaps. No need to include big terrain models to your app, reduce your download size to a minimum.
  • Terrain generation on runtime is fast! Depending on the quality selected can be < 300ms.
  • Support for single and tiled heightmaps, seams are properly calculated during normals generation.
  • Why tiles? Benefit by camera frustrum culling to achieve greater performance.
  • Support for infinite number of terrains! Take care of your polycount and you can have as many terrains as you like.
  • Control your terrain model detail by selecting the number of subdivisions.
  • Control your terrain total size in all directions.
  • Support for colormaps with up to four texture channels.
  • The splatmap shader uses the PlayCanvas shader chunks system supporting all lighting/rendering effects.
  • The terrain model generated uses a standard PlayCanvas material for lighting.
  • A collision component is added that allows compatibility with other editor extensions coming soon.
  • A special terrain-runtime.js script is added to your project to generate your terrain on runtime. All terrains generated are yours to keep!
  • All extension fields include detailed tooltips with usage instructions.
  • API pc.Events that allow you to add your custom logic during terrain generation/texturing.

8 Likes

Free trials available! Try Athena Terrain Creator now.

  1. Download our Chrome extension here:https://chrome.google.com/webstore/detail/playingincanvas/dfokedhgmlgbgmkhfhcingaieajhibhb
  2. Fire up your PlayCanvas editor.
  3. Activate the extension and enable your free trial.

1 Like

What material do I supply to get the splat shader? Any default material would be fine? I don’t get the expected RGBA splat look within editor.


The gathered resources uses some prefix_balbalbah_tx_ty convention or something for all resources within same folder or something? This will generate the tiles automatically, right?


The Athena Settings do not retain the last previous original reference/settings if i revisit that panel in the Editor Settings.


I tried to run it with a default material…have shader error at runtime.

ROR: 0:112: ‘UV’ : undeclared identifier
ERROR: 0:112: ‘texture2DSRGB’ : no matching overloaded function found


This is a trial/paid product? So i assume no source code available.

Thanks for trying it, much appreciated for providing your feedback.

Any material that uses a diffuse texture, as the shader overrides the diffuseTexPS to apply the splatmaps logic. Right now indeed if you supply a material with no diffuse texture the shader will fail. I am adding this as an issue to be fixed, we should create a default material if a correct one isn’t supplied.

The tiling of the textures is controlled directly by the material ( diffuseMapTiling).

25

Yes, hover over the property name to get a tooltip that provides the naming convention. If assets are found that respect the naming convention, they will all be loaded and tiles will be created automatically. If none is provided a single chunk terrain will be created.

The naming convention is:
[filename]_x[coordX]_y[coordY].[extension]
e.g. output_x1_x3.png

In Athena Terrain Creator you provide only the prefix, which in this case would be: output_

Using the prefix it manages to find all the assets using this convention. It isn’t elegant but sadly tags aren’t working in the editor, they get generated on runtime. We have this as a logged issue to find a more elegant way.

Yes that is correct and we have that issue already logged in our bugtracker. The PlayCanvas editor API is still unofficial and we do our best to work around it.

Although the settings aren’t retained in the Athena tool, the entity created in the editor retains all settings. You can change/update the settings per terrain, refresh your editor and see the new terrain generated.

Yes, this is an issue we need to fix on our side. For the moment create a material that provides a diffuse texture and a tiling value and it will work.

Let us know how this works out for you.

Yes, it is a paid product. We are planning in creating many case specific tools/extension for PlayCanvas and this is the way we think they can be funded.

No source code is available, that’s correct. But we plan to expose parts of the runtime mainly through an events API and also expose the splatmap shader used (which is really simple).

New version released:
v1.0.4

  • Added feature: remember last used preferences when re-opening the Settings panel.

1 Like

How do i determine the texture tiling repeat amounts across the entire landscape? It should be kept consistent and independant outside of the given mesh subdivisions resolution. Does the shader support that?

Also, would it be possible ( though this is for my own use case tho) if there’s an option for alternate tesellation like using the pattern below https://i.ytimg.com/vi/QpV8BqTnlsk/maxresdefault.jpg because my quad tree terrain LOD adopts that pattern and i would likely use the utility as just a scene editor. When it comes to collisions though, I remembered bulletphysics has an option to set different tesellation mode for terrain ( to a diamond one instead) https://pybullet.org/Bullet/BulletFull/classbtHeightfieldTerrainShape.html#a2867503dcb69f9bf8b86d8855f5c5e33, but I’m not sure if ammojs supports that setting or you are just using regular collision meshes under Playcannvas (which is quite wasteful considering such terrains only need heightfield data for collisions) Anyway I usually don’t use the built-in playcanvas/bullet/ammojs for collisions anyway but I use my own collision framework so it won’t matter as much to me.

You can set the tiling of the texture channels across the terrain surface using the tiling UV properties found in the Material settings panel:

image

Tiling is independant of the terrain mesh generated. Here is the simple splatmap shader used to override the albedo value:

uniform sampler2D texture_colorMap;

uniform sampler2D texture_channel0;
uniform sampler2D texture_channel1;
uniform sampler2D texture_channel2;
uniform sampler2D texture_channel3;

uniform float tile;

void getAlbedo() {
    
    vec4 texel0 = texture2DSRGB( texture_channel0, $UV * tile);
    vec4 texel1 = texture2DSRGB( texture_channel1, $UV * tile);
    vec4 texel2 = texture2DSRGB( texture_channel2, $UV * tile);
    vec4 texel3 = texture2DSRGB( texture_channel3, $UV * tile);
    vec4 mixmapTexel = texture2DSRGB(texture_colorMap, $UV);

    texel0 *= mixmapTexel.r;
    texel1 = mix(texel0,  texel1, mixmapTexel.g);
    texel2 = mix(texel1, texel2, mixmapTexel.b);
    dAlbedo = mix(texel2, texel3, mixmapTexel.a).rgb;
}

We have plenty of ideas on LOD generation although we prefer to keep things simple for the moment and fully compatible with PlayCanvas. So right now we use the regular collision mesh PlayCanvas provides.

For the in-editor terrain the collision mesh has the same subdivisions with the rendered model to allow for Danae and similar tools to work accurately.

We have just released a new version which will allow you to add your own custom collision logic in the runtime script. You can disable now the default collision generation and grab references to the generated tiles/chunks adding your own collision logic.

Changelog: v1.0.5

  • Runtime updated to expose a set of events listeners to allow interaction with PlayCanvas scripts.
  • Collision subdivisions property added to the runtime script which allows for a lower quality mesh to be generated.

Note: To get the new runtime you have to remove the previous terrain-runtime.js script added to your project and generate a new terrain (doesn’t matter the settings). The new runtime will get downloaded to your project.

33

Regarding tiling,…

It appears to end up tiling tiling the Splat map itself? Weird tho, because your shader code suggests otherwise… Apparently, it looks OK when viewing in runtime, but not in editor.

38

Try selecting all of your colormaps and set their tiling method to Clamp and refresh your editor.

That should fix it, we should add it to our helper tooltip.

Ok, refresh the editor as in the browser window and it works fine.


Any support for diamond tessellation? Likely no? It’s just a matter of flipping the diagonal of the quad (consisting of 2 triangles) based on even/odd tile index combination along x and y respectively (xi, yi…).

 (xi & 1) !== (yi & 1) ? use forward slash diagonal  : use back slash diagonal

Basically, if x and y tile indices has matching even-vs-odd parity, you use back slash diagonal, else use the forward slash. And voila you’ve got the criss-cross/diamond tesellation…

Indeed that would be good to have! Right now we are hard at work with another extension to be released at some point … an Animation Timeline.

We are doing patch releases for both Athena and Danae, and later we can consider minor releases with new features. Adding this to our request list.

Thanks!

1 Like

I am definitely looking forward to trying this out, and I can’t wait to see what you plan on releasing in the future!

1 Like

Here is a sneak peek of what we are working on right now:

1 Like

Dude how many of you are there?! This is amazing! I’d love to help with anything if possible, also would love to learn how you implement these features.

I too think that Playcanvas is epic and deserves more support! Cheers none the less :wink:

1 Like

Thanks! We are a small group of individuals working for years on PlayCanvas contracts and projects. We have several in-house tools that we have been using and plan to release.

We feel the same about PlayCanvas: its value is unique in its editor and amazing content authoring pipeline.

I personally think that it is one of those tools/platforms, if expanded, can help move HTML5/WebGL apps to that AAA market share. What it currently lacks is a thriving community. We hope with our tools we can help on that, making the platform more attractive and easier to work with.

2 Likes

Christmas sale:

  • Free to try for 10 days.
  • Buy for 12$ and own forever.

https://pic.pirron-rodon.one/

1 Like

Is it possible for u to make free version with like just basic stuff and then way more complex version u have to buy

Thanks for your interest.

We may consider it at some point, though the function of this extension is pretty singular right now. But that might change in the feature.

Keep in mind that you can sign up for a 10-days free trial to evaluate it, by creating a free user account.

Hello @Leonidas i was wondering if the hera LOD manager is possible to be used as how much the tree/object is damaged? it looks like something ive been looking for and i thought about buying it but im not sure about its use if can tell me i would appreciate it!

It could potentially with a few minor changes, and to be honest never thought of such a use case.

Right now Hera LOD Manager provides the following things to streamline and optimize large scenes:

  • An easy to work PC script that can use both multiple model assets and a single model asset that contains multiple LODs meshes. Having a single model asset with multiple LODs (=mesh Instances) can greatly improve the app loading time.
  • An editor extension that allows you to preview the LOD levels inside the editor, without the need to run your game. That’s super handy.
  • A simple run-time that handles LOD switching for all entities based on the distance from the active camera.

Your use case though sounds simpler, might be simple enough to do it with plain PC entities (hidden entities for all the damage levels) and a simple script that toggles on/off, to match the current damage level.