I think it will take a few iterations, here is the next one. The
"traditional preview vs. fast preview" was focused too much on one
aspect of the whole - an important one, but we should not limit
ourselves to that aspect - nor to the pseudo-workflow aspect of the
current tabbed design of the main application window - when re-designing
the GUI.
So I wipe out my drawing board and start from scratch again.
First, a word about my motives and how I intend to go about this.
I am scratching my own itch. If it is helpful for others, good. If not,
that's OK too. I will try to avoid conflicts, which means that I will
not commit to trunk things that have not been agreed - or if I'll do so
I will start a development codeline.
My first objective is to articulate and develop a clear vision. It is
better if it can be a common vision; and I appreciate everybody's
opinion - particularly those that differ from mine because they widen up
my thoughts and may show me aspects that I did not consider.
Once the vision is clear, I intend to go about implementing it. To me
this is an exercise in learning wxWidgets and cross-platform GUI
implementation.
Consensus is improbable (but not impossible) on such a broad topic
loaded with subjectivity and preconceived notions; even more so when
discussed at a hypothetical level. I thought whether I should run my
thought process here in the open; or whether I should come up with
another mockup, maybe even a functional one. I decided for the open,
public approach because I believe that the view of a single individual
is narrower than the view of a group. I look forward for *you* to
influence my thought.
I'll first allow myself to say what I like. Then I will lay out the
current state of my thinking.
I like (in order of priority):
* to use the largest possible part of the screen for preview,
CP-editing, mask-editing, input-crop-editing.
* to control all aspects of the process down to the smallest detail and
decide which part I delegate to automation and which one I override with
manual intervention.
* to use the mouse the least possible.
* to use the keyboard the least possible.
There are many aspects to panorama-creation - many dimensions to look at
things. The current application is workflow oriented. IMO this kind of
aspect is secondary and should not determine the application's overall
design.
There are two aspects that are central to me:
- the visual aspect (the input images and the output result)
- the control aspect (the transformations that these images undergo from
input to output)
The workflow is merely a consequence of the two - it can be fully
automated (in the case of the assisted workflow), or I can
influence/control different aspects of it.
The current hierarchy of things put the workflow at the top (tabs). I
actually never used that order. It is not that I dislike it, it is just
not relevant (except with the 1/2/3 buttons on the assistant).
I do mainly two kind of manipulations through the Hugin GUI:
visual-editing (V) and workflow-control (W). Currently they are mixed
throughout the application's different windows: there is some V (like
the CP-editor and crop tabs) in the main application tabbed interface
which is mostly W; and there is some W (like the choice of output
projection) in the preview window, which IMO should be V-only.
I would like Hugin to have two main windows, one V and one W. Some
popups if warranted, although I'd make the CP list (just to name one
popup) a tab in the W window.
On the (V)isual window I want the preview, the CP-tab; the crop tab; and
in future the masking tab and all other visual work that depends on
moving the mouse on the input images or output preview. What is common
to them is that they need a large surface; and that I usually work on
only one of them at a time. It could be tabbed, like Bruno started to
articulate in the previous thread about the traditional preview.
On the (W)orkflow window I want to have all the text/numeric "manual"
controls. What is common to them is that they have a logical sequence,
but I end up jumping back and forth as I fine tune the workflow.
Some tasks can be done with both a visual or a manual control - e.g.
dragging the final panorama crop visually or entering it manually. This
is a user preference things and I believe both should be available - in
the V and W window.
Right now we have unclear separation of V vs. W work, and this has
detrimental consequences on the usage of display space.
I want to have the largest possible V-Window. I think most people do,
although not always full screen. I'd like the development thrust to go
toward reducing its chroma to a minimum. There are already too many
controls on that window. Most users will open it in either full screen
or near full screen.
Bruno expressed some interesting ideas of how the V-Window may possibly
look, with the Compose/Crop/Layout/Slow tabs.
Things are a little bit more nuanced for the W-Window. I have two
personal preferences for it that depend on my work environment.
When I am on the dual screen workstation, I would like to have the
W-Window on the second screen.
I personally (this is something that will drive the newbie nuts) would
do away with all tabs and other artificial separation: simply order all
the controls somehow logically on a single large window and that's it.
V-Work on the left; W-Work on the right; all unfolded and wide open.
Let's call this "expert mode". If the Stitcher tab was scary, don't even
try to imagine this window. I know it would work for me, like the
current Stitcher tab works very well for me. But I also know that it
would turn newbies off, so I will not impose it - definitely not as default.
When I am on a single screen laptop, I would like to have the W-Window
floating on top of the V-Window. It will come in my way, so I will want
it to use the smallest possible surface to be reasonable. I rather
expand it in width than in height, so that it can take the place of the
current preview's toolbar + images selection. This way I won't have to
move the palette around too much. Let's call this "palette mode". I know
it will turn off some experts like Thomas. There is a trade-off between
the size of the floating palette and the number of controls that can go
on a tab. In my previous mockup I was at the one extreme: smallest
possible palette size (drawback: highest number of tabs). The idea being
to disintegrate before re-integrating: each "micro-tab" would be one
step in the project (e.g. in the undo list, that could then be displayed
as a list of "micro-tabs").
"palette mode" - and the breaking down of the W-Window into smaller
chunks - has a major advantage for newbies: it focuses the user on the
one single step in the workflow, and only on the controls necessary for
it. Each such micro-step would line up like perls in a (workflow) chain.
I would add (for others, not for me) two other modes:
"Single Window Mode" (SWM) - many users are intimidated/confused by the
windowing metaphore. In SWM the W-Window is simply integrated visually
on the top area of the V-Window.
"Palette + Help Mode" (PHM) - a larger W-Window that displays a help
text associated with each micro-step in the palette.
That's my current thinking. To summarize:
visual work on the left; control work on the right. Two windows.
The V-Window:
- Crop (from current tabbed main app)
- Control Points (from current tabbed main app)
- Fast Preview (with variations / functions as described by Bruno)
- Traditional Preview
The W-Window:
- List of Images / Camera / Lenses
- List of CP
- Optimizer
- Exposure
- Stitcher
- Workflow (Assistant)
For the V-Window:
* maximize footprint
* work with the mouse - slide, drag, etc.
For the W-Window:
* minimize footprint
* work with keyboard - tabulate between micro-steps and fields; use
keyboard shortcuts to quickly access individual micro-steps
* multiple versions:
** all-in-one, single page control center for the power user
** small palette with plenty of micro-steps for the user who need guidance
Yuv
Imagine a single OpenGL window where everything goes:
* You can drop your images there, and use the mouse to put them into
their approximate locations ("layout branch") or just run a control
point finder to do this for you.
interestingly, Thomas Modes came up with this in a private conversation.
Also: wxPython has the same widgets as wxWidgets in C++ and one of the
things to consider, since this is becoming a complete rewrite, is to
start from scratch a wxPython GUI to replace the current C++ GUI.
> I've had another idea in my mind for some time now. It may sound a
> little too fancy or even surreal, but I guess this shouldn't stop me
> from writing it down here.
that's a good idea, just a little bit ahead of time, and beyond the
means of this specific project team.
to push it even further and summarize it in a paragraph, imagine a tool
placing the photos in real 3D space. imagine navigating the real 3D
space, move between the images, freely. place any 3D structure anywhere
in that space. place a point somewhere in space and project from that
point to the 3D structure through the images. want ortographic
projection? possible too. And then all of a sudden the 3D pixel cloud
liberates itself from the flat 2D pictures....
Blender is the user interface for this. The project would not be the
next GUI for Hugin. It would be full 3D extension for libpano; and then
integration in Blender.
Yuv
I have wished this several times when my computer crashed during a
stitch and I could at least have saved the remapping step if I had been
able to start over at the blending step. (Not possible on the command
line with cropped intermedaite files.) Neither hugin nor the batch
processor allow this - you are just asked if the existing images should
be overwritten, not if they should be reused.
regards
Joachim
Yes, it is a shame that the Batch Processor doesn't support this,
though it works very well on the command-line.
The problem with cropped TIFF files can be worked-around by turning
it off in Hugin, but really this needs to be fixed in your image
editor. The Gimp understands offsets in multi-page TIFFs, so it is
probably a really easy fix for single-layer files in the Gimp.
--
Bruno
The problem with stitching one-to-many is that you really don't want
to repeat the stitch for each of your output 'views' - Not only will
this take forever, but your seam lines will be in different places
each time.
The right way to do this is to stitch a 'base' equirectangular of
the scene, then generate different projections/views from this.
You can do this in Hugin, just import the equirectangular into a new
project and use the various output projections, or use Tom's Panini
tool which is specifically designed for extracting different views.
What I'm trying to say is that the 'many' part is necessarily a
post-processing step, and doesn't really benefit from being
integrated into Hugin.
--
Bruno
The Makefile stitching process allows exactly this, unfortunately it
is only currently available on the command-line.
i.e. save the project in Hugin but stitch using the shell:
make -f project.pto.mk
Edit an intermediate file and repeat the command-line, only relevant
processing will be redone.
It would be really nice for the Batch Processor to support this kind
of workflow.
--
Bruno
I guess that where I'm coming from is that Hugin and the Stitcher
tab are complex enough as it is.
>I'm currently working with the exact workflow you mentioned, create a 360
>180 equi and then use this as the first element in the chain. But if the
>other steps were only post processing, then why should we have other
>projections and other import method?
Mainly because we can, but also because partial panoramas are
legitimate targets, and because people have a use for stitching
partial equirectangular and cylindrical input.
>Also, from this equirectangular, if we had many output, we could have a nice
>workflow that generate all 6 faces of the cubes for some VR interface
>without needing another tool, or swapping around with the same project or 6
>projects.
We do actually have much of this (cubic, little-planet, thumbnails,
QTVR, PanoSalado etc...) as targets in the Makefile.equirect.mk
plugin - It would be trivially easy to enable this stuff in the
Stitcher tab or the Batch Processor, but it adds a bunch of
dependencies (ImageMagick, perl(Panotools::Script)).
There is however one big usage of Hugin, to generate partial
panoramas. For these, cylindrical or Mercator or rectilinear are more
appropriate. Generating a full equirectangular would not be a solution
in these cases. So Hugin has to keep *some* output projections in
addition to equirectangular and cube face.
My 0.02€
Cheers,
Seb
I can't tell about the way to program this, I'd just like to chip in
with my suggestion from May 1st '09:
"[hugin-ptx] adapting the GUI for different workflows" ->
http://www.joachimschneider.info/hugin_workflow_assembly.gif (+ *.pdf).
Best regards
Joachim
This works already for 'unconnected groups' of photos. Any photo
without control points can be dragged around the Fast Preview
independently of the rest of the photos. Two photos connected
together by control points will drag around together etc...
It would be nice to have 'modifier key' to drag photos individully
regardless of control points, but since the optimiser would undo
this movement, it wouldn't be much use.
>It may prove useful to implement something like skeleton deformation
>as it is used in animation to warp the images, perhaps a fine tuning
>the deformation to accommodate panoramas photographed without rotation
>about the correct axes.
libpano13 has a morph-to-fit function which distorts the reprojected
image to force a 'perfect' alignment, but nona has never been
modified to support it. It is a bit crude though, we have discussed
some kind of alternative fitting with a smooth spline patch but
nobody has written the code.
--
Bruno
> By the way, if cylindrical projection is the desired output, isn't
> there a risk of compressing the zenit and nadir too much when using
> eqr as an intermediate format? Just curious, [...]
Me too, that's what I fear as well. Isn't it a particular strength of PT
to calculate *one* operation that has to be done to each pixel out of
all the different deformations and transformations so there are no
subsequent steps that might deteriorate quality?
regards
Joachim
This is something I often miss with my badly shot handheld panos ...
regards
Joachim
Agreed: If you only want one output projection, use that directly.
Otherwise you'll waste time and memory processing details that are too
fine to see in, or are outside of, the final projection; and you risk
having blurry sections where enough detail is present in the input
images.
> What I had in mind is indeed like the fast preview window, with many
> projections and cropping, except it is a fast "postview" window, that
> shows you an already stitched pano at high resolution, and lets you
> format a view interactively, with instant switching between
> projections. As I have learned from writing Panini, that kind of
> display is quite feasible with OpenGL technology. It works especially
> well if the pano is in cubic format.
Is this any different to loading an already stitched equirectangular (or
cube faces) into a new project? Either way, the panorama has to be
stitched before the fast *view can be shown. To me the fast preview is
already suitable for framing a transform of an equirectangular image.
> I believe (but have not yet seen) that would be possible to render
> final high resolution reprojections quite fast using the video
> hardware via OpenGL.
This exactly what nona -g does.
> But even if the final rendering had to be done
> in software, I would prefer this way of composing my images, as it is
> pretty hard to get "just the right view" while looking at a low
> resolution preview.
It shouldn't be too low a resolution. Do you need more texture detail,
more accurate transforms, or a zoom function?
> And if I want to keep several views it will probably save time,
> because reprojecting a large image is a lot faster than stitching it
> from small ones (no blending needed).
True.
-James
We almost have this, though at the moment you can only drag-and-drop
photos onto the Hugin main window and not the Preview window (a
bug).
Also, added photos inherit the same position as the first photo in
the project, so they are always hidden in the Preview initially - A
fixed drag-and-drop would use the mouse location to place the photo.
>* Images can be clicked, which makes them show up full screen, so
>cropping/masking can be edited.
This is an extension to the Identify tool that has been discussed
before: currently clicking on an overlap opens two images in the
Control Points tab, clicking on a single image should open that
image in the Images tab.
>* Another view (preferably selectable through a keyboard shortcut)
>would be showing the images and their connections on an approximately
>flat surface. This way, it can easily be determined whether there are
>images connected by control points which shouldn't be connected.
>Deleting the connection deletes all connecting control points. Adding
>a connection opens up yet another view, where control points can be
>added either manually or by using a control point finder. Clicking
>such a connection also opens this view.
This is a near description of the 'layout mode' in the
gsoc2009_layout branch.
--
Bruno
Also, added photos inherit the same position as the first photo in
the project, so they are always hidden in the Preview initially - A
fixed drag-and-drop would use the mouse location to place the photo.
>AddingThis is a near description of the 'layout mode' in the
>a connection opens up yet another view, where control points can be
>added either manually or by using a control point finder. Clicking
>such a connection also opens this view.
gsoc2009_layout branch.