正在加载视频...

视频加载失败

🎓Learn how to create a powerful Dynamic Embers smart material in a matter of seconds, in my latest video series (AAA) Pro Tips! This smart material can be used on virtually any 3D asset. ___________________________________________________ In this video, the steps are as follows: 1. Create a fill layer to...

46,031 次观看 • 2 年前 •via X (Twitter)

4 条评论

Fede 的头像
Fede2 年前

thanks for this, great tutorial and result, I would like to see the workflow to export the gradient mask or use it for vertex painting

Cohen Brawley 的头像
Cohen Brawley2 年前

Yes great suggestion, I hope to do such tutorials soon!

Michele Marcelli 的头像
Michele Marcelli2 年前

Woooow! Thanks!!! 😱🫡

Cohen Brawley 的头像
Cohen Brawley2 年前

Cheers! 🍻

相关视频

🎓Learn how to create a powerful Torn Fabric smart material in a matter of seconds in my latest video series (AAA) Pro Tips! This smart material can be used on virtually any 3D asset. ____________________________________________________ In this video, the steps are as follows: 1. Create a base fill layer containing no information. We will use this layer to call out the core effects. Add a black mask to this layer and inside that mask add a paint layer and draw a simple pill shape. 2. Next, add a blur directional and be sure the direction is the same direction that your fabric is flowing to. 3. Add a UV border generator set to subtract to mask out any uv seams followed by an anchorpoint. Additionally, add a messy Fibers 3 fill layer set to overlay. 4. Use a levels to adjust the mask along with a sharpen filter. A warp filter should also be added to introduce some randomness. Add an anchor point at the top of the mask as well. 5. Create another fill layer with its opacity channel set to black and apply a black mask to the fill layer. Inside its mask retrieve the anchorpoint information from the previous fill layer. 6. Create an additional fill layer with a bright diffuse color along with a black mask applied to it. Add the anchorpoint information from the previous mask into its mask as well and this should give us some white fibers on the edges. Now we have a torn fabric effect wherever we paint using the paint layer created inside the callout mask! ____________________________________________________ More AAA Game Dev Tips can be found on my YouTube channel here: Stay tuned for more weekly Tips! Happy Texturing!💚 #gamedev #gameart #tutorial #3dmodeling #hardsurface #texturing

Cohen Brawley

78,811 次观看 • 2 年前

🎓Learn how to create a powerful Worn Leather smart material in a matter of seconds in my latest video series (AAA) Pro Tips! This smart material can be used on virtually any 3D asset. ____________________________________________________ In this video, the steps are as follows: 1. Create a fill layer with a black mask applied. Inside its mask paint a simple pill shape and use a blur slope filter to introduce some random shapes. Apply a marble veins fill layer on top with its blending mode set to color burn. Apply a warp filter as well to introduce some randomness followed by an anchorpoint. 2. Create another fill layer using the same technique to apply some dirt in the crevices of the wear. 3. Next, Inside the main fill layer apply a tiling raw leather texture to its Color and roughness channel 4. Create an additional fill layer up top and apply a black mask to it.Inside this mask retrieve the anchorpoint information followed by a blur filter with a value of 6. Use a levels to increase the spread of the mask. Apply another marble veins matching the values of the marble veins fill layer that we previously added and set its blending mode to multiply. Lastly retrieve the anchorpoint information from the previous fill layer again but this time set its blending mode to subtract. This fill layers properties should have a dark diffuse color and a matte roughness. 5. Add another fill layer with a bright diffuse and height properties with a black mask applied to it. Inside its mask retrieve the anchorpoint information again followed by a blur slope. Apply the anchorpoint information again but this time set its blending mode to subtract. Now we have a worn leather effect wherever we paint using the paint layer created inside the callout mask! ____________________________________________________ More AAA Game Dev Tips can be found on my YouTube channel here: Stay tuned for more weekly Tips! Happy Texturing!💚 #gamedev #gameart #3dmodeling #3dartist #texturing #UE5 #unity #artstation

Cohen Brawley

88,602 次观看 • 2 年前

