Image not available

1920x978

img-2023-12-08-21....png

๐Ÿงต Untitled Thread

Anonymous No. 966507

>Phong/PN Triangle Tessellation.
http://www.klayge.org/material/4_0/PhongTess/PhongTessellation.pdf

is there any implementation/plugin for this on any modern dcc software? btw, this is NOT the same as subdivision surface. with subd, you'll lose volume as it would 'carve' the surface inwards. with this method however, the tessellated surface it generates will still pinned to the source vertices while adding more poly that follows the normals.

the only implementation that ive found is in Unity but as a shader. it would be great if we can use this for authoring 3d model inside Blender/Maya/3dsmax.

https://docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html#:~:text=uses%20phong%20tessellation%20

there's also a talk by Mihoyo at GDC about experiementing with this method to make their future anime cg model's silhouette looks perfectly smooth and not jagged (imagine the booba closeup). but ive lost the link to the talk.

Image not available

1903x978

img-2023-12-08-21....png

Anonymous No. 966508

see this. look at the model's monocle.

with subd, you'll lose the volume and outline, but not with this method.

another paper about this topic: https://drivers.amd.com/developer/CurvedPNTrianglesI3DG01.PDF

Image not available

1440x831

aoi_interpolating.jpg

Anonymous No. 966516

If you want to try to model using an Interpolating rather than Approximating subdivision scheme, you can try:
http://artofillusion.org/

Unfortunately, a lot of the software is rather old, crusty and Java but it has a really good internal renderer and some rather advanced subdivision modeling options.

Anonymous No. 966520

>>966507
This is just loop subdivision with the new midpoints projected to the intersection of the tangent planes of their respective origin points? Seems simple enough to implement.

Image not available

1440x920

img-2023-12-09-01....png

Anonymous No. 966525

>>966516
kinda neat. this sort of looks like it, but it cant seems to increase the iteration count

Image not available

742x666

img-2023-12-09-01....png

Anonymous No. 966526

>>966520
i didnt get what you mean...but what makes this method different to regular subdivision is; it takes the vertex normal into account and the new generated poly that bridges between the verts would "follow" the normal's flow. so if you have a hard edge like in the model here >>966508 (see the monocle's edge), i wont buldge out or carve in like subd.

Anonymous No. 966531

>>966525
I haven't read the source code of AOI in depth but I think what it does is simply:
https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface#Exact_evaluation
applied in reverse. I have no idea why that hasn't been properly implemented in Blender yet.

Image not available

1077x853

img-2023-12-09-02....png

Anonymous No. 966535

>>966531
i think that's a different thing altogether. it sounds like an option in 3dsmax called "Project to Limit Surface". what it does is, it simulates how much an infinite amount iteration would "push" or carve the surface inward (or outward, depending if convex or concvave), while using a lower iteration count. it will still misses the source vertices and not touching them.

Image not available

1429x852

img-2023-12-09-02....png

Anonymous No. 966536

this is what im looking for, although im doing it manually in max as a demonstration:

on the far left is poly object with smoothed normals, then, i select the edge loops, i convert them into smooth Spline CVs, and then i apply a Surface modifier. while on the far right is the same poly object but with subd. as you can see, the subd object loses volume by being pushed inwards and not touching the original vertices while the smoothed Spline surface gains a bit of volume but still obeys the original vertices position.

Anonymous No. 966538

>>966507
>actually technical question on /3/ but..
you just want to make perfectly smooth booba/ass close-ups without jaggies on ripped assets, dont you? you absolute coomer.
although i concur with your request. applying subdivision on ripped game assets would always turns out fucky. unless you end up reworking and retopologize the surface manually.

Anonymous No. 966539

>>966538
>perfectly smooth booba/ass closeup
unironically yes.
>fucky subd on ripped game assets
you know it.

especially on lower poly models, using subd would cause so much volume loss and the model turns into a blob. this method seems to overcome that issue without going full autistic reworking on the asset from scratch.

Anonymous No. 966559

Finally an interesting thread on /3/

Image not available

1903x978

Untitled.png

Anonymous No. 966658

>>966508
wtf
b..booba bros...how do i get this??
this is actually important

>>966539
>>fucky subd on ripped game assets
>you know it.
>this method seems to overcome that issue
OMG YES

Image not available

1633x611

img-2023-12-10-00....png

Anonymous No. 966664

i think ive got a hit, somewhat. found this plugin in a Daz3D forum, of all places. though not ideal for me because i dont know how to use Daz3D...yet.

