From b3742ea41e81c12d844c71ee41e9c01768de16b4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 9 May 2006 14:36:31 +0000 Subject: [PATCH] Added some shading options Concave/Convex Angle clipping- usefull for tinkering with highlights/shadow results. Blur radius was inverted. ... Needs documenting. --- release/scripts/vertexpaint_selfshadow_ao.py | 53 ++++++++++++++------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/release/scripts/vertexpaint_selfshadow_ao.py b/release/scripts/vertexpaint_selfshadow_ao.py index 2ba1c13794e..576e8fced7f 100644 --- a/release/scripts/vertexpaint_selfshadow_ao.py +++ b/release/scripts/vertexpaint_selfshadow_ao.py @@ -43,7 +43,7 @@ import BPyMesh reload(BPyMesh) -def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_SEL_ONLY): +def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY): Window.WaitCursor(1) V=Mathutils.Vector M=Mathutils.Matrix @@ -72,18 +72,26 @@ def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_SEL_ONLY): if abs(l1-l2) < 0.0000001: vert_tone_list[v.index].append(0) - continue # look at the next vert + else: + try: a= Ang(vno, fno) + except: a=0 + + # Convex + if l1l2: a=-a - - vert_tone_list[v.index].append(a) - # average vert_tone_list into vert_tone + # average vert_tone_list into vert_tonef for i, tones in enumerate(vert_tone_list): if tones: tone= 0.0 @@ -96,7 +104,7 @@ def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_SEL_ONLY): # BLUR TONE - edge_lengths= [ ((ed.v1.co-ed.v2.co).length + 1) * PREF_BLUR_SCALE for ed in me.edges] + edge_lengths= [ ((ed.v1.co-ed.v2.co).length + 1) / PREF_BLUR_SCALE for ed in me.edges] for i in xrange(PREF_BLUR_ITERATIONS): orig_vert_tone= list(vert_tone) @@ -105,14 +113,18 @@ def vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_SEL_ONLY): i2= ed.v2.index l= edge_lengths[ii] - vert_tone[i1]+= (orig_vert_tone[i2]/len(vert_tone_list[i1]))/ l - vert_tone[i2]+= (orig_vert_tone[i1]/len(vert_tone_list[i2]))/ l + len_vert_tone_list_i1 = len(vert_tone_list[i1]) + len_vert_tone_list_i2 = len(vert_tone_list[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 + + vert_tone[i1]+= (orig_vert_tone[i2]/len_vert_tone_list_i1)/ l + vert_tone[i2]+= (orig_vert_tone[i1]/len_vert_tone_list_i2)/ l min_tone= min(vert_tone) max_tone= max(vert_tone) - - #print 'min', min_tone, 'max', max_tone tone_range= max_tone-min_tone if max_tone==min_tone: @@ -147,11 +159,17 @@ def main(): PREF_BLUR_ITERATIONS= Draw.Create(0) PREF_BLUR_SCALE= Draw.Create(1.0) + PREF_SHADOW_ONLY= Draw.Create(0) + PREF_CLAMP_CONCAVE= Draw.Create(180) + PREF_CLAMP_CONVEX= Draw.Create(180) PREF_SEL_ONLY= Draw.Create(1) pup_block= [\ 'Post AO Blur',\ (' Iterations:', PREF_BLUR_ITERATIONS, 1, 40, 'Number times to blur the colors. (higher blurs more)'),\ (' Blur Radius:', PREF_BLUR_SCALE, 0.1, 10.0, 'How much distance effects blur transfur (higher blurs more).'),\ + 'Angle Clipping',\ + ('Highlight Angle:', PREF_CLAMP_CONVEX, 0, 180, ''),\ + ('Shadow Angle:', PREF_CLAMP_CONCAVE, 0, 180, ''),\ ('Sel Faces Only', PREF_SEL_ONLY, 'Only apply to UV/Face selected faces (mix vpain/uvface select).'),\ ] @@ -160,9 +178,12 @@ def main(): PREF_BLUR_ITERATIONS= PREF_BLUR_ITERATIONS.val PREF_BLUR_SCALE= PREF_BLUR_SCALE.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 - vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_SEL_ONLY) + vertexFakeAO(me, PREF_BLUR_ITERATIONS, PREF_BLUR_SCALE, PREF_CLAMP_CONCAVE, PREF_CLAMP_CONVEX, PREF_SHADOW_ONLY, PREF_SEL_ONLY) if __name__=='__main__': main()