View Issue Details

IDProjectCategoryView StatusLast Update
0001465NoesisGUIC++ SDKpublic2019-05-16 14:26
ReportermingingminglerAssigned Tojsantos 
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status assignedResolutionopen 
Product Version 
Target Version2.3.0Fixed in Version 
Summary0001465: Allow 3D world-view-projection transforms in MVVM, independent of screen space for high performance spatial UI
DescriptionHi, I've been dabbling with spatial UI in Noesis. I have a need to render many spatial elements at the same time, each with their own storyboards.

I first started doing it the render texture method. The performance of doing this isn't good, and the visual quality can suffer when the camera gets close to the element. So it's not desirable.

I decided it'd be far better to render the geometry directly into the world. So I tried something else - each spatial element now has its own view, and manages its own world view projection matrix. Before I tell Noesis to render each spatial view, I tell the grpahics device that I'm about to render a spatial element, and I pass it the element's world view projection. Now, when Noesis sets the buffers for this view, I override batch.projMtx directly with the new matrix.

The result is I get wonderful graphics quality, and the performance is better than using tons of render textures. But it's still not as good as it could be. Because each view is rendered separately, it doesn't take advantage of batching across all the views, and performance can suffer when each element has text in it.

I can't achieve what I want with the Noesis Projection attached property. Try as I might, I just can't work around the way Noesis handles a Matrix3DProjection behind the scenes.

So I believe the best solution would be, for example, to have a single Noesis scene/view, which has an ItemsControl bound to a collection of SpatialElement view models, which contain their own world-view-projection matrices. Then in the DataTemplate, we can assign this matrix to the root element, where Noesis would render the element (applying the transform directly to the vertices?) while ignoring any screen space projection that is applied behind the scenes. To be able to do this via MVVM would be incredibly powerful.
TagsNo tags attached.
PlatformAny

Activities

jsantos

jsantos

2019-05-14 20:56

manager   ~0005675

you nailed this. We are working on this feature for the next major version. We are going to deprecate the current implementation of the Projection property in favor of having real 3D.
mingingmingler

mingingmingler

2019-05-15 01:09

reporter   ~0005677

That's exciting, thanks for getting back to me!
realesmedia

realesmedia

2019-05-15 14:32

reporter   ~0005678

Hi

in version 2.3 there will be support for 3D primitives (mesh, line ...)?

I want to implement 3D Gizmo (manipulators) on Noesis)))
jsantos

jsantos

2019-05-15 22:01

manager   ~0005679

We are working in a feature to inject 3D geometries inside a XAML. For example, to have a button that is a 3D-mesh. But the render must be done by the engine (Unity, Unreal, custom). That's something Noesis won't do, apart from calling a callback at the right time.
realesmedia

realesmedia

2019-05-16 14:26

reporter   ~0005682

ok
thank

Issue History

Date Modified Username Field Change
2019-05-11 18:57 mingingmingler New Issue
2019-05-11 19:03 mingingmingler Description Updated View Revisions
2019-05-11 19:05 mingingmingler Description Updated View Revisions
2019-05-11 19:06 mingingmingler Description Updated View Revisions
2019-05-14 20:55 jsantos Assigned To => jsantos
2019-05-14 20:55 jsantos Status new => assigned
2019-05-14 20:55 jsantos Target Version => 2.3.0
2019-05-14 20:56 jsantos Note Added: 0005675
2019-05-15 01:09 mingingmingler Note Added: 0005677
2019-05-15 14:32 realesmedia Note Added: 0005678
2019-05-15 22:01 jsantos Note Added: 0005679
2019-05-16 14:26 realesmedia Note Added: 0005682