🎓 Learn how to create a Cherry Wood Material in a matter of seconds in my latest video series (AAA) Pro Tips! ____________________________________________________ In this video, the steps are as follows: 1. Create a slightly red-colored fill layer with high gloss to act as the woods base material. 2. Add a second fill layer with a black mask, and inside that mask add a stripes greyscale set to planar projection. These stripes will act as the wood rings and should be projected onto your mesh in a natural way. The stripes should also be set to max softness, and followed by a Directional Noise 3 with a blend mode set to Difference. 3. Add a levels to tweak the mask and add an anchor point to the mask as well. 4. Create another fill layer with a dark brown diffuse, and store the information from the anchor point into its mask. Apply a levels to increase its intensity, and then add a fill layer up top with the anchorpoint information applied again, but set its blending mode to Subtract. 5. Create an additional fill layer with a very dark diffuse channel. Add a mask to the fill layer and inside its mask add a fill layer containing the anchorpoint information, from the Wood Rings. This fill layer can now be used to add some dark contrast to the center of the wood rings 6. A warp filter should also be used to apply some subtle imperfections to the wood rings and grain. Now we are left with a very nice result of Cherry wood! ____________________________________________________ More AAA Game Dev Tips can be found on my YouTube channel here: Stay tuned for more weekly Tips. Let me know below what you would like to learn in future videos! 👇 Happy Texturing! 💚 #gameart #texturing

Cohen Brawley

25,217 次观看 • 2 年前

CSS Trick! 🤙 You can create gradient borders on translucent elements using mask-clip and mask-composite with a pseudo-element 🔥 .gradient-border::after { mask-clip: padding-box, border-box; mask-composite: intersect; mask: linear-gradient(transparent, transparent), linear-gradient(white, white); } It's the same "Transparent border trick" from before. But, now you apply it to a pseudo-element 😎 The trick is to create a pseudo-element with a gradient background and then mask it so we only see the part we want, the border ✨ mask-clip defines the area affected by a mask. Similar to how you can define background-size. Using padding-box and border-box constrains the two masks. mask-composite is the magic part ✨ It defines a compositing operation for stacked mask layers. Using intersect means that the parts that overlap get replaced. And this seems to work in all browsers 🙌 As for the rest of the styles... – Make sure you set pointer-events: none on the pseudo-element – Make sure it fills the parent element. You can use position: absolute and inset: 0 – Make sure the background fills the space including the border-width. You can use calc to achieve that: --bg-size: calc(100% + (2px * var(--border))); background: var(--gradient) center center / var(--bg-size) var(--bg-size); That's it! 🚀 Gradient borders on translucent elements. You can set all the backdrop-filter: blur() you like! 😅 CodePen.IO link below! 👇

jhey ʕ•ᴥ•ʔ

269,847 次观看 • 2 年前

When I saw the mask "Tribes of the Calf" from Kanbas I knew I had to make it into reality. The jewelry and gold really made it stand out for me. Since Sam Spratt's The Masquerade was revealed, I have been spending time sculpting and dissecting the mask to recreate it in 3D as faithfully as possible. I delved into the creation of this mask for many reasons. I love a good challenge and this mask surely was one for me. Creating something in 3D from a 2D image is not easy, and especially when the source has generative nature, some stuff is hard to interpret, but I tried my best to make sure the visual integrity of the mask is as close to the original as possible. Splitting the whole mask into parts, filling the missing pieces so I can build the textures was quite a lot of work. I tried to present the mask in my own style with a slightly different colorway to adapt to the mask itself. Please enjoy this short animation, and turn on sound🔊 This piece is my statement that I am here to stay. That I have a voice that often feels being lost in the void. That I have been creating and posting digital art for over 20 years now and will continue until I'm gone. I have a story to tell and I want to be heard. The space we have here is small, and is shrinking day by day. It doesn't have to be like that. We need to support each other and push ourselves and people here, otherwise we are all doomed. As Kanbas has put in their observation of the mask: "Inspirational. Emotional. Natural." This is what our space can be, and this is me making a statement with this homage. I will share a 4k still below as well as a short video showing the 3D GLB interactive model together with a yt link to the 4k video since compression here is pretty bad.

