How Are Games Rendering Fur?

Ғылым және технология

Get an exclusive @Surfshark deal! Enter promo code ACEROLA for an extra 3 months free at surfshark.deals/acerola #ad
It's easy to understand why fur is extremely problematic with its high density of objects and physical complexities, but somehow games have been rendering it for years! How could something so complex be so easily simplified?
Topics covered: Hair and its rendering complexities, shell texturing, half lambert, shell texturing applications, limitations of the technique, and overdraw
Code: github.com/GarrettGunnell/She...
Support me on Patreon!
/ acerola_t
Socials:
Twitter: / acerola_t
Twitch: / acerola_t
TikTok: / acerola_t
Discord: / discord
Resources:
hhoppe.com/fur.pdf
xbdev.net/misc_demos/demos/fu...
thegamedev.guru/unity-gpu-per...
www.gamedev.net/forums/topic/...
Music:
Afternoon Break - Persona 3 OST
This Mysterious Feeling - Persona 3 OST
Midori Eyes - Paradise Killer OST
During The Test - Persona 3 OST
Junes Theme - Persona 4 OST
Every Day Is Night - VA-11 Hall-A OST
Underground Club - VA-11 Hall-A OST
Those Who Dwell In The Shadows - VA-11 Hall-A OST
Your Love Is A Drug - VA-11 Hall-A OST
GO!GO!STYLE - Paradise Killer OST
Joy - Persona 3 OST
Sandgem Town - Pokemon Diamond OST
Like A Dream Come True - Persona 4 OST
Layer Cake - Persona 5 OST
Prof. Omochao - Sonic Adventure 2 OST
Thanks for watching!
This video is dedicated to my friend, Alotryx.
#acerola #graphics #gamedev #unity3d #graphics #shaders

