def test_merge_deep_pixels(): print("\nTesting merge_deep_pixels...") # Set up two simple 1-pixel images with overlapping samples Add = oiio.DeepData() Add.init(1, test_nchannels, test_chantypes, test_channames) Add.set_samples(0, 1) Add.set_deep_value(0, 0, 0, 0.5) # R Add.set_deep_value(0, 1, 0, 0.0) # G Add.set_deep_value(0, 2, 0, 0.0) # B Add.set_deep_value(0, 3, 0, 0.5) # A Add.set_deep_value(0, 4, 0, 10.0) # Z Add.set_deep_value(0, 5, 0, 12.0) # Zback Bdd = oiio.DeepData() Bdd.init(1, test_nchannels, test_chantypes, test_channames) Bdd.set_samples(0, 1) Bdd.set_deep_value(0, 0, 0, 0.5) # R Bdd.set_deep_value(0, 1, 0, 0.0) # G Bdd.set_deep_value(0, 2, 0, 0.0) # B Bdd.set_deep_value(0, 3, 0, 0.5) # A Bdd.set_deep_value(0, 4, 0, 11.0) # Z Bdd.set_deep_value(0, 5, 0, 13.0) # Zback print_deep_image(Add, "Before merge_deep_pixels,") print_deep_image(Bdd, "And the other image,") Add.merge_deep_pixels(0, Bdd, 0) print_deep_image(Add, "After merge_deep_pixels,")
def make_test_deep_image(): dd = oiio.DeepData() dd.init(test_xres * test_yres, test_nchannels, test_chantypes, test_channames) for p in range(dd.pixels): if p & 1: dd.set_samples(p, p) for p in range(dd.pixels): ns = dd.samples(p) for s in range(ns): # pixels alternate R, G, B. Increasing alpha with each sample # in the pixel, with the last being opaque. Z increases with # each sample (staring at 10.0, + 1.0 for each sample), Zback # is 0.5 past Z. alpha = float(s + 1) / ns r = 1.0 if (p % 3) == 0 else 0.0 g = 1.0 if (p % 3) == 1 else 0.0 b = 1.0 if (p % 3) == 2 else 0.0 dd.set_deep_value(p, 0, s, alpha * r) # R dd.set_deep_value(p, 1, s, alpha * g) # G dd.set_deep_value(p, 2, s, alpha * b) # B dd.set_deep_value(p, 3, s, alpha) # A dd.set_deep_value(p, 4, s, 10.0 + s) # Z dd.set_deep_value(p, 5, s, 10.0 + s + 0.5) # Zback return dd
def test_opaque_z(): print("\nTesting opaque_z...") dd = oiio.DeepData() # 3 test pixels dd.init(3, test_nchannels, test_chantypes, test_channames) # First pixel: has 3 samples, middle one is opaque dd.set_samples(0, 3) for s in range(dd.samples(0)): dd.set_deep_value(0, 0, s, 0.5) # R dd.set_deep_value(0, 1, s, 0.0) # G dd.set_deep_value(0, 2, s, 0.0) # B dd.set_deep_value(0, 3, s, (1.0 if s == 1 else 0.5)) # A dd.set_deep_value(0, 4, s, 10.0 + s) # Z dd.set_deep_value(0, 5, s, 10.5 + s) # Zback # Second pixel: 3 samples, none are opaque dd.set_samples(1, 3) for s in range(dd.samples(0)): dd.set_deep_value(1, 0, s, 0.5) # R dd.set_deep_value(1, 1, s, 0.0) # G dd.set_deep_value(1, 2, s, 0.0) # B dd.set_deep_value(1, 3, s, 0.5) # A dd.set_deep_value(1, 4, s, 10.0 + s) # Z dd.set_deep_value(1, 5, s, 10.5 + s) # Zback # Third pixel is empty print_deep_image(dd, "Values") print("Opaque z: ", end='') for p in range(dd.pixels): print(' %.6g' % dd.opaque_z(p), end='') print()
def test_sample_split(): print("\nTesting split...") # Set up a simple 3-pixel image dd = oiio.DeepData() dd.init(2, test_nchannels, test_chantypes, test_channames) for p in range(dd.pixels): dd.set_samples(p, 2) # first sample - reddish dd.set_deep_value(p, 0, 0, 0.5) # R dd.set_deep_value(p, 1, 0, 0.1) # G dd.set_deep_value(p, 2, 0, 0.1) # B dd.set_deep_value(p, 3, 0, 0.5) # A dd.set_deep_value(p, 4, 0, 10.0) # Z dd.set_deep_value(p, 5, 0, 11.0) # Zback # second sample - greenish dd.set_deep_value(p, 0, 1, 0.1) # R dd.set_deep_value(p, 1, 1, 0.5) # G dd.set_deep_value(p, 2, 1, 0.1) # B dd.set_deep_value(p, 3, 1, 0.5) # A dd.set_deep_value(p, 4, 1, 20.0) # Z dd.set_deep_value(p, 5, 1, 21.0) # Zback # Now do a few splits of the second pixel dd.split(1, 0.5) # close, doesn't split - should have no effect dd.split(1, 100.5) # far, doesn't split - should have no effect dd.split(1, 15.0) # still doesn't split - should have no effect dd.split(1, 20.0) # Right on an edge -- should have no effect dd.split(1, 20.5) # THIS one should split print_deep_image(dd, "After split,")
def make_test_deep_image(): dd = oiio.DeepData() dd.init(test_xres * test_yres, test_nchannels, test_chantypes) for p in range(dd.pixels): if p & 1: dd.set_samples(p, p) for p in range(dd.pixels): ns = dd.samples(p) for s in range(ns): for c in range(dd.channels): dd.set_deep_value(p, c, s, c * 10 + s + p / 10.0) return dd
def test_insert_erase(): print("\nTesting insert and erase...") dd = oiio.DeepData() dd.init(3, test_nchannels, test_chantypes, test_channames) dd.set_samples(1, 1) dd.set_deep_value(1, 4, 0, 10.0) print_deep_image(dd, "After setting one sample:") dd.insert_samples(1, 0, 1) dd.set_deep_value(1, 4, 0, 9.0) dd.insert_samples(1, 2, 1) dd.set_deep_value(1, 4, 2, 11.0) print_deep_image(dd, "After inserting before and after:") dd.erase_samples(1, 1, 1) print_deep_image(dd, "After deleting the middle:")
def test_occlusion_cull(): print("\nTesting occlusion_cull...") dd = oiio.DeepData() dd.init(1, test_nchannels, test_chantypes, test_channames) dd.set_samples(0, 3) for s in range(dd.samples(0)): dd.set_deep_value(0, 0, s, 0.5) # R dd.set_deep_value(0, 1, s, 0.0) # G dd.set_deep_value(0, 2, s, 0.0) # B dd.set_deep_value(0, 3, s, (1.0 if s == 1 else 0.5)) # A dd.set_deep_value(0, 4, s, 10.0 + s) # Z dd.set_deep_value(0, 5, s, 10.5 + s) # Zback print_deep_image(dd, "Before occlusion_cull,") dd.occlusion_cull(0) print_deep_image(dd, "After occlusion_cull,")
def test_sample_sort(): print("\nTesting sort...") # Set up a simple 2-pixel image with 4 samples dd = oiio.DeepData() dd.init(2, test_nchannels, test_chantypes, test_channames) for p in range(dd.pixels): dd.set_samples(p, 4) for s in range(dd.samples(p)): dd.set_deep_value(p, 0, s, 0.1 * s) # R dd.set_deep_value(p, 1, s, 0.0) # G dd.set_deep_value(p, 2, s, 0.0) # B dd.set_deep_value(p, 3, s, 0.5) # A dd.set_deep_value(p, 4, s, 20.0 - s) # Z: decreasing! dd.set_deep_value(p, 5, s, 20.0 - s + 0.5) # Zback print_deep_image(dd, "Before z sort,") dd.sort(1) print_deep_image(dd, "After z sort of pixel 1,")
def test_merge_overlaps(): print("\nTesting merge_overlaps...") # Set up a simple 2-pixel image with 4 samples dd = oiio.DeepData() dd.init(2, test_nchannels, test_chantypes, test_channames) for p in range(dd.pixels): dd.set_samples(p, 4) for s in range(dd.samples(p)): dd.set_deep_value(p, 0, s, 0.1 * s) # R dd.set_deep_value(p, 1, s, 0.0) # G dd.set_deep_value(p, 2, s, 0.0) # B dd.set_deep_value(p, 3, s, 0.5) # A # Make adjacent pairs overlap exactly dd.set_deep_value(p, 4, s, 10.0 + int(s / 2)) # Z dd.set_deep_value(p, 5, s, 10.0 + int(s / 2) + 0.5) # Zback print_deep_image(dd, "Before merge_overlaps,") dd.merge_overlaps(1) print_deep_image(dd, "After merge_overlaps of pixel 1,")