#!BPY """ Name: 'DEPTH OF FIELD' Blender: 234 Group: 'Wizards' Tooltip: 'Create Depth of Field effect' """ ###################################################### # easyDOF.py v0.3.1 # # Script to create depth of field effect # ##################################################### # This script create a depth of field effect on an # image # How to use it : # - Create an empty named 'Focus' # - Place it where you want the focus to be # - Select the camera you want to use # - Launch the script (Alt-P) # - Set up variables : # "amount" must be between 0.2 and 2 # "quality" must belong to [0..3] # - Press "Render" ###################################################### # Author : Jean-Baptiste PERIN (jb_perin@yahoo.fr) # with valuable help from jms (http://jmsoler.free.fr/) # # jms, correction du 16/11/2005 : # changement de position de la ligne "185 scn.link(nobject)" # vers la ligne 181 ###################################################### import Blender from Blender import * import math from math import * scn = Scene.getCurrent() tabosa = [5,8,11,16] ######### # Cette fonction renvoie la camera selectionnee # in : # out : l'objet camera selectionnee ######### def getCamera(): objs=Object.GetSelected() return objs[0] ######### # Cette procedure cree une camera et l'ajoute a la scene # in : # out : la camera cree ######### def createCamera(): global scn currentcam = getCamera().getData() obcam=Object.New('Camera') ncamera=Camera.New('persp','LaCamera') ncamera.setClipEnd(currentcam.getClipEnd()) ncamera.setClipStart(currentcam.getClipStart()) ncamera.setLens(currentcam.getLens()) if (currentcam.getType() == 0): ncamera.setType('persp') else: ncamera.setType('ortho') obcam.link(ncamera) scn.link(obcam) scn.setCurrentCamera(obcam) return (obcam) ######### # Cette fonction renvoie l'objet de nom name # in : # out : l'objet de nom name ou None ######### def getObject(name): p = None objs = Blender.Object.Get() for o in objs: if o.getName()==name: p = o break; return p ######### # Cette fonction renvoie l'objet focus # in : # out : l'objet focus ######### def getFocus(): target=Object.Get('Focus') return (target) ######### # Cette procedure configure le rendu de la scene # in : # out : ######### def configureRenderingContext(): global scn, nb context=scn.getRenderingContext() context.enableOversampling(1) context.enableMotionBlur(1) context.motionBlurLevel(0.5) context.enableUnifiedRenderer(1) context.setOversamplingLevel(nb) ######### # Cette procedure restaure les parametres de rendu initiaux # in : # out : ######### def restoreRenderingContext(): global scn, nb context=scn.getRenderingContext() context.enableOversampling(0) context.enableMotionBlur(0) context.motionBlurLevel(0.5) context.enableUnifiedRenderer(0) context.setOversamplingLevel(8) def Main(): global scn, curframe, nb, diametre print "****START****" target = getFocus() lacam = getCamera() lefocus = getFocus() ##----------- ## Creation de la camera pour le rendu ##----------- obcam=createCamera() obcam.makeTrack(target, 0) obcam.setEuler(Mathutils.Euler([radians(-90.0), 0.0, 0.0])) nobject = Object.New('Curve', 'monCercle') nobject.setLocation(lacam.getMatrix('worldspace').translationPart()) nobject.setEuler(Mathutils.Euler([radians(90.0), 0.0, 0.0])) ncurve = Curve.New() ncurve.appendNurb([0.0,-diametre, 0.0, 1.0]) ncurve[0].append([-diametre,-diametre, 0.0, 0.353553]) ncurve[0].append([-diametre,0.0, 0.0, 1.0]) ncurve[0].append([-diametre,diametre, 0.0, 0.353553]) ncurve[0].append([0.0,diametre, 0.0, 1.0]) ncurve[0].append([diametre,diametre, 0.0, 0.353553]) ncurve[0].append([diametre,0.0, 0.0, 1.0]) ncurve[0].append([diametre,-diametre, 0.0, 0.353553]) for ii in range(3): ncurve[0].append([0.0,-diametre, 0.0, 1.0]) ncurve[0].append([-diametre,-diametre, 0.0, 0.353553]) ncurve[0].append([-diametre,0.0, 0.0, 1.0]) ncurve[0].append([-diametre,diametre, 0.0, 0.353553]) ncurve[0].append([0.0,diametre, 0.0, 1.0]) ncurve[0].append([diametre,diametre, 0.0, 0.353553]) ncurve[0].append([diametre,0.0, 0.0, 1.0]) ncurve[0].append([diametre,-diametre, 0.0, 0.353553]) ncurve[0].append([0.0,-diametre, 0.0, 1.0]) ncurve[0].append([-diametre,-diametre, 0.0, 0.353553]) ncurve.setPathLen(2) ncurve.setFlag(14) ncurve.setWidth(1.0) ncurve.update() nobject.link(ncurve) nobject.makeTrack(lefocus,0) scn.link(nobject) nobject.makeParent([obcam], 1,0) obcam.makeTrack(lefocus,0) configureRenderingContext() context=scn.getRenderingContext() context.render() restoreRenderingContext() #cam=getCamera() scn.setCurrentCamera(lacam) scn.unlink(nobject) scn.unlink(obcam) Redraw() print "****END****" ######################################################################## # # GUI FUNCTIONS AND VARIABLES # ######################################################################## Amount = Blender.Draw.Create(0) Quality = Blender.Draw.Create(0) Msg = ' ' def event (evt, val): if evt == Blender.Draw.ESCKEY: Blender.Draw.Exit() return def button_event(evt): global Amount, Quality, Msg global nb, diametre if evt==1: amount = eval(Amount.val) osa = eval(Quality.val) if 0>=amount: Msg = 'Amount must be greater than 0.0 (around 1.5 recommended)' else: obs = Object.GetSelected() if (len(obs)!=1): Msg = 'One and only one camera can be selected ...' else: if obs[0].getType()!='Camera': Msg = 'The selected object must be a camera' else: if (0>osa or osa>3): Msg = 'Quality must belong to [0..3]' else: leFocus = getObject('Focus') if leFocus==None: Msg = 'there must exist an object named Focus in the scene' else: nb=tabosa[osa] diametre = amount Blender.Draw.Exit() Main() Blender.Draw.Redraw(1) def GUI(): global Amount, Quality, Msg Blender.BGL.glClearColor(0,0,1,1) Blender.BGL.glClear(Blender.BGL.GL_COLOR_BUFFER_BIT) Blender.BGL.glColor3f(1,1,1) Blender.BGL.glRasterPos2i(20,280) Blender.Draw.Text ("easy DEPTH OF FIELD v0.3 by Jean-Baptiste PERIN (jb_perin@yahoo.fr)", 'normal') Blender.BGL.glRasterPos2i(20,260) Blender.Draw.Text (" with valuable help from Jean-Michel Soler(http://jmsoler.free.fr/)", 'normal') Blender.BGL.glRasterPos2i(20,240) Blender.Draw.Text ("- Create an empty named 'Focus'", 'normal') Blender.BGL.glRasterPos2i(20,220) Blender.Draw.Text ("- Place it where you want the focus to be", 'normal') Blender.BGL.glRasterPos2i(20,200) Blender.Draw.Text ("- Select the camera you want to use", 'normal') Blender.BGL.glRasterPos2i(20,180) Blender.Draw.Text ("- Press button 'Render'", 'normal') Amount = Blender.Draw.String("Amount: ", 2, 20, 100, 250, 20, '0.1', 100) Quality = Blender.Draw.String("Quality [0..3]: ", 2, 20, 75, 250, 20, '1', 100) Blender.Draw.Toggle("Render", 1, 20, 10, 100, 20, 0, "Render Image") Blender.BGL.glRasterPos2i(20,40) Blender.Draw.Text (Msg, 'normal') Blender.Draw.Register(GUI, event, button_event)