Тёмный

The Illusion of Motion: Making Magic with Textures in the Vertex Shader 

GDC
Подписаться 518 тыс.
Просмотров 77 тыс.
50% 1

In this 2017 GDC session, Tequila Works' Mario Palmero presents ways to use textures in vertex shaders as a cheaper alternative solution to established methods, and present a new technique for animation pipelines that bypasses the CPU and enables animators to increase bone counts dramatically.
Register for GDC: ubm.io/2yWXW38
Join the GDC mailing list: www.gdconf.com/subscribe
Follow GDC on Twitter: / official_gdc
GDC talks cover a range of developmental topics including game design, programming, audio, visual arts, business management, production, online games, and much more. We post a fresh GDC video every day. Subscribe to the channel to stay on top of regular updates, and check out GDC Vault for thousands of more in-depth talks from our archives.

Опубликовано:

 

9 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 71   
@NeilRoy
@NeilRoy 5 лет назад
Interesting ideas. I thought he was fairly clear in what he said, I certainly understood it. Considering English is obviously not his native language, he done better than i would. Anyhow, yeah, food for thought, great ideas here.
@mehdi5575
@mehdi5575 5 лет назад
This is amazing! Thanks so much for sharing your knowledge with us
@getrekt8365
@getrekt8365 5 лет назад
THANK YOU SO MUCH Tequila Works and Mario Palmero!
@gyakoo
@gyakoo 5 лет назад
For everyone complaining about his language problems, try to put you in his shoes. Not your native language. Probably the first time he speaks in public. Subject is complex and it's crowded. Lack of sleep due flights. It's hard to work and speak when it's not your native lang.
@tnpcook
@tnpcook 5 лет назад
While these are potential things that affected the result, them existing does not improve the presentation. Ideally, a good presenter would take steps to mitigate these problems, and if they don't or couldn't, the critique is valid. An example is the guy having visuals, which definitely helped. The information is valuable and still appreciated, but communication is important in the sharing of information. Remaining agnostic to the problems of a good presentation, does not improve the presentation.
@NeilRoy
@NeilRoy 5 лет назад
Agreed. I liked the presentation. He done better than I would if I had to speak any other language! ;) He presented some fascinating ideas I thought.
@NeilRoy
@NeilRoy 5 лет назад
@@tnpcook: I tell you what, get a refund if you didn't like it, otherwise, STFU.
@tnpcook
@tnpcook 5 лет назад
@@NeilRoy being critical of a detail isn't mutually exclusive with enjoying it. It would be absurd to dismiss the good presentation for that alone, but also disingenuous to ignore.
@KimboKG14
@KimboKG14 4 года назад
I like these kind of speakers most, because they know about it and try to pronounce as understandable as possible. That's if you're going with it. maybe amp up the speed. But lot better for other nonnative speakers than many native speakers.
@wbahnassi
@wbahnassi 5 лет назад
"Skinning with AniTextures" from the book ShaderX4 (2006), has a full description of how to do the stuff mentioned here (including some of the "Future Work") in implementation detail with working code and HLSL shader samples.
@frajet
@frajet 3 года назад
Is it publicly acessible anywhere? Buying hardcover for few pages is not an ideal solution, especially when it is not available to be shipped to my country.
@wbahnassi
@wbahnassi 3 года назад
@@frajet ShaderX4 hasn't been made publicly free yet unfortunately
@frajet
@frajet 3 года назад
@@wbahnassi I guess still the hlsl implementation is on the CD instead of written as text in the book, so it wouldn't help. I've read on twitter you wrote: "But nowadays you can also do with StructuredBuffers for more flexibility than textures.". But StructuredBuffers is a bit complicated for use, especially in UE4, so I would like to stick to textures, but need to somehow bypass the 8192 verts limit, but why is it packed to the texture so inefficiently that Y = animation frame and X = vertex position? Why the texture is not packed more tightly to occupy more space of the texture and thus allowing more than 8192 verts? Isnt it a matter of simple lookup code with module in the vertex shader? What am I missing here? Thanks.
@wbahnassi
@wbahnassi 3 года назад
@@frajet That was referring to skinning. Texture size limit (8k or 16k) means you have up to 8k or 16k bones controlling the mesh, regardless of how many verts it has. I've never seen a character animated with more than a couple hundred bones in real game production.
@frajet
@frajet 3 года назад
​@@wbahnassi Yes I understand that, but one of the motivation in this video at 14:50 was "Huge amount of vertex data.". Which is the only thing I need, without using bones. In UE4 they've 'recently' implemented this old technique storing vertex offset positions in the texture docs.unrealengine.com/en-US/Engine/Animation/Tools/VertexAnimationTool/index.html while saying 8k is the limit of the verts stored in the texture, because of the 8k tex limit, but my question is simpler than you think. Why did they not pack texture more tightly by just changing lookup a bit? It stores frames on Y axis and verts positions on X axis, but there may be max. few hundreds of frames stored, while verts may be >8k, thus it doesnt make sense and that is why I am confused here. Then I've thought there may be some better way to send verts to gpu and reference them from vertex shader - and found your tweet about StructuredBuffers, but I've found it complicated for my purpose. I only want to pack say 20k final verts offset to texture, without any bones. Is that an issue? I see that it is doable, but somewhat I am confused with UE4's implementation limitting verts to 8k because occupying one axis by the animation frame. So I am confused why did they choose this approach as there is too big space for 8k anim frames while 8k verts limit is too little.
@cupsster1
@cupsster1 5 лет назад
Very nice talk! I appreciate this on was true to 'developer' part of whole conference as lately there are a lot of trash talks that does not have anything related with actual development process itself and just repeat most obvious stuff we all know for ages ( eg marketing, or spending good 1/4 of talk just talking about presenter ego and life since childhood to now).. So thank you again Mario! I enjoyed talk.
@wmka
@wmka 2 года назад
Thank you and have a great day.
@ZeroZ30o
@ZeroZ30o 5 лет назад
Great stuff
@talchyr
@talchyr 5 лет назад
can't wait to deep fry an animation
@ChristopherDrum
@ChristopherDrum 5 лет назад
Presumably one could encode bone position for various linguistic phonemes, the mouth shapes required to produce those sounds, then do the color blend to morph between any two phonemes to generate a kind of on-the-fly lip-syncing? Use, a unique texture for each spoken language and maybe that could fulfill typical use-cases on many low-budget projects.
@adrawdesign
@adrawdesign 2 года назад
incredible !!! thank you for share this
@DangerRangerous
@DangerRangerous 4 года назад
It's like visually encoding DNA but for animation instructions.
@mathmonium
@mathmonium 5 лет назад
genius talk!
@xrsxrsxrsxrs
@xrsxrsxrsxrs Год назад
How they transform simulation into bone animation? ( I only hear about a solver at 15:46 but not the name of the software)
@ThomasLaverne
@ThomasLaverne 4 года назад
Very nice talk! I'm not sure any compression technique such as PCA would give good results here because 1) you would suffer from imprecision 2) the cost of applying the inverse pca ( two matrix multiplication) might be prohibitive... Anyway additional level of compression like storing floating point differences from one master bone to a child bone might help?
@chadyonfire7878
@chadyonfire7878 Год назад
WHOAH very interessting
@Sh1sou
@Sh1sou 5 лет назад
While an animation is running (with texture), and then it surprisingly collides with something, is it possible to change the texture at runtime to make the animation fit the new situation?
@Zaft9
@Zaft9 4 года назад
I can't personally think of a reason that would prevent you from doing so. In it's most complex form it shouldn't be any different than assigning data and telling the engine where to start referencing the texture from. I think this is where third party tools could really help to push the tech forward.
@Alkis05
@Alkis05 3 года назад
It would be possible, but not worth it. The whole point of baking the animation into a texture is a trade off between memory and processing. The animation is already computed. If you were to change the animation dynamically you would have to calculate it on the fly and that defeats the purpose of baking it. That is why he suggested it's use to facial animation and the such.
@ParkingLotStudioGames
@ParkingLotStudioGames 3 года назад
Besides how would you detect collision if the animation is baked? With regular skinning you can attach your colliders to your bones for dynamic collision detection, with baked animation your can only use a capsule collider or if you come up with a way to animate them following the mesh vertex animation do let us know
@davidmurphy563
@davidmurphy563 2 года назад
Bet you could do the vertex texture animation to bone transform with a Discrete Fourier Transform. That way to can just process it and feed in the bones. It would be better than feeding the animation because the initial start condition would have a periodicity which exactly replays the animation from the initial wave conditions.
@rendermanpro
@rendermanpro 4 года назад
Nice, but.... so whats big outcome from baking to bones/skinning from the second part? Looks like more "when I have nothing else to do" and inventing a wheel for non really existed problem...
@ParkingLotStudioGames
@ParkingLotStudioGames 3 года назад
Wonder why nobody agreed with your opinion in a year+
@razzraziel
@razzraziel 5 лет назад
this is hardcore.
@cosmotect
@cosmotect 4 года назад
That's what I thought, but to my amazement I understood like half of it!!! I am progressing :D
@stenfeio
@stenfeio 4 года назад
Any folks know what methods they used to bake the animation data to texture?
@mariopalmero2606
@mariopalmero2606 3 года назад
It was a 3dmax custom made script
@ParkingLotStudioGames
@ParkingLotStudioGames 3 года назад
XYZ to RGB, literally took the normalized value Of XYZ and used them to compose each pixel, repeat for all needed transforms and you're done
@user-rd6uc2sf6i
@user-rd6uc2sf6i 3 года назад
so this is how devs are able to animate hundreds of objects on the screen without killing framerate. impressive
@Foxtrop13
@Foxtrop13 5 лет назад
baking animation to a texture to remove the cpu from the process, genius
@pavelnikulin8240
@pavelnikulin8240 3 года назад
Why to do so when there are mesh shaders now which do pretty much the same, but do it properly?
@EveryCrime
@EveryCrime 3 года назад
@@pavelnikulin8240 newbie here, are you referring to a geometry shader?
@titsbitchmcgee7502
@titsbitchmcgee7502 3 года назад
@@EveryCrime It's more like a compute shader
@filipzawadzki9424
@filipzawadzki9424 2 года назад
What's the difference if it's a texture or other matrix file? That doesn't make sense why this is called texture as it isn't used to make graphics anymore but for animate objects.
@Zuriki09
@Zuriki09 2 года назад
It is a texture because it is literally a texture in memory.
3 года назад
This is for everyone expecting the world to speak native English (referring to man asking in 28:12). I was living in the UK for almost 4 years and this kind of awkward situations makes my blood boils. English language is not the belly button of the world. Did you know that in 2020 there are more Spanish native speakers than English?? And the world keeps spinning, yes it does) so you don´t have to expect everyone to speak perfectly. If you ask someone for something and he says "Sorry", it means "Could you repeat SLOWER!!!!!? I´m not native like you, DO YOU MIND?". If you come to my country (Spain) you will learn to say "Perdón, ¿puedes repetirme despacito?" and if you don´t get it either second time you will understand these kind of uncomfortable situations.
@SevenDeMagnus
@SevenDeMagnus 3 года назад
Cool water.
@jonny__b
@jonny__b 5 лет назад
The subject matter was really interesting, but god was this speaker a pain to watch.
@giampaolomannucci8281
@giampaolomannucci8281 5 лет назад
Agree, I can't go past 5 minutes, which sucks.
@peacku
@peacku 5 лет назад
It's hard to be very good at something nerdy and a good public speaker at the same time, I'd rather it be this way than the other way around. (i.e. a good speaker that doesn't know their subject well)
@PacTheOne
@PacTheOne 5 лет назад
he is doing his best guys damn
@jonny__b
@jonny__b 5 лет назад
@@peacku you're right, something is better than nothing, it just seems a shame to me that his brilliant ideas can't be articulated. I watched til the end but I fear many won't make it as far
@willhart2188
@willhart2188 5 лет назад
@@giampaolomannucci8281 I recommend watching from 15:20 forward if nothing else. He talked about storing animation in textures.
@mrmaniac9905
@mrmaniac9905 4 года назад
Okay I get where he's coming from, but like this is something that would've been useful in the late 2000s. now it's really not expensive AT ALL to just simply pass off your data to the vertex/fragment shader via uniforms. Unreal also offers this, so while this is cool and all, it's utterly pointless, sorry.
@Zaft9
@Zaft9 4 года назад
While I'm a fledgling game designer at best and I respect your opinion, I dont think it's entirely useless. This seems like a solid optimization process that might turn out to be vastly superior if the tech is developed more. That and I can see indies benefiting from this method of development where you can rely less on engine specific optimization tools in an effective manner. I think if a third party comes out with a tool that streamlines this process we could be looking at something big.
@mrmaniac9905
@mrmaniac9905 4 года назад
@@Zaft9 Yeah I could agree with that.
@ParkingLotStudioGames
@ParkingLotStudioGames 3 года назад
Yeah why use the vertex shader when we all have 32 core CPUs and RTX 3090s at home, fuck mobiles/consoles and low powered hardware /s
@mashrien
@mashrien 5 лет назад
GL/HL-SL sucks ass, hate writing shader code. It's convoluted and breaks my brain. Was a fairly informative talk but painful to watch.. Also, anyone else smell burning batteries?
@ParkingLotStudioGames
@ParkingLotStudioGames 3 года назад
Being close syntax wise to C I guess C sucks ass as well?
Далее
An introduction to Shader Art Coding
22:40
Просмотров 936 тыс.
Creating the Art of ABZU
27:03
Просмотров 80 тыс.
Would you help?!😳
00:32
Просмотров 3,5 млн
DEFINITELY NOT HAPPENING ON MY WATCH! 😒
00:12
Просмотров 7 млн
How do non-euclidean games work? | Bitwise
14:19
Просмотров 2,4 млн
Sand Rendering in Journey
22:18
Просмотров 73 тыс.
Giving Personality to Procedural Animations using Math
15:30
The Science of Off-Roading: Uncharted 4's 4x4
29:13
Просмотров 38 тыс.
Star Wars: Battlefront and the Art of Photogrammetry
1:02:11
A problem so hard even Google relies on Random Chance
12:06