Post Mortem: Apple Watch Project - Feedback and Feature Requests

The Apple Watch Project

Hi, my name is Christian and I’m Software and Application Developer at C4Real. Together with my college Martin we lately started developing in PlayCanvas. As this was our first project using the engine and to give some feedback, we would like to share our experience with the community and the developers.

Martin and I both come from a C# background with experience in Unity and only started developing for the web about half a year ago.
To create a showcase for the capability of WebGL and our studio, we compared different WebGL engines and finally choose for PlayCanvas. The choice was based mainly on the fact that in contrary to most other engines PlayCanvas offered PBR workflow support which gives projects made in this engine a major advantage in quality.

Prior to this project our studio had tried out different engines already and we were working with another solution for quite a while before we swapped to PlayCanvas eventually.
The first obstacle to overcome was the different setup of scripts in PlayCanvas:
Coming from a ‘regular’ JavaScript based engine without any sort of visual editor involved, it felt unfamiliar to have to conform with the predefined skeleton that every script is build up on. What I mean is the auto generated code that comes with every script generated in the PlayCanvas editor:

pc.script.create('myScript', function (app) { // Creates a new MyScript instance var MyScript = function (entity) { this.entity = entity; };
MyScript.prototype = {
    // Called once after all resources are loaded and before the first update
    initialize: function () {

    // Called every frame, dt is time in seconds since last update
    update: function (dt) {

return MyScript;


This felt (and sometimes still feels), very limiting at first and it took a whole while until one was used to the structure that this code generates:
Every entity automatically generates a prototype and all functions within it are bound to this prototype object. This predefines the scope of these functions and limits it to the boundaries of this entity. A “new concept” when coming from an environment that expects nothing more than you dumping your JavaScript code into a file called “whatever”.js and your functions will be reachable from almost everywhere.
A more object oriented concept, written in a function oriented language, therefore somewhat uncommon within web development.

After development got up to speed both Martin and I found that PlayCanvas is easy to use and can deliver great quality, however finding the right piece of documentation or information regarding the engines classes and functions can be very difficult at times.

In addition to the above mentioned issue, we also sometimes missed features and had to find workarounds for the missing functions.
For example, while building reusable scripts for use in the editor, one of the most missed features was the ability to build array script attributes. While there are numerous script attribute types, it is (according to our knowledge and research) not yet possible to define array attributes. At least not in the online editor.
This would greatly increase the reusability value for a lot of scripts and it would be a highly appreciated feature.

Next to array attributes, a vector 2 attribute and eventually a vector 4 attribute would also be great.
While there is a ‘vector’ attribute already it does not offer the option to define the vector type. For GUI and OnScreen operations one will want to use a vector 2 value, while one can still use the ‘vector’ attribute and just ignore the Z value for example, this won’t work if a script would need a vector 4 value. Additionally it must be communicated that the last field has to be left empty, if using the ‘vector’ attribute as a vector 2 attribute, what can cause problems and errors, therefore a vector 2 attribute with only two input fields would help.

Yet we found two other features to be missing with attributes: One would be a hint text and label a label attribute, to add additional information that would be displayed on mouse over in the editor, or that could be used to name and separate groups. The second would be the ability to dynamically create, or hide and show attributes: At the moment it is only possible to create a fixed set of input fields per script, but sometimes it can be needed to add more fields according to input made into another field. For example if there was a boolean attribute saying: “Show advanced settings” and in the script one could check if it is true or false and accordingly the script could add or remove more input fields.
This would also be useful for creating instances of certain objects - another example: If there was a gui script creating all buttons on screen, and the user could specify how many buttons he wants to be created, it would be very useful to be able to create input fields for the settings of each button dynamically …

We used the online script editor while developing this project and while especially I was not convinced at first, in retrospective we both agree that it is a very useful feature of the engine and makes editing a lot easier, especially for quick changes.
While the online editor has a lot of advantages, it also has downsides:
Both Martin and I missed a “Find and replace” function terribly with the editor, if one decides to (for example) rename a variable in a script, each instance has to be found and replaced by hand.
Another useful feature we missed is the ability to duplicate an entire line with a shortcut like Ctrl+D.
As a final word to the editor, while it is a nice to have feature, the auto-completion should have an option to be adjusted or to be turned of all together. What I mean is that every-time one types a ", ’ or any parentheses, the editor will automatically add a second one. This is absolutely fine while code is written in a straight order, however when editing something like:

the auto-completion feature will be somewhat annoying as it will do the following:
the user will then delete the extra quotation mark just to get the same problem when setting the final quotation mark to close his string
Maybe the auto-completion algorithm could just check if there is a character anywhere to the right of the edit-marker in the same line before applying the auto-completion.

It used to be a nice feature, that one was just able to paste a http link into the script-name field and the regarding script was referenced and downloaded automatically…
Especially since I’m using jQuerry a lot, it is a feature I miss since the latest update of the Editor.
Apart from this, we only experienced few problems with PlayCanvas, overall we are pretty happy with the engine and we are sure to continue developing in it.

A project link will be added as soon as we are ready to publish our product, until now here are some screenshots:

1 Like

Interactive annotations

Use of animations

Fading between material colors

… and fading between entire materials

additionally an interactive watch face with live time display

PS: Sorry for posting like 6 times here but the forum would only allow me to attach one image per post…

Excellent, this looks amazing! I have logged a feature request for you regarding the vec2 and vec4 script attributes. Hopefully, we can implement that soon for you! Really looking forward to seeing this app published! When you do, share it on social media and we’ll share/tweet the heck out of it! :wink:

Hey guys,
I also wanted to say hello here. I am the Martin that Christian refereed to all the time :wink:

To introduce myself I am a “Game Creation and Producing” student at “Saxion University of Applied Sciences” and currently doing my internship as “Software & Application Developer” at C4real. Besides that I am also working on some modding projects in my free time.

As mentioned I have some previous experience with C# and a few other programming languages and game engines, so it was not too hard to get into PlayCanvas. I think the structure of your scripts (with the auto generated base functions) was a bit less irritating for me than for Christian, because he made the switch from some other WebGL engines while I switched from Unity.

Scripting and documentation
A thing that I noticed at the beginning of our project is that its currently a bit slow to really get into the scripting part of PlayCanvas. You have some basic tutorial about creating scripts and their interaction between each other, but as soon as you want to go a bit further the struggles start.
You find what you are looking for, but it takes time, because all the “advanced” information is a bit fragmented over the API page, your User Manual and the tutorial page.

I also looked up a few things on the answers page (because I couldn’t find the proper info on the documentation) and couldn’t figure out why they aren’t working, until I found another answer that stated the previous answer is outdated. I think it would help quite a lot, to mark outdated answers in the answers page and maybe even link to a new working solution.

I think another thing that would help new people to find it a bit easier to get into the engine, would be a fully documented small example project where you go from start to finish. Currently you have quite a lot example projects, but they are all showing just one simple function and are quite fragmented all over the place. Maybe a simple game, or product explorer like your phone demo as real production example, from start to finish would make it easier to find a quick start. Give new people a small introduction at a single place, how to prepare an entire project, so they don’t spend more time on searching for information on your different tutorial and manual pages than the actual development.

Another thing that I really missed on the documentation is a small overview page about your integrated script functions and their execution order. (After a while I found out by accident that you guys have a fixedUpdate function, that I was searching for quite a while before.) Could you add a small page on the manual, where you list all integrated functions like “fixedUpdate”, or the “onAttributeChanged”, their purpose, maybe a small example and their execution order? So you have a reference sheet to this quite important information, while developing and don’t need to search it every time. Unity for example has a quite good page like that called “Execution Order of Event Functions” you might look that up to see what exactly I mean.

Materials, textures and Shaders
I think that was the first thing, that I noticed after I saw your engine the first time. You have some really high quality shaders and the material options in the editor are awesome! To have one material with all the different texture types, texture & UV channel selection is a really nice time saver.

The quality of the PBR shader is good and the material has all options you need, well arranged, so its easy to setup new materials in the editor. The export from Maya with embedded media also works fine without problems.

But I still have a couple of questions and thoughts about a good texturing work-flow for PBR in PlayCanvas. While working on this project I stumbled across a few pebbles, that would be nice to get rid of. We used Substance Designer to create the textures for our model and exported our final textures as .png or .jpg for the use in PlayCanvas.

A few things that I found a bit hard to setup right in the beginning:

  • to find the right way to bake normal maps that look right in the engine
    – the information about the flipped green channel is hidden in the Building models guide for 3ds max (if you are using Maya you don’t necessary look into that one, it would be good, to place that info in the textures manual as well. Or overall some info about the different texture types on the texture page of the manual instead of the 3dsmax guide :wink:
    — I miss some information about the way you are calculating the tangent space of your models, so I can bake my normals accordingly from my highpoly model. Are you using mikktspace, unityspace or something else? That would be some handy information for the normals in the manual as well

  • What is the best way to texture metal and non metal objects? And how does the environment settings influence them, if you have an env map assigned in the material
    — I textured the model how I was used to it from other engines, with a metalness map to define the metal, and non metal parts of the object and a roughness map to define the roughness, but for some reason I could not get proper reflections with an assigned env map to both material types. I ended up splitting the model and used two different materials with entirely flipped refraction values in the env settings for metal and non metal parts to get some reflections that represent the materials surface. But I guess that is not the way it should be done. Can somebody tell me what the hell I missed here, and maybe add a small tutorial for that :stuck_out_tongue:

  • If you create a cubemap and pre-filter it, your model turns black, if you attach it to the env settings of a material. I guess this is a bug? Because this way you need to create two different cubemaps if you want to assign the same texture as scene background and as env map in your material. Or have I missed something here?

  • How exactly does the emissive map work? The explanation I found for that one are a bit sparse. I couldn’t really figure that out, if you have a rgb emissive map. How are the color values added to the existing diffuse values and how does the brightness and tint influence that? Are you placing an actual light in the scene in front of the texture to really emit light? A bit more in depth explanation and maybe an example scene for it would be awesome.

  • What kind of compression does your editor use if you upload a .tga for example?

  • Are there different compression modes available? Stuff like dxt etc.
    — If so, an overview about the available texture compression, and a texturing best practice manual would be a great extension to the manual.

  • The biggest part of this project are of course the textures. I was searching for some work-flows to further reduce our texture size in future projects, so we keep our download sizes at a acceptable limit even for bigger scenes. One thing I would like to try out in the future is some more advanced channel packing.
    — Has somebody tried that already?
    — Can your shader handle normal maps with just two channels, so we can keep the third for things like an ao?
    — Can I find the source code of your shader somewhere so I could, based on that, build some “specialized” versions, to fade in multiple diffuse colors on a greyscale diffuse texture for example (useful for decals etc.).

  • Is there a chance that you guys implement Substance in the future? As you probably know the download times are quite important for web applications and compared to image files, substance files are microscopic. It would also allow us to add way more procedural textures in our applications, so we could give the user a ton of options to customize textures the way they wants them to look like.

Okay maybe looking at all the text now it might be a few more pebbles to stumble across, but this are mainly tiny things that I missed in the documentation. To make these things a bit more clear, it would probably also be a good idea to implement a small step by step guide for a real project. So you could see what the right work-flow is to create and texture a model for PlayCanvas and to show how easy it is, to bring it into the engine. You could also add hints to that guide, to the things you have to look out for, with some links to the corresponding in depth documentation for normal maps, emisse, or the reflactions etc.
So the user has some kind of starting point to look for solutions, if he stumbles across problems like we did.

Engine and editor

So lets talk about your Editor and the engine in general :>
After our first project I can say that I really like it and it makes a lot of fun to work with it, after you got over the small learning curve at the beginning! The content you can publish with the engine looks amazing for a web application, thanks to the PBR shader, the editor and online scripting solution makes real-time collaborative work really easy. Even if you can also easily block your team members from launching the preview window with a missing bracket :wink:

While we are talking about that, is there a chance that you can set something like a local option, to use the last non broken version of a script just on your end? If one person is for example working on a script and breaks it, I cannot launch the preview anymore and have to wait until the script is fixed. It would be convenient to have a setting in the editor to use the last working version for me only, so I can continue doing my stuff, while my teammate repairs his script.

I also like the option to filter the assets in the asset window by their type. But I am missing two tiny things that would make a huge work-flow improvement.

  • Folders, because if you have many asset it gets quite messy in the asset window.
  • A Multi-filter option. It would be convenient to have an option to show, or not show multiple asset types, for example just materials and textures. Not just one or the other. Maybe allow a multi-selection by pressing shift, or add some check boxes to the asset types in the filter window.

Lastly I can only repeat the request that my college already made, that it would be really convenient to have an option to display some hints on editor attributes and to dynamically hide/show, or add new attributes in the editor.

I think the editor is one of the greatest features your engine offers, because it allows your users to quickly create a project without writing down code for everything again. But I am really missing these features to create some more dynamic scripts that can be adjusted from the editor to be re-used on different projects in the future. Some more options to make the scripts more dynamic in the editor would really open up new dimensions in the production.

While I am talking about the cool editor, the option to fork a project is really awesome, but is there currently also an option to auto update the content of forked projects, if you update something in the parent project? So we could for example create a basic template project with some base scripts, that we can fork in future projects. And if we update a script in our base project, all its scripts get updated in the projects, that are based on it. This would be a really helpful feature for organization that create a few more projects with PlayCanvas :slight_smile:

Finishing words
So I think we have enough text now heh?

Overall after we have finished our first test project with PlayCanvas, I can say, that its a really scale-able WebGL engine with a powerful editor and online scripting tool for collaborative application development, that is fun to work with. But the documentation could be improved and I am still missing a few minor features and tweaks for an improved work-flow.

But anyway thanks for reading this “tiny” piece of text, and keep up the good work on your Engine!

1 Like

Hey to you too! That is a bit of a feedback, and I must say we are always extremely appreciated for such input! It is very valuable for us to hear detailed and useful feedback from our experienced users.
I will comment on some of those things.

Our Video Tutorials do start from simple, and progresses to some state, explaining many aspects of editor workflow. Not all of them unfortunately yet. Can be found here.

That is indeed missing. Scripts were designed as very early thingy, and since then we have came up with some different concepts and evolved a bit. I will give you some sight that we are going to change the way scripts are defined and operate a bit. In order to simplify and add more flexibility over things we can do with script.

There is two workflows for reflections: SpecularMap and MetalnessMap.
They do affect the way your diffuse map should be prepared in fact.
Here is a great article by marmoset explaining difference between them, and how to convert between workflows.
There almost always should be a way to make single material and texture to express metal and non-metal materials by textures.

Hm, I will try to play a bit, but that might be some sort of bug here.
Have you checked if you refresh editor once it turned black, does after refresh it looks different?
There is a small bug fix should be deployed already, but if you could be kind to get reproduction steps of that, would be really appreciated.

If you apply prefiltered CubeMap as Scene SkyBox, it does applies automatically to all Physical materials that have no other environment texture applied to. So one CubeMap as skybox - should be all you need.
Make sure materials are Physical too.

All it does, simply adds the color to final result. If custom color used as well, it will multiply texture color by fixed color. And additionally multiply by intensity.
So all it does - adds color to final material result. It is not emitting light really, as that would be some GI technique or post-effect like SSAO with respect of colour.

If TGA has alpha information, it will convert to PNG, if it does not have any alpha data, it will convert to JPEG.

Good question. There is support for different compression types, but currently we have no functionality to upload or produce by pipeline different asset formats. We have this planned as Asset Variants feature. It will do the stuff transparently so you don’t even need to worry. The idea is that we will generate those texture formats behind the scenes for texture and some other assets (audio, video too). And then based on platform format support it will automatically load the most optimal available format. You will not have to worry about it and pretty much do any work to benefit from that feature.
It is planned, but not yet in development.

There are many things you can do:

  1. Texture resolution is biggest contributor to size.
  2. Pack multiple textures in one by using different channels. ChannelPacking is already supported - by using channel picker in material. You can pack Metalness, Glossiness, Ambient Occlusion and Emissive or any other combination into one texture, by lets say photoshop. And use Channel selection beside texture picker in material. That sometimes can save loads of data size for your project.
  3. Run through image optimisers your textures, like: ImageOptim or any other similar.
  4. Keep textures low-res, and consistent texel size in scene for still looking good.

That would be cool of course, but we have not considered it. Personally I feel it is a bit too heavy for web, especially mobile to be used.

That is a known problem of our workflow, that is what we still have to solve properly as our nature of workflow environment is quiet different from other examples.
“Local Files” - is simplest idea most people come up with, and it actually exists, but does not work well at all conceptually, and requires version control setup and just complicates things, violating any benefits of collaboration.
Funny: you do talk about Fork and update-back. Which is actually one way of looking for a solution.
I personally thing that we need some simple short-living branching system, where people would be able to branch out easily, and then sync with master tree. Multiple people could work on same brunch if they want, or have own ones. That would keep benefits of collaboration and allow anyone to isolate from other people to make sure they are not disturbing. But that comes with some serious challenges of inventing merging for scene graph, assets and code. Which are three different things and can get a bit too complex though :slight_smile: But I believe it is fun and great challenge to solve, that would let people to avoid workflow problems, and adopt branching to their workflow or even not use it at all.
Another thing can be done, is that errors prevent whole thing from running currently, when there is exception in initialize or some syntax error. We need to make it less destructing by handling it better on engine level. So your coding would be less disturbing.

:wink: we are working on this right now, and you will have folders quiet soonish.

I came around similar problem, where had different cars with different materials and textures, but required to filter just by car name. So ended up giving prefixed names to assets that would include generic type string in it.
With folders it wont be as problem, as you would probably put different types assets that relate to single thing into single folder or organise it so that they are easily accessible through folder tree structure.
Folder will introduce some improvements and some complications to process, but will see how it will come out.

There are already tooltips by hovering on labels within inspector almost everywhere (some are needs updates).
Or you are talking more like MMO games style, like guide popup modal tooltips with “next, next, finish” style?

Have you used script attributes?

Talked about it above as Branching. Fork - is not really a fork, it is more of a full-copy of project, almost without any relationship to old one ones it is cloned.

Thank you again for such a good feedback, we do always value it and it does influences our decisions, to make a great quality product that is suitable for our users and we are happy about as well :slight_smile:

Just wanted to let you know that I deployed a fix for this a couple hours ago. So if you have a script attribute and you want to add a description to it, you can do so in its options. LIke so:

pc.script.attribute('attr', 'number', 0, {
    description: 'This is a helpful description'

Hey guys,
first of, thanks for the quick reply! I am glad you appreciate the feedback and didn’t run away from the bulk of text. I guess, I will post more stuff up here in the future, but probably in smaller chunks :wink:

Yeah I saw the video tutorials and I think they are a really good start into the editor and work-flow, a good structured one as well. I also don’t think, that its a problem to get into the editor itself, the UI has a clean & self-explaining design. Together with your videos its easy to start working with it.
What I more miss would be a tutorial in that you build step by step an entire project, instead of showing how certain things of the editor could be used.
For example take one of your demo projects and show people, how you have build it, and explain the decisions you made during the development. This would be a way more practical introduction to get some first experience with the engine.

That is cool to hear, I am looking forward to it, but if you say, that the way scripts are defined will change a bit, I guess that will break a few things on already build scripts?

Yeah I know that article, I can also recommend the PBR Guide from Allegorithmic
I also had the textures perfectly working in Substance Designers renderer, but for some reason either the metal reflections, or the non-metal ones didn’t matched in PlayCanvas.
I started already a small test project to to reproduce my problem, so I am a bit more wise the next time :wink:
Maybe I finish it to the weekend, so I can explain a bit more in depth what my problem was.

Sure, its actually quite easy to reproduce.

  1. Place a model in you scene, with a physical material in the
    metalness work-flow (haven’t tried the other one).
  2. Create a cubemap and assign it in the material of the model.
  3. Press Prefilter on the cubemap.

And you have a black, or at least partly black model, depending on the angle you look at it.
It happens to me in the editor and play view, also refreshing, or restarting the browser does not help. I am using Firefox 41.0.2 on Win7 64bit.

While talking about Firefox and bugs, I found another one, that’s kind of driving me crazy :stuck_out_tongue: If you drag and drop stuff in Firefox, sometimes the editor kind of freezes and you cannot click anything anymore. After a page refresh its gone. That is happening all the time, if I am drag a few materials on some models in the editor.

Ah that’s handy to know. But for the case I want to display just a color as camera background, like we did in this project, I still have to apply the cubemap to every single material. Or can I tell the camera to render a color instead of the scenes background?

Hmm okay, so its more another color tint, than a real emitting surface. I know other engines that just place some point lights in front of the object, if it has a emissive map applied (or rather some color and intensity).
Is there something planned, so it actually emmits light in the future?

That sounds really cool. If its planned, do you have already some estimated arrival for it?

Okay, that’s a bit sad to hear, because I really love the power you have with it. But is it really too heavy?
I think its quite clear, that its a bad idea to run a graph that already calculates 30sek in substance, in the web, but you can also create run-time friendly graphs that need ms. And substance files would heavily decrease the download sizes of any project.

For me that’s the interesting thing about it. Instead of a 2mb texture you just import a few kb .sbrar file, so you can save a lot of traffic on a mobile phone. And you can, based on the power of the device, generate the texture in a size that the device can handle too avoid, that it gets to heavy.

I guess on a slow device it could take some time to generate the texture, but you also save that time downloading in the beginning, and as long, as you don’t require dynamic content, you could just generate your texture once in the loading screen and store it in your ram. I guess it would be some kind of trade-off between project size and start-up time.

Yeah that really sounds like an interesting challenge and a bit more work, but nice to see that you already thought about all this stuff :slight_smile:


Nope I talked about the hints for script attributes, that your college already implemented. Thanks for that fast implementation!

Yep and I would like to add/remove exactly these attributes more dynamically in the editor.
For example I build a script with an optional function, that requires you to add some textures in the editor.
So I define an attribute for the texture, but this extra attribute gets always displayed in the editor, even if I don’t need this function in every second project. For one attribute this is okay, but if you have lets say 5 attributes, that you don’t use, your script window gets messy and confusing.

It would be convenient to have a possibility to dynamically show or hide these attributes. If I toggle the attribute to use the function, I get all related attributes, if not they are hidden. Something like an extra parameter for the attributes to tell them, if they are visible, or not, similar like the descriptions you have just added, but instead of a string, give them a bool as value, and add a redraw function so we can tell the script to redraw the its script frame in the editor.

Another good example would be a ui script.
Lets say I have a script to generate a small menu for me. I want the script to generate a button, with label icon etc. but the amount of menu items isn’t the same in every project. Instead of re-writing it for every project, I could just once create a script that generates it for me. So I drag my script into the editor, first have just a number input field for the amount of buttons I want. After I enter a number the script window refreshes and displays me attributes for all properties of every single button.

Of course the second example is a bit more than hiding and showing :wink: But if we would have an option to call a redraw function of the script window and a insert function for new attributes you could just use a loop to generate the amount of button attributes the user wants.

@vaios Thanks again for the quick work :slight_smile:

Hmm, yeah looks like less text this time :stuck_out_tongue:

We do care about backwards compatibility, so will find a good solution that works for legacy and new script notation, and will not break any current project, although will encourage to migrate to new way.

I have just tried that, and could not reproduce. There might be something else related to this. If you have a scene with assets that following your steps lead to that problem, it would be very useful if you could share it, or add me (max) to it?

Wow, thats sounds bad. I don’t work in Firefox, although one of our devs does. So I will pay attention to check what’s going on.
But will say that there is currently work related to drag’n’drop going on, that will probably improve that situation (current one uses native html5 drag’n’drop features, which turned out to be a bit limiting to deal with, so we moving to custom implementation here).

Yes you will need to apply on materials individually.
You can multi-select all materials in assets panel you need cubemap to be applied at, and then drag cubemap to inspector cubemap slot. Multi-selection can be handy for that.

Actually they don’t do light, but they have GI system or screen space implementation for short-range emissive lightning effect.
We do not currently have any plans for either, but second one shouldn’t be hard to implement yourself using a post-effect, although some shader writing knowledge is required.

We really don’t like to give any dates on anything, but lets say its low number of “months”.

Regarding dynamic script attributes, it is complex, and will be possible through plugin system of editor, which is work in progress, and will get released at some point.
You will be able to make editor-level plugins that could do any custom logic you need.
One of other ways to look at making menu with multiple option, is if you have Menu and MenuItem scripts, then you have entity called Menu, and have children with MenuItem scripts on them. That way then you can express multiple items of a menu, possible deleting all children on load, but using info from their MenuItem scripts.
That feels like modular and dynamic option to implement example you’ve proposed.


That is nice to hear so that I don’t need too re-code everything at once, if the big update gets out :smiley:
I am curious with what new possibilities you will surprise us in the future.

Hmm interesting, than its might a bit more complicated to reproduce :smiley: I just created a small example scene and added you to it, I hope that makes reproducing it easier. I also just noticed , that the object only turns black, if you set the glossiness of the material under a value of 40.

Yeah that’s indeed a bit annoying, but thanks to the refresh button not unfix-able :stuck_out_tongue:
But besides that I am quite happy with all the drag and drop functionality already :slight_smile:

Yeah with the multi select it isn’t that time consuming, but could it be possible to add a render mode to the camera, that defines if it renders the cube-map, a texture or a plain color in the background?
So I can say each individual camera what it should render as background, while still keeping the scene environment settings for all materials. That would be handy, because the mip and intensity options of the scene environment are also missing in the materials environment settings.

Too bad its not planned, would be a handy feature. But if you say it shouldn’t be too hard to write a custom shader for it, than it might be something for my future research list, probably far future :stuck_out_tongue:

That sounds interesting. I see you guys have planned quite a lot for the future :slight_smile:

Hmm yeah the children might be a good idea to make that a bit more dynamic, but that is also not the most ideal solution. But would it be possible to expose an array of custom java script classes?
So we define our own class for the menu item with all its attributes. And in our parent menu class we add an array of this menu items?



Minification and concatination of scripts in published projects - to speed up loading, and make it harder for inspection by third-parties.
Code Hot Swapping - where you would not need to reload the game, to update game logic, it would work almost same like changing color on material - updates in realtime. It would require to write script with cleanup in destructor, so that it doesn’t leak or have leaking subscribed events to different scripts.
Auto update attributes in editor when script attributes changed, without need of developer to hit “refresh”.
And few more of cool features, that might be a big deal :smile:

I’ve looked at project.
I can see the problem: lowest mip levels, have black faces. This is unfortunately known bug of some browsers where prefiltering cubemaps on Windows machine could lead to such issue. It should be ok if you use Chromium though. Mac or Linux does not have that problem too.

And there is still space for improvements.

Hm, haven’t though about having skybox per camera. We will think about it.

It is very complex and huge thing tbh. Real-time GI is still not in present in most console games, which have way bigger gpu capacity that web platform.
Baked GI although is possible by rendering it into lightmap using any popular modelling software.

I wish we could have 48 hours in a day :slight_smile:

Unfortunately it seems very niche and case-specific thingy. Plugin system though will allow a lot of flexibility to make as complex UI for things, as needed. Possibly even custom components.


Oh lots of cool stuff on the way :smiley:

We already planned to look into the minification stuff as well, is this some feature planned for the near future? Than it might not be worth setting up some own solutions for that.

Ah I see, so the pre-filtering is done locally at my machine and just the results are uploaded to the server. Thanks for the info, that it works fine with chrome, than I can just pre-filter stuff there :slight_smile:

Thx. I guess that’s a nice feature for certain projects :wink:

Just 48? I would rather prefer 72, and maybe some more hours as free time.
Its time, that somebody finally invents a time-machine :grin:

Maybe niche, but also with a lot of possibilities. Looking forward to the plugin system :slight_smile:

Hey posts are getting smaller :smirk:


1 Like

Hi Will, there is now an official link to the web-app!
You can share the following link, it would be nice if you tag c4real in any social media posts, Thanks!

Very cool. It would be better if C4Real tweeted it actually and we RT that (because obviously, we’d prefer you get all the credit for it). :smile:

By the way, just a little comment. Have you seen the Anisotropy setting for textures in the Editor? Making this value >1 makes textures sharper at oblique angles, but it does cost a bit of performance. I would imagine a setting of 4 for the watch screen texture should make it a bit sharper. Have a play with the setting and see what you think.

Hey will,
thanks for the tip, thats something we hadnt thought about.

I just wanted to try that out and while doing that, I couldnt resist to check out your new profiler and noticed that our vram gets up quite fast. I am generating the texture for the display with an hidden html canvas that I upload to a single texture variable. I actually thought, that I can avoid these little memory leak by using texture.upload(), to overwrite the old texture but your profiler shows the opposite :frowning:

But it seems that the performance is not getting worse over time, now I am wondering what the actual problem is. If I look at the profiler, it looks like the engine keeps all old textures that I generated in the vram. But if that would be the case, why can I not see any performance drop if our vram fills up.

Can it be that the profiler is just showing something wrong, because you are still working on it, or do I miss something else :confused:


Hi @Martin, it could be that our calculation of VRAM is getting a bit off :smile: we will check that.

If you would add Ambient Occlusion textures to watch, that can be baked in Maya or 3Ds Max or any other modelling tools, it would improve general appearance of the thing.