Views :
673
a blog of links related to computer animation and production technology Sponsored by ReelMatters.com
3Dprinting (170) A.I. (634) animation (340) blender (190) colour (225) commercials (45) composition (150) cool (357) design (624) Featured (64) hardware (301) IOS (108) jokes (134) lighting (275) modeling (112) music (183) photogrammetry (171) photography (742) production (1229) python (84) quotes (483) reference (303) software (1317) trailers (290) ves (519) VR (219)
https://www.freecodecamp.org/news/schofields-laws-of-computing/
“Never put data into a program unless you can see exactly how to get it out.” ― Jack Schofield (2003)
“Data doesn’t really exist unless you have at least two copies of it.” ― Jack Schofield (2008)
“The easier it is for you to access your data, the easier it is for someone else to access your data.” ― Jack Schofield (2008)
https://www.freecodecamp.org/news/advanced-computer-vision-with-python
https://www.freecodecamp.org/news/how-to-use-opencv-and-python-for-computer-vision-and-ai
Working for a VFX (Visual Effects) studio provides numerous opportunities to leverage the power of Python and OpenCV for various tasks. OpenCV is a versatile computer vision library that can be applied to many aspects of the VFX pipeline. Here’s a detailed list of opportunities to take advantage of Python and OpenCV in a VFX studio:
Interpolating frames from an EXR sequence using OpenCV can be useful when you have only every second frame of a final render and you want to create smoother motion by generating intermediate frames. However, keep in mind that interpolating frames might not always yield perfect results, especially if there are complex changes between frames. Here’s a basic example of how you might use OpenCV to achieve this:
import cv2 import numpy as np import os # Replace with the path to your EXR frames exr_folder = "path_to_exr_frames" # Replace with the appropriate frame extension and naming convention frame_template = "frame_{:04d}.exr" # Define the range of frame numbers you have start_frame = 1 end_frame = 100 step = 2 # Define the output folder for interpolated frames output_folder = "output_interpolated_frames" os.makedirs(output_folder, exist_ok=True) # Loop through the frame range and interpolate for frame_num in range(start_frame, end_frame + 1, step): frame_path = os.path.join(exr_folder, frame_template.format(frame_num)) next_frame_path = os.path.join(exr_folder, frame_template.format(frame_num + step)) if os.path.exists(frame_path) and os.path.exists(next_frame_path): frame = cv2.imread(frame_path, cv2.IMREAD_ANYDEPTH | cv2.IMREAD_COLOR) next_frame = cv2.imread(next_frame_path, cv2.IMREAD_ANYDEPTH | cv2.IMREAD_COLOR) # Interpolate frames using simple averaging interpolated_frame = (frame + next_frame) / 2 # Save interpolated frame output_path = os.path.join(output_folder, frame_template.format(frame_num)) cv2.imwrite(output_path, interpolated_frame) print(f"Interpolated frame {frame_num}") # alternatively: print("Interpolated frame {}".format(frame_num))
Please note the following points:
Working with the Python Scripting API
http://www.gafferhq.org/documentation/1.0.2.0/WorkingWithThePythonScriptingAPI/index.html
Node Graph editing in Python
https://www.gafferhq.org/documentation/1.0.0.0/WorkingWithThePythonScriptingAPI/TutorialNodeGraphEditingInPython/index.html
Common operations
https://www.gafferhq.org/documentation/1.0.0.0/Reference/ScriptingReference/CommonOperations/index.html
Scripting box nodes
https://blog.gafferhq.org/?p=278
Dev and pipe tips
https://blog.gafferhq.org/?cat=35
import GafferScene import Gaffer # return a list of selections # (nodes HAVE TO BE selected for the following) sel = root.selection() # gaffer standard set list(sel) sel[0].typeName() dir( sel[0] ) sel[0].getName() sel.clear() root.removeChild( sel[0] ) # store the selected nodes in a variable >>> sel = root.selection() >>> myGroup = sel[0] >>> light = sel[1] # set location name myGroup['name'].setValue('groupLocation') light['name'].setValue('photometricLightLocation') # connect a node to a group >>> myGroup['in'][0].setInput( light['out'] ) # return the node/port attached to a group port >>> myGroup['in'][0].childNames('/') photometricLightLocation >>> myGroup['in'][0].getInput().fullName() >>> myGroup['in'][0].source().fullName() gui.scripts.ScriptNode.lighting_in1.PhotometricLightNode.out # return the full name of one of the objects # attached to the out port >>> light['out'].outputs()[0].fullName() gui.scripts.ScriptNode.lighting_in1.GroupNode.in.in0 >>> light GafferArnold.ArnoldLight( "PhotometricLightNode" ) >>> light['out'].childNames('') photometricLightLocation >>> light['out'].outputs()[0].node() GafferScene.Group( "Group" )
Note: Although the original LuxRender is a full spectral renderer, the new LuxCoreRender drops full spectral rendering in favor of simulating spectral dispersion when required.[14][15] However, this leads to some inaccuracies when rendering caustics in some circumstances.[16]
Learn how to do back end web development using the popular Python Django framework. You’ll build data visualization web apps using Pandas dataframes, Matplotlib, and Seaborn. You’ll also work with PDF rendering and even base-64 encoding. (7 hour YouTube course)
Collections
| Explore posts
| Design And Composition
| Featured AI
Popular Searches
unreal | pipeline | virtual production | free | learn | photoshop | 360 | macro | google | nvidia | resolution | open source | hdri | real-time | photography basics | nuke
FEATURED POSTS
Social Links
DISCLAIMER – Links and images on this website may be protected by the respective owners’ copyright. All data submitted by users through this site shall be treated as freely available to share.