shoneec

17,531 次观看 • 1 年前

CSS Tip! 🤙 You can use mask-composite and some JavaScript to create this pointer proximity following glow border ✨ .glow { mask-composite: intersect; mask-clip: padding-box, border-box; mask: linear-gradient(#0000, #0000), conic-gradient(#0000 0deg, #​fff, #0000 45deg); } The trick is to mask a background-image with a combination of mask layers. mask-composite: intersect; means the mask used will be the intersection of the layers 🔥 use source-in, xor; in browsers that don't support intersect; In this demo, you can use pseudoelements and rely on scoped custom properties to do a lot of the heavy lifting for you 🙌 Once you've masked the background, you need to update the starting angle of the conic-gradient on pointermove 👆 You can work that out by getting the center point of each card and then calculating the angle between that and the pointer with Math.atan2 🤓 let ANGLE = Math.atan2( event?.y - CARD_CENTER[1], event?.x - CARD_CENTER[0] ) * 180 / Math.PI ANGLE = ANGLE < 0 ? ANGLE + 360 : ANGLE; CARD.​style.setProperty('--start', ANGLE + 90) You plug that into your conic-gradient mask as a custom property accounting for --spread ⚡️ conic-gradient(from calc((var(--angle) - (var(--spread) * 0.5)) * 1deg), #000 0deg, #​fff, #0000 calc(var(--spread) * 1deg)); To get the blur, you apply a blur to the glow container on each card 🤙 .glows { filter: blur(calc(var(--blur) * 1px); } That's it! Layers of masks that are clipped and composited before being blurred 😎 The added trick is to fade each one in when the pointer is in the defined proximity of the card. For example, don't show unless within 100px of a card. You can see that in the video. Check out the JavaScript code for that 🫶 Couldn't resist making this one 😁 CodePen.IO link below! 👇

jhey ʕ•ᴥ•ʔ

1,180,047 次观看 • 2 年前

Backpropagation by hand ✍️ ~ 11 steps walkthrough below Backpropagation is the algorithm that actually trains a neural network, and it is where most people stop following along. It is not calculus you cannot do. It is matrix multiplication, working backward, one layer at a time. So I drew and calculated one entirely by hand. Goal: push the loss gradient back through a 3-layer network and land on a new value for every weight and bias. = 1. Given = A 3-layer perceptron, an input X, predictions Ypred = [0.5, 0.5, 0], and the truth Ytarget = [0, 1, 0]. = 2. Backprop gradient cells = Let us draw empty cells for every gradient we are about to compute. The shape of the answer comes first. = 3. Layer 3 softmax = We get dL/dz3 straight from Ypred minus Ytarget = [0.5, -0.5, 0]. No chain rule needed, and that shortcut is the whole reason softmax and cross-entropy are paired. = 4. Layer 3 weights and biases = Let us multiply dL/dz3 by [a2 | 1]. One multiplication gives the gradient for W3 and b3 together. = 5. Layer 2 activations = We multiply dL/dz3 by W3 to get dL/da2. The gradient moves back across a layer the same way the signal moved forward. = 6. Layer 2 ReLU = Let us pass it through the gate: keep the gradient where the activation was positive, zero it everywhere else. = 7. Layer 2 weights and biases = We multiply dL/dz2 by [a1 | 1]. The same figure as step 4, one layer up. = 8. Layer 1 activations = Let us multiply dL/dz2 by W2. = 9. Layer 1 ReLU = We apply the same gate again, now on a1. = 10. Layer 1 weights and biases = Let us multiply dL/dz1 by [x | 1], and every weight in the network now has a gradient. = 11. Update = We subtract, and the network has learned. In practice a learning rate scales this step. The gradients: dL/dz3 = [0.5, -0.5, 0] dL/da1 = [1, -2, 2, -1] dL/dz1 = [0, -2, 2, -1] The takeaway: matrix multiplication is all you need. Just like the forward pass, backpropagation is matrix multiplications end to end. You can do every one by hand, slowly and imperfectly, which is exactly why a GPU's ability to do them fast mattered so much to deep learning. 💾 Save this post!

Tom Yeh

953,377 次观看 • 14 天前

What if #AI became as decentralized as #Bitcoin? We sat down with our new friend 3700 from Bitcoin Virtual Machine to hear what their incredible team of anons are working on - "Truly Open AI." Full interview here:👇 1: What positive impact will Layer 2s have on Bitcoin? Layer 2s on Bitcoin open up opportunities for innovation, allowing developers to build dApps and smart contracts on top of Bitcoin, expanding its utility and use cases. By submitting transactions for final settlement on the Bitcoin network, Bitcoin Layer 2 networks claim to achieve the same (or close to) level of security and decentralization as the Bitcoin blockchain. Building a separate execution layer allows them the freedom to employ several technologies (such as rollups). Layer 2 can significantly improve Bitcoin's scalability by processing transactions off-chain, reducing congestion on the main blockchain. Overall, Layer 2s on Bitcoin have the potential to address some of Bitcoin's key limitations, making it more efficient, accessible, and versatile in the long run. 2: What does the ETF approval mean for Layer 2 on Bitcoin? The approval of ETF could potentially have several implications for Layer 2 on Bitcoin: Innovation and Development: With a growing interest in Bitcoin spurred by ETF approval, there could be a surge in research and development efforts focused on enhancing Layer 2. Developers and projects may be incentivized to create new and improved Layer 2 protocols to meet the evolving needs of the expanding Bitcoin ecosystem. An ETF approval could boost mainstream Bitcoin adoption and liquidity. This influx of users may also drive interest in Layer 2 on Bitcoin as a means to enhance the scalability and functionality of Bitcoin. 3: What are the primary challenges facing L2s on Bitcoin? The interoperability of different Layer 2s and their compatibility with Bitcoin's main blockchain can be a challenge. Ensuring seamless interaction between various Layer 2 networks and the Bitcoin blockchain is essential for a cohesive and efficient ecosystem. Some Layer 2s may introduce centralization risks if they rely heavily on centralized entities or trusted intermediaries. Maintaining decentralization and censorship resistance, which are core tenets of Bitcoin, while scaling with Layer 2s is a challenge. 4: What aspects of Layer 2 solutions for Bitcoin are you most enthusiastic about? AI represents one of the cornerstones of our modern era. However, achieving a decentralized AI infrastructure, owned and managed by users, has posed significant challenges. The primary obstacle has been the limited capacity to store and execute AI models due to size and computational limitations. To address this challenge, we propose a new blockchain architecture enabling developers to deploy their own Bitcoin Layer 2 solutions tailored specifically for AI tasks, called Truly Open AI. These Layer 2 blockchains are optimized to handle computationally intensive tasks, such as matrix multiplication, directly on-chain. These Bitcoin Layer 2 solutions offer exceptional throughput, minimal latency, and cost-effectiveness. AI dApps are programmed as Solidity smart contracts, ensuring they operate precisely as intended, free from interference or manipulation. Our BVM AI Contracts Library simplifies the integration of neural networks into dApps, empowering developers to embed AI seamlessly. In summary, I'm particularly enthusiastic about the potential of Layer 2 solutions for Bitcoin to revolutionize decentralized AI by providing scalability, security, and accessibility. 5: How is your Layer 2 different from others being built? BVM distinguishes itself as a Modular infrastructure that empowers thousands of distinct Bitcoin Layer 2 networks, spanning Gaming, DeFi, Social, and AI applications. We're continuously enriching the BVM Module Store with new modules to enhance its capabilities. With each new module, builders gain access to a wider array of tools to explore different use cases on the Bitcoin network. Recent additions include the Filecoin module for affordable storage and the AI Contracts Library for constructing AI-powered Bitcoin Layer 2 chains. We're also gearing up to release a ZK roll-up module in the coming weeks to offer an alternative to the standard optimistic roll-up. We aim to simplify the process of launching a Bitcoin Layer 2 network customized to specific requirements. Think of it as a SaaS offering with predefined best practices. Whether it's a DeFi Bitcoin Layer 2 or a GameFi Bitcoin Layer 2, we provide default solutions tailored to each use case. We're dedicated to expanding the BVM ecosystem by incentivizing more builders to join the Bitcoin network. Through various programs and grants, we support builders in covering their operational costs for Bitcoin Layer 2. Additionally, we offer rewards akin to 'L2 mining' to those who contribute to expanding the user base and total value locked on the network. In summary, BVM stands out with its modular infrastructure, tailored solutions, and efforts to grow the Bitcoin ecosystem.

Supra

83,548 次观看 • 2 年前

007/100 Buttons. This button was way more complex than I first thought. I love the page transition on the Truus site that Dennis Snellenberg and Jordan Gilroy worked on. So I wanted to use that drawing SVG Path idea somehow and fit it into a button. In best case with a mask effect. The idea was to have an SVG path in the background that fills the button. At the same time, this path should also be used as a mask to reveal the differently colored text. The SVG should also be replaceable and work with other SVGs. For the path animation, I can use the DrawSVGPlugin from GSAP. Sounds like a solid plan. I built the button so far, and it worked great in Chrome and Firefox. In Safari, nope. I used an SVG mask that I referenced through CSS. But Safari can’t handle that properly when the path inside the mask is animated, so the animation lags. There was no simple solution for that. At least I didn’t find something. So I had to rebuild the button in another way. What I found was that the SVG mask animation works in Safari when the mask is placed on the desired element inside the SVG. That’s where foreignObject comes in, it allows you to use normal HTML elements inside an SVG. Using that, I rebuilt the hover text inside the SVG. I then referenced the mask on the foreignObject with a bit of JavaScript. And it worked! The button’s structure looks more complicated than I wanted it to be, but that happens quite often when you need to make something work across different browsers 😃 Crafting 100 Buttons with Osmo ⏳ Total time: 96h

Eduard Bodak

67,348 次观看 • 2 个月前

CSS Tip! ✨ It's 2024 and you have a new way to make animated borders 🚀 .glow::after { offset-path: rect(0 100% 100% 0 round var(--radius)); animation: loop; } @​keyframes loop { to { offset-distance: 100%; }} Using the offset-* properties you can animate elements along the perimeter of others 😍 The rect() value gained support in Safari 17.2 🙌 To start, you create an element and put it inside your main element. For example, you put a span inside the button 🤙 Click me! Make the element fill its parent with absolute positioning and inset [data-glow] { position: absolute; inset: 0; } Now the good part, you use a pseudoelement on that element and define an offset-path [data-glow]::after { content: ""; offset-path: rect(0 auto auto 0 round var(--radius)); animation: loop 2.6s infinite linear; } With the rect value, you are saying the path fills the parent container: top: 0 right: auto || 100% bottom: auto || 100% left: 0 Then you can use round to make sure the path uses the same radius as whatever the parent has The @​keyframes animation merely animates the offset-distance of that pseudoelement to 100% @​keyframes loop { to { offset-distance: 100%; }} You can see this more clearly in the video 🫶 The offset-* properties also include an offset-anchor property. This allows you to dictate which point of the element follows the path. For example: anchor-offset: 100% 50%; This means that the "right, center" of the element will follow the perimeter of the parent element 🤙 Lastly, the visuals 🎨 For color, you can use a gradient such as a linear gradient to fill the pseudo-element. [data-glow]::after { background: radial-gradient( circle at right, hsl(320 90% 100%), transparent 50% ); } Then clip away everything so you only have the border and can still have translucent backgrounds, etc. Use a mask with mask-composite ✨ A little transparent border trick: [data-glow] { border: 2px solid transparent; mask: linear-gradient(transparent, transparent), linear-gradient(white, white); mask-clip: padding-box, border-box; mask-composite: intersect; } Bit of a long one. Hope you find it useful 🙏 CodePen.IO link below 👇

jhey ʕ•ᴥ•ʔ

283,498 次观看 • 2 年前