Sunday, March 6, 2016

EOS-M for the Landscape Photographers

Many are drawn to the EOS-M because of the ML-enhanced videography: I am not one of those.

As a photographer I was attracted to the EOS-M, because I missed ML when I brought my first mirrorless, an A6000, and, after years with ML on my 5D3 and IR-converted 50D, I simply wanted ML on a mirrorless. So last week I grabbed a used EOS-M and M-2-EF adapter on ebay.

The EOS-M, with it’s 18-55mm kit lens is a great package. My first ‘add-on’ was an Neweer grip, which greatly helps with handling the EOS-M.

The real ‘downside’ of the EOS-M, however, is the lack of buttons. Like many photographers, we get used to our buttons and we know their position instinctively. Our workflow is button-base, eg back-button focus and ML-ETTR via the SET button etc.

In addition to lacking the buttons, the EOS-M, because of its touch screen UI, brings in other ‘complication’, eg the touch screen and various ‘missing’ ML features. For example, the ML EOS-M version doesn’t allow one to ETTR from the SET button. Also, you can not have ML ETTR (double half shutter) and ML Advanced bracketing on at the same time, so you are forced to keep going into the ML menu to change ML features: which on the EOS-M can be fiddly.

Because of the above, I have written a Lua ‘helper script’, specifically aimed at the EOS-M landscape photographer, that I hope some EOS-M users may get value out of, and use as a basis for your own ‘personalisation’, eg my ‘ML feature toggler idea’.

The usual caveats apply, eg: it works for me; you use it at you own risk etc etc.

In addition, I have only tested it with all the Lua demo scripts removed, and you are advised to do this. That is, I haven’t tested script-2-script (in)compatibility.

Once you put the script in the ML script folder, the script will start up automatically on camera start up. NOTE: once running you will lose the Main Dial’s top toggle functionality. To get this back to normal, switch off the script under the ML Shoot Menu.

NOTE also that the EOS-M (nothing to do with my script) suffers from a ‘feature’ that means the shutter can fail to work sometimes. If you get this, simply switch the camera off and on quickly.

The script provides two coloured feedback areas that appear in the top ML bar on the right. When you first switch your camera on you will see one of these, a blue rectangle with “off” showing, which tells you the script is running, but that none of the script functionality is in use.

To use the script simply use the Main Dial top-toggle. Each time you toggle the top of the Main Dial the blue rectangle will show you are accessing a different ML extended functionality, eg ML ETTR or ML bracketing. In addition, for my workflow, I have added in a dark-image feature (yes I know I could put my hand in front of the camera).

As soon as you take your first image, the second area of the script feedback comes into being. This is the area that gives you visual info for focus stacking in landscape mode. As with the bracketing and ETTR functionality, make sure you have all the ML settings to you liking, eg I use these setting: all SNR ETTRs setting to zero, DoF diffraction aware on and Advanced bracketing to Auto etc etc (you decide what you want).

