Point Cloud vs viewport performance

Max scripts

Moderatorer: Super Moderatorer, Admins

Brukeravatar

Trådstarter
Tronotrond
Innlegg: 3748
Registrert: lør 29 okt, 2005
Sted: Houston, TX
Kontakt:

Point Cloud vs viewport performance

Legg innav Tronotrond » tir 20 des, 2011

Hallois!

Har laget et script som importerer en laserscannet point cloud. Er ganske tunge saker, og lurer derfor på om noen har noen tips eller råd på hva som kan være beste måten å vise dem i viewporten? Helst som en enkel pixel.

Jeg prøvde med helper objects, men det endte (såklart) med håpløs viewport performance.
Å importere dem som vertices i en mesh er mye raskere, men da ser vi dem kun når objektet er valgt og man er i vertex-mode. Dessuten blir jo også hvert punkt en firkant. Vi bruker point clouden som en referanse til modelleringen, så det må nesten vises samtidig som vi modellerer.

Egentlig så er vel også muligheten for en volume select et must siden vi må begrense hvor mye som er synling i viewporten.


Noen som har noen gode råd? :)


Vi hadde en developer preview utgave av en plugin til max som taklet jobben ganske greit, men den utløp og utviklerene har lagt fra seg utviklingen..
TD/Technical Animator, Corporate Marketing - National Oilwell Varco, Houston, TX
Freelance 3D/VFX Artist - Hille3D

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tir 20 des, 2011

Hva med å byggen èn mesh som består av en face eller tetrahedron for hvert point? Da har du bare en node og da takler max dense og høy mesh ganske så nice.
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet
http://folk.ntnu.no/havardsc/site/wordpress/

Brukeravatar

Trådstarter
Tronotrond
Innlegg: 3748
Registrert: lør 29 okt, 2005
Sted: Houston, TX
Kontakt:

Legg innav Tronotrond » tir 20 des, 2011

Hm, ja.. absolutt noe som er verdt å forsøke det!
Jeg fant også ut at particle flow er utrolig raskt, og det gir jo også muligheten til å skru ned hvor mye som vises i viewporten. Har drevet og prøvd meg på det den siste timen nå, men jeg har ett problem.

Etter mye om og men for å scripte plasseringen til partiklene så satte jeg opp en script_test operator som flyttet alle punktene med en "on Proceed pCond do", problemet er bare at de har en stor tendens (så fort du gjør noe annet enn å snurre på viewporten) til å hoppe tilbake til standardposisjonen sin hvis man f.eks. flytter på pflow gizmoen e.l...

Har du noen kjennskap til det?
Er sikkert noe enkelt jeg overser. Har aldri prøvd å scripte mot Pflow tidligere.
TD/Technical Animator, Corporate Marketing - National Oilwell Varco, Houston, TX
Freelance 3D/VFX Artist - Hille3D

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tir 20 des, 2011

Ah, pflow er vel ganske så smart ja. Jeg ville da ha brukt en birth-script-operator. Sleng ut eksempel på input data så kan jeg mekke et eksempel
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/

Brukeravatar

Trådstarter
Tronotrond
Innlegg: 3748
Registrert: lør 29 okt, 2005
Sted: Houston, TX
Kontakt:

Legg innav Tronotrond » tir 20 des, 2011

Ah, det hørtes jo helt toppers ut. Jeg har laget et point3 array med input-dataen.

Koden jeg har brukt for å flytte partiklene er ellers ganske rett frem:


on Proceed pCont do (
for a in 1 to pointPosition.count do
(
pf.setParticlePosition a pointPosition[a]
) )
TD/Technical Animator, Corporate Marketing - National Oilwell Varco, Houston, TX
Freelance 3D/VFX Artist - Hille3D

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tir 20 des, 2011

Vet ikke hvor du deklarerer point3-arrayen men jeg refererer til den som ::posArr dvs at jeg sjekker etter en array med det navnet i global scope.
Startframe sier hvilken frame du vil starte å sample pointsa på.

Kode: Velg alt

on ChannelsUsed pCont do
(
    pCont.useTime = true
    pCont.useAge = true
    pCont.usePosition = true
)

on Init pCont do
(
 
)

on Proceed pCont do
(

   t = pCont.getTimeEnd() as float
   startFrame = 0
   
   if startFrame == (t / ticksPerFrame) then
   (
      for p in ::posArr do
      (
         pCont.AddParticle()
         pCont.particleIndex = pCont.NumParticles()
         pCont.particleTime = startFrame
         pCont.particleAge = 0
         pCont.particlePosition = p
      )
   )
)

on Release pCont do
(
 
)
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/

Brukeravatar

tassel
Innlegg: 3986
Registrert: man 26 sep, 2005
Sted: Oslo
Kontakt:

Legg innav tassel » tir 20 des, 2011

Du kan titte på denne også kanskje?

http://www.recubo.biz/eines/maxscript/

Brukeravatar

Trådstarter
Tronotrond
Innlegg: 3748
Registrert: lør 29 okt, 2005
Sted: Houston, TX
Kontakt:

Legg innav Tronotrond » tir 20 des, 2011

Supert, takk! Det fungerte nå, ja :)
TD/Technical Animator, Corporate Marketing - National Oilwell Varco, Houston, TX
Freelance 3D/VFX Artist - Hille3D

Brukeravatar

Trådstarter
Tronotrond
Innlegg: 3748
Registrert: lør 29 okt, 2005
Sted: Houston, TX
Kontakt:

Legg innav Tronotrond » ons 21 des, 2011

Kan jo også bare nevne en reply jeg fikk av en ansatt hos Thinkbox (som bl.a. lager Krakatoa). Kan bruke demoen av Krakatoa, PRT player, til dette her som jo også gir noen fordeler. Må kanskje se litt nærmere på det når jeg har tid :)

Regarding Krakatoa, for showing particles in the viewport, the FREE evaluation version of Krakatoa will do the job nicely. It will even let you render them without a watermark at resolutions below 480x360.
But if all you want to do is show the particles in the viewports for preview purposes, you can use the PRT Loader - it supports small points, large (Z-buffered) points and Vectors from Velocity and Normals and Tangents.
In addition, the whole Magma channel editing system works on top of the PRT Loader so you can display values as colors, modify channels and perform surface operations like stealing data from scene objects and so on. All for free.
Then you can cull particles using geometry volumes, and resave the modified particles to new file sequences after processing. You can load and save Krakatoa's own PRT files, RealFlow BIN files and ASCII Comma-Separated Values files, and there are MAXScript interfaces to both save and load PRT files if you want to use that format (which is already supported by RealFlow and Naiad, among others) for storage - it is compressed and pretty extensible.

Not only does VolumeSelect work with the PRT Loader (except for the mesh mode, but Krakatoa 2 is adding its own solutions for this), you can add ANY deformation modifiers on the PRT Loader and deform it as if it were a mesh. It even provides a SkinWrap modifier to deform by arbitrary control mesh, for example a skinned character.

And it was designed to work with large particle counts.

There are PRT loading operators for PFlow so you can mesh your particles using PFlow Shapes without using Krakatoa rendering. There are some bonus PFlow operators that require a license, but the basic PRT Birth, Update and ID Test operators work in the evaluation version.

Did I mention all these features are available FOR FREE?

http://www.thinkboxsoftware.com/krakatoa-downloads
TD/Technical Animator, Corporate Marketing - National Oilwell Varco, Houston, TX
Freelance 3D/VFX Artist - Hille3D


Gå tilbake til «Max scripts»

Hvem er online

Brukere i dette forumet: Ingen registrerte brukere og 1 gjest

cron