any Dazchads would kindly do the needful and try this one for us?

Image not available

783x1611

tess.png

Anonymous No. 966838

>>966507
>>966658
I made a proof of concept for this tessellation technique, results look pretty good desu
Pic related is with two iterations, totally uniform tessellation.
alpha=0.75 as recommended in the paper (the mix factor between linear tessellation and the phong extrapolated points)
Even one iteration was a big improvement

This model is from a 2000s-era game, so not *super* low poly
If you link me a low-poly model you want to see results on, I can show you how it looks with 1/2 iterations or more if necessary

Image not available

701x945

lara_tess.png

Anonymous No. 966841

Lara with two iterations
With very low poly models, it adds a lot of volume, so I had to dial back the alpha on the first iteration to 0.5 to avoid bloatmaxing

Image not available

703x847

lara_fat.png

Anonymous No. 966842

>>966841
Lara with alpha=0.75 for both iterations

Image not available

895x1010

cortana.png

Anonymous No. 966844

Cortana

Image not available

793x502

cortana2.png

Anonymous No. 966845

>>966844
Very much improved silhouette, this would be very usable as a sculpting base, or you could even directly retopo a high tessellation of a low poly character.
I wish I had a copy of Quad Remesher (zremesh for blender) to see how it would work on one of these highly tessellated models

Anonymous No. 966851

>>966838
>>966841
>>966842
>>966844
>>966844
>>966845

holy shit...a random graphics coder anon actually delivers...in /3/! do you have the code/plugin to share kind anon?

those are some really impressive results on the model's silhouette. even on the very low poly lara croft model, i imagine the volume gain doesnt seem that bad when compared to volume loss with subd. and the one with cortana is ideal, you can really see how smooth her body now. no more razor sharp boobas.

why isn't this method is more well known or implemented in modern dcc software is truly mindboggling.

im a codelet, but do think its plausible to apply this tesselation as a real time shader plugin for game emulators?

Anonymous No. 966853

Not OP here. I'm looking at the presentation slides. It's not a new idea and the reason it's not widely used is because if you have a model with auto-generated vertex normals the results are going to be bad.
In fact they're selling it more as an LOD or mesh compression scheme where you put down a low poly version of a mesh with very high quality normals, so the GPU can generate new triangles on demand.

Image not available

513x736

lara_subd.png

Anonymous No. 966854

>>966851
> do you have the code/plugin to share kind anon?
Not yet, there are two problems with the current code
1) I wrote it as a Godot script
2) It doesn't yet handle hard edges, but I know how to fix that.
I might look into implementing a Blender plugin, hopefully they have a decent api for mesh manipulation but I've never worked with it before
> do think its plausible to apply this tesselation as a real time shader plugin for game emulators?
In principle it should be possible, but some emulators could make it a pain to implement or even fail to support the required geometry shader features.

> i imagine the volume gain doesnt seem that bad when compared to volume loss with subd
Pic related shows the subd volume loss, yeah it's pretty bad I guess


>>966853
>if you have a model with auto-generated vertex normals the results are going to be bad.
Does the curvature generated here seem bad? >>966844
Those were auto-generated normals made by smooth shading in blender
And the auto-generated normals for a higher poly model would be higher quality than that

Anonymous No. 966855

>>966854
The curvature in >>966844 is ok, it looks ok but that was an already good looking model to begin with.
But I don't mean to discourage you because maybe you'll be able to add something of your own to the algorithm and improve it.

Anonymous No. 966884

https://cims.nyu.edu/gcl/papers/zorin1996ism.pdf
I've found a reference to it somewhere in AOI's source code like 15 years ago. And then I forgot about it.

Anonymous No. 966885

Which derives from this:
https://faculty.cc.gatech.edu/~jarek/graphics/papers/09ButterflyDyn.pdf
If you notice it's all highly crusty stuff.

To my knowledge the reason it all went to approximating schemes is that interpolation has the potential to produce oscillations.

Anonymous No. 966900

>>966854
if this is a paid blender plugin, i would unironically pay for it. there's definitely a niche demand for it. keep up the good work coder anon

>>966884
>>966885
>1990 and 1996
looks like this is precursor to the later Phong/PN Triangle tesselation algorithm. it seems like it would globally tesselate the polygons without accounting for hard or smooth normals?

Anonymous No. 966902

