A Unity ID allows you to buy and/or subscribe to Unity products and services, shop in the Asset Store and participate
in the Unity community.
Discussion in 'Assets and Asset Store' started by Amplify_Ricardo, Jul 10, 2018.
Not at the moment but you can use a lower amount of Y frames.
Definitely something to consider
@Amplify_Ricardo Do your imposter shaders support the SRP batcher on Unity 2018 ?
Not yet, SRP support will be available at a later stage. We'll definitely look into the batcher when we get there
@Amplify_Ricardo Got it, but it still supports the LWRP, right ?
Not yet, both HD and Lightweight support will be available soon.
You list 2017.1.0 or higher - is there some specific code that prevents me backporting this to 5.6.6?
Yeah, but why?
EDIT: Okay I can see I am at least the 4th person to ask this... no clues?
Sadly it wont be possible. It comes down to shader specific restrictions/requirements, it's a bit off topic for this particular thread.
Thank you for understanding.
huh. okay then. thanks
Our apologies for the inconvenience.
meh its fine. since shaders cant be compiled I can just buy this and check why then
You're free to adjust the package to your own needs, we only ask that you do not post any source code.
Should you be interested, feel free to message the Impostors developer directly(@Amplify_Paulo).
You should add an option to add a sharpen filter the render output. A bit of sharpening can help it match the original a bit more.
We have something along those lines planned
I'm about to buy the asset as it seems very useful but was wondering if the imposter system would work with the Mesh Baker Asset: https://assetstore.unity.com/packages/tools/modeling/mesh-baker-5017
It combines the meshes of your objects into one big mesh(along with other improvements). Would the imposter billboard still be able to function?
Having some problems with 8k billboards: a decent tabletop rig handles 4k just fine, but 8k consistently results in a crash during baking. I guess it may be tied to GPU, as a laptop with extremely outdated Geforce 520MX gets a GPU error even with 2k billboards. RAM amounts are equal in both cases. Any ideas what we could do short of getting our hands on a top-line GPU?
and yeah, I get those 8k billboards are a tad overkill, but we have ample space to waste. Plus if laptop will magically be able to bake impostors too, it would simplify logistics a bit.
And a theoretical question.
Manual describes billboard meshes with variable vertex count, but what are actual advantages of spending 16 vertices vs 4? Is it solely to reduce neighboring frames peeking through or are there some other reasons?
From what I've seen, not out-of-the-box, but if you're fluent with Unity's Mesh class and vert/frag shaders, it's possible to bake multiple impostors into a single mesh. Pass the individual impostor world position into mesh.normals (they're not used in the billboard shader in any case), then in OctaImpostorVertex() in AmplifyImpostors.cginc adjust _Offset variable by this position right at the beginning of the function. Seems to be working fine for me.
@Amplify_Ricardo Any ETA for alpha blending? Any way to implement it now on the spherical imposters ?
I'm not entirely familiar with the current Mesh Baker capabilities but Impostors wont work if you alter the Mesh, the Asset includes both textures and mesh information after baked. Creating impostors from baked meshes should work, I would be happy to test a mesh on our side if you're interested.
What error do you get? I suspect the GPU/Unity might be the issue here but 8K is a bit overkill at the moment, definitely something we want to improve in the near future.
Variable in the creation step, not at runtime. The purpose of using a custom mesh comes down to reducing overdraw, a lower vertex count is always preferred as with any other mesh.
Sounds challenging I would recommend baking the multiple object into a single impostor, that would probably save a few steps.
No ETA at the moment but I'll see if we can get some tips from the dev.
@Amplify_Ricardo Cheers, let me know what he says
It's possibly something you can achieve with Custom Baking and Shading.
Information is a bit sparse during this stage, we're still trying a few things ourselves, we do intend to improve the wiki documentation in the future.
Are there shaders available to make Amplify impostors work with Amplify texture?
Baking large textures for speetrees/for many objects in the scene seems like it will quickly overflow our memory budget. We are using Amplify textures so that would help
Hey there, I'm afraid that the technique is not ideal for virtualization, but we're always looking into possible impostor improvements!
New build with a few bug fixes, nothing major, just to keep things sane for some people
Amplify Impostors 0.9.1 - Asset Store - Amplify Products
Fixed issue where custom baking would fail because of broken overrides
Overrides now setup the initial value of each individual field properly
Baker now ignores disabled renderers and renderers that are marked as "shadows only"
Other small changes and improvements
Regarding some technical questions.
About 5.6: there are a few reasons why 5.6 isn't available, at least not yet. Some versions of unity have some specific behavior regarding shaders as you might expect. These are actually a lot trickier to deal with than you initially think, mostly because they are dependent of core functionalities in the engine that are hidden from us, and the further version away you go the bigger these differences are. As a specific example, HDR behavior is not the same and some transformations might be needed to the baked maps. This is another reason why we released the tool as beta. If you really need this to work in 5.6 you can try to bake everything in 2017.1 and then create a custom shader with ASE for 5.6. No guarantees tho. We'll improve on this in the future for sure.
About 8k maps: unfortunately this is an issue of simple lack of memory and not something with the plugin itself. Uncompressed 8k maps are huge in space and a just few of them in you graphics card quickly hits the limit, hence the crash when you try to render them. We do have an idea of how we can improve on this in the future but a lot of changes are needed and few compromises need to be done.
@deverolirc : that specific behavior is not feasible for spherical impostors, that only works for speedtree impostors because they are a one dimensional array of images so you can blend the current frame with the previous or the next one with some ease. However, spherical would require an 8-way blend or at the very least a 4-way which is a lot heavier and this is when octahedron comes in, because it allows for a 3-way blending, so you can think of octahedron being the thing you are looking for in terms of blending. You can still try creating it with custom baking tho.
I got the asset and its working great so far. At the end of the 2nd tutorial video you mentioned the next video being about baking imposters for groups of objects. Could you make a basic text walk-through of how to set that up while the video is being worked on? I created an imposter for a group of objects but how do I integrate the combined imposter with the individual lod groups of the objects?
Thank you for all you help so far.
Thank you for your support!
Apologies for the delay, I had to postpone that specific video but I should be able to tackle it soon. I suppose there's no universal solution for this type of setup, it really depends on your project.
What do you intend to do, show individual impostors at a close distance? You have to consider that the group of objects will fadeout completely.
Let me know, thanks!
Will impostors be batched (dynamically)? Or do they need seperate draw calls because every impostor has another set of textures?
They won't but they take advantage of GPU Instancing, it's quite flexible.
For my use case I have distant objects, mountains structures rocks etc, that I want to combine all into one billboard from a distance and have them separate back into individual objects when you get closer. So a shared Lod billboard but separate Lod 1's. The reason I need to group them is because my mountain for example is comprised of multiple meshes aligned and stitched(the result of using the PolyWorld asset). When I try to billboard each chunk separately big noticeable gaps appear in the middle of the mountain since its not actually on big mesh (see photo). But when I put the amplify imposter component on the group containing all the objects that make the mountain the resulting billboard was great and accurate. Now I'm wondering how I can share that imposter with the rest of the objects' Lod groups.
First photo is the group containing all objects. (gaps here is cause i didnt put the whole mountain just a few pieces to show you)
second photo is each piece individually impostered. meshes cant align
Another suggestion i have for billboards has to do with the lighting. From what I gather impostering is basically takinf photos of the object from different angles and pasting them onto a texture like this:
but this results in no lighting on the resulting billboard. Some objects may need some shadows. I know that the billboard still accepts lighiting in the game but the whole concept of imposters and billboarding is to save resources and to be placed far away, so I imagine the shadow drawing distance for people trying to optimize everything wont be too big. In my case (a VR vive game) the shadow distance is fairly small. And I end up with this result for my trees when impostering. Close ones look fine but far ones don't.
The close ones are within shadow drawing distance and the furthing ones are outside it.
I was wondering if it was possible to include a light source above the object when taking the images for rendering the texture so that shadows will be baked into the texture. You wont end up with a the most accurate shadows/lighting for all times of day on the imposter but it'll still look way better than no lighting and you'll be able to save performance by reducing shadow casters.
Regardless of the stuff mentioned above though I just wanna let you know that this is indeed a wonderful asset. I don't mean to complain too much. Definitely worthwhile and effective. Thank you for all your work on it.
Hi Amplify. LOVE the asset! Great work.
The one thing I really would love to do is to use a custom lighting variation of the runtime imposter shaders. At the moment it seems like it's limited to a Runtime Specular or Runtime Metallic Imposter shader?
I would love to set up my own lighting, with something like this, where I can hook up the N dot L myself:
But it doesn't seem to be able to accept it? Which is strange, because if I pipe in a fake light direction (as a Vector3), then the NdotL resolves properly and I can get toon (stepped) lighting:
But using the World Light Direction instead breaks it. Am I hooking something up wrong in the first image? I (think I) understand that depth is also stored in the alpha of the World Normal output from the Amplify Imposter node, but I can't seem to split that off either, it's only outputting three channels afaik.
So an unlit/custom lighting Imposter template would be awesome.
Even more useful might be something like an individual node that just decodes a single Imposter Texture Object input - choosing the correct frame via the view direction, and then allow me to use that how I want before piping it into a non-template Surface shader. That might not even be remotely possible, because I don't quite understand all the computation involved sorry, but it sounds appealing in my imagination XD
Anyway, awesome asset, thanks again for creating such high quality tools!
P.S. (ASE request): Honestly I would love the have access to the Light Direction and Light Colour nodes even without using a custom lighting setup. Even though they're mostly redundant in a non-custom setup, I can still think of uses for them, especially for quickly drafting up temp shader tests.
You can do this by preparing a single impostor using all the necessary meshes, the tricky part here is deciding which objects to include. Transitioning from a single impostor to multiple objects in another LOD level is quite straightforward to setup, you simple place the required objects at the correct level - Multiple Objects LOD0, Single Impostor LOD1.
The problem here is that as you get closer to the object, LOD1 might disappear completely before the LOD0 objects are all visible. You can mitigate this by using additional impostor groups, thus reducing the changes of the mountain completely disappearing, and by adjusting the transitions distances to best coincide with your current requirements.
Note that your LOD0 objects can also have their own LOD Group.
As for the holes, we would be happy to test the mesh on our side in order to determine if it's working as expected.
That's an interesting case, I'll pass it on to the developers.
Let me know if you have any additional questions, I would be happy to elaborate.
Thanks, we really appreciate the support. Keep it coming, feedback is extremely helpful and encouraged!
Uhm, lets tackle this into different parts.
First, you might have found a bug within ASE, which even tho is not necessarily impostor related it is important to solve for both projects. That light dir should work regardless of context.
Then, about the toon lighting it might be a bit more time consuming to solve. You guessed it right, the issue here is that the custom impostor is using a shader template to figure out what goes where, so it's a custom shader but it uses standard lighting. In order for you to be able to do a complete custom lighting shader you need a different shader template. This is something we can provide and in fact we want to, however this is somewhat dependant on ASE because we don't want to give you a ton of different templates to choose from which would then break in various occasions, we want to give you just a few of them and then you would configure it inside the editor. The good news is we've been updating ASE in these past builds to do just that. The not so good news is that we still need to create the proper templates that use this functionality and further test the system. This simply takes time. If you are in a hurry I can try to cook up an "unlit" variant of the impostor template as you suggested (which is actually a copy of the impostor template minus the lighting calculation). However, assuming Light Dir is broken just the template might not be enough.
We can easily update the node to output the depth information as well, in fact we have a toggle that outputs extra data and this fits that category just fine, so consider it done for the next build.
Finally, about the single decode of a texture object, its something we would like to have but at least for now it doesn't seem feasible. This is because there's some obligatory data and calculations that are needed for each "decode" of a texture that doesn't seem to be possible to decouple without a huge performance decrease, so instead we have one node to do it all to share that data and those calculations. We would love to have sort of an "impostor sampler" but our initial attempts failed. We might still find a way or a good compromise but I don't want to give you false hopes on this.
So, if you want something to tinker with for the time being I can give you an unlit template but until we check what's wrong with Light Dir I can't guarantee you if it will work 100%. In the long term we'll provide better and more templates for more exotic renderings like yours.
No that's fine, I'm not in a hurry. Thanks for the detailed response!
Ah that's a shame that an 'imposter sampler' isn't practical. I attempted and failed to make my own to feed into a 'Flipbook UV Animation' node Start Frame based on view direction, or a Multiply by Axis Frames, Floor, Divide by Axis frames and then feed into the UVs, and it almost felt like I was on the right track at times (I got half an axis working!), but it was beyond me and I gave up.
It would be awesome if there was some way to do it before the final input of the shader. But honestly, just having an unlit Imposter shader with the Light Direction node working would be more than enough for me.
Thanks again! Really impressed by how easy the baking process is.
Is it possible to use this in procedural map generation in something like Map Magic?
Was wondering if it could be used to generate high quality, low overhead grass, at runtime.
Since the current version does not support LWR will this be a thing down the road soon? ETA? If I go ahead and add it now when I go to upgrade will it auto update everything or will i need to delete and redo everything? My project is LWR.
Hello, I'm not entirely familiar with Map Magic's requirements, does it accept custom meshes for the grass?
If so, you should be able to create impostors to use with it, but I can't really guarantee this since we haven't been able to test that specific plugin.
Hey there, there's no official ETA at this time, but it should be coming soon!
In regards to your other question your assets will not be updated automatically. Impostors must be baked using specific shaders, so everything will need to be re-baked.
It does accept custom meshes, so I think it might work.
Is there any way to get a test grass Imposters prefab to try it with? It can be hideous, just want to make sure it works first
Hey i wanted to follow the tutorial for custom shader baking but can't get 'Impostors' to show in the menu :
I already tried to delete/reimport Impostors after upgrading ASE, also starting from blank project (Ut 2017.4 LTS and 2018.2.0f2).
Edit : anyway i can set it from ASE window
Could someone who has VS please benchmark this with lots of trees? This could very well save my VR project but I really wanna see what kind of fps boost you get. I'm thinking LOD0 mesh then Lod1 imposter, maybe set "additional tree mesh distance" to 300, but have the lod switch fairly soon.
Thanks in advance!!!
got this result in 2018.b3
it's look like emission overide
That's odd, we'll check it out.
I was going to recommend that, glad you found it!
Does it happen with the latest ASE and Impostors version pulled directly from our site?
Sure, send it over to firstname.lastname@example.org and we'll test it.
The results can be quite dramatic but it really depends on your project.
Thank you for reporting it!
Although we do not officially support Unity beta versions, we would be happy to test it on our side.
What exact Unity version did you use?
Nope (i wasn't aware of), latest UAS versions.
Do you want Mobile VR or PC VR? Big difference in fps changes between the 2 since different sets of bottle necks. I have a Vive so if you want PC VR details I'd be happy to help.
PC, Vive is great! I'm deving for Oculus.
Thank you for confirming it.
So it's ok with the latest?
Results will vary depending on the asset/project but the screenshot I posted above should give you an idea of what to expect.
Yup and thanks for that. It looks incredible. I'm just hoping to see a vr comparison as well at a ground perspective.
@Amplify_Ricardo This imposter thing looks really great!
Do you think imposters would work with a very detailed big (grouped) object at close to medium range, too?
Background: I have a big (ca. 4 meter x 5meter, 2 meter high) and very detailed (>16 million polygons) CAD model (group of objects, about 250 child objects), which has to been shown on a mobile IOS device?! Maybe Amplify Imposters could be a solution…
Are there videos / demos of Amplify Imposters showing complex objects from very close distance? Is it possible to to split baking to multiple maps (f.e 4x2048)?
Should be comparable, just add the extra VR cost as with any other asset
Thanks, we really appreciate it.
Please note that Impostors are meant to be used at a certain distance, it really depends on the model and how much of the screen it's actually going to take. Can you share additional information, along with a few screenshots, to support@Amplify.pt or via the PM? I would be happy to elaborate on how, and if, you can take advantage of Amplify Impostors.
It's not currently possible to split bakes into multiple maps, you can however combine impostors as they display intersections with standard assets or other impostors.