4
$\begingroup$

I'd like to increase the reflected light from the two rotating stars off of Suzanne the satellite, without making them appear brighter to the camera so that the pulsing of the two colors is noticeable.

I'd also like to darken the overall scene so there isn't so much "stray light" reflecting off of un-illuminated faces, and so that deep space looks closer to black.

note: I've left the default sun so I can see what I'm doing, I may like to keep it on at least low, to help with depth perception. Camera is 512pix square f=20mm at [7.5, -2, 1.5].

Original light blue color for satellite - The dot is half way between saturated (no red) and the center(equal values) but since that scale is quite non-linear, the value is low, only 0.24 here. Based on suggestions from @Matt I'm changing the color to 100% white [1, 1, 1] now.

Suzanne in orbit around a binary star enter image description here

red star shader

import bpy
import numpy as np

pi = np.pi

n_frames = 150    # 5 seconds

binary_period = 30
th_bin = 2 * pi * np.arange(n_frames, dtype=float) / float(binary_period)
rbin = 1.0
x_sat = np.linspace(-5, 5, n_frames)
y_sat = np.zeros_like(x_sat)
z_sat = 3.5 - 0.2*x_sat**2     # parabolic (but velocity not correct yet)

aloc = 0.8*np.vstack((np.cos(th_bin), np.sin(th_bin), np.zeros_like(th_bin))).T
bloc = -aloc
sloc = np.vstack((x_sat, y_sat, z_sat)).T

makeit = True

if makeit:
    # create the universe
    asiz, bsiz, ssiz = 0.55, 0.55, 0.5
    ok = bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=4, size=asiz, location=aloc[0])
    a = bpy.context.active_object
    a.name = 'a'
    ok = bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=3, size=bsiz, location=bloc[0])
    b = bpy.context.active_object
    b.name = 'b'
    ok = bpy.ops.mesh.primitive_monkey_add(radius=ssiz, location=sloc[0])
    s = bpy.context.active_object
    s.name = 's'
    s.rotation_euler = [0, 0, 0.5*pi]

    bpy.context.scene.frame_end = n_frames

    for i_frame in range(n_frames):
        for obj, loc in zip([a, b, s], [aloc, bloc, sloc]):
            # print (i_frame, obj.name, loc[i_frame])
            obj.location = loc[i_frame]
            obj.keyframe_insert(data_path="location", frame=i_frame+1, index=-1)

renderit = True

if renderit:

    # from: http://blender.stackexchange.com/a/17840/5334
    scene = bpy.context.scene
    scene.render.engine = 'CYCLES'
    fp = scene.render.filepath # get existing output path
    scene.render.image_settings.file_format = 'PNG' # set output format to .png

    ffracs =  [0.1, 0.5, 0.95]

    for i_frame in range(n_frames):

        # set current frame to frame 5
        scene.frame_set(i_frame+1)

        # set output path so render won't get overwritten
        scene.render.filepath = fp + 'f01_' + str(i_frame)
        bpy.ops.render.render(write_still=True) # render still

    # restore the filepath
    scene.render.filepath = fp
$\endgroup$
  • $\begingroup$ Thanks @ideasman42, indeed the answer should apply to other satellites as well, not just the ones that happen to be g̶r̶a̶i̶l monkey-shaped. $\endgroup$ – uhoh Apr 28 '16 at 13:41
3
$\begingroup$

There are three things I'd recommend.

One is making your background black. Any other color will artificially reduce the contrast, making the stars (and Suzanne) seem less bright than they are.

Another is improving Suzanne's material. It should be a correct, Fresnel diffuse (if diffuse is what you're going for), and it should be a lighter color, something closer to white. It looks dark green at the moment. Dark colors don't reflect as much light as light colors (that's why they're dark ;-) ), so the light source has to be brighter. Colored materials react to colored lights in funny ways. In particular, your green material is going to be preferential to the white light, over the red light, making the red light look dimmer, even if it's the same intensity.

For a (mostly) correct Fresnel diffuse shader, just mix a diffuse shader with a glossy shader, plugging a fresnel input node into the factor slot on the mix shader. Fresnel in factor, diffuse in top slot, glossy in bottom slot, mix piped to surface. This will make her reflect light a bit more reasonably.

Lastly, if you need a sun lamp to "see what you're doing" then something is wrong. It's necessarily going to mask/diminish/hide the effect of the two stars. It won't LOOK like Suzanne is being lit by the pulsar because her dark side isn't DARK... it's being lit by the sun lamp. If you want to make the depth more obvious, decrease your focal length, and re-position the camera.

Hope that helps!

$\endgroup$
  • 1
    $\begingroup$ Thanks! My original title was: "How to make Suzanne look more like a satellite orbiting a binary star?*" because I will talk about measuring various effects from the point of view of the satellite, and to add some humor to balance the dry equations and vectors etc. I'll keep some ambient light because 1) there will be other objects farther from the stars, and 2) as the satellite moves between the stars and the camera, it will be black and invisible in reality without at least a little light. I may use something more sophisticated in the final version, but a sun works OK right now. $\endgroup$ – uhoh Apr 28 '16 at 21:46
  • 1
    $\begingroup$ Yeah, you might could do that.... I'm trying to think of how... My first attempt would be to render out an indirect pass in addition to your regular pass. Do some brightness adjustments to it, and then overlay it back on top of the original. It might be enough to multiply the Combined with the Indirect... I'm gonna have to try that out when I get home... $\endgroup$ – Matt Apr 28 '16 at 21:59
  • 1
    $\begingroup$ There may also be a way to boost reflected light using the Reflected slot on a Light Paths node, but it might be more complicated... $\endgroup$ – Matt Apr 28 '16 at 22:01
  • 1
    $\begingroup$ I haven't watched much of this one, but it looks like it might be useful. Beware, he's using Node Wrangler, so he uses some shortcuts that aren't built into Blender.: youtube.com/watch?v=FpCIpaDZf0M $\endgroup$ – Matt Apr 29 '16 at 13:39
  • 1
    $\begingroup$ This one also looks like it might be useful: youtube.com/watch?v=lpcYY3OX4g4 Just keep in mind that it's all just math. Each pixel is a triplet of numbers. Multiply and r,g,b value by 1 and you get that same r,g,b value. Multiply any r.g.b value by 0 and you get 0,0,0. Addition, subtraction, etc, all work like real math, too. $\endgroup$ – Matt Apr 29 '16 at 13:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.