๐งต Untitled Thread
Anonymous at Fri, 8 Dec 2023 13:18:25 UTC No. 966507
>Phong/PN Triangle Tessellation.
http://www.klayge.org/material/4_0/
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-
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.
Anonymous at Fri, 8 Dec 2023 13:21:40 UTC 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/C
Anonymous at Fri, 8 Dec 2023 15:50:39 UTC 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 at Fri, 8 Dec 2023 17:12:05 UTC 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.
Anonymous at Fri, 8 Dec 2023 17:38:41 UTC 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 at Fri, 8 Dec 2023 17:55:02 UTC 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/Catmu
applied in reverse. I have no idea why that hasn't been properly implemented in Blender yet.
Anonymous at Fri, 8 Dec 2023 18:14:42 UTC 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.
Anonymous at Fri, 8 Dec 2023 18:21:14 UTC 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 at Fri, 8 Dec 2023 18:43:35 UTC 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 at Fri, 8 Dec 2023 18:59:25 UTC 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 at Sat, 9 Dec 2023 00:33:50 UTC No. 966559
Finally an interesting thread on /3/
Anonymous at Sat, 9 Dec 2023 16:27:40 UTC 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?
Anonymous at Mon, 11 Dec 2023 12:10:49 UTC 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
Anonymous at Mon, 11 Dec 2023 13:36:26 UTC 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 at Mon, 11 Dec 2023 14:25:01 UTC 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 at Mon, 11 Dec 2023 14:42:35 UTC 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.
Anonymous at Mon, 11 Dec 2023 15:03:47 UTC 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 at Mon, 11 Dec 2023 15:26:33 UTC 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 at Mon, 11 Dec 2023 23:46:53 UTC No. 966884
https://cims.nyu.edu/gcl/papers/zor
I've found a reference to it somewhere in AOI's source code like 15 years ago. And then I forgot about it.
Anonymous at Tue, 12 Dec 2023 00:10:59 UTC No. 966885
Which derives from this:
https://faculty.cc.gatech.edu/~jare
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 at Tue, 12 Dec 2023 04:00:49 UTC 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 at Tue, 12 Dec 2023 04:18:05 UTC 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.
Anonymous at Tue, 12 Dec 2023 05:47:34 UTC 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.
Anonymous at Tue, 12 Dec 2023 11:13:41 UTC No. 966946
Anonymous at Tue, 12 Dec 2023 15:22:55 UTC 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
Anonymous at Tue, 12 Dec 2023 15:23:43 UTC 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.
Anonymous at Tue, 12 Dec 2023 15:59:57 UTC 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 at Tue, 12 Dec 2023 16:04:07 UTC 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
Anonymous at Tue, 12 Dec 2023 16:04:18 UTC 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.
Anonymous at Tue, 12 Dec 2023 16:27:18 UTC 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 at Tue, 12 Dec 2023 16:29:23 UTC 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
Anonymous at Tue, 12 Dec 2023 16:50:17 UTC 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 at Tue, 12 Dec 2023 17:15:52 UTC 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 at Tue, 12 Dec 2023 17:34:02 UTC 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
Anonymous at Tue, 12 Dec 2023 17:46:59 UTC No. 966979
>>966977
>>966978
another paper showing this effect (although i dont understand fuck all with the math and code):
https://www.researchgate.net/public
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 at Tue, 12 Dec 2023 18:16:44 UTC 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
Anonymous at Tue, 12 Dec 2023 18:45:57 UTC 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.
Anonymous at Tue, 12 Dec 2023 21:31:50 UTC 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 at Wed, 13 Dec 2023 00:39:40 UTC 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 at Wed, 13 Dec 2023 02:06:44 UTC 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 at Wed, 13 Dec 2023 03:09:53 UTC 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.
Anonymous at Fri, 15 Dec 2023 01:53:17 UTC 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 at Fri, 15 Dec 2023 05:02:12 UTC 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 at Fri, 15 Dec 2023 14:13:22 UTC 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.
Anonymous at Fri, 15 Dec 2023 15:00:56 UTC 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
Anonymous at Mon, 18 Dec 2023 04:37:29 UTC No. 967524
Found this interesting Blender Plugin called "Polyhedral Splines".
https://uf-cise-surflab.github.io/b
https://github.com/UF-CISE-Surflab/
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.
Anonymous at Mon, 18 Dec 2023 04:52:54 UTC 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/S
Anonymous at Mon, 18 Dec 2023 05:13:44 UTC No. 967527
There used to be a software called Animation:Master
https://www.youtube.com/watch?v=MKe
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/jp
It's not complete and it has been abandoned long ago but the modeler works. Get version 0.3
Anonymous at Mon, 18 Dec 2023 05:53:36 UTC 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
Anonymous at Mon, 18 Dec 2023 06:38:21 UTC 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.
Anonymous at Mon, 18 Dec 2023 06:50:41 UTC 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.
Anonymous at Mon, 25 Dec 2023 03:05:29 UTC 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.
Anonymous at Tue, 9 Jan 2024 20:04:36 UTC 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 at Sat, 3 Feb 2024 14:31:19 UTC 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