Knowledge

Hidden-surface determination

Source 📝

66: 102: 25: 230: 498:. The responsibility of a rendering engine is to allow for large world spaces, and as the world’s size approaches infinity, the engine should not slow down but remain at a constant speed. Optimizing this process relies on being able to ensure the deployment of as few resources as possible towards the rendering of surfaces that will not end up being displayed to the user. 590:). Polygons are displayed from the nearest to the furthest. New polygons are clipped against already displayed polygons' edges, creating new polygons to display then storing the additional edges. It's much harder to implement than S/C/Z-buffers, but it scales much better with increases in resolution. 575:
era. Instead of storing the Z value per pixel, they store a list of already displayed segments per line of the screen. New polygons are then cut against already displayed segments that would hide them. An S-buffer can display unsorted polygons, while a C-buffer requires polygons to be displayed from
616:
Divides a scene along planes corresponding to polygon boundaries. The subdivision is constructed in such a way as to provide an unambiguous depth ordering from any point in the scene when the BSP tree is traversed. The disadvantage here is that the BSP tree is created with an expensive pre-process.
551:
graphics hardware. This is the current standard. The cost of using Z-buffering is that it uses up to 4 bytes per pixel and that the rasterization algorithm needs to check each rasterized sample against the Z-buffer. The Z-buffer can also suffer from artifacts due to precision errors (also known as
550:
is used) is checked against an existing depth value. If the current pixel is behind the pixel in the Z-buffer, the pixel is rejected, otherwise, it is shaded and its depth value replaces the one in the Z-buffer. Z-buffering supports dynamic scenes easily and is currently implemented efficiently in
694:
Incidentally, this also makes the objects completely transparent when the viewpoint camera is located inside them, because then all the surfaces of the object are facing away from the camera and are culled by the renderer. To prevent this the object must be set as double-sided (i.e. no back-face
690:
With 3D objects, some of the object's surface is facing the camera, and the rest is facing away from the camera, i.e. is on the backside of the object, hindered by the front side. If the object is completely opaque, those surfaces never need to be drawn. They are determined by the vertex winding
770:
is a ray-tracing approach that divides the visible volumes into beams. Various screen-space subdivision approaches reducing the number of primitives considered per region, e.g. tiling, or screen-space BSP clipping. Tiling may be used as a preprocess to other techniques. Z-buffer hardware may
625:
Attempts to model the path of light rays to a viewpoint by tracing rays from the viewpoint into the scene. Although not a hidden-surface removal algorithm as such, it implicitly solves the hidden-surface removal problem by finding the nearest surface along each view-ray. Effectively this is
493:
Hidden-surface determination is a process by which surfaces that should not be visible to the user (for example, because they lie behind opaque objects such as walls) are prevented from being rendered. Despite advances in hardware capability, there is still a need for advanced
635:
Divides the screen into smaller areas and sorts triangles within these. If there is ambiguity (i.e., polygons overlap in-depth extent within these areas), then further subdivision occurs. At the limit, the subdivision may occur down to the pixel
606:
turned on. The cost here is the sorting step and the fact that visual artifacts can occur. This algorithm is broken by design for general scenes, as it cannot handle polygons in various common configurations, such as surfaces that intersect each
617:
This means that it is less suitable for scenes consisting of dynamic geometry. The advantage is that the data is pre-sorted and error-free, ready for the previously mentioned algorithms. Note that the BSP is not a solution to HSR, only an aid.
672:. Naturally, objects outside this volume will not be visible in the final image, so they are discarded. Often, objects lie on the boundary of the viewing frustum. These objects are cut into pieces along this boundary in a process called 740:) rendering divides a scene into regions and pre-computes visibility for them. These visibility sets are then indexed at run-time to obtain high-quality visibility sets (accounting for complex occluder interactions) quickly. 485:. Hidden-surface determination is necessary to render a scene correctly, so that one may not view features hidden behind the model itself, allowing only the naturally viewable portion of the graphic to be visible. 797:, then each of its children needs to be evaluated. This traversal is effectively a tree walk, where invisibility/occlusion or reaching a leaf node determines whether to stop or whether to recurse respectively. 691:
order: if the triangle drawn has its vertices in clockwise order on the projection plane when facing the camera, they switch into counter-clockwise order when the surface turns away from the camera.
656:
The advantage of culling early on in the pipeline is that entire objects that are invisible do not have to be fetched, transformed, rasterized, or shaded. Types of culling algorithms include:
725:
Objects that are entirely behind other opaque objects may be culled. This is a very popular mechanism to speed up the rendering of large scenes that have a moderate to high
576:
the nearest to the furthest. Because the C-buffer technique does not require a pixel to be drawn more than once, the process is slightly faster. This was commonly used with
505:
and usually vary in the order in which the sort is performed and how the problem is subdivided. Sorting large quantities of graphics primitives is usually done by
793:, then all of its child nodes are also invisible, and no further processing is necessary (they can all be rejected by the renderer). If a node is considered 774: 726: 750:
Hansong Zhang's dissertation "Effective Occlusion Culling for the Interactive Display of Arbitrary Models" describes an occlusion culling approach.
473:, which was one of the first major problems in the field of 3D computer graphics. The process of hidden-surface determination is sometimes called 847: 412: 771:
typically include a coarse "hi-Z", against which primitives can be rejected early without rasterization, this is a form of occlusion culling.
119: 38: 703:
Often, objects are so far away that they do not contribute significantly to the final image. These objects are thrown away if their screen
166: 879: 649:, which usually happens before VSD in a rendering pipeline. Primitives or batches of primitives can be rejected in their entirety, which 602:
and draws them back to front. This produces few artifacts when applied to scenes with polygons of similar size forming smooth meshes and
138: 746:
divides a scene into cells/sectors (rooms) and portals (doors), and computes which sectors are visible by clipping them against portals.
145: 789:). This allows visibility determination to be performed hierarchically: effectively, if a node in the tree is considered to be 152: 1310: 1268: 1241: 1284: 888: 842: 462: 134: 1008: 405: 203: 185: 52: 44: 872: 1131: 932: 123: 1256: 1246: 1136: 955: 398: 1251: 1116: 806: 759: 673: 526: 506: 159: 1044: 865: 331: 610: 577: 501:
There are many techniques for hidden-surface determination. They are fundamentally an exercise in
465:
and parts of surfaces can be seen from a particular viewing angle. A hidden-surface determination
733: 300: 112: 1263: 1213: 1178: 1156: 1151: 676:, and the pieces that lie outside the frustum are discarded as there is no place to draw them. 620: 593: 315: 1305: 1106: 1085: 1029: 280: 989: 975: 919: 522: 426: 219: 8: 1121: 1049: 937: 586:
Used in Quake 1, this was storing a list of the edges of already displayed polygons (see
495: 482: 381: 305: 79:
Please help update this article to reflect recent events or newly available information.
1183: 1171: 1018: 1013: 965: 587: 518: 470: 349: 344: 1233: 1126: 1111: 927: 763: 685: 630: 603: 1218: 1208: 1090: 1078: 743: 720: 386: 376: 361: 1039: 904: 896: 851: 665: 366: 310: 1188: 708: 669: 371: 295: 285: 1299: 1193: 1067: 997: 704: 530: 1198: 1161: 1146: 1141: 1061: 1002: 767: 254: 1166: 1034: 970: 826: 537: 259: 249: 244: 777:(BVHs) are often used to subdivide the scene's space (examples are the 552: 356: 290: 546:
in the case of anti-aliasing, but without loss of generality the term
466: 339: 857: 101: 1024: 778: 599: 565: 275: 1073: 786: 572: 502: 229: 1203: 960: 782: 1223: 909: 640: 626:
equivalent to sorting all the geometry on a per-pixel basis.
947: 729:. There are several types of occlusion culling approaches: 668:
is a geometric representation of the volume visible to the
533:
steps are handled differently by the following algorithms:
580:(BSP) trees, which would provide sorting for the polygons. 542:
During rasterization, the depth/Z value of each pixel (or
645:
A related area to visible-surface determination (VSD) is
571:
Faster than Z-buffers and commonly used in games in the
827:"Occlusion Culling with Hierarchical Occlusion Maps" 848:
A Characterization of Ten Hidden-Surface Algorithms
695:culling is done) or have separate inside surfaces. 126:. Unsourced material may be challenged and removed. 481:. When referring to line rendering it is known as 1297: 477:, and such an algorithm is sometimes called a 873: 406: 653:reduces the load on a well-designed system. 53:Learn how and when to remove these messages 880: 866: 659: 413: 399: 228: 758:A popular theme in the VSD literature is 641:Culling and visible-surface determination 204:Learn how and when to remove this message 186:Learn how and when to remove this message 698: 1298: 461:)) is the process of identifying what 887: 861: 753: 1285:List of computer graphics algorithms 714: 679: 124:adding citations to reliable sources 95: 59: 18: 946: 13: 16:Visibility in 3D computer graphics 14: 1322: 34:This article has multiple issues. 100: 64: 23: 766:pioneered dividing the screen. 111:needs additional citations for 42:or discuss these issues on the 819: 135:"Hidden-surface determination" 1: 1242:3D computer graphics software 512: 488: 455:visible-surface determination 1311:Computer graphics algorithms 1057:Hidden-surface determination 843:Hidden Surface Determination 721:Z-buffering § Z-culling 431:hidden-surface determination 7: 800: 775:Bounding volume hierarchies 435:shown-surface determination 332:Computer-generated imagery 10: 1327: 812: 718: 683: 1277: 1232: 1099: 988: 918: 895: 611:Binary space partitioning 578:binary space partitioning 73:This article needs to be 598:Sorts polygons by their 1269:Vector graphics editors 1264:Raster graphics editors 734:Potentially visible set 660:Viewing-frustum culling 583:Sorted active edge list 1152:Checkerboard rendering 564:) and surface buffer ( 439:hidden-surface removal 316:Virtual cinematography 220:Three-dimensional (3D) 1107:Affine transformation 1086:Surface triangulation 1030:Anisotropic filtering 469:is a solution to the 281:Computer-aided design 699:Contribution culling 496:rendering algorithms 427:3D computer graphics 120:improve this article 1122:Collision detection 1050:Global illumination 594:Painter's algorithm 483:hidden-line removal 382:Global illumination 306:Virtual engineering 1172:Scanline rendering 966:Parallax scrolling 956:Isometric graphics 760:divide and conquer 754:Divide and conquer 707:is too small. See 588:scanline rendering 558:Coverage buffers ( 519:rendering pipeline 507:divide and conquer 471:visibility problem 1293: 1292: 1234:Graphics software 1127:Planar projection 1112:Back-face culling 984: 983: 928:Alpha compositing 889:Computer graphics 764:Warnock algorithm 715:Occlusion culling 686:Back-face culling 680:Back-face culling 631:Warnock algorithm 604:back-face culling 447:occlusion culling 423: 422: 222:computer graphics 214: 213: 206: 196: 195: 188: 170: 94: 93: 57: 1318: 1219:Volume rendering 1091:Wire-frame model 944: 943: 882: 875: 868: 859: 858: 835: 834: 823: 744:Portal rendering 727:depth complexity 563: 562: 517:Considering the 415: 408: 401: 387:Volume rendering 377:Crowd simulation 362:Wire-frame model 335: 232: 216: 215: 209: 202: 191: 184: 180: 177: 171: 169: 128: 104: 96: 89: 86: 80: 68: 67: 60: 49: 27: 26: 19: 1326: 1325: 1321: 1320: 1319: 1317: 1316: 1315: 1296: 1295: 1294: 1289: 1273: 1228: 1095: 1040:Fluid animation 980: 942: 914: 905:Diffusion curve 897:Vector graphics 891: 886: 852:Wayback Machine 839: 838: 825: 824: 820: 815: 803: 756: 723: 717: 701: 688: 682: 666:viewing frustum 662: 643: 560: 559: 515: 491: 433:(also known as 419: 367:Texture mapping 333: 311:Virtual reality 221: 210: 199: 198: 197: 192: 181: 175: 172: 129: 127: 117: 105: 90: 84: 81: 78: 69: 65: 28: 24: 17: 12: 11: 5: 1324: 1314: 1313: 1308: 1291: 1290: 1288: 1287: 1281: 1279: 1275: 1274: 1272: 1271: 1266: 1261: 1260: 1259: 1254: 1249: 1238: 1236: 1230: 1229: 1227: 1226: 1221: 1216: 1211: 1206: 1201: 1196: 1191: 1189:Shadow mapping 1186: 1181: 1176: 1175: 1174: 1169: 1164: 1159: 1154: 1149: 1144: 1134: 1129: 1124: 1119: 1114: 1109: 1103: 1101: 1097: 1096: 1094: 1093: 1088: 1083: 1082: 1081: 1071: 1064: 1059: 1054: 1053: 1052: 1042: 1037: 1032: 1027: 1022: 1016: 1011: 1005: 1000: 994: 992: 986: 985: 982: 981: 979: 978: 973: 968: 963: 958: 952: 950: 941: 940: 935: 930: 924: 922: 916: 915: 913: 912: 907: 901: 899: 893: 892: 885: 884: 877: 870: 862: 856: 855: 845: 837: 836: 831:www.cs.unc.edu 817: 816: 814: 811: 810: 809: 802: 799: 755: 752: 748: 747: 741: 716: 713: 709:Clipping plane 700: 697: 684:Main article: 681: 678: 670:virtual camera 661: 658: 642: 639: 638: 637: 633: 627: 623: 618: 614: 608: 596: 591: 584: 581: 569: 556: 540: 514: 511: 490: 487: 421: 420: 418: 417: 410: 403: 395: 392: 391: 390: 389: 384: 379: 374: 372:Motion capture 369: 364: 359: 354: 353: 352: 347: 337: 326: 325: 324:Related topics 321: 320: 319: 318: 313: 308: 303: 298: 296:Visual effects 293: 288: 286:Graphic design 283: 278: 270: 269: 265: 264: 263: 262: 257: 252: 247: 239: 238: 234: 233: 225: 224: 212: 211: 194: 193: 108: 106: 99: 92: 91: 72: 70: 63: 58: 32: 31: 29: 22: 15: 9: 6: 4: 3: 2: 1323: 1312: 1309: 1307: 1304: 1303: 1301: 1286: 1283: 1282: 1280: 1276: 1270: 1267: 1265: 1262: 1258: 1255: 1253: 1250: 1248: 1245: 1244: 1243: 1240: 1239: 1237: 1235: 1231: 1225: 1222: 1220: 1217: 1215: 1212: 1210: 1207: 1205: 1202: 1200: 1197: 1195: 1194:Shadow volume 1192: 1190: 1187: 1185: 1182: 1180: 1177: 1173: 1170: 1168: 1165: 1163: 1160: 1158: 1155: 1153: 1150: 1148: 1145: 1143: 1140: 1139: 1138: 1135: 1133: 1130: 1128: 1125: 1123: 1120: 1118: 1115: 1113: 1110: 1108: 1105: 1104: 1102: 1098: 1092: 1089: 1087: 1084: 1080: 1077: 1076: 1075: 1072: 1069: 1068:Triangle mesh 1065: 1063: 1060: 1058: 1055: 1051: 1048: 1047: 1046: 1043: 1041: 1038: 1036: 1033: 1031: 1028: 1026: 1023: 1020: 1017: 1015: 1012: 1010: 1006: 1004: 1001: 999: 998:3D projection 996: 995: 993: 991: 987: 977: 974: 972: 969: 967: 964: 962: 959: 957: 954: 953: 951: 949: 945: 939: 938:Text-to-image 936: 934: 931: 929: 926: 925: 923: 921: 917: 911: 908: 906: 903: 902: 900: 898: 894: 890: 883: 878: 876: 871: 869: 864: 863: 860: 853: 849: 846: 844: 841: 840: 832: 828: 822: 818: 808: 805: 804: 798: 796: 792: 788: 784: 780: 776: 772: 769: 765: 761: 751: 745: 742: 739: 735: 732: 731: 730: 728: 722: 712: 710: 706: 696: 692: 687: 677: 675: 671: 667: 657: 654: 652: 648: 634: 632: 628: 624: 622: 619: 615: 612: 609: 605: 601: 597: 595: 592: 589: 585: 582: 579: 574: 570: 567: 557: 554: 549: 545: 541: 539: 536: 535: 534: 532: 531:rasterization 528: 524: 520: 510: 508: 504: 499: 497: 486: 484: 480: 476: 472: 468: 464: 460: 456: 452: 448: 444: 440: 436: 432: 428: 416: 411: 409: 404: 402: 397: 396: 394: 393: 388: 385: 383: 380: 378: 375: 373: 370: 368: 365: 363: 360: 358: 355: 351: 348: 346: 343: 342: 341: 338: 336: 330: 329: 328: 327: 323: 322: 317: 314: 312: 309: 307: 304: 302: 301:Visualization 299: 297: 294: 292: 289: 287: 284: 282: 279: 277: 274: 273: 272: 271: 267: 266: 261: 258: 256: 253: 251: 248: 246: 243: 242: 241: 240: 236: 235: 231: 227: 226: 223: 218: 217: 208: 205: 190: 187: 179: 168: 165: 161: 158: 154: 151: 147: 144: 140: 137: –  136: 132: 131:Find sources: 125: 121: 115: 114: 109:This article 107: 103: 98: 97: 88: 85:February 2016 76: 71: 62: 61: 56: 54: 47: 46: 41: 40: 35: 30: 21: 20: 1306:3D rendering 1199:Shear matrix 1162:Path tracing 1147:Cone tracing 1142:Beam tracing 1062:Polygon mesh 1056: 1003:3D rendering 830: 821: 794: 790: 773: 768:Beam tracing 757: 749: 737: 724: 702: 693: 689: 663: 655: 650: 646: 644: 547: 543: 516: 500: 492: 478: 474: 458: 454: 450: 446: 442: 438: 434: 430: 424: 268:Primary uses 237:Fundamentals 200: 182: 173: 163: 156: 149: 142: 130: 118:Please help 113:verification 110: 82: 74: 50: 43: 37: 36:Please help 33: 1214:Translation 1167:Ray casting 1157:Ray tracing 1035:Cel shading 1009:Image-based 990:3D graphics 971:Ray casting 920:2D graphics 621:Ray tracing 538:Z-buffering 291:Video games 1300:Categories 1278:Algorithms 1132:Reflection 719:See also: 705:projection 600:barycenter 553:Z-fighting 529:, and the 523:projection 513:Algorithms 489:Background 357:3D display 146:newspapers 39:improve it 1257:rendering 1247:animation 1137:Rendering 791:invisible 467:algorithm 340:Animation 276:3D models 255:Rendering 176:July 2017 45:talk page 1252:modeling 1179:Rotation 1117:Clipping 1100:Concepts 1079:Deferred 1045:Lighting 1025:Aliasing 1019:Unbiased 1014:Spectral 807:Clipping 801:See also 785:and the 779:BSP tree 674:clipping 566:S-buffer 561:C-buffer 527:clipping 463:surfaces 350:skeletal 345:computer 260:Printing 250:Scanning 245:Modeling 1184:Scaling 1074:Shading 813:Sources 795:visible 787:kd-tree 651:usually 647:culling 573:Quake I 503:sorting 160:scholar 75:updated 1204:Shader 976:Skybox 961:Mode 7 933:Layers 783:octree 781:, the 762:. The 636:level. 607:other. 544:sample 525:, the 521:, the 475:hiding 162:  155:  148:  141:  133:  1224:Voxel 1209:Texel 910:Pixel 854:copy) 613:(BSP) 548:pixel 479:hider 453:) or 334:(CGI) 167:JSTOR 153:books 948:2.5D 664:The 629:The 139:news 738:PVS 459:VSD 445:), 443:HSR 425:In 122:by 1302:: 829:. 711:. 555:). 509:. 451:OC 437:, 429:, 48:. 1070:) 1066:( 1021:) 1007:( 881:e 874:t 867:v 850:( 833:. 736:( 568:) 457:( 449:( 441:( 414:e 407:t 400:v 207:) 201:( 189:) 183:( 178:) 174:( 164:· 157:· 150:· 143:· 116:. 87:) 83:( 77:. 55:) 51:(

Index

improve it
talk page
Learn how and when to remove these messages

verification
improve this article
adding citations to reliable sources
"Hidden-surface determination"
news
newspapers
books
scholar
JSTOR
Learn how and when to remove this message
Learn how and when to remove this message
Three-dimensional (3D)
computer graphics


Modeling
Scanning
Rendering
Printing
3D models
Computer-aided design
Graphic design
Video games
Visual effects
Visualization
Virtual engineering
Virtual reality
Virtual cinematography

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.