Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2006-07-28 06:08:36 +0400
committerCampbell Barton <ideasman42@gmail.com>2006-07-28 06:08:36 +0400
commitaa90678154bb8dbe00b28df5ba81e126c05e04bb (patch)
tree8f00e336cd9affe8a8106f70e553ca12b2eb2da0 /release
parentf893d950a1524d1069963dde251d48143063ad51 (diff)
renamed texture baker to "Bake Image from UVs"
Added options to use material colors (can be multiplied with vcol) Added wire option for UV Export type functionality. (implys no bleeding) Added Option to render with no oversampling changed alpha blending
Diffstat (limited to 'release')
-rw-r--r--release/scripts/bpymodules/BPyRender.py13
-rw-r--r--release/scripts/uv_archimap.py18
-rwxr-xr-xrelease/scripts/uv_vcol_to_image.py129
3 files changed, 123 insertions, 37 deletions
diff --git a/release/scripts/bpymodules/BPyRender.py b/release/scripts/bpymodules/BPyRender.py
index ad7a9914e2f..ea87bfd73aa 100644
--- a/release/scripts/bpymodules/BPyRender.py
+++ b/release/scripts/bpymodules/BPyRender.py
@@ -1,7 +1,7 @@
from Blender import Scene, sys, Camera, Object, Image
from Blender.Scene import Render
-def imageFromObjectsOrtho(objects, path, width, height, alpha= True):
+def imageFromObjectsOrtho(objects, path, width, height, smooth, alpha= True):
'''
Takes any number of objects and renders them on the z axis, between x:y-0 and x:y-1
Usefull for making images from a mesh without per pixel operations
@@ -39,14 +39,19 @@ def imageFromObjectsOrtho(objects, path, width, height, alpha= True):
render_context.imageSizeX(width)
render_context.imageSizeY(height)
- render_context.enableOversampling(True)
- render_context.setOversamplingLevel(16)
+
+ if smooth:
+ render_context.enableOversampling(True)
+ render_context.setOversamplingLevel(16)
+ else:
+ render_context.enableOversampling(False)
+
render_context.setRenderWinSize(100)
render_context.setImageType(Render.PNG)
render_context.enableExtensions(True)
#render_context.enableSky() # No alpha needed.
if alpha:
- render_context.alphaMode= 2
+ render_context.alphaMode= 1
render_context.enableRGBAColor()
else:
render_context.alphaMode= 0
diff --git a/release/scripts/uv_archimap.py b/release/scripts/uv_archimap.py
index cf11d9de4d0..7d889866682 100644
--- a/release/scripts/uv_archimap.py
+++ b/release/scripts/uv_archimap.py
@@ -1009,19 +1009,23 @@ def main():
mostUniqueIndex = 0 # fake
fIdx = len(tempFaceListProps)
+
while fIdx:
fIdx-=1
angleDifference = -1.0 # 180d difference.
# Get the closest vec angle we are to.
for p in projectVecs:
- angleDifference = max(angleDifference, DotVecs(p, tempFaceListProps[fIdx][2]))
+ temp_angle_diff= DotVecs(p, tempFaceListProps[fIdx][2])
+
+ if angleDifference < temp_angle_diff:
+ angleDifference= temp_angle_diff
if angleDifference < mostUniqueAngle:
# We have a new most different angle
mostUniqueIndex = fIdx
mostUniqueAngle = angleDifference
-
+
if mostUniqueAngle < USER_PROJECTION_LIMIT_CONVERTED:
#print 'adding', mostUniqueAngle, USER_PROJECTION_LIMIT, len(newProjectFacePropList)
@@ -1133,6 +1137,7 @@ def main():
# We want to pack all in 1 go, so pack now
if USER_SHARE_SPACE:
+ Window.DrawProgressBar(0.9, "Box Packing for all objects...")
packIslands(collected_islandList, collected_islandListArea)
Window.DrawProgressBar(1.0, "")
@@ -1140,11 +1145,12 @@ def main():
Window.RedrawAll()
if __name__ == '__main__':
- try:
- main()
-
+ #try:
+ main()
+ '''
except KeyboardInterrupt:
print '\nUser Canceled.'
Draw.PupMenu('user canceled execution, unwrap aborted.')
Window.DrawProgressBar(1.0, "")
- Window.WaitCursor(0) \ No newline at end of file
+ Window.WaitCursor(0)
+ ''' \ No newline at end of file
diff --git a/release/scripts/uv_vcol_to_image.py b/release/scripts/uv_vcol_to_image.py
index 07d77e929b2..52b41865848 100755
--- a/release/scripts/uv_vcol_to_image.py
+++ b/release/scripts/uv_vcol_to_image.py
@@ -1,16 +1,16 @@
#!BPY
"""
-Name: 'Color/Normals to Image'
+Name: 'Bake Image from UVs (vcol/img)'
Blender: 241
Group: 'UV'
-Tooltip: 'Save the active meshes vertex colors or normals to an image.'
+Tooltip: 'Save the active or selected meshes meshes images, vertex colors or normals to an image.'
"""
__author__= ['Campbell Barton']
__url__= ('blender', 'elysiun', 'http://www.gametutorials.com')
__version__= '0.95'
__bpydoc__= '''\
-Vert color to Image
+Bake from UVs to image
This script makes an image from a meshes vertex colors, using the UV coordinates
to draw the faces into the image.
@@ -23,20 +23,41 @@ to automaticaly do this.
import Blender
import BPyRender
-# reload(BPyRender)
import BPyMesh
Vector= Blender.Mathutils.Vector
Create= Blender.Draw.Create
-def rnd_mat():
- render_mat= Blender.Material.New()
- render_mat.mode |= Blender.Material.Modes.VCOL_PAINT
- render_mat.mode |= Blender.Material.Modes.SHADELESS
- render_mat.mode |= Blender.Material.Modes.TEXFACE
- return render_mat
-
-def vcol2image(me_s, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_BLEED, PREF_USE_IMAGE, PREF_USE_NORMAL):
+def vcol2image(me_s,\
+ PREF_IMAGE_PATH,\
+ PREF_IMAGE_SIZE,\
+ PREF_IMAGE_BLEED,\
+ PREF_IMAGE_SMOOTH,\
+ PREF_IMAGE_WIRE,\
+ PREF_USE_IMAGE,\
+ PREF_USE_VCOL,\
+ PREF_USE_MATCOL,\
+ PREF_USE_NORMAL):
+
+
+ def rnd_mat():
+ render_mat= Blender.Material.New()
+ mode= render_mat.mode
+
+ # Dont use lights ever
+ mode |= Blender.Material.Modes.SHADELESS
+
+ if PREF_IMAGE_WIRE:
+ mode |= Blender.Material.Modes.WIRE
+ if PREF_USE_VCOL or PREF_USE_MATCOL: # both vcol and material color use vertex cols to avoid the 16 max limit in materials
+ mode |= Blender.Material.Modes.VCOL_PAINT
+ if PREF_USE_IMAGE:
+ mode |= Blender.Material.Modes.TEXFACE
+
+ # Copy back the mode
+ render_mat.mode |= mode
+ return render_mat
+
BLEED_PIXEL= 1.0/PREF_IMAGE_SIZE
render_me= Blender.Mesh.New()
@@ -61,6 +82,16 @@ def vcol2image(me_s, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_BLEED, PREF_US
face_offset= len(render_me.faces)
render_me.faces.extend(tmp_faces)
+ if PREF_USE_MATCOL:
+ materials= []
+ for mat in me.materials:
+ if mat==None:
+ materials.append((1.0, 1.0, 1.0)) # white
+ else:
+ materials.append(mat.rgbCol)
+
+ if not materials: # Well need a dummy material so the index works if we have no materials.
+ materials= [(1.0, 1.0, 1.0)]
for i, f in enumerate(me.faces):
frnd= render_me.faces[face_offset+i]
@@ -70,23 +101,44 @@ def vcol2image(me_s, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_BLEED, PREF_US
frnd.image= ima
frnd.uv= f.uv
+
+ # Use normals excludes other color operations
if PREF_USE_NORMAL:
for ii, v in enumerate(f.v):
- no= v.no
+ nx, ny, nz= v.no
c= frnd.col[ii]
- c.r= int((no.x+1)*128)-1
- c.g= int((no.y+1)*128)-1
- c.b= int((no.z+1)*128)-1
+ # Modified to adjust from the current color
+ c.r= int((nx+1)*128)-1
+ c.g= int((ny+1)*128)-1
+ c.b= int((nz+1)*128)-1
else:
- frnd.col= f.col
-
+ # Initialize color
+ if PREF_USE_VCOL:
+ frnd.col= f.col
+
+ # Mix with vert color
+ if PREF_USE_MATCOL:
+ # Multiply with existing color
+ r,g,b= materials[f.mat]
+ for col in frnd.col:
+ col.r= int(col.r*r)
+ col.g= int(col.g*g)
+ col.b= int(col.b*b)
+
+ elif PREF_USE_MATCOL: # Mat color only
+ # Multiply with existing color
+ r,g,b= materials[f.mat]
+ for col in frnd.col:
+ col.r= int(255*r)
+ col.g= int(255*g)
+ col.b= int(255*b)
render_ob= Blender.Object.New('Mesh')
render_ob.link(render_me)
obs= [render_ob]
# EVIL BLEEDING CODE!! - Just do copys of the mesh and place behind. Crufty but better then many other methods I have seen.
- if PREF_IMAGE_BLEED:
+ if PREF_IMAGE_BLEED and not PREF_IMAGE_WIRE:
z_offset= 0.0
for i in xrange(PREF_IMAGE_BLEED):
for diag1, diag2 in ((-1,-1),(-1,1),(1,-1),(1,1), (1,0), (0,1), (-1,0), (0, -1)): # This line extends the object in 8 different directions, top avoid bleeding.
@@ -103,8 +155,10 @@ def vcol2image(me_s, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_BLEED, PREF_US
render_me.materials= [rnd_mat()]
+ im= BPyRender.imageFromObjectsOrtho(obs, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_SIZE, PREF_IMAGE_SMOOTH)
- im= BPyRender.imageFromObjectsOrtho(obs, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PREF_IMAGE_SIZE)
+ # Clear from memory as best as we can
+ render_me.verts= None
@@ -126,7 +180,12 @@ def main():
PREF_IMAGE_PATH = Create('//%s_grp' % newpath)
PREF_IMAGE_SIZE = Create(1024)
PREF_IMAGE_BLEED = Create(6)
- PREF_USE_IMAGE = Create(0)
+ PREF_IMAGE_SMOOTH= Create(1)
+ PREF_IMAGE_WIRE= Create(0)
+
+ PREF_USE_IMAGE = Create(1)
+ PREF_USE_VCOL = Create(1)
+ PREF_USE_MATCOL = Create(0)
PREF_USE_NORMAL = Create(0)
if len(obsel)>1: PREF_USE_MULIOB = Create(0)
@@ -135,26 +194,42 @@ def main():
('', PREF_IMAGE_PATH, 3, 100, 'Path to new Image. "//" for curent blend dir.'),\
'Image Options',
('Pixel Size:', PREF_IMAGE_SIZE, 64, 4096, 'Image Width and Height.'),\
- ('Pixel Bleed:', PREF_IMAGE_BLEED, 0, 64, 'Image Bleed pixels.'),\
- ('Image Include', PREF_USE_IMAGE, 'Render the faces image with vertex colors.'),\
- '',\
+ ('Pixel Bleed:', PREF_IMAGE_BLEED, 0, 64, 'Extend pixels from boundry edges to avoid mipmapping errors on rendering.'),\
+ ('Smooth lines', PREF_IMAGE_SMOOTH, 'Render smooth lines.'),\
+ ('Wire Only', PREF_IMAGE_WIRE, 'Renders a wireframe from the mesh, implys bleed is zero.'),\
+
+ 'Color Source',\
+ ('Image Texface', PREF_USE_IMAGE, 'Render the faces image in the output.'),\
+ ('Vertex Colors', PREF_USE_VCOL, 'Use Normals instead of VCols.'),\
+ ('Material Color', PREF_USE_MATCOL, 'Use the materials color.'),\
('Normal Map', PREF_USE_NORMAL, 'Use Normals instead of VCols.'),\
]
if len(obsel)>1:
pup_block.append('')
- pup_block.append(('All Selected Meshes', PREF_USE_MULIOB, 'Use faces from all selcted meshes, assumes their faces dont overlap.'))
+ pup_block.append(('All Selected Meshes', PREF_USE_MULIOB, 'Use faces from all selcted meshes, Make sure UV coords dont overlap between objects.'))
if not Blender.Draw.PupBlock('VCol to Image', pup_block):
return
if not PREF_USE_MULIOB.val:
- vcol2image([act_ob.getData(mesh=1)], PREF_IMAGE_PATH.val, PREF_IMAGE_SIZE.val, PREF_IMAGE_BLEED.val, PREF_USE_IMAGE.val, PREF_USE_NORMAL.val)
+ me_s= [act_ob.getData(mesh=1)]
else:
# Make double sure datas unique
me_s = dict([(ob.getData(name_only=1), ob.getData(mesh=1)) for ob in obsel]).values()
- vcol2image(me_s, PREF_IMAGE_PATH.val, PREF_IMAGE_SIZE.val, PREF_IMAGE_BLEED.val, PREF_USE_IMAGE.val, PREF_USE_NORMAL.val)
+
+
+ vcol2image(me_s,\
+ PREF_IMAGE_PATH.val,\
+ PREF_IMAGE_SIZE.val,\
+ PREF_IMAGE_BLEED.val,\
+ PREF_IMAGE_SMOOTH.val,\
+ PREF_IMAGE_WIRE.val,\
+ PREF_USE_IMAGE.val,\
+ PREF_USE_VCOL.val,\
+ PREF_USE_MATCOL.val,\
+ PREF_USE_NORMAL.val)
Blender.Window.RedrawAll()