>>966900
The major difference between "Butterfly" (From the '90s) and "Phong" (in OP) is that the first one uses adjacent triangles, the second one uses normals to estimate the surface tangent.
Hard edges can be implemented in both.

Image not available

510x692

output.webm

Anonymous No. 966911

i think ive found a kind of alternative inside 3dsmax. its simply called a "Tessellate" modifier. but, not to be confused with "Tessellate button" insde the Editable Poly modifier, because those would just add vertices between edge and face midpoints without making a smooth interpolation. instead, use the dedicated "Tesselate" from the modifer list. then select "Operate on: Quads" and increase the iteration.

however, im not sure what method does this actually use, because it seems to globally smooth the object without regards to vertex normals as it will still interpolate faces that you specified as hard normals together with the smooth ones.

Image not available

511x652

output.webm

Anonymous No. 966912

>>966911
another example vs subd volume loss.
i think max might be using Butterfly Tesselation.

Image not available

328x446

output.webm

Anonymous No. 966915

bobba maxxing.
looks good to me. it even got the abs more toned. although higher iterations on mid poly 7th gen game model seems to crawl on my shitter pc.

Anonymous No. 966946

>>966841
>>966838
Github link?

Image not available

834x251

ohnonoblendbros.png

Anonymous No. 966956

>tfw "tessellate" in Blender i a totally different thing

Anonymous No. 966961

>>966946
I worked a little on converting the code to blender earlier, but I discovered something interesting.

In Blender, in edit mode, you can select vertices and apply the 'subdivide' operation with smoothing set to max to get a similar effect.
(f3->mesh.subdivide, adjust number of cuts and smoothness in the popup window)
It adds volume in a similar way to this phong tessellation, in fact I wouldn't be surprised if it uses a very similar heuristic

Someone plz check this out and see if it's good enough, so I don't have to write the rest of the script

Image not available

819x895

output.webm

Anonymous No. 966962

higher iteration would introduce some crusty wrinkles. adding a "Relax" modifier between iterations would fix that a little bit. but as a side effect, you'll now lose a minimal amount of volume (the control vertices would now deviate form its original position by a small amount). TANSTAAFL i guess. but it does still looks better than just a straight subd modifier. it is also interesting to see that this method brings out some of the natural body wrinkles that are supposed to appear around the elbow and knees.

i wonder if theres an geom2geom ML thing that would take a low poly input and injects more details from the latent space, some thing like Stable Diffusion, but trained on high poly or raw scans data. what im seeing currently on the ML space are txt/img/ to 3d but it probably be 'two more papers' down the line.

Image not available

761x576

subdivide.jpg

Anonymous No. 966965

>>966961

Image not available

1484x523

untitled.png

Anonymous No. 966966

>>966961
blender's "Subdivide" looks similar 3dsmax "Tesselate". probably based on Butterfly's tesselation. it seems to globally smooth the object by assuming each vertex normals to be averaged by its surrounding edges and ignores the original phong normals.

Anonymous No. 966968

>>966961
the difference is with phong normal tesselation, it would respect the normal boundary between smoothing groups so it wont interpolate acroos them like in >>966658

Image not available

828x507

subdivide2.jpg

Anonymous No. 966969

I wish there was an adaptive mode. Because for every operation you can check if the generated vertex is close enough to the original edge and if it is, then you undo that specific subdivision.

Image not available

716x639

edge_split_error.png

Anonymous No. 966971

>>966968
What do you think should happen to (new) vertices on the boundaries of smoothing groups?
Technically, they are usually implemented as duplicate vertices. (In fact in blender, there isn't a concept of smoothing groups afaik, there's a modifer called 'edge split')
I could require that any perfectly overlapping edges (even if not topologically connected) share a consistent tessellation, maybe averaging the contributions of the offsets generated by the normals on each side of the edge

Pic related demonstrates the problem when using blender smoothing on surfaces after applying edge split, and a similar scenario could arise in Phong Tessellation

Anonymous No. 966973

>>966956
>blender
Subdivision Surface is "Subdivision Surface"
Tessellation is not "Tessellation"

>max
Subdivison Surface is "MeshSmooth/TurboSmooth (lmao)"
Tessellation is "Tessellation"

>maya
i dont even use maya but i imagine its also another clusterfuck of conflicting terminologies

Image not available

986x435

img-2023-12-13-00....png

Anonymous No. 966975

>>966971
this is actually getting rather deep into the technical details. maybe averaging the vertices betwen the open edges like you've said is the solution. with subdivision surface however, there is an implicit option to account for this without manually seting creasing weights per vertex on the subdivision modifier's level. blender's subdivison surface also have this via "Use Custom Normals".

i'll probably going to take look with Unity's realtime Phong Tesslelation shader or that Daz3D plugin to see how it compares

Anonymous No. 966977

>>966975
I'm curious if Unity's shader can handle seams between different smoothing groups, because that requires non-local information (each triangle can't be tessellated strictly with information from its vertices - unless you stuff duplicate normals from other smoothing groups in each vertex)

Anonymous No. 966978

>>966977
yeah there's seem to be some kinda of adaptive smoothing used in Unity's shader, especially between the part of the eyeball and the hard edges on the eyelid and the eye socket covering them. being low poly, those edges would usually be smushed together with standard subdivision or tessellation that ignores hard edges

Image not available

308x803

img-2023-12-13-01....png

Anonymous No. 966979

>>966977
>>966978
another paper showing this effect (although i dont understand fuck all with the math and code):
https://www.researchgate.net/publication/261483110_Analysis_and_Implementation_of_Local_Subdivision_Algorithms_in_the_GPU/download
but unlike the unity sample that shows the wireframe, i cant tell if the verts are actually connected or just overlapping different poly objects on top of each other. seems like it is connected tho, being low poly like psx era model i thought that overlapping poly would usually cause z-fighthing/flickering for polygons that are very close together

Anonymous No. 966984

>>966978
The shader version can dynamically give less smoothing to vertices with normals pointing toward the camera, I guess that helps. Also makes it difficult to judge how good the technique is based on a single screenshot

Image not available

1654x1039

img-2023-12-13-02....png

Anonymous No. 966986

>>966984
i guess that makes sense then. tried this demo from Tamy Boubekeur it does show the silhouette is smooth but the shape of the mouth stays hard. i guess thiss method is intended for realtime display rather than authoring a 'baked' asset.

Image not available

482x331

diagram.png

Anonymous No. 966999

>>966986
Well, I guess smoothing groups could get pretty much the same results. Just make the edge sharp, and instead of averaging the position offsets, add them.
The normals along the top edge will only be curving along it, not rotating over it. And the split normals along the bottom of the edge will pretty much be on a flat plane, so won't contribute any curvature.

in pic related, the green normals will cause the surface to bulge out in the correct direction, while the blue surface will have flat normals and therefore no extrapolated curvature. Adding them up should give the correct result
(the red normals are the direction the green normals interpolate toward as they move away from the edge - but on the edge, they will have zero contribution from the red normal)

Anonymous No. 967014

huh...deja vu...i vaguely recall there was a similar discussion about this topic on this board about subdividing (aka approximating) vs tessellating (aka interpolating), maybe as recent as a year or two but i cant be arsed to check the archives. but i remember the point is, you can't have your booba cake and eat it too. so you'll have to choose between blobby subdy with losing volume, or wrinkles on hard edge with tesselating. else, you'll have to retopo and rework the surface from scratch and fuck around with creasing/adding manual loops.

or maybe, just take the Cris pill and wait till the AI autists solves this with some low poly to high poly uprez ML. (although the actual Cris might probably prefers the opposite lmao)

Anonymous No. 967021

>>967014
>you'll have to choose between blobby subdy with losing volume, or wrinkles on hard edge with tesselating
That's good to hear, it means when I code up my fix for the algorithm tomorrow it might be somewhat novel

Anonymous No. 967026

>>967021
That's based, anon. If you come up with a novel solution, it will go down in /3/ historic moment similar to "4chan /sci/ solves permutation problem" or that one time when "/g/ invents a new sorting algorithm"

>>967014
With all due respect, but fuck off Cris.

Image not available

358x900

tessellation4.png

Anonymous No. 967207

I added support for hard edges (and multiple smoothing groups in general), and results are decent with most meshes I tested.
However, this version does have those subtle oscillating artifacts you can see at the bottom of pic related.
sometime this week I'll do some more experiments and see if I can mitigate them somehow.

Anonymous No. 967222

>>967207
Very nice anon! How do you deal with the separate smoothing groups? It doesnt look like you are averaging the verts position because it looks so clean. Im guessing you apply some kind of extra pass to dynamically select the open edges and bridge them?

Anonymous No. 967264

>>967222
Averaging of non-zero offsets from the linear midpoint.
For two adjacent smooth surfaces on a smoothing group edge, I just average the offsets each side wants. Could be improved, but I don't have any great mesh to test that case with.
The case I was most interested in, which is shown in >>967207, is edges where one side is flat.
In that case it works out pretty well, because the flat surface will not contribute to the midpoint offset, so the smooth surface just overrides it.

Image not available

789x765

constraint.png

Anonymous No. 967271

Made improvement on edge crinkle.
When one side of a smoothing group is a flat plane, it can make a contribution to the quality of the new tessellated midpoint of the edge by constraining the new point to its plane

Image not available

530x1060

img-2023-12-18-12....png

Anonymous No. 967524

Found this interesting Blender Plugin called "Polyhedral Splines".

https://uf-cise-surflab.github.io/blender-polyhedral-splines-web/

https://github.com/UF-CISE-Surflab/blender-polyhedral-splines (seems pretty recent. released 2 years ago)

Seems to be like something inbetween classic Catmull Clark subdivision and tessellation interpolation. It still however loses some volume (but not as bad as subdivision). The tri-cube model in picrel shows that although the generated surface doesnt "touch" the original vertices, it at least seems to project as close as possible to the original face center. It also seems to assume a completely smoothed surface and ignores hard normals though.

Image not available

1903x2850

img-2023-12-18-12....png

Anonymous No. 967525

>>967524
the authors of the method are really balls deep into the topic they even got a research department dedicated for it

https://www.cise.ufl.edu/research/SurfLab/research.shtml

Anonymous No. 967527

There used to be a software called Animation:Master
https://www.youtube.com/watch?v=MKeeskcJdHY
It derived from sPatch. It's not easy to explain how it works exactly but you can watch the tutorials on that channel. You model by laying down splines and connecting them. The rules of topology (so to speak) are different from Catmull-Clark and it's interpolating rather than approximating.
Somebody made a re-creation in Java if you want to try it:
https://sourceforge.net/projects/jpatch/
It's not complete and it has been abandoned long ago but the modeler works. Get version 0.3

Image not available

1920x1050

img-2023-12-18-13....png

Anonymous No. 967528

>>967527
>patch modelling
now that you mentioned it...3dsmax do have patch modelling..but ive never touched it. there's also nurbs but that is somewhat different to patches and more "strict".

you can convert poly to patches. although it is just a straight quad/tri to spline network and it wont interpolate the curves. imagine working with bezier handles, but shitloads of them....in 3d lmao

Image not available

1020x718

jpatch.jpg

Anonymous No. 967530

I used to have a CD full of really nice Animation:Master models which I could load into JPatch. Maybe it's still available on archive.org

The problem with it and the reason it was eventually abandoned I think is because it's not really easy to use and if you look at the implementation you'll see that it relies on a large set of corner cases, some of which are complicated to implement and the user needs to be aware of at least some of those.
If you compare it with the interpolating subdivision in ArtOfIllusion, that's the one I always wanted to see implemented in Blender.

Image not available

536x866

interactive_surfa....jpg

Anonymous No. 967532

Regarding subdivision modeling in AOI, unfortunately it's hidden in the main preferences but the nice thing you never specify the number of subdivisions directly.
You specify the surface error you wish to have and the software figures out how many subdivision steps to apply on a triangle by triangle basis.
I've seen professional models made by Sony that use adaptive subdivision. I can't be 100% sure it's the same algorithm but it's out there.

Image not available

1920x1050

img-2023-12-25-10....png

Anonymous No. 968161

been teaching myself maxscript and maxmacros over the week and i think i might actually come up with something somewhat usable for my own use case. pretty sure this is not a totally novel method or idea but it at least im learing something and it covers some of my requirement:

1) best effort volume preservation unlike regular subdivision/aprroximation
2) respects smoothing groups or hard edges without manual creasing

the transition between smooth<>hard normal group works well here (the top half), except if the hard normal group also have another neighbouring hard nomral groups (lower half). but i think i could just fix that with a macro to select the open edges and bridge them together, and perhaps maybe an optional step to specify the smoothness of the bridged gap.

Image not available

640x480

sddefault.jpg

Anonymous No. 968419

AI won, booba bros!

Anonymous No. 969970

Has there been any other developments with this topic? I'm very interested in it as I do alot of hard-surface work and wouldn't mind having something that deals with fringe case soft->hard->soft transitions better.
This seems like it could potentially help with that? Or am I off-base?

Anonymous No. 972845

>>968161
>best effort volume preservation
>respect smoothing groups boundaries
holy shitt ive been looking for such modifier since forever...
gib scripts...anon-kun? pleaseee