diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-06-26 06:22:53 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-06-26 06:22:53 +0400 |
commit | 23f48b8bb1154f6d2571d6c1c328e64d1e58a8b0 (patch) | |
tree | e548e7baa6376752f86b091dcd943e15192e87f0 /release | |
parent | 8cda8abefe31292c3647d7e22f1cefed84b5127a (diff) |
using the edge length to weight the vertex blue wasnt wokring very well (removed)
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/vertexpaint_selfshadow_ao.py | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/release/scripts/vertexpaint_selfshadow_ao.py b/release/scripts/vertexpaint_selfshadow_ao.py index 54c67fd27e2..3554e016f79 100644 --- a/release/scripts/vertexpaint_selfshadow_ao.py +++ b/release/scripts/vertexpaint_selfshadow_ao.py @@ -43,7 +43,7 @@ import bpy import BPyMesh -def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY): +def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_STRENGTH, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY): Window.WaitCursor(1) Ang= Mathutils.AngleBetweenVecs @@ -83,32 +83,34 @@ def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PRE if vert_tone_count[i]: vert_tone[i] = vert_tone[i] / vert_tone_count[i] + + # Below we use edges to blur along so the edges need counting, not the faces + vert_tone_count= [0] * len(me.verts) + for ed in me.edges: + vert_tone_count[ed.v1.index] += 1 + vert_tone_count[ed.v2.index] += 1 + - # BLUR TONE - edge_lengths= [ ed.length for ed in me.edges] + # Blur tone + blur = PREF_BLUR_STRENGTH + blur_inv = 1.0 - PREF_BLUR_STRENGTH for i in xrange(PREF_BLUR_ITERATIONS): + + # backup the original tones orig_vert_tone= list(vert_tone) - for ii, ed in enumerate(me.edges): + + for ed in me.edges: + i1= ed.v1.index i2= ed.v2.index - l= edge_lengths[ii] + + val1= (orig_vert_tone[i2]*blur) + (orig_vert_tone[i1]*blur_inv) + val2= (orig_vert_tone[i1]*blur) + (orig_vert_tone[i2]*blur_inv) - f=1.0 - if l > PREF_MIN_EDLEN and l < PREF_BLUR_RADIUS: - f= l/PREF_BLUR_RADIUS - - len_vert_tone_list_i1 = vert_tone_count[i1] - len_vert_tone_list_i2 = vert_tone_count[i2] - - if not len_vert_tone_list_i1: len_vert_tone_list_i1=1 - if not len_vert_tone_list_i2: len_vert_tone_list_i2=1 - - val1= (orig_vert_tone[i2]/len_vert_tone_list_i1)/ f - val2= (orig_vert_tone[i1]/len_vert_tone_list_i2)/ f - - vert_tone[i1]+= val1 - vert_tone[i2]+= val2 + # Apply the ton divided by the number of faces connected + vert_tone[i1]+= val1 / max(vert_tone_count[i1], 1) + vert_tone[i2]+= val2 / max(vert_tone_count[i2], 1) min_tone= min(vert_tone) @@ -144,21 +146,19 @@ def main(): me= ob.getData(mesh=1) - PREF_BLUR_ITERATIONS= Draw.Create(1) - PREF_BLUR_RADIUS= Draw.Create(0.05) - PREF_MIN_EDLEN= Draw.Create(0.01) + PREF_BLUR_ITERATIONS= Draw.Create(1) + PREF_BLUR_STRENGTH= Draw.Create(0.5) PREF_CLAMP_CONCAVE= Draw.Create(90) PREF_CLAMP_CONVEX= Draw.Create(20) PREF_SHADOW_ONLY= Draw.Create(0) PREF_SEL_ONLY= Draw.Create(0) pup_block= [\ 'Post AO Blur',\ - (' Iterations:', PREF_BLUR_ITERATIONS, 0, 40, 'Number times to blur the colors. (higher blurs more)'),\ - (' Blur Radius:', PREF_BLUR_RADIUS, 0.01, 40.0, 'How much distance effects blur transfur (higher blurs more).'),\ - (' Min EdgeLen:', PREF_MIN_EDLEN, 0.00001, 1.0, 'Minimim edge length to blur (very low values can cause errors).'),\ + ('Strength:', PREF_BLUR_STRENGTH, 0, 1, 'Blur strength per iteration'),\ + ('Iterations:', PREF_BLUR_ITERATIONS, 0, 40, 'Number times to blur the colors. (higher blurs more)'),\ 'Angle Clipping',\ - (' Highlight Angle:', PREF_CLAMP_CONVEX, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ - (' Shadow Angle:', PREF_CLAMP_CONCAVE, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ + ('Highlight Angle:', PREF_CLAMP_CONVEX, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ + ('Shadow Angle:', PREF_CLAMP_CONCAVE, 0, 180, 'Less then 180 limits the angle used in the tonal range.'),\ ('Shadow Only', PREF_SHADOW_ONLY, 'Dont calculate highlights for convex areas.'),\ ('Sel Faces Only', PREF_SEL_ONLY, 'Only apply to UV/Face selected faces (mix vpain/uvface select).'),\ ] @@ -166,19 +166,16 @@ def main(): if not Draw.PupBlock('SelfShadow...', pup_block): return - PREF_BLUR_ITERATIONS= PREF_BLUR_ITERATIONS.val - PREF_BLUR_RADIUS= PREF_BLUR_RADIUS.val - PREF_MIN_EDLEN= PREF_MIN_EDLEN.val - PREF_CLAMP_CONCAVE= PREF_CLAMP_CONCAVE.val - PREF_CLAMP_CONVEX= PREF_CLAMP_CONVEX.val - PREF_SHADOW_ONLY= PREF_SHADOW_ONLY.val - PREF_SEL_ONLY= PREF_SEL_ONLY.val - if not me.vertexColors: me.vertexColors= 1 t= sys.time() - vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_RADIUS, PREF_MIN_EDLEN, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY) + vertexFakeAO(me, PREF_BLUR_ITERATIONS.val, \ + PREF_BLUR_STRENGTH.val, \ + PREF_CLAMP_CONCAVE.val, \ + PREF_CLAMP_CONVEX.val, \ + PREF_SHADOW_ONLY.val, \ + PREF_SEL_ONLY.val) if ob.modifiers: me.update() |