Home Blog Page 2

Photoshop TIPS 1 Short TIPS for drawing animation backgrounds – Part 1 – A gradient map of the aori sky

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.

FREE OLM Open Tools (Tools for After Effects/Photoshop/Maya)

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.

Some standalone and Nuke tools
https://olm.co.jp/rd/technology/tools
Download here

SayMotion Open Beta – DeepMotion (AI Promot to Animation)

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.

Sign up for the SayMotion Open Beta: https://www.saymotion.ai

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…

Translated with DeepL.com (free version)

Mute unwanted Headlines and Images from websites

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;
}
}

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);
})();

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);
})();

Autodesk 123D Design latest version 2.2.14

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

http://labs-download.autodesk.com/us/labs/trials/worldwide/123D_Design_R2.2_WIN64_2.2.14.exe

DECRYPT 3DS MAX Encrypted .mse Scripts

So it’s been years that I’ve been using this utility and I thought I would share it with the world.

You need the 3DS MAX.bms file to use the quickbms by Luigi Auriemma

Here’s the max.bms which you can also download from the site

https://aluigi.altervista.org/bms/3dsmax.bms

And you can download quickbms from here

http://aluigi.altervista.org/quickbms.htm

All you gotta do is load the GUI, select the 3dsmax.bms and then select the encrypted MSE.

Make 3DS MAX UI Blazing fast!!!


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:

  1. In Windows (8 or 10), go to the Windows Search bar.
  2. Type: System. (It should bring up the choice of “System (Control Panel).”
  3. Press Enter.
  4. In the System menu, in the bottom-left of the menu, click the Advanced Systems Settings item. A System Properties menu will appear.
  5. Click Environment Variables. The Environment Variables menu will appear.
  6. Under System variables, click New to bring up the New System Variable menu.
  7. Under Variable name, enter: QT_OPENGL
  8. Under Variable value, enter: Angle
  9. Click OK in to save the changes.
  10. Under System variables, click New to bring up the New System Variable menu.
  11. Under Variable name, enter: QT_ANGLE_PLATFORM
  12. 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.)
  13. Click OK in each menu to save the changes.
  14. Reboot the PC and test the performance in 3ds Max.

For more information on the Qt variables, see: Qt 5 on Windows ANGLE and OpenGL.

SET 3DS MAX INTERACTION MODE AS WELL

This story about a marzipan seller will make you cry

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.

With Aleks Syntek Music.

ADBLOCK anything that uses wildcards or random numbers

0

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_”.

For more info on CSS selectors please see:

https://drafts.csswg.org/selectors-3/#attribute-substrings

Recover the videos from a Banned Youtube Channel

0

So my Youtube channel got banned about three years ago, I had that channel for almost 17 years but ever since their automated system for copyright filtering, even uploading the same video split into three parts counts as three strikes and like that my channel was gone, no chance to recover, no appeal process.
After uploading tutorials to the community for free, with some of them over 1 hour long and half a million views, the channel was gone.

To my surprise, 17 years of videos is quite a lot and some of these tutorials I did date back to 2008, in a way I used youtube as a tool to teach for free and also to keep a track of my progress along the years. So no backups were made as I changed countries quite frequently.

Finding no option but to contact the copyright owner without response left me in a limbo until a few days ago that I found out this.

You can request a google takeout for your youtube content, even when you cannot login to youtube!!!

The trick if you wanna call it that way is to never cancel your google account, make sure you didn’t request a youtube account removal either. Also this works for those channels where the Google Takeout removed the Youtube option.

Then just login to the google account where you had the channel registered to, and go to this direct link:
https://takeout.google.com/settings/takeout/custom/youtube?pli=1

Request your backup, setup the frequency and you’re all set!

Good luck