render engine example thanks to dougal2.
This commit is contained in:
70
doc/python_api/examples/bpy.types.RenderEngine.py
Normal file
70
doc/python_api/examples/bpy.types.RenderEngine.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
"""
|
||||||
|
Simple Render Engine
|
||||||
|
++++++++++++++++++++
|
||||||
|
"""
|
||||||
|
|
||||||
|
import bpy
|
||||||
|
|
||||||
|
|
||||||
|
class CustomRenderEngine(bpy.types.RenderEngine):
|
||||||
|
# These three members are used by blender to set up the
|
||||||
|
# RenderEngine; define its internal name, visible name and capabilities.
|
||||||
|
bl_idname = 'custom_renderer'
|
||||||
|
bl_label = 'Flat Color Renderer'
|
||||||
|
bl_use_preview = True
|
||||||
|
|
||||||
|
# This is the only method called by blender, in this example
|
||||||
|
# we use it to detect preview rendering and call the implementation
|
||||||
|
# in another method.
|
||||||
|
def render(self, scene):
|
||||||
|
scale = scene.render.resolution_percentage / 100.0
|
||||||
|
self.size_x = int(scene.render.resolution_x * scale)
|
||||||
|
self.size_y = int(scene.render.resolution_y * scale)
|
||||||
|
|
||||||
|
if scene.name == 'preview':
|
||||||
|
self.render_preview(scene)
|
||||||
|
else:
|
||||||
|
self.render_scene(scene)
|
||||||
|
|
||||||
|
# In this example, we fill the preview renders with a flat green color.
|
||||||
|
def render_preview(self, scene):
|
||||||
|
pixel_count = self.size_x * self.size_y
|
||||||
|
|
||||||
|
# The framebuffer is defined as a list of pixels, each pixel
|
||||||
|
# itself being a list of R,G,B,A values
|
||||||
|
green_rect = [[0.0, 1.0, 0.0, 1.0]] * pixel_count
|
||||||
|
|
||||||
|
# Here we write the pixel values to the RenderResult
|
||||||
|
result = self.begin_result(0, 0, self.size_x, self.size_y)
|
||||||
|
layer = result.layers[0]
|
||||||
|
layer.rect = green_rect
|
||||||
|
self.end_result(result)
|
||||||
|
|
||||||
|
# In this example, we fill the full renders with a flat blue color.
|
||||||
|
def render_scene(self, scene):
|
||||||
|
pixel_count = self.size_x * self.size_y
|
||||||
|
|
||||||
|
# The framebuffer is defined as a list of pixels, each pixel
|
||||||
|
# itself being a list of R,G,B,A values
|
||||||
|
blue_rect = [[0.0, 0.0, 1.0, 1.0]] * pixel_count
|
||||||
|
|
||||||
|
# Here we write the pixel values to the RenderResult
|
||||||
|
result = self.begin_result(0, 0, self.size_x, self.size_y)
|
||||||
|
layer = result.layers[0]
|
||||||
|
layer.rect = blue_rect
|
||||||
|
self.end_result(result)
|
||||||
|
|
||||||
|
# Register the RenderEngine
|
||||||
|
bpy.utils.register_class(CustomRenderEngine)
|
||||||
|
|
||||||
|
# RenderEngines also need to tell UI Panels that they are compatible
|
||||||
|
# Otherwise most of the UI will be empty when the engine is selected.
|
||||||
|
# In this example, we need to see the main render image button and
|
||||||
|
# the material preview panel.
|
||||||
|
import properties_render
|
||||||
|
properties_render.RENDER_PT_render.COMPAT_ENGINES.add('custom_renderer')
|
||||||
|
del properties_render
|
||||||
|
|
||||||
|
import properties_material
|
||||||
|
properties_material.MATERIAL_PT_preview.COMPAT_ENGINES.add('custom_renderer')
|
||||||
|
del properties_material
|
||||||
Reference in New Issue
Block a user