Pues después de una semana de trabajo y algunos diseños, terminamos la primer pareja de mesas para cutout multiplano. Nuna había pensado en un multiplano para stop motion pero fué algo super interesante ver la variedad de diseños que existen. Aprovechando la invitación de Paola González y la oportunidad de la Facultad de Cine para elaborar un par de éstas mesas.
Decidí usar madera de pino de 1a para mantener un diseño sin nudos y con pocas torceduras que se corrigieran en el cepillo de madera, quería mantener un diseño modular para poder meter insertos de diferentes grosores y no sólo un sólo material, que sea flexible para plexiglass, vidrio y metacrilato dependiendo del tipo de animación si es claymation o cutout paper. También diseñé algunos insertos en 3D para fijar la hoja del material a los soportes, que fuera fácil de acomodar al seleccionar los planos y la distancia entre los mismos y que éstos no se movieran una vez definida la distancia, después de todo no podemos permitir movimientos en la superficie al estar animando.
Terminé imprimiendo los spacers en PETG con fuzzy para replicar un acabado rústico.
El spacing de las hojas está directamente en los brazos sin ejercer presión al insertarse para evitar el desgaste al insertar las hojas y garantizar muchos años de vida útil. El diseño modular permite insertar una mesa de luz en la parte inferior y estoy pensando en un diseño para soporte de cámara que se pueda colocar en la parte superior.
Especificaciones:
Medidas: 60x50x60 cm Espacio entre planos de 5cm Soporta líquidos Acabado negro entintado con barniz matte y redondeado de cantos.
The mini lecture I gave the other day at the “3D Background Shop Community,” a loose gathering of people who use 3DCG tools to create backgrounds for animation and manga, was surprisingly well received. Table of Contents
Speed is the name of the game when it comes to animation background art!
I introduced the following 5 tips at the mini class. I would like to introduce these briefly.
1. Gradient map for easy aori sky!
2. Texture control with CameraRAW filter!
3. Random Fill to create infinite image BG!
4. Fingertip tool for blur-free painting!
5. Shorten the time with the Shape tool!
I introduced how to use Photoshop’s functions to save time, which I often use when I draw animation backgrounds. The work of an animation background artist is a race against time. How fast can you draw? is very important. The methods introduced here are just my own personal ideas, and each one of them is not that big of a deal. However, in the field of background art for animation, I believe that everyone is working in their own way to draw good pictures as fast as possible. Although the work of animation background art has been attracting more and more attention in recent years, it is rare to see the beauty of a finished picture, or the beauty of the design and worldview, but it is rare to see the ingenuity of the behind-the-scenes work that is not so obvious. This article is only my own idea, so it may not be very common, but I hope you will enjoy it as an example of behind-the-scenes work in the field of animation scenic art. Gradient Maps for Easy Aori Skies!
The gradient map function is probably well known, so I will only give a simple explanation. It is similar to After Effects’ Colorama or blender’s Color Ramp node, and is a simple function to add color based on lightness or darkness (luminance).
A gradient map, for example, goes from light to dark areas of the original image, as in the image above, white → yellow → orange → red → black and as the image gets darker, it gets closer and closer to black. This function assigns a color to the difference in brightness from white to black (even if colored) in the original image by specifying a gradient. By using it on an adjustment layer, colors can be applied based on the luminance information of all the layers below it. Gradient adjusted to look like clouds looking up at an aori sky
The ingenious point in this TIPS was to prepare a gradient map like the one in the image above.
The key point is that the brightest white color is not assigned to the brightest area of the original image, but is used as the shadow color of the clouds.
The pitch-black area becomes the blue sky.
Create a gradient map so that the brightest white part of the clouds is in the middle of the image.
As you can see, the original image is just a fuzzy white on a black background, but the gradient map makes it look like a backlit cloud with an aurora looking up from directly below. With the gradient map adjustment layer on top, you can quickly create the cloud-like appearance by using a fuzzy brush to draw in and out white on a black background layer.
This method was useful for me because it is surprisingly difficult to draw true-horizontal clouds. Of course, there are many people who prefer to draw clouds in the normal way because it is faster, but I introduced this method because it was useful when I needed a large amount of cloud book material. I hope to introduce the rest of the tips in the near future. Extra: Aori Sky with Substance Designer
Finally, as a bonus, I have included a video of a previous experiment using Substance Designer (Substance 3D Designer) to do the same thing I just did with gradient maps. What I am doing is almost the same, but the difference is that I was able to create a lot of patterns non-destructively here. I tried this a long time ago, but you may be able to do it now with blender nodes, etc.
When creating backgrounds for actual animated films, it is necessary to consider composition, perspective, overlap with characters, etc. for each cut, and to draw a sky picture that suits the production, so it is difficult to use mass-produced materials as is,
However, our background staff is constantly striving to create the best possible backgrounds in the limited time we have, while gradually adding little tricks like the ones I have introduced here.
We hope to have more time to write articles in the Notebook by making full use of these time-saving tips, and we hope to introduce other tips as well. Thank you for reading.
This set of free tools works as a great substitute to PSOFT After Effects plugins like CelBlur, ColorReplace, etc… Feel free to check them out, we used PSOFT tools for a while at the studio and now we’re switching to these as they’re compatible with old and new versions of AE.
DeepMotion, a well-known AI-based character motion solution, has released an open beta of SayMotion, a service that generates 3D motion of a person from text!
SayMotion: Text to 3D Animation | Open Beta Now Available!
Imagine a world where creating amazing 3D animations is as easy as describing your vision. DeepMotion’s SayMotion™ goes beyond other generative 2D AI tools to make this vision a reality. Simple text prompts (video prompts coming soon!) allows complex 3D motion to be easily generated in minutes, allowing creators to sit in the director’s chair and bring their digital actors to life with words.
Full browser control: requires internet connection and web browser Enter text prompts and select characters to generate motion Export formats: .FBX, .GLB, .BVH, or .MP4 Inpainting tools and generative AI to add, enhance, and blend animations
These services keep growing…. Is it time for a domestic one? For more details, please check the official website! Links
SayMotion™ by DeepMotion | Text to 3D Animation Generative AI Screenshot of deepmotion.com
DeepMotion related solutions have been introduced in the past, Animate 3D is still alive and well, but Neuron (Motion Brain) is no more…
Well it’s been a while, elections are coming and I don’t want to be reading bullshit about people I don’t care for, so made this quick TAMPERMONKEY script that will filter anything containing the words on the list and clear the website up for you.
With a little blur:
// ==UserScript== // @name Word Blocker // @namespace http://tampermonkey.net/ // @version 0.3 // @description Block specific words on webpages // @match *://*/* // @grant none // @author Edu Altamirano // @website https://www.cocoalopez.com/blog // @license MIT // ==/UserScript==
(function() { 'use strict';
// List of words to block var blockedWords = ['boluarte', 'milei', 'salinas', 'xochitl', 'netanyahu', 'israel', 'boluarte', 'ecuador', 'noboa', 'piqué', 'sunak' ];
// List of websites to filter var websitesToFilter = ['example.com', 'another-example.com'];
// List of websites to exclude from filtering var excludedWebsites = ['excluded-example.com', 'another-excluded-example.com'];
// User choice: 'all', 'list', or 'none' var userChoice = 'all'; // Change this to your preference
// Function to check if an element contains a blocked word function containsBlockedWord(element) { var text = element.textContent.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); for (var i = 0; i < blockedWords.length; i++) { var blockedWord = blockedWords[i].normalize("NFD").replace(/[\u0300-\u036f]/g, ""); if (text.includes(blockedWord)) { return true; } } return false; }
// Function to hide elements containing blocked words function hideBlockedElements() { var elements = document.querySelectorAll('p, h1, h2, h3, h4, h5, h6, a, span'); elements.forEach(function(element) { if (containsBlockedWord(element)) { // Cross out and color red the blocked words element.innerHTML = element.innerHTML.replace(new RegExp(blockedWords.join("|"), "gi"), function(matched){ return '<span style="color: red; text-decoration: line-through;">' + matched + '</span>'; });
// Wait a second, then add a blur effect before hiding the element setTimeout(function() { element.style.transition = 'all 0.5s'; element.style.filter = 'blur(10px)'; setTimeout(function() { element.style.display = 'none'; }, 500); }, 1000);
// Also hide the closest parent div var parent = element.parentElement; while (parent) { if (parent.tagName.toLowerCase() === 'div') { (function(parent) { setTimeout(function() { parent.style.transition = 'all 0.5s'; parent.style.filter = 'blur(10px)'; setTimeout(function() { parent.style.display = 'none'; }, 500); }, 1000); })(parent); break; } parent = parent.parentElement; }
// Also hide any preceding img elements within the same parent element var sibling = element.previousElementSibling; while (sibling) { if (sibling.tagName.toLowerCase() === 'img') { (function(sibling) { setTimeout(function() { sibling.style.transition = 'all 0.5s'; sibling.style.filter = 'blur(10px)'; setTimeout(function() { sibling.style.display = 'none'; }, 500); }, 1000); })(sibling); } sibling = sibling.previousElementSibling; } } });
// Hide img elements with alt text or sibling a element text containing blocked words var images = document.querySelectorAll('img'); images.forEach(function(img) { var altText = img.alt.toLowerCase(); for (var i = 0; i < blockedWords.length; i++) { if (altText.includes(blockedWords[i])) { setTimeout(function() { img.style.transition = 'all 0.5s'; img.style.filter = 'blur(10px)'; setTimeout(function() { img.style.display = 'none'; }, 500); }, 1000); break; } }
// Check if the current website should be filtered function shouldFilterWebsite() { var currentWebsite = window.location.hostname; if (excludedWebsites.includes(currentWebsite)) { return false; } else if (userChoice === 'all' || (userChoice === 'list' && websitesToFilter.includes(currentWebsite))) { return true; } else { return false; } }
// Run the script after the DOM is fully loaded window.addEventListener('load', function() { if (shouldFilterWebsite()) { hideBlockedElements(); } }, false); })();
And if you want a second to see the muted words v0.2
// ==UserScript==
// @name Word Blocker
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Block specific words on webpages
// @match *://*/*
// @grant none
// @author Edu Altamirano
// @website https://www.cocoalopez.com/blog
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// List of words to block
var blockedWords = ['boluarte', 'milei', 'salinas', 'Xochitl', 'Xóchitl', 'Israel', 'Netanyahu', 'israel', 'Xóchitl', 'xochitl', 'Milei', 'Boluarte', 'Israeli', 'Macron', 'macron', 'futbol', 'fútbol', 'Argentina', 'argentina'];
// List of websites to filter
var websitesToFilter = ['example.com', 'another-example.com'];
// List of websites to exclude from filtering
var excludedWebsites = ['excluded-example.com', 'another-excluded-example.com'];
// User choice: 'all', 'list', or 'none'
var userChoice = 'all'; // Change this to your preference
// Function to check if an element contains a blocked word
function containsBlockedWord(element) {
var text = element.textContent.toLowerCase();
for (var i = 0; i < blockedWords.length; i++) {
if (text.includes(blockedWords[i])) {
return true;
}
}
return false;
}
// Function to hide elements containing blocked words
function hideBlockedElements() {
var elements = document.querySelectorAll('p, h1, h2, h3, h4, h5, h6, a, span');
elements.forEach(function(element) {
if (containsBlockedWord(element)) {
// Cross out and color red the blocked words
element.innerHTML = element.innerHTML.replace(new RegExp(blockedWords.join("|"), "gi"), function(matched){
return '<span style="color: red; text-decoration: line-through;">' + matched + '</span>';
});
// Wait a second, then add a blur effect before hiding the element
setTimeout(function() {
element.style.transition = 'all 0.5s';
element.style.filter = 'blur(10px)';
setTimeout(function() {
element.style.display = 'none';
}, 500);
}, 1000);
// Also hide the closest parent div
var parent = element.parentElement;
while (parent) {
if (parent.tagName.toLowerCase() === 'div') {
(function(parent) {
setTimeout(function() {
parent.style.transition = 'all 0.5s';
parent.style.filter = 'blur(10px)';
setTimeout(function() {
parent.style.display = 'none';
}, 500);
}, 1000);
})(parent);
break;
}
parent = parent.parentElement;
}
// Also hide any preceding img elements within the same parent element
var sibling = element.previousElementSibling;
while (sibling) {
if (sibling.tagName.toLowerCase() === 'img') {
(function(sibling) {
setTimeout(function() {
sibling.style.transition = 'all 0.5s';
sibling.style.filter = 'blur(10px)';
setTimeout(function() {
sibling.style.display = 'none';
}, 500);
}, 1000);
})(sibling);
}
sibling = sibling.previousElementSibling;
}
}
});
// Hide img elements with alt text or sibling a element text containing blocked words
var images = document.querySelectorAll('img');
images.forEach(function(img) {
var altText = img.alt.toLowerCase();
for (var i = 0; i < blockedWords.length; i++) {
if (altText.includes(blockedWords[i])) {
setTimeout(function() {
img.style.transition = 'all 0.5s';
img.style.filter = 'blur(10px)';
setTimeout(function() {
img.style.display = 'none';
}, 500);
}, 1000);
break;
}
}
var sibling = img.nextElementSibling;
while (sibling) {
if (sibling.tagName.toLowerCase() === 'a' && containsBlockedWord(sibling)) {
(function(sibling) {
setTimeout(function() {
img.style.transition = 'all 0.5s';
img.style.filter = 'blur(10px)';
setTimeout(function() {
img.style.display = 'none';
}, 500);
}, 1000);
})(sibling);
break;
}
sibling = sibling.nextElementSibling;
}
});
}
// Check if the current website should be filtered
function shouldFilterWebsite() {
var currentWebsite = window.location.hostname;
if (excludedWebsites.includes(currentWebsite)) {
return false;
} else if (userChoice === 'all' || (userChoice === 'list' && websitesToFilter.includes(currentWebsite))) {
return true;
} else {
return false;
}
}
// Run the script after the DOM is fully loaded
window.addEventListener('load', function() {
if (shouldFilterWebsite()) {
hideBlockedElements();
}
}, false);
})();
If you love plasticity and would like to play with CAD visually, there was a time where this app was working and free. Well you can still install it and use it on windows.
123 Design is a visual CAD software, from here you can export to meshmixer and then to prusaslicer and slice 3d print your pieces. Basically is the previous locally run Tinkercad
So if you are used to the fast blazing UI speeds of old 3dsmax 2009, then you’re like me, annoyed when 2016+ MAX versions became extremely laggy. So I’ve found a solution.
Set a Qt Environment variable in Windows
In some instances, 3ds Max UI improvements may occur by setting a Qt (UI) environment variable in Windows:
In Windows (8 or 10), go to the Windows Search bar.
Type: System. (It should bring up the choice of “System (Control Panel).”
Press Enter.
In the System menu, in the bottom-left of the menu, click the Advanced Systems Settings item. A System Properties menu will appear.
Click Environment Variables. The Environment Variables menu will appear.
Under System variables, click New to bring up the New System Variable menu.
Under Variable name, enter: QT_OPENGL
Under Variable value, enter: Angle
Click OK in to save the changes.
Under System variables, click New to bring up the New System Variable menu.
Under Variable name, enter: QT_ANGLE_PLATFORM
Under Variable value, enter any one of these variables: warp, d3d9 or d3d11. (Note: Save only one of these at a time. If you see no improvement, reboot the PC and repeat the process but enter the next variable in this list.)
Click OK in each menu to save the changes.
Reboot the PC and test the performance in 3ds Max.
Finally we are able to publish the short in YouTube, after several years. Enjoy watching a friendship story about living in the friend zone and keeping up with it until you realize that it has been the tool for success all along.
So recently I wanted to block the comments section on a website however the element blocking was not working as they used random strings at the end of the div ID.
In this case the element appeared as:
###comment_iframe_65b14c04e9ff711034703604
Which when blocking will only block that page’s iframe and leave all the others appearing on other pages.
So to block the iframe properly, we have to use a wildcard, which normally would be *, meaning that
###comment_iframe_*
Would be blocked, however that doesn’t work since Adblock, Ublock etc use CSS selectors, so instead we have to use
##[id^="comment_iframe_"]
Which allow us to block everything after “iframe_”.