As an example workflow, consider a focus (lens must report focus) bracket capture session:

  1. Ensure all ML background settings are correct, eg ETTR, DoF, Bracketing.
  2. Press the Main Dial top toggle until you see “ETTR” in the Blue Box.
  3. Do a double half shutter press to get a starting ETTR exposure and adjust as you see fit, eg using the ML Histo Bar (which I always have in ETTR Hint mode.
  4. Fine compose (and ETTR again if required) and focus on the closest thing that you need for your capture, eg using the EOS-M touch focus functionality.
  5. Toggle through the top of the Main Dial until you see “-BE” (for dark BookEnd) and grab an image.
  6. Toggle to “+BE” to return to the correct exposure and grab your first image. This will show a yellow box to the left of the blue box, telling you that your next image needs to be taken more towards the infinity end.
  7. Focus the lens towards the infinity end until you see either a green or red box. Green means take a picture, red means back off to ‘just’ yellow, ie you may not always get a green. The green ‘tolerance’ can be adjusted in the script’s menu and provides an indication of positive overlap, ie the default is 20%.
  8. Take another image and repeat 7 until you see INF in the left hand box, which means that DoF Far is at infinity, Consider taking an insurance shot beyond this, eg focus at infinity.
  9. Toggle to “-BE” and take another bookend image. You now have a focus bracket set with two dark frames as bookends to help you identify these in post processing.

If you wanted to also take a set of exposure brackets at each focus point, you simple toggle over until you see “Auto” and press the shutter to grab an ML auto bracket set (or a numbered bracket set if you set that option). Note you should consider toggling to the “-BE” to insert a dark frame between the exposure brackets. I also put two dark frames at the beginning and end of a focus/exposure set, to differentiate this complex set in post.

As I say, I wrote this script for my workflow, and the EOS-M ML-enhanced mirrorless camera for landscape photography. The EOS-M, with a few batteries, the lens adapter and a small tripod, represents the lowest weight I can imagine in the field for an ML-enhanced experience.

Finally, here is the script:


--[[    
    Manual Landscape bracketing helper script
    Version 0.1.0 for EOS-M
    Garry George March 2016
    http://photography.grayheron.net/
    Workflow helper script for focus and exposure bracketing for the EOS-M
    Toggle through the workflow using the top of the main dial.
    Yellow means move more towards the infinity end, Red means move more towards macro end,
    Green means at the sweet spot. If Green not seen, move to just being in the Yellow from being in the Red.
--]]
factor = 0.2
b1 = lens.dof_far
fp = lens.focal_distance
c1 = b1 - (b1 - fp*10)*factor
inf = 1000000
started = false
current_tv = 0
play = 0

event.keypress = function(key)
    if keymenu.submenu["Turn On/Off"].value == "Off" then
        started = false
        return true
    elseif key == 12
    then
    play = play + 1
    if play == 5 then play = 0 end
    return false
    elseif key == KEY.FULLSHUTTER
        then
        b1 = lens.dof_far -- in mm
        fp = lens.focal_distance -- in cm
        c1 = b1 - (b1 - fp*10)*factor
        started = true
        return true
    end
end

lv.info
{
    name = "Info 1",
    value = "",
    priority = 100,
    update = function(this)
    this.value = ""
    if keymenu.submenu["Turn On/Off"].value == "On" and started and fp ~= 0
    then
            this.foreground = COLOR.BLACK
            a2 = lens.dof_near
            if a2 > b1 then
            this.background = COLOR.RED
            elseif a2 < c1 then
            this.background = COLOR.YELLOW
            else
            this.background = COLOR.GREEN1
            end
            if lens.dof_far >= inf then
            this.value = "INF"
            else
            this.value = "   "
            end
    else
    this.value = ""
    end
    end
}

lv.info
{
    name = "Info 2",
    priority = 100,
    value = "",
    update = function(this)
    if keymenu.submenu["Turn On/Off"].value == "On" then
            i = menu.set("Shoot","Advanced Bracket",0)
            i = menu.set("Expo","Auto ETTR",0)
            this.foreground = COLOR.YELLOW
            this.background = COLOR.BLUE
            if keymenu.submenu["Turn On/Off"].value == "On" then
                if play == 0 then
                current_tv = camera.shutter.ms
                this.value = " Off"
                elseif play == 1 then
                this.value = "-BE "
                camera.shutter.ms = 1
                i = menu.set("Shoot","Advanced Bracket",0)
                elseif play == 2 then
                this.value = "BE+ "
                camera.shutter.ms = current_tv
                elseif play == 3 then
                this.value = "ETTR"
                i = menu.set("Expo","Auto ETTR",1)
                i = menu.set("Auto ETTR","Trigger mode",3)
                elseif play == 4 then
                this.value = "Auto"
                i = menu.set("Shoot","Advanced Bracket",1)
                else
                this.value = ""
                end                                   
            end
            end
            end
}

keymenu = menu.new
{
    parent = "Shoot",
    name = "Landscape Helper",
    help = "Toggle through workflow using top of main dial",
    help2 = "Grab exposure or take picture as required",
    submenu =
    {
        {
            name = "Turn On/Off",
            help = "Switches the script on/off",
            help2 = "Simply enables additional button functionality",
            choices = {"On","Off"},
        },
        {
            name = "Bracket to bracket overlap",
            help = "Amount to overlap each bracket",
            help2 = "% of FP-2-DoF(far) distance",
            choices = {"20","10", "5"},
            update = function(this)
            factor = tonumber(keymenu.submenu["Bracket to bracket overlap"].value)/100
            end,
        }
    }
}



No comments:

Post a Comment