pts={{{0.5,0,-0.5},{0,0,-0.5},{0,1,-0.5},{0.5,1,-0.5},{1,1,-0.5},{1,0,-0.5},{0.5,0,-0.5}},{{0.5,0,0.7},{0,0,0.7},{0,1,0.7},{0.5,1,0.7},{1,1,0.7},{1,0,0.7},{0.5,0,0.7}},{{0.5,0,0.9},{0,0,0.9},{0,1,1.5},{0.5,1,1.5},{1,1,1.5},{1,0,0.9},{0.5,0,0.9}},{{0.5,-0.1,1},{0,-0.1,1},{0,0.5,2},{0.5,0.5,2},{1,0.5,2},{1,-0.1,1},{0.5,-0.1,1}},{{0.5,-0.3,1},{0,-0.3,1},{0,-0.3,2},{0.5,-0.3,2},{1,-0.3,2},{1,-0.3,1},{0.5,-0.3,1}},{{0.5,-1.5,1},{0,-1.5,1},{0,-1.5,2},{0.5,-1.5,2},{1,-1.5,2},{1,-1.5,1},{0.5,-1.5,1}}};w={{1,.5,.5,1,.5,.5,1},{1,.5,.5,1,.5,.5,1},{1,.5,.5,1,.5,.5,1},{1,.5,.5,1,.5,.5,1},{1,.5,.5,1,.5,.5,1},{1,.5,.5,1,.5,.5,1}};
uk={0,0,0,1/4,1/2,3/4,1,1,1};
vk={0,0,0,1/4,1/2,1/2,3/4,1,1,1};

Graphics(3D)
Improvements + New Features

Wolfram Technology Conference 2023

James Lane
FrontEnd Graphics(3D) Developer

Graphics : Improvements  and  New  Features

Easier  Texture  Mapping

Faster Rendering:  Polygons, Tubes

Primitive extensions: multi-Disk, AxisObject 3D

Reduced Z-fighting

Querying/Exploring Graphics(3D)

Easier  Texture  Mapping

Named  VertexTextureCoordinates

e.g. Conical, Cylindrical, Spherical, Planar, Box, Cubic, UVWrap, UVUnifiedWrap, UVUnifiedWrapStretch

Conical

Graphics3D[{Texture[ExampleData[{"ColorTexture","WhiteMarble"}]],
Cone[{{0,0,0},{1,0,1}},1, 
VertexTextureCoordinates->"Conical"]}]

Cylindrical

Alias for VertexTextureCoordinates -> TextureMapping

Texture uniformly scaled across the entire cone

Manipulate[Graphics3D[{Texture[ExampleData[{"ColorTexture","WhiteMarble"}]],Cylinder[{{0,0,0},{1,0,1}},i,TextureMapping->"Cylindrical"]}],{i,0.1,3}]

Spherical

GraphicsRow[Graphics3D[{Texture[],Sphere[{0,0,0},
 TextureMapping->{"Spherical",# (*Up*)}]},Axes->True,Ticks->None,AxesLabel->{"X","Y","Z"}]
&/@{"Z","Y","X","-Z","-Y","-X"}]

Second argument specifies which way is up

GraphicsComplex  Planar | Cubic | Spherical

v=PolyhedronData["Icosahedron","GraphicsComplex"][[1]];
i=PolyhedronData["Icosahedron","GraphicsComplex"][[2,1]];
GraphicsRow[Graphics3D[{Texture[],
GraphicsComplex[v,Polygon[i],
VertexTextureCoordinates->{#,"Z"}]},
Axes->True,Ticks->None,AxesLabel->{"X","Y","Z"}]&/@{"Planar","Cubic","Spherical"}]

BSplineSurface   UVWrap | UVUnifiedWrap | UVUnifiedWrapStretch

Experimental

GraphicsRow[Graphics3D[{Inset[#,{-0.75,0,0}],Texture[ImageData@Rasterize@],
BSplineSurface[pts,SplineKnots->{uk,vk},SplineDegree->2,SplineWeights->w,SplineClosed->{False,True},TextureMapping->#]},ViewPoint->{Right,Front},Boxed->False]&/@{"UVWrap","UVUnifiedWrap","UVUnifiedWrapStretch"}]

Automatic Texture Mapping

2nd Argument

e.g. Texture[texture, Automatic]

primitives={
ConeBox[{{1,-1,-1},{1,-1,1}}],
CuboidBox[{0,0,-1},{2,2,1}],CylinderBox[{{-1,1,-1},{-1,1,1}}],
Sphere[{-1,-1,0}]};
Graphics3D[{Texture[ImageData@,Automatic],primitives}]

2nd Argument, can be:

Planar | Box | Cubic | Spherical | Cylindrical | UVWrap | UVUnifiedWrap | UVUnifiedWrapStretch

Graphics3D[{Inset[#,{2,2,-1.5}],Texture[ImageData@,#],
primitives},ViewPoint->{Right,Front},Boxed->False]&/@{"Planar","Box","Cubic","Spherical","Cylindrical"}

Method->“TextureWrap”

Repeat (default) | ClampToEdge | MirroredRepeat | ClampToBorder

lgi=LinearGradientImage[{{Left,Bottom},{Right,Top}}->{Blue,Yellow,Red}];
Graphics[{Texture[lgi],Polygon[{{0,0},{0,1},{1,1},{1,0}},VertexTextureCoordinates->{{0,0},{0,2},{2,2},{2,0}}]},
Background->LightBlue,
Method->{"TextureWrap"->#}]&/@{"Repeat","ClampToEdge","MirroredRepeat","ClampToBorder"}

Method->“CacheAllTextures”

Default  CacheAllTextures -> False, memory  friendly

Use case, e.g. load all textures for game

spheres:=Table[Sphere[RandomReal[1,{3}],RandomReal[0.3]],3];
Graphics3D[{
Texture[ImageData@,Automatic],spheres,
Texture[ExampleData[{"TestImage","Sailboat"}]],spheres,
Texture[ExampleData[{"ColorTexture","WhiteMarble"}]],spheres,
Texture[],spheres,
Texture[ImageData@,Automatic],spheres,
Texture[],spheres}
,Method->{"CacheAllTextures"->True}]

Larger memory footprint vs speed

Faster Rendering

Faster  Polygon  Rendering

Cache Polygon holes

faster  rendering  of  complex  2D  polygons

outer=;
inners=;
Graphics[Polygon[outer->inners]]

Use stencil buffer as alternative to slower tessellation

faster rendering of large  concave  polygons
	(VertexColors  case  and  Texture  case)

n=2500;
Graphics[{Polygon[RandomReal[{0,1},{n,2}],VertexColors->Table[{1,0,0},{i,n}]]}]

Multithreaded loading and formatting of Polygons

Polygon spatial data structures computed in background thread

Faster, Memory friendly Tubes

https://community.wolfram.com/groups/-/m/t/2981586

Method->{“TubePoints”->Automatic}

Default changed from {40, 2}->Automatic

Graphics`RenderTiming@Graphics3D[{Opacity[.5],Tube[RandomReal[.1,{50,50,3}],VertexColors->RandomReal[1,{50,50,3}]]},Method->{"TubePoints"->Automatic}]

Graphics`RenderTiming@Graphics3D[{Opacity[.5],Tube[RandomReal[.1,{50,50,3}],VertexColors->RandomReal[1,{50,50,3}]]},Method->{"TubePoints"->{40,2}}]

Automatic - Sampling n depends on Scaled Radius

Behind scenes: release  vertex normals  while  hibernating

Tip: Method -> "ResolveAsTriangles" -> False  (default  is True)

renders slower but uses less memory

Graphics3D[{
Tube[RandomReal[.1,{1000,5,3}],VertexColors->RandomReal[1,{1000,5,3}]]
},Method->"ResolveAsTriangles"->False]

Primitive Extensions

Multi-Disk

Multiple primitive form of disk, circle first argument

Graphics[{
Disk[{{0,0},{1.5,1.5},{3,3}}],
Circle[{{0,2.5},{2,-1}}]}]

Editing - edits all

SeedRandom[2];
Graphics[{EdgeForm[Directive[White,AbsoluteThickness[1]]], 
Table[{{LABColor[0.5,0.1,-0.6],LABColor[0.7,0.2,0.7],LABColor[0.7,-0.5,0.3],LABColor[0.4,0.7,-0.01],LABColor[0.6,-0.3,-0.17]}[[i]],Disk[#,Offset[4]]&/@RandomVariate[BinormalDistribution[RandomReal[8,2],RandomReal[{0.5,1},2],0],500]},{i,5}]}]

Less internal formatting, much faster

AxisObject  3D

AxisObject now works in Graphics3D

Graphics3D[{
AxisObject[{∞,0,0}],
(* Less verbose, intuitive form *)
AxisObject[{0,∞,0}],
AxisObject[{"Z",{0.0,0.0}}] }]

3D Primitives: InfiniteLine, Line, HalfLine, BSplineCurve, BezierCurve

Same Options as  2D AxisObject

Show[Plot3D[Sin[x+y^2],{x,-3,3},{y,-2,2},MeshFunctions->{#3&},Mesh->5, ImageSize->Large],
Graphics3D[{
AxisObject[Line[{{-0.9,-1.2,0.5},{-1.9,1.8,0.9}}],{0,100},TickLengths->{1.0,0.5},TicksStyle->White,AxisStyle->White]
}]]

TickDirection->Automatic

Orthogonal  to  ViewPoint and Axis

Rotation  Minimizing  along  curve

Graphics3D[{
AxisObject[Line[Table[{t Cos[t],t Sin[t],t},{t,0,5 Pi,0.1}]],{0,10},TickLengths->{2,1}]
}]

Rendering Improvements | Fewer  Artefacts

Sub  pixel  thin  line  drawing in all Renderers

Pixels less than 1  pixel  thick

GeoGraphics[Table[{AbsoluteThickness[n/20],GeoCircle[{0,0},Quantity[n,"Kilometers"]]},{n,20}],GeoBackground->None,ImageSize->500]

Multiple  pass  ViewRange  rendering

When ViewAngle is miniscule

e.g. for Rendering Zoomed in Planets at astronomical scales

Method->{"ViewRangePass"->3}

ResourceFunction["TelescopeView3D"][Entity["Planet","Saturn"],(DateObject["Sat 4 Mar 2023 10:00:00""CST", DateObject[{2023,3,4,10,0,0},"Instant","Gregorian","America/Chicago"]]),"FieldWidth"->(QuantityPostfix[30, "\"", arcseconds, "Arcseconds"])]

Reduce  Z - fighting  artifacts

Reduce artifacts rendering overlapping faces

Method -> {“RelieveDPZFighting” -> True} (now default)

Graphics3D[{Yellow,Polygon[{{-3,-3,-2},{-3,3,-2},{3,3,-2},{3,-3,-2}}],Green,Opacity[.3],Cuboid[{-2,-2,-2},{2,2,-1}]},Method->{"RelieveDPZFighting"->False}]

Graphics3D[{Yellow,Polygon[{{-3,-3,-2},{-3,3,-2},{3,3,-2},{3,-3,-2}}],Green,Opacity[.3],Cuboid[{-2,-2,-2},{2,2,-1}]}]

Small offset in direction of vertex normals applied

Last object will draw over previous coplanar object (like 2D)

Graphics3D[{Red,Sphere[],Blue,Sphere[]}]

Offsets now also applied to: Hexahedron, Polyhedron, Prism, Pyramid, Tetrahedron, Tube, Tube Curves

GraphicsRow[{Graphics3D[{Opacity[.5],Red,Pyramid[],Blue,Pyramid[]}],
BarChart3D[Range[8],ChartStyle->"DarkRainbow",PlotTheme->"Marketing"],
With[{a=1,b=.5,h=2},Graphics3D[{Cone[{{0,0,0},{0,0,(b h)/a}},b],Opacity[.3],Cone[{{0,0,0},{0,0,h}},a]}]],
Plot3D[{1,1},{x,-10,10},{y,-10,10}]}]

Exploring Graphics(3D) Options

AbsoluteCurrentValue,  AbsoluteOptions

Now works for all Graphics and Graphics3D options,

Graphics3D[{Sphere[]},ImageSize->Automatic,PlotRangePadding->Dynamic[c=EvaluationBox[];None]]

AbsoluteCurrentValue[c,{Graphics3DBoxOptions,#}]&/@{ViewRange,ViewVertical,ViewCenter,ViewMatrix}

Visualize 3D View WFR Function (coming soon)

Visualize3DView @ Graphics3D[Sphere[]]

New 3D  Interaction Capabilities

Dolly camera forwards, backwards

Shift + Cmd + (Drag or Mouse Wheel)

Mouse Wheel (New)

LookAround

Option + Cmd + Drag

Drag vector should stay under(tighter to) cursor

FrontEnd Office  Hour

Friday, 11 a.m. FE Team, Office Hour