Пікірлер: 1 200

  • @Acerola_t
    @Acerola_t6 ай бұрын

    Get an exclusive @Surfshark deal! Enter promo code ACEROLA for an extra 3 months free at surfshark.deals/acerola #ad Thanks for watching!!

  • @Levi1440p

    @Levi1440p

    6 ай бұрын

    can we all just appreciate Acerola's genius idea in using a double video, a technique that emerged with the advent of tiktok and quick videos on social platforms as a method of hooking the audience using super stimulation techniques so that people don't skip videos that might seem uninteresting on their own (like an advertisement)? very well thought out and implemented, with the use of a race that dominates the internet. genuinely brilliant and honest, so good in fact that I didn't skip an ad for the first time in a long time. thank you Acerola, thank you.

  • @releasemeeee

    @releasemeeee

    6 ай бұрын

    Hey Acerola! Great content so far! Really look forward to your take on how glass works in games, this had been the most daunting topic for me as a videogame artist 😟 Would be a blast if you showed how to deal with it and achieve best results. I personally haven't achieved even a somewhat adequate refraction behavior in years I've been into Unreal 🙃

  • @binkbonkbones3402

    @binkbonkbones3402

    6 ай бұрын

    I want to make a mobile game where the galaxy is full of basically dandelions that float around instead of planets, and each sphere can be traversed like mario galaxy Could you maybe do a video on how to do gravity that connects to bodies in space instead of indiscriminately falling down? Also, I'm curious if I could just declare a point in space, and project these shell texture grass effects in all directions from there? Also, by extension if I can declare one point in space can I also declare a distance from that point representing the circumference of the body in space and creating the ground? Not gonna lie, it would be pretty ideal if I could just render each body is space as a basic point in space, and move them around from there Also, I just realised the directional tilting could lend itself well to an effect of being like the tail of a comet giving it it's distinct flaring light look Also, how do you think the smoke effects you previously spoke of would apply to stuff like nebulas and space clouds? Does it scale well? I want it to have a very "cosmic ocean" aesthetic, and making big areas of space different colored clouds would be cool

  • @DarkerCry

    @DarkerCry

    6 ай бұрын

    Just wanted to say this is a super useful video, really appreciate that the code is also available. Especially for the fake physics.

  • @zyth8241

    @zyth8241

    6 ай бұрын

    Shaft studio?

  • @m_remon
    @m_remon6 ай бұрын

    God I just realized he's wearing more layers as time passes. Amazing.

  • @Yixdy

    @Yixdy

    6 ай бұрын

    Dude, spoilers

  • @mmiles9734

    @mmiles9734

    6 ай бұрын

    ​@@Yixdystill opens comments before watching video 😅

  • @PaulFisher

    @PaulFisher

    6 ай бұрын

    And some pretty good bands among them too!

  • @ashtoncartner

    @ashtoncartner

    Ай бұрын

    I watched the entire video without realising even once

  • @julianlanty2066
    @julianlanty20666 ай бұрын

    I imagine Acerola in a party corner like "they dont know how to render realtime hair"

  • @SaadTheGlad
    @SaadTheGlad6 ай бұрын

    These videos are genuinely one of two things I look forward to on KZread, the other being Sebastian Lague videos. Great stuff.

  • @Superhirn

    @Superhirn

    6 ай бұрын

    same

  • @wack9175

    @wack9175

    6 ай бұрын

    Sebastian Lague my beloved

  • @deadsince1996

    @deadsince1996

    6 ай бұрын

    and Stuff Made Here.

  • @Adam-zt4cn

    @Adam-zt4cn

    6 ай бұрын

    Code Parade is one I can recommend. He is another great example of this style of technical, but beautifully explained coding projects.

  • @_jax

    @_jax

    6 ай бұрын

    Yess

  • @AB-Prince
    @AB-Prince6 ай бұрын

    one technique I've seen to hide the gaps between shells, is to distribute the shells such that the gaps are bigger at the bottom and smaller near the top. as the denser lower layers do a good job of masking the gaps but the upper sparse layers need denser layers to hide the gaps

  • @Acerola_t

    @Acerola_t

    6 ай бұрын

    This functionality is in my shader code I didn't expressly mention it tho

  • @ludfde

    @ludfde

    6 ай бұрын

    Couldn't you slightly offset the normal of the quads using noise?

  • @KillahMate

    @KillahMate

    6 ай бұрын

    @@ludfde Instead of being randomly offset, wouldn't we always want the normals to slightly face the camera?

  • @AB-wf8ek

    @AB-wf8ek

    6 ай бұрын

    I wonder if there's some aspect of gaussian splatting that could be applied. As far as I understand, it's using blurry splats that take camera position into place to replace the points in a point cloud. Perhaps blurry shells that also take into account camera position?

  • @tonygamer4310

    @tonygamer4310

    6 ай бұрын

    @@ludfde unfortunately no. That operation has to be done in the vertex shader pass, and each layer only has four vertices, so you could only apply it to the very corners of the grass, not to each individual blade. If you wanted something like that, you'd have to find a way to bake it into the pixel rendering shader, which would get extremely complicated very quickly

  • @evilotis01
    @evilotis016 ай бұрын

    1:40 "a game with a protagonist with a beautiful head of hair but gets [transported?] into a universe where everyone is bald and is trying to kill them with having hair" and that was how Acerola made his fortune

  • @MathewAlden

    @MathewAlden

    6 ай бұрын

    The word you're looking for is "isekai'd". But "transported" is a fair synonym.

  • @DoktorBeta

    @DoktorBeta

    6 ай бұрын

    literally just the world of Bobobo-bo Bo-bobo

  • @dreckneck

    @dreckneck

    6 ай бұрын

    As a guy with long hair entering my thirties, this is an accurate description of my life imo

  • @TalynStormcrow

    @TalynStormcrow

    6 ай бұрын

    Brave video game, all the enemies are helmeted warriors. The end boss is a bear that glitches the game out but you use the glitches to defeat them.

  • @glowstickspinalfluid

    @glowstickspinalfluid

    6 ай бұрын

    i am incredibly bored so i'm gonna be a massive nerd for a second. isekai is a popular genre of anime, where a character is magically transported into another universe. the method of transportation is usually the character getting hit by a truck and a god taking pity on their untimely death. the popularity and weirdness of the genre gets it a more emotional reaction than just "transportation"

  • @LanceBerylDev
    @LanceBerylDev6 ай бұрын

    Nintendo particularly has really gotten really good at shell texturing across a ton of their recent games, particularly with the rendering of fur on characters like Donkey Kong. Fun fact: Super Mario Galaxy 2 (for Nintendo Wii) was originally going to make prolific use of shell texturing for its grass; which was showcased in various early development/promotional screenshots. -However come release, nearly all shell texturing was removed from the game. Why this was done I don't believe was ever specified.. it may have well been due to performance or technical complications, ..though personally I believe the more likely answer is that the team saw the effect as too uncanny applicated in this specific instance, and jarringly dissimilar from the presentation of grass in the first game, so it was scrapped (outside of a few one-off planetoids.)

  • @myrealusername2193

    @myrealusername2193

    6 ай бұрын

    I think they learned a lot from making nintendogs lol, fur on low power devices is hard

  • @WackoMcGoose

    @WackoMcGoose

    6 ай бұрын

    Paper Mario TTYD used a similar method (not _procedural_ texturing, just layered textured shells) in quite a lot of areas. The flower beds in Boggly Woods, and the carpeting in the Glitz Pit Champ's Room come to mind...

  • @MizoxNG

    @MizoxNG

    6 ай бұрын

    they still used it for the Bee Queen in both galaxy games

  • @romajimamulo

    @romajimamulo

    6 ай бұрын

    Adding on a prior comment, both galaxy games use shells for the bee fur.

  • @LanceBerylDev

    @LanceBerylDev

    6 ай бұрын

    @@romajimamulo oh yeah truue

  • @tsbohc
    @tsbohc6 ай бұрын

    Oh, so that's why Sif is like that. Might be just me, but the uncanny look of the fur actually makes Sif look almost ethereal. I bet you could use this to intentionally trigger an uncanny valley effect when designing some otherworldly creatures. Neat stuff!

  • @512TheWolf512

    @512TheWolf512

    6 ай бұрын

    This is the actual good way to utilize phycologists in game dev, instead of using them to figure out how to further exploit people prone to gambling addiction

  • @lordanonimmo7699

    @lordanonimmo7699

    4 ай бұрын

    In the original dark souls the gaps were more subtle,the lighting was hiding it better but in the remaster version he shows the lighting makes some parts darker wich makes the difference way more visible.

  • @puckchang8691
    @puckchang86916 ай бұрын

    Viva Piñata’s grass may be just a visual trick, but you can’t imagine how much I wish I could just lay down in it. It always looked so soft! You can tell me that I need to go outside and touch grass, but the only thing I really want is to touch THAT grass!

  • @Mine4Caft

    @Mine4Caft

    6 ай бұрын

    same

  • @Superhirn
    @Superhirn6 ай бұрын

    I actually don't understand that much of what you say but it's just fun to see you magically combine values into complex lighting models (:

  • @Budder99

    @Budder99

    6 ай бұрын

    Same

  • @StkyDkNMeBlz

    @StkyDkNMeBlz

    6 ай бұрын

    One day

  • @missmia196

    @missmia196

    6 ай бұрын

    I just love hearing nerds talk about topics that interest them 😂

  • @512TheWolf512

    @512TheWolf512

    6 ай бұрын

    All complex things are just a collection of simple things

  • @gdog8170

    @gdog8170

    5 ай бұрын

    I think one can do it by just using black values as transparent pixels

  • @congobongoproductions5476
    @congobongoproductions54766 ай бұрын

    Can't believe no one is mentioning this bit at 19:35 saying "...what's basically a layered cake of meshes" while "Layer Cake" is playing... Masterfully done 👏

  • @juanalbano140
    @juanalbano1406 ай бұрын

    Planet Zoo has an amazing fur system too for LOTS of animals. I'm not totally sure but it also looks like shell texturing, but it looks good even on grazing angles!

  • @nickybakes
    @nickybakes6 ай бұрын

    Our game, Steel Heel Jam, has a non rotating, almost top down camera, and while watching your live streams I realized this would be a cool addition to the environment art for some grass. I plan to easily add some basic vertex animation with a noise texture for wind on the grass.

  • @snbv5real

    @snbv5real

    6 ай бұрын

    I would advise you to look into raymarching grass ShaderToy instead (it look up "grass field with blades"). This technique is outdated, slow, and a pain in the ass to set up comparatively.

  • @Gorialis
    @Gorialis6 ай бұрын

    I'd like to also say about the Half Lambert solution - one of the reason it works so well is because hair is, as you say, transmissive. Real hair has light pass & refract through it, so any part of a contiguous set of hair that is in total darkness will look really weird since it's nearly impossible in most situations with a light source. Half Lambert fakes the indirect lighting you would get from a path or ray-tracing lighting model even in a forward rendering environment, so it feels more natural.

  • @nullvoid3545
    @nullvoid35456 ай бұрын

    When I was looking into methods for making efficient imposters for voxels, I found A technique called inverse frustum mapping which inspired an idea I have yet to implement. So if you take A screenshot of A surface with both A regular and inverted frustum then blend them based on camera position, I think it may be possible to render the sides of depth mapped objects in ways that shells cannot because the texture isn't being mapped orthogonaly.

  • @DiThi

    @DiThi

    6 ай бұрын

    I think a similar technique is frequently used where you just render a depth pass with flipped normals, so you have the depth of the opposite side of each mesh.

  • @haiperbus

    @haiperbus

    6 ай бұрын

    why are you capitalizing "a"

  • @VetNovice
    @VetNovice6 ай бұрын

    Another Acerola banger? You can't be fur real! I've worked with fur throughout my life in 3D, seeing such clever, concise techniques here gives me an incredible basis / tool kit for this. Thanks again, king. 👑

  • @MizoxNG
    @MizoxNG6 ай бұрын

    I remember being absolutely blown away by this technique back in 2002 when it was used in Star Fox Adventures. and again in 2005 with Conker Live and Reloaded... funny, Viva Pinata had the same devs as both of those.

  • @stevethepocket

    @stevethepocket

    6 ай бұрын

    Definitely looked better in StarFox. With Conker it looked like someone had rubbed a balloon all over him. I think it's because they put less effort into refining it. In StarFox it was really only used to render Fox's tail, except during closeups in cutscenes where they applied it (on a much subtler level) to his head as well, so they could focus on making it look as good as possible where it mattered.

  • @curtfehr

    @curtfehr

    6 ай бұрын

    I’m still blown away they pulled it off on a GameCube. Rare had some real technical wizards back in the day, making consoles do what they aught not to have been able to do.

  • @MizoxNG

    @MizoxNG

    6 ай бұрын

    @@curtfehr i mean the gamecube's pixel fill rate was apparently high enough that it could do 34x overdraw while maintaining 640x480 @ 60 fps. That overdraw factor is the important part when it comes to this effect, so yeah it was completely practical on the hardware

  • @addiment
    @addiment6 ай бұрын

    > what is basically a layer cake of meshes > Layer Cake - Persona 5 well done

  • @rafertysullivan6085
    @rafertysullivan60856 ай бұрын

    I know next to nothing about graphics programming but these videos are always so entertaining

  • @_OpenJournal_
    @_OpenJournal_6 ай бұрын

    This has become one of my favorite KZread channels. I don’t have any interest in creating games or other things that require real-time rendering techniques, but I have a deep love for video games (although I don’t really play anymore). 30 minutes of extremely well articulated, concise, funny, and entertaining explanations to technologies and concepts I knew nothing about draws me in. This is what the internet was made for: experts of their craft sharing knowledge publicly. Even if I’m not going to internalize this information so that I can create with it, it’s beautiful to learn about the foundation of how things work and it brings me happiness. Keep sharing mr. Rola! You’re inspiring!

  • @missmia196

    @missmia196

    6 ай бұрын

    You verbalized why I love the Internet! Free expert knowledge everywhere!

  • @morgan0
    @morgan06 ай бұрын

    17:23 another way to do this is to lerp between last frame’s value and the whatever new value by some small amount. technically it’s dependent on the frame rate so maybe do that in the physics update and then a bit of smoothing in the per frame update, or calculate it every time. the benefit of this tho is that it’s an exponential approach, which feels very natural. it’s a first order lowpass filter, and eventually i’d like to make a video going thru it in depth because it’s a really good way to smooth things and i’ve been using it a lot in my game to make things smoother, and i think more people should know about it for game use.

  • @hughjanes4883
    @hughjanes48836 ай бұрын

    Ive ran into plenty of rendering issues with hair, it can cause some really *hairy * opacity problems. Ba dum tis

  • @bigchooch4434
    @bigchooch44346 ай бұрын

    These videos give off huge high school project presentation vibes with all the clipart (in the best way possible) and I absolutely love it

  • @ethancory6127
    @ethancory61276 ай бұрын

    Saying average person, and then showing Jerma is a war crime

  • @pithlyx9576

    @pithlyx9576

    Күн бұрын

    Was just coming down to say the same thing

  • @mileskosik472
    @mileskosik4726 ай бұрын

    Not much of a gamedev person myself, but I have always wondered how shell textures work, and this video explained it super well! Great video, I would love to see how nvidia hairworks and AMD tressfx works!

  • @KoshakiDev
    @KoshakiDev6 ай бұрын

    This technique reminds me of sprite stacking. A good example is NIUM. It is used in 2D games to simulate a 3D object without actual 3D graphics. Instead of layers being randomly generated, they contain "voxel" layers to represent a model. This would mean that the higher the object is, the more resource intensive it becomes.

  • @dimitribarronmore
    @dimitribarronmore6 ай бұрын

    I've seen something similar to shell texturing used in 2D as a method of creating nearly-3D voxelized objects in low-resolution games. By generating vertical slices of a given object and drawing them from lowest to highest with a gradually decreasing Y value between layers, sometimes as small as a single pixel, the slices stack on top of each other and appear to build depth. This creates an effect which is something like front-on isometric perspective, because if you rotate the slices around a common origin so that every part of the image remains in the same relative location it creates an illusion of a three-dimensional object spinning but always maintaining the same 45-ish degree angle relative to the camera.

  • @Dundere_de_Duke
    @Dundere_de_Duke6 ай бұрын

    Acerola, have you ever heard about particle rendered hair? I heard about the graphics of pikmin 3 a while ago and one of the bosses uses this technique to render fluffy fur from partickless that are locked to dark unseable areas of the texture. It's very interesting stuff

  • @Acerola_t

    @Acerola_t

    6 ай бұрын

    yeah, it's a more expensive solution to the geometry problem, definitely really cool that it even works on the switch

  • @lydianlights
    @lydianlights6 ай бұрын

    Another amazing video! I feel like this is one of those things that I will see EVERYWHERE now that I know to look for it. Very excited to participate in this challenge. Love that you're encouraging people to do homework and learn the material :3

  • @superbro6413
    @superbro64136 ай бұрын

    I like to imagine Acerola is a senior graphics technician at Nvidia or something and just every so often releases youtube videos on his off time haha

  • @KingBobXVI

    @KingBobXVI

    6 ай бұрын

    He's talked about it in previous videos, he _was_ an engineer at nVidia, and left (quit or was laid off, I don't remember) not too long ago and decided to focus on youtube videos.

  • @Acerola_t

    @Acerola_t

    6 ай бұрын

    I was a graphics programmer for Intel and PlayStation before quitting to do this full time

  • @superbro6413

    @superbro6413

    6 ай бұрын

    @@Acerola_t Well hot diggity! That explains how you are so well versed in all of this Always enjoy your videos, and I appreciate that you don't shy away from the intense "formulas and calculations" side of "how do I make this look good" lol Thanks again for the video ✨

  • @temotskipuri3151

    @temotskipuri3151

    6 ай бұрын

    Nah Nvidia wouldn't use all this el cheapo flawed stuff. I mean they're pushing realistic lighting with ray tracing, and this technique directly contradicts that, as shown in the video.

  • @mgostIH
    @mgostIH6 ай бұрын

    Regarding RNG in GPUs, what do you think about the paper "Parallel Random Numbers: As Easy as 1, 2, 3" by John K. Salmon et al., which seems to be an approach close to the hashing method you describe, but their implementation is pretty damn good statistically.

  • @Acerola_t

    @Acerola_t

    6 ай бұрын

    I'll check it out!

  • @mgostIH

    @mgostIH

    6 ай бұрын

    @@Acerola_t happy you've seen this comment, I know about it because in deep learning the Jax framework uses it to generate random numbers. The core idea comes from counter mode ciphers, where a seed + counter allow you to get a block of random bytes. The seed remains fixed across the generation and you only need to increase the counter over all the blocks!

  • @yellowpie
    @yellowpie4 ай бұрын

    I came across this video right before the final for my Intro to Modern Graphics Programming class, where I had to research a graphics programming technique and give a mini lecture on it. I only covered about half of what this video does, but it was a pretty fun experience, and while I’m more of a game designer than a programmer, I’m starting another graphics programming class today and I’m excited to learn more! Thanks for making these videos and keeping me curious about graphics programming!

  • @flux1940
    @flux19406 ай бұрын

    24:43 THIS IS THE REASON why old Dark Souls bosses with fur brought my laptop always to lagging when i moved the camera close in ! Now i finally understand. It never made sense to me that when the camera got stuck on the groin of the taurus demon that my pc almost crashed.

  • @TheForbiddenLOL
    @TheForbiddenLOL6 ай бұрын

    20:10 >If they didn't fix it, you don't have to either! Perfectly said! Tech art is all about compromise lol

  • @Lars22
    @Lars226 ай бұрын

    It’s a bit after my bedtime but I had to watch this now ;) Could the rendering discussed at the end be helped by logarithmic search? So checking the mid layer first and then closing in recursively?

  • @Acerola_t

    @Acerola_t

    6 ай бұрын

    That sounds like an interesting optimization, but you'd have to mess around with the ordering of the draw calls manually.

  • @stevethepocket
    @stevethepocket6 ай бұрын

    Hey, I've been thinking about this some more lately, and I've come up with a simple way this could be further optimized: by having the number of shells vary depending on angle from the camera. The more the "strand" points toward the camera, the fewer it needs to be convincing. Though if you're planning to simulate AO, you'll still need a few at minimum to pull off that effect-and on that note, the tapering effect will also be slightly more work because you'll need to go based on distance from the solid surface rather than shell count. It also wouldn't work for most grass applications since a low camera would suddenly cause almost ALL the grass on screen to need more shells, but for something like Sif or the _Genshin Impact_ moss where it wraps around a round object, it might be ideal.

  • @0brn0
    @0brn06 ай бұрын

    Excellent as always @Acerola_t. I'm guessing there's a presentation on Z-priming / Pre-Pass techniques on the horizon to counter some of the overdraw/fill-rate costs?

  • @mochou-p
    @mochou-p6 ай бұрын

    we all appreciate how long it took you to record this, you even grew clothes over time

  • @aidennwitz
    @aidennwitz6 ай бұрын

    I've always liked gaps in shell textures, I think they look neat

  • @edge4694
    @edge46946 ай бұрын

    I like the detail of having the background song being "Layer Cake" while talking about layer cakes at 19:33

  • @andvaribekho
    @andvaribekho6 ай бұрын

    Fantastic video again. Thanks Acerola! I didn't know this technique and loved it. I'm definitely going to use it in my next projects. I'm wondering if overdraw is reduced if PNG8 textures are used? to avoid semi transparent alpha?

  • @MrNyagasu
    @MrNyagasu6 ай бұрын

    I'm just going to take a picture of my dog, put it on a simple square mesh and call it a day.

  • @DracoTheBlack
    @DracoTheBlack6 ай бұрын

    Brave of you to assume that I've only watched four videos about rendering grass.

  • @JMW1906
    @JMW19066 ай бұрын

    Unfortunately i don't have much time in the next weeks, but here is what I'd attempt to improve rendering: Get rid of shells entirely and only jave a single outer shell. Then, in the fragment shader, use the incoming "ray" direction (i.e. the angle to the camera plane) and the position (UV) to know through which shell pixels the ray will travel. Then go through these, stopping when hitting the first grass and perhaps using statistics if too many shell pixels would need to be traversed, thus setting an upper bound on the shaders per pixel runtime. This would basically be like converting each shell pixel into a box between two shell layers. I imagine this being similar to a parallax shader with multiple layers. It does still have some artefacts unless the statistical guess is good. It would however eliminate the overdraw issue and may reduce the amount of artefacts when looking at it from the side. The per grass blade lighting code could then aslo be more complex, although that has other difficulties since each "ray" diesnt know about neighbor grass blades, since it is guaranteed to happen only once per fragment (each fragment will sample the random function multiple times however, but that shouldnt be as big of an issue, since it doesnt even take fommunication between Threads or bandeidth to read from a texture. Anyways, Im curious what we'll see in the follow up video.

  • @JMW1906

    @JMW1906

    6 ай бұрын

    Edit: dynamically changing it by applying displacement would be more difficult and would have more performance overhead however, since that will require some per she'll pixel math Evaluation (or to be more precise: integration into the code for finding the next she'll pixel) as just displacing the shells would not be possible.

  • @TheSliderW
    @TheSliderW6 ай бұрын

    Its nice to see an in depth examination oh this effect. The first time I've seen it was in a magazine that covered the release of shadow of the colosus on PS2. But I also noticed this effect used in Starfox Adventure on the GameCube. Another game from Rare. Pretty much all their games used this effect. That being said, I don't think triangles arw that big of a deal on modern hardware, you could probably get away with blades of grass using 5 vertexes and using various mesh instamcing techniques. This would give tou multiple benefits like proper shadow casting, culling and no need for expensive pixel shading or pixel transparency testing. You probably wouldn't be able to get the same density or long distance views but that calls for additional visual tricks too. Note, tou kept saying this was and still is commonly used but apart from a couple of AAA console games and Breath of the wild clones, I have mostly seen crhe classic X grass. Does anybody know of other games using this technique (outside of small indie projects )

  • @darjanator
    @darjanator6 ай бұрын

    Funny timing. Just last week CIG, the makers of Star Citizen and Squadron 42 had a panel at the annual event CitizenCon where they showed off how they're rendering hair.

  • @darjanator

    @darjanator

    6 ай бұрын

    Are links allowed? kzread.info/dash/bejne/nYCIvMh6k8SwoMY.html

  • @iassongionis5473
    @iassongionis54736 ай бұрын

    NEW ACEROLA BABE WAKE UP 🗣️🗣️

  • @iassongionis5473

    @iassongionis5473

    6 ай бұрын

    +first

  • @Levi1440p
    @Levi1440p6 ай бұрын

    please Acerola, keep making frequent videos because I keep looking for your videos to watch, such quality 😭

  • @RonWolfHowl
    @RonWolfHowl6 ай бұрын

    Darn, I wish I’d had the time to do this challenge!!! I hope you do others like this in the future, I like the idea of “shader jams” where people try to improve on an existing technique. What a great thing to use your influence for!

  • @Mcbuzzerr
    @Mcbuzzerr6 ай бұрын

    This video and the Acerola Furry Challenge is great, I love promoting learning!

  • @clonkex
    @clonkex6 ай бұрын

    WTF, I never realised that's how traditional fur rendering worked!! That's so smart, and also explains the strange stepped look it always has.

  • @orthodynamicstereonails
    @orthodynamicstereonails6 ай бұрын

    This is the first of your videos that i could mostly understand virtually every step that we took! im actually really excited for this because you're helping me get a hang of graphics programming while i have zero programming experience, and also shows that your videos are getting better!

  • @Luka9S9
    @Luka9S96 ай бұрын

    I've been looking forward to this video for a while, thank you for making a video about shell texturing Acerola, that has been a graphical technique i've aways been curious to see how it is made, It aways felt like there's not a lot of stuff that can easily get you into knowing about shell rendering, this video will be great for that, thank you once again ^^

  • @Jomity
    @Jomity6 ай бұрын

    Wouldn't it be possible to billboard the quads towards the camera? That way, there's never a gap between the layers (might ruin the narrowing though)

  • @Roxor128
    @Roxor1286 ай бұрын

    I figured out that Star Fox Adventures was using this technique back in my university days when I borrowed a friend's Gamecube for a weekend. Also, don't be surprised if your Furry Challenge gets a lot of entries involving characters from that franchise.

  • @stevethepocket

    @stevethepocket

    6 ай бұрын

    Honestly it's amazing that this isn't more well known among that franchise's fans, or used on fan-made models. I seem to remember reading that the actual models from that game only recently finally got ripped and released to the public-and even then I've only seen them rendered without the shells or even the subtle sheen on Fox's snout-so Rare must have done a really good job obfuscating their file structure. Because it sure wasn't for lack of demand.

  • @Xaymar
    @Xaymar6 ай бұрын

    AFAIK, there is one way to "fix" the gap between shells by slightly turning the surface towards the camera in the vertex shader. This allows a camera to be parallel to the shell planes, but the math is so complex i never got it to work right. A different technique that i also know of is parallax hair/grass, but that requires an unholy amount of preprocessing so that you can render curves in depth.

  • @markm1514
    @markm15146 ай бұрын

    Thanks for the insightful video on fur rendering. The details about shell texturing in shaders were highly valuable, and your video's setup and pacing were spot on. I'm halfway through and I can already tell I'm going to watch it a few times. I'm excited to try this.

  • @emortal
    @emortal6 ай бұрын

    Could you do shell rendering with billboarding? That might solve the illusion breaking at an angle. (though if big game studios haven't done it I assume this just isn't useful)

  • @stevethepocket

    @stevethepocket

    6 ай бұрын

    Exactly my thought as well. It's such an obvious solution that there must be a serious downside. Upvoting in the hopes that people who know stuff see this and respond.

  • @ashwanishahrawat4607

    @ashwanishahrawat4607

    6 ай бұрын

    Yeah, This is the first thought of every person who knows Billboarding, problem being that the Billboarding is done to a Quad or Triangle during Vertex Shader phase. but the shell here is made up of rasterized pixels, and Pixel itself is just a dot facing screen already. So doing Shell Texturing of a Quad made up of two triangles, has nothing to further Billboarding.

  • @q_druid7801
    @q_druid78016 ай бұрын

    18:54 OH MY GOD! I kept wondering how they made this short soft grass in Genshin, which I really like. Thanks for the video, now I know it

  • @rmt3589
    @rmt35896 ай бұрын

    That's amazing, and I plan on making this an innate tool in my engine, as I'll use it a lot! Subscribed btw. At the beginning of the video I was trying to figure out a solution. The one I came up with was to have basic 3d meshes, then use uv textures to make them look deeper, like hair. Either that or transparency. But this is better than either!

  • @KaiHydra
    @KaiHydra6 ай бұрын

    I wonder if this can be used for generating foilage using generated meshes, this is something i really have wanted to do because I hate the idea of creating individual objects/prefabs for bushes/hedges

  • @cynthius6567
    @cynthius65676 ай бұрын

    I've always been fascinated with how good Fox's fur looked in Star Fox Adventures, considering it was running on the Gamecube. Such a simple trick, but it works wonders, and I think the part that impresses me most is not just how impressive the fur and its "physics" looked, but how well it smoothed out Fox's model and made him look higher fidelity than anything you'd see in other games of the era simply because the fur hid the hard edges of the polygons he was made of.

  • @dowairu
    @dowairu5 ай бұрын

    This is amazing! I'm just learning about shader programming and finding your videos super interesting. Is there any chance this can be done in Shadertoy? I'm assuming it might be easier with Unity because you can control parameters in the engine?

  • @miketheburns
    @miketheburns6 ай бұрын

    it took me until 22:18 to realize you were layering your shirts throughout the video. Mad props.

  • @kayasia8916
    @kayasia89166 ай бұрын

    Great video! Randomly found this vod while bored and surfing, I really enjoyed all of it!

  • @theorybox3094
    @theorybox30946 ай бұрын

    Putting a video of your pet during the length of the sponsorship might be the most brilliant move i've ever seen on youtube

  • @Big.Joe.Grizzly
    @Big.Joe.Grizzly6 ай бұрын

    Nice video man ur a clever dude lol you should do a video about reflections in games. Like window reflections, glass, water, floors etc etc.. it's quite interesting to see all the different ways games achieve reflections. My fav example is in MGS1 for ps1 where puddles on the floor are actually just holes in the geometry with a replica map underneath flipped upside down. Such a simple way to do it but it's so effective especially for the time

  • @Sylkis89
    @Sylkis896 ай бұрын

    I wonder how to make photorealistic mohair/suri alpaca/dual fleece wool/longwol/etc. sweaters, very fluffy but with still distinctly visible structure of the knit that will form various complex patterns, and also how it behaves on a body depending on how tight or loose, the body type, the position the person is taking - how the knit will fold or stretch in different places, and also how the fluffy halo will interact with the lighting, etc... especially if animated, how to make it realistic. Also how to account for the varying thickness of the knit on the body and so on. There's just so much to consider and it seems so difficult and also that usual tricks used for hair will help, but will not cover all bases...

  • @KitsuneFaroe
    @KitsuneFaroe6 ай бұрын

    Literally one thing I have been thinking on how to aproach a lot lately was the exact topic of this video. Amazing! Also your contenta is always top notch very instructivo and really inspiring! I love you teach the beatifulness and technicalities of visuals!

  • @user-tw2kr6hg4r
    @user-tw2kr6hg4r6 ай бұрын

    You should probably use acceleration instead of velocity to calculate the displacement or ideally a blend of both after applying a low-pass IIR filter.

  • @mantacid1221
    @mantacid12216 ай бұрын

    What if you project the texture of the layer above from the camera position onto the layer below to create an occlusion mask? Would that prevent overdraw?

  • @karl6980
    @karl69806 ай бұрын

    I remember trying out using kuwahara filtering in conjunction with shell texturing for grass once, and I remember it looking kind of interesting. Definitely hid the gaps between shells quite a bit

  • @blackasthesky
    @blackasthesky6 ай бұрын

    I just LOVE the humor in your videos. There is so much there hidden in plain sight. And it isn't even distracting (when you aren't currently writing a comment about it).

  • @parmesanzero7678
    @parmesanzero76785 ай бұрын

    Your explanations are so thorough and have just enough balance of the technical and non-technical to be interesting and educational even to those with no expertise. You’re an excellent teacher.

  • @Ebbie155
    @Ebbie1554 ай бұрын

    Just found this channel but can say I’m not disappointed I always wanted to get into game design and all that and don’t really plan to now but it’s nice to see what’s going on behind the scenes and what coding is used

  • @killkingLP
    @killkingLP6 ай бұрын

    Im not sure if what i say now actually works, as i watch these videos mainly for entertainment, but couldnt the spacing problem (especially in games with stylized graphics like genshin) be solved, if we angle the "shell quads"? Maybe its possible to just slightly angle the quads at random or even pass the camera position to the gpu and angle the small quads towards it? I mean sure this would require another vertex passed as a variable and Im not sure if this could cause other issues, but that way the gaps would be guaranteed to be covered even with a low shell count as we would basicly draw these fins you talked about this way. This may work better for the moss quads in the genshin example compared to the rounded fur example, but in certain cases it might improve the jankiness in exchange for probably other jankiness. If there is an error in my thought process or if angling the quads is simply not an option with shell texturing feel free to tell me. This was just an idea i had, without knowing the limitations of the topic.

  • @Fuzzietomato1
    @Fuzzietomato16 ай бұрын

    Your videos are so interesting and well edited!

  • @vibaj16
    @vibaj166 ай бұрын

    What if you slightly offset the angle of each shell (with some funky math to fix the positions of strands for each shell) to try to fix the effect breaking down when you look at the side?

  • @tiarkrezar

    @tiarkrezar

    6 ай бұрын

    I wonder if just adding a slight amount of randomness to the height of each vertex as you extrude them would make the effect look wonky. You could probably fill a lot of the gaps that way though.

  • @assiuq
    @assiuq6 ай бұрын

    You're probably the only KZreadr whose ads I don't skip. That cat cam is pure genius!

  • @TimRobertsSound
    @TimRobertsSound6 ай бұрын

    Great video. Good to see you adding shells (shirts) as you go.

  • @tiagolourenco51
    @tiagolourenco516 ай бұрын

    QUESTION : I've been practicing creating shaders and custom post-processing effects in Unity. Recently, I started a project to recreate the shaders used for characters in Genshin Impact. While I feel comfortable working with shaders, I find myself getting stuck when it comes to using RTHandles, render textures, and render features in URP. My question is, what do you recommend for someone who is just starting out in technical art? Should I use the URP Scriptable Render Pipeline, or should I stick with the Built-In Render Pipeline and attach scripts directly to the camera for custom effects?

  • @shadowdemonaer
    @shadowdemonaer6 ай бұрын

    2:28 generally there would just be a ton of instancing going on for grass and other repeating objects. Instancing is taking and object and duplicating it in such a way that the program acts like there is no extra faces on screen to compute. For example, a cube has 6 sides, and when you duplicate normally you would then have 12 faces to compute, but with instancing you still only have 6. so you can do that with millions of grass blades and have really nice optimization. I'm further in now and really fascinated by how these ideas came to be. Can't wait to see how physics works. Dude I had no idea Genshin did it too. I'm probably going to unfortunately have to figure this out myself.

  • @NovaNocturneArt
    @NovaNocturneArt6 ай бұрын

    Maybe I misunderstood part of the video regarding solving the gaps in shell texturing, if perhaps you debunked this idea, but I am curious if there might be a way to draw the shell's pixel faces so they rotate to a perpendicular angle to the camera view? If the pixel is always facing the camera, or even if it is restricted to a range of angle tolerance compared to the camera's view, I'd imagine that would reduce the gap, so long as the gap does not exceed the pixel size. Though that might be pretty demanding...

  • @the_woodman
    @the_woodman6 ай бұрын

    SICK video I legit look forward to every one dude, thank you for sharing your knowledge in a really entertaining format, it legit helps with figuring this stuff out. also cat distraction during ad is actually insane psychological manipulation and works really well I genuinely didn't even realise I was listening to an ad 🙉

  • @KingBobXVI
    @KingBobXVI6 ай бұрын

    Waiting the whole video to see if you'd mention Shadow of the Colossus, and it being mentioned at 25:49... RIP in pepperonis, sweet prince. Definitely one of the best looking uses of shell texturing for large creatures, imo, and done with very little processing power at its disposal.

  • @HQ_Default
    @HQ_Default6 ай бұрын

    20:05 What if instead of fin meshes, you made each "square" on a shell texture a billboarded sprite? So instead of just being a bunch of flat images on top of each other, the texture is used as a map for placing a bunch of dots that always face the camera. I'm not sure how much this would impact performance, you would definitely be able to get away with much fewer layers this way but even then it would obviously be a lot slower. Maybe it would work well enough to be used sparingly, like on shells that are close to the camera, or for characters where the artifact becomes obvious. The only other solution I can think of would be to tell the computer to fade out parts of a shell texture that are being viewed at a harsh angle.

  • @toonlien4589
    @toonlien45896 ай бұрын

    19:33 clever choice of music

  • @kaasronald3623
    @kaasronald36236 ай бұрын

    been subbed for over a year and it's really nice to see your numbers thrive now. fully deserved. great video as always

  • @Zveebo
    @Zveebo6 ай бұрын

    It took me WAY too long watching this to realise that Acerola was putting an additional T-shirt shell with every appearance

  • @franciscosuarez4521
    @franciscosuarez45216 ай бұрын

    If anyone is interested in how to do human hair, most high fidelity games do "hair cards", It's similar to this, but more handcrafted. You can search that term to find tutorials It's a transparent texture with many rectangular hair parts (the "cards"), each with different densities. Then you model hair strips with long rows of quads, and assign their uv's to one of the cards. The more you stack one above the other, the more real it looks, the same principle as shown in this video. You just use a normal transparent material to display it. It's pretty hard to model I think, even with specialized tools. From what I know you should sculpt it first, use that for generating the strips, and then do manual touch ups High budget modern games do other more realistic approaches probably, share if you know

  • @mudassar14love
    @mudassar14love6 ай бұрын

    I'm so glad I found this channel. Now I know what's really going on with hair and fur in games. Also now I understand how shell texturing is used in Biomutant; I was wondering why characters fur looks weird on certain angles. Great stuff 👍

  • @krisvers
    @krisvers6 ай бұрын

    I've been a fan of your content for a while and I enjoy these types of videos (deep diving into a rendering topic and discussing optimizations) like the grass rendering series. I think it would be very interesting to take a similar look at rendering real-time snow with deformations like RDR2 (Red Dead Redemption 2) does.

  • @DracoGalboy
    @DracoGalboy6 ай бұрын

    Very nice job with your own shell layering

  • @EdenNeedsAYoutubeHandle
    @EdenNeedsAYoutubeHandle6 ай бұрын

    Shadow of the Colossus was what made me interested in shell texturing long before I even knew there was a name for it. Makes sense that they'd want to draw your eye to it, since fur patches are key to climbing the colossi and all that. It blew me away in 2005 and it still holds up today.

  • @EpicGamer63637
    @EpicGamer636376 ай бұрын

    Thank you, i have always wanted to learn these kind of things, I am going to give this a try myself and learn something new 🙂

  • @luminousdragon
    @luminousdragon6 ай бұрын

    When you add more shells to make it look better when you make the grass/hair longer, it seems like you could stagger it so at the very base the distance apart is much greater than at the tip. The tips are going to be seen more often, as the base is covered by all of the surrounding hair. I skipped around a bit so its possible this was in the video.

  • @Lunnauna
    @Lunnauna6 ай бұрын

    I have been trying to understand fur in Unity for weeks, and now you, kind sir, have provided me with all the answers. Thank you very much

  • @DarkSwordsman
    @DarkSwordsman6 ай бұрын

    Your videos are priceless. Not only did you answer my question of how people do the funny furry carpets in VRChat, but you provided an easy to understand concept for hashing (which I was struggling with for a game I made) and also made me understand better how to manipulate textures in UV space. I can not believe these are not paid courses. You are amazing.

  • @nobody.of.importance
    @nobody.of.importance6 ай бұрын

    Regarding the physics section, what I'd personally do is have various control points attached to the base mesh that have physics simulated on them, and attach the shells to those control points. You can control the density of controls, how the material moves, etc etc. Kinda wanna try that myself, now.

  • @held2053
    @held20536 ай бұрын

    Tbh, I almost forgot, that the video was about hair, when he talked about the grass field I was invested in it

Келесі