tag:blogger.com,1999:blog-88231338919420403862024-03-04T23:14:44.765-08:00Koichi Tamura's blogRandom thoughts around programming and CGhohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.comBlogger223125tag:blogger.com,1999:blog-8823133891942040386.post-45128345636973111322020-03-22T01:09:00.000-07:002020-03-22T04:35:58.722-07:00Hang in there!加油!<br />
<div>
Forza!<br />
¡Ánimo!<br />
Bon courage!<br />
Hang in there!<br />
Zlom vaz!<br />
בהצלחה!<br />
geluk!<br />
Viel Erfolg!<br />
بالتوفيق<br />
İyi şanslar!<br />
<br />
from Tokyo</div>
hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-82976366654739000632019-07-01T15:12:00.000-07:002019-07-01T15:12:02.109-07:00Happy Canada Day!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdiBGUcLU-gjNFkZJ1H3M6beWNnOc7GqwKjKUZTpXEPIFAXQkOikPabhUuvYKFSA_sAB5nSMnn-ysCQXGTuH0O5myClF6rC_4Cn5Ga0DL807o_AUdaHrvb2DsWFP_D-3uo1mYuWJYNAk4/s1600/20190701_104131.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdiBGUcLU-gjNFkZJ1H3M6beWNnOc7GqwKjKUZTpXEPIFAXQkOikPabhUuvYKFSA_sAB5nSMnn-ysCQXGTuH0O5myClF6rC_4Cn5Ga0DL807o_AUdaHrvb2DsWFP_D-3uo1mYuWJYNAk4/s320/20190701_104131.jpg" width="240" /></a></div>
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-62910079635831485982019-01-05T14:25:00.002-08:002019-01-05T14:25:46.161-08:00Hello VancouverGood bye Montreal<br />
Hello Vancouverhohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-75530576285000422932018-03-17T06:15:00.002-07:002018-03-17T06:16:48.864-07:00New tab homepage and firefox 59It looks firefox 59 has a nice feature to kindly disable newtab homepage add-on in favor of their cool bookmark page.<br />
If it's not working check the add-on manager.<br />
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-26751939107156244512017-08-28T20:00:00.001-07:002017-08-28T20:01:34.686-07:00VILKU VILKA CraftsA friend of mine has opened an online shop.<br />
<br />
<i>Vancouver based Latvian Lifestyle Shop<br />Latvian Zakka* + Original Handcrafts</i><br />
<br />
Check out their crafts here!<br />
<a href="http://vilkuvilka.ca/onlineshop/">http://vilkuvilka.ca/onlineshop/</a>hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-76522363199796303672017-07-01T14:57:00.000-07:002017-07-01T14:57:08.558-07:00Canada 150Happy Canada day!<br />
Joyeuse Fête du Canada!hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com1tag:blogger.com,1999:blog-8823133891942040386.post-2890468611975726612015-03-25T05:18:00.000-07:002015-03-25T05:18:10.572-07:00Fracture<div class="separator" style="clear: both; text-align: left;">
Real example here.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyx_yLw1ZvmZRco9RgM5RzCCd6QQ1bR740yZLIYqKHEJurQo0Y-ZeHgSzW4WPPMZYAOhCNs_LLGL1jsMAWOKvWgJSLllp7Jm38P5UBvcYZMXbYMirwS36QxDX63y86jWZ5HjfAvCLinhQ/s1600/20150325_211348.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyx_yLw1ZvmZRco9RgM5RzCCd6QQ1bR740yZLIYqKHEJurQo0Y-ZeHgSzW4WPPMZYAOhCNs_LLGL1jsMAWOKvWgJSLllp7Jm38P5UBvcYZMXbYMirwS36QxDX63y86jWZ5HjfAvCLinhQ/s1600/20150325_211348.jpg" height="300" width="400" /></a></div>
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-11849426790673946442014-09-28T08:41:00.001-07:002014-10-26T07:41:14.231-07:00Kd-tree implementation I have implemented my own kd-tree library based on <a href="http://pubs.cs.uct.ac.za/archive/00000847/01/kd-backtrack-techrep.pdf">Accelerating kd-tree searches for all k -nearest neighbours</a> (pdf), compared the result with <a href="http://www.cs.umd.edu/~mount/ANN/">ANN</a> to confirm that it outputs the correct result. It was surprising my implementation was several hundred times faster (below graph, for the same queries, ANN gets 14728 samples while my code gets 15). I still doubt if there's something wrong with my code or profiling because it's too fast even after considering the fact that my kd-tree is specialized in finding nearest *one* point and uses Eigen::Vector4f for SSE optimisation.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlXcliZ2QkN-ultNgRqYlnucZ_l3KL1qKvMoWe3z_vIAonKnf8lOn68GEVkLkrrTnD4cGghfXEwHnPN0TCPSVVYWY9eAwv6LyFl0hQ-wuUIsdlLTBExzoYSpDaQw8wJdJYHUFrXFbT9c/s1600/pprofResult.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlXcliZ2QkN-ultNgRqYlnucZ_l3KL1qKvMoWe3z_vIAonKnf8lOn68GEVkLkrrTnD4cGghfXEwHnPN0TCPSVVYWY9eAwv6LyFl0hQ-wuUIsdlLTBExzoYSpDaQw8wJdJYHUFrXFbT9c/s1600/pprofResult.png" height="283" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
I tested several sampling profiler: perf, gperftools, oprofile, codeXL. It took some time for me to get the correct call graph. Many profilers output a call graph where malloc/new has no parent, probably because libstdc++ is not compiled with no-omit-frame-pointer and cannot find the caller function. Newer profilers such as recent perf and gperftools can handle it correctly. I couldn't though find a way to make perf report's "-G" option work when I took a profile with<br />
<br />
perf record -call-graph dwarf ...<br />
<br />
so I used gperftools for it (above graph). It still took a while until I found pprof's 'callgrind' option (kcachegrind) could not output the result correctly. 'web' worked fine.<br />
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com5tag:blogger.com,1999:blog-8823133891942040386.post-45885074722970852342014-07-27T04:14:00.002-07:002014-07-27T04:14:35.402-07:00Amazing<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/G7dpLcIaUTs?feature=player_embedded' frameborder='0'></iframe></div>
<br />
from <a href="http://en.wikipedia.org/wiki/Andromeda_Software_Development">Wikipedia</a>:<br />
<br />
<i>Andromeda Software Development (or simply ASD) is a <a href="https://www.blogger.com/null" title="Greece">Greek</a> <a href="https://www.blogger.com/null" title="Demogroup">demogroup</a> that was formed in 1992. They produced a number of small intros and demos in the mid-1990s for the <a href="https://www.blogger.com/null" title="IBM PC compatible">PC</a>, most notably CounterFactual (winner of the first Greek demo party ever, <a class="new" href="https://www.blogger.com/null" title="The Gardening (page does not exist)">The Gardening</a> 1995) and Beyond (Placed 4th in The Gardening 1996). ASD was quiet for the following years until 2001, when they presented <a class="new" href="https://www.blogger.com/null" title="Cadence & Cascade (page does not exist)">Cadence & Cascade</a> - their first accelerated demo - and won the <a class="new" href="https://www.blogger.com/null" title="Digital Nexus (page does not exist)">Digital Nexus</a> demoparty, held in <a href="https://www.blogger.com/null" title="Athens">Athens</a>, Greece.</i>hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-62783144649848998572014-07-16T08:45:00.000-07:002014-07-16T09:42:09.017-07:00Testing unified memoryI just tested CUDA6's unified memory. This code worked as I expected.
<br />
<br />
<pre class="python" name="code">
#include <iostream>
#include <string.h>
#include <cuda_runtime.h>
__global__ void set(char* buf, unsigned int num)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < num)
{
buf[i] = 1;
}
}
int main(void)
{
unsigned int num = 16384;
char *buf;
cudaMallocManaged(&buf, num);
memset(buf, 0, num); //##1## D->H(16384bytes). page fault.
set<<<4, 128>>>(buf, num); //##2## H->D(16384bytes).
cudaDeviceSynchronize();
std::cout << (int)buf[0] << std::endl; //##3## D->H(16384bytes). page fault.
std::cout << (int)buf[10000] << std::endl; //No data transfer.
set<<<4, 128>>>(buf, num);
cudaDeviceSynchronize();
buf[0] = 5; //##4## D->H(16384bytes). page fault.
set<<<4, 128>>>(buf, num); //##5## H->D(4096bytes).
cudaFree(buf);
cudaDeviceReset();
return 0;
}
</pre>
<br />
I used a profiler and added comments where data transfers have occurred.
Whenever an un-transferred host memory is accessed for either read or write, Data transfer D->H occurs,
not only before read but before write. In my understanding it is because unless it copies the memory D->H
on write, once you wrote a value to a memory and then read a memory near the address where you have modified
the value, data transfer D->H on read would overwrite your modification. It produces a bit of unnecessary
data transfer (##1##).
<br />
You can also see when ##5##, only 4096 bytes of data transfer occurs, not full 16384 bytes. It is because
it keep tracks of the page you have written (I have asked it to a NVIDIA guy).
<br />
<br />
I modified the main function a little bit and created another buffer buf2.
<br />
<pre class="python" name="code">
int main(void)
{
unsigned int num = 16384;
//Below code adds D->H(16384bytes), H->D(16384bytes). 1 page fault.
char *buf2;
cudaMallocManaged(&buf2, num);
memset(buf2, 0, num);
//Same as above.
char *buf;
cudaMallocManaged(&buf, num);
memset(buf, 0, num); //D->H(16384bytes). page fault.
set<<<4, 128>>>(buf, num); //H->D(16384bytes).
cudaDeviceSynchronize();
std::cout << (int)buf[0] << std::endl; //D->H(16384bytes). page fault.
std::cout << (int)buf[10000] << std::endl; //No data migration.
set<<<4, 128>>>(buf, num);
cudaDeviceSynchronize();
buf[0] = 5; //D->H(16384bytes). page fault.
set<<<4, 128>>>(buf, num); //H->D(4096bytes).
cudaFree(buf);
cudaFree(buf2);
cudaDeviceReset();
return 0;
}
</pre>
<br />
In this code I allocated a unified memory to buf2 and called memset() but buf2 is not used elsewhere.
It adds D->H(16384bytes) when memset() is called and it is natural, but it also adds H->D(16384bytes).
We know the kernel doesn't use buf2 but it is too complicated for CUDA to know that.
So before the first kernel call it also transfers buf2, which is another unnecessary data transfer.
I have concluded unified memory makes the program simpler but not as efficient as I have expected.
I heard Pascal has cleverer memory management. I will wait and see if is good enough.
hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-85850460093191705822014-05-18T07:12:00.000-07:002014-07-02T07:19:28.386-07:00CPU/GPU memory abstractionWhen you write a program that uses GPU (either CUDA of OpenCL), you may want to implement both CPU code and GPU code, and use only one of them depending on the user's choice. For this reason I wanted to know how to treat different kinds of memories generically, i.e. the way to abstract host and device memory.<br />
<br />
The easiest one is to follow the approach of (or just use) Thrust. It has host_vector and device_vector which interfaces are quite similar to std::vector. When you have one of them, you can copy it to another with assignment. Host/device copy will be done automatically under the hood.<br />
<br />
I wanted another way of abstraction to debug the program easily. What interested me was to have a mechanism where input data was either in host or device memory, and the the code does not have to know where it is. After several try and error I implemented one like this;<br />
<br />
template < typename T ><br />
class Buffer<br />
{<br />
public:<br />
T* get(MemoryType mType);<br />
const T* get(MemoryType mType) const;<br />
void setClean(MemoryType mType, bool isClean=true);<br />
void sync(MemoryType mType) const;<br />
void allocate(MemoryType mType) const;<br />
void free(MemoryType mType);<br />
<br />
private:<br />
mutable MemoryType m_cleanState; //Clean state. Bitwise OR of HOST and DEVICE.<br />
mutable void* m_addrs[2]; //Host and device.<br />
};<br />
<br />
It can have both host and device memory, and knows if the data stored in the host/device memory is up to date or not. If the one in the host memory is up to date and one in the device memory is not, it copies data from the host memory to the device by calling sync(DEVICE). if the device memory is already up to date, sync() does nothing.<br />
You can use this class like this,<br />
<br />
someCalculationCpu(const Buffer < float > * input, Buffer < float > * output)<br />
{<br />
input.sync(HOST);<br />
float* ip = input.get(HOST);<br />
float* op = output.get(HOST);<br />
op[0] = ip[0]; /*Do some calculation with CPU*/<br />
output.setClean(HOST); //Tell the buffer that the data stored in the device memory is up to date.<br />
}<br />
<br />
someCalculationGpu(const Buffer < float > * input, Buffer < float > * output)<br />
{<br />
input.sync(DEVICE);<br />
float* ip = input.get(DEVICE);<br />
float* op = output.get(DEVICE);<br />
op[0] = ip[0]; /*Do some calculation with GPU*/<br />
output.setClean(DEVICE); //Tell the buffer that the data stored in the device memory is up to date.<br />
}<br />
<br />
anotherCalculationCpu(const Buffer < float > * input, Buffer < float > * output)<br />
{<br />
/*Same style as someCalculationCpu() with another calculation.*/<br />
}<br />
<br />
anotherCalculationGpu(const Buffer < float > * input, Buffer < float > * output)<br />
{<br />
/*Same style as someCalculationGpu() with another calculation.*/<br />
}<br />
<br />
Now the these are all valid,<br />
<br />
someCalculationCpu(input, output);<br />
anotherCalculationCpu(input, output);<br />
<br />
someCalculationCpu(input, output);<br />
anotherCalculationGpu(input, output);<br />
<br />
someCalculationGpu(input, output);<br />
anotherCalculationCpu(input, output);<br />
<br />
someCalculationGpu(input, output);<br />
anotherCalculationGpu(input, output);<br />
<br />
I've already implemented so I'll keep using it but just wonder if there is already a tool or a way with Thrust. Please leave a comment if you know.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-86214033867174989072012-12-24T15:11:00.000-08:002014-05-18T07:51:33.146-07:00Merry ChristmasWish you have a Merry Christmas.<br />
<br />
Looks I haven't updated this blog for a long time. I'm not dead ;) hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com2tag:blogger.com,1999:blog-8823133891942040386.post-63848703291744542252012-08-02T09:25:00.000-07:002012-08-02T09:25:23.395-07:00The eyeballing game<a href="http://woodgears.ca/eyeball/">The eyeballing game</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSKQZVOWqfhFuAW_M82ZqF6OwzSZSrvieWlwA6417qApmaCQB-ozW78AFq7gGQnULD0-a_dFpt4YhA2ALRRh-WSon2mhLmkEqLeAjczUD450ePSHwHlwxt8jrU0Xv_45kuzx-reEG7dg/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-08-03+1.24.24%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSKQZVOWqfhFuAW_M82ZqF6OwzSZSrvieWlwA6417qApmaCQB-ozW78AFq7gGQnULD0-a_dFpt4YhA2ALRRh-WSon2mhLmkEqLeAjczUD450ePSHwHlwxt8jrU0Xv_45kuzx-reEG7dg/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-08-03+1.24.24%EF%BC%89.png" width="320" /></a></div>
<br />
My score<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj096O_qOy-Xaf-OBeoYfwtLdoUokzNQRmf7b-lNPL_qboVY4WpDCKhmKbqaqBOPf8lbWldYppEJLrjG0dckiWz7nVTv52_g9gWTawK1kzeEUhSVB5hjAUwT_wL4tx4rBVFIIWFvPJF8uY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-08-03+1.21.38%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj096O_qOy-Xaf-OBeoYfwtLdoUokzNQRmf7b-lNPL_qboVY4WpDCKhmKbqaqBOPf8lbWldYppEJLrjG0dckiWz7nVTv52_g9gWTawK1kzeEUhSVB5hjAUwT_wL4tx4rBVFIIWFvPJF8uY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-08-03+1.21.38%EF%BC%89.png" width="320" /></a></div>
<br />
Better than the median, yaay.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-67246688179582451992012-07-19T08:21:00.000-07:002012-07-19T08:22:09.878-07:00One of the coolest thing I have ever seen<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/NqDTE6dHpJw" width="560"></iframe><br />
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-74587224071499337672012-07-16T09:55:00.002-07:002012-07-16T09:56:26.213-07:00What am I doing now?Now I'm working at a CG production, playing with joints and handles. I found Maya Python API 2 is quite handly.<br />
In my free time I'm learning Nuke SDK (the manual is a little bit confusing but its concept is simple), reading ambient occlusion papers (ambient occlusion volumes and HBAO, crytek one seems to produce only low quality ao if my understanding is correct).<br />
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-21095335865076330032012-06-29T09:06:00.000-07:002014-07-02T06:32:18.003-07:00Programming experience changes the sense of beautyI had a chat with a guy today who hates things that have no intrinsic meaning.<br />
Say we have a directory structure like<br />
<br />
episode - sequence - shot<br />
<br />
and shot dependent files are under the 'shot' directory.<br />
(I'm sure this structure is familiar with you if you are working in a vfx studio)<br />
<br />
When we want a directory to put data that are common to all the shots in
an episode. We can think of two directory structures for the purpose.<br />
<br />
episode - sequence - shot<br />
- common<br />
<br />
episode - sequence - shot<br />
- common - common<br />
<br />
The latter has two directories named "common". Outer "common" always has
only one directory: inner "common". So essentially it's enough if we
have only one common directory like the former example. Having two
commons are redundant and it can make people feel intuitively ugly. But
in real life creating two directory has a good meaning - if we have two
commons, we can always assume there are three directories, one for
episode, one for sequence, and one for shot. This assumption simplifies
making tools a lot. It slows down directory access a little bit,
slightly increases disk usage and traffic, but in most cases you can ignore
them. It will also make you irritated if you access to common files
manually, e.g. with windows explorer, but it is usually wrapped up by tools and it should be, so there's no drawback in that sense as well.<br />
<br />
In general, it is better if there are smaller number of rules while making things well defined (i.e. not like, "we have everything in 'any data' direcotry". In the above example "common" direcotry should have well defined sub-directory). As you
start getting used to programming, you become finding simplicity more beautiful, and you starts understanding that removing simplicity just for removing redundancy has no sense because it means sacrificing
functional beauty just for visual appearance.<br />
<br />
<br />
Jun 30 added:<br />
<br />
Good generalization and bad generalization. Good generalization makes you extend functionality easily, bad generalization puzzles you with lack of information on what data it is about. If you have a fully generalized structure (directory structure, framework structure, work flow structure etc.) and well defined layer on top of it based on your demand, you can prevent having 'any data' stuffs that all you know about is creation date, and the structure still has room for future extensibility.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-3484048556469907522012-06-17T10:30:00.000-07:002012-06-17T10:44:38.564-07:00Hand editing pouring waterAgain from my friends project.<br />
It shows how the tool lets you hand edit water pouring into a wine glass.<br />
He says it was a 5 minutes work. Nice usage example.<br />
<br />
<a href="http://www.facebook.com/sparta.project"><span class="text_exposed_show">http://www.facebook.com/sparta.project</span></a><br />
<br />
<span class="text_exposed_show">You can see the result first, and the tool being used at 0:55.</span><br />
<span class="text_exposed_show">The number of particles are still low and it looks blobby but you can imagine how the tool can be used and be evolved.</span><br />
<span class="text_exposed_show"></span><span class="text_exposed_show"><iframe allowfullscreen="" frameborder="0" height="375" mozallowfullscreen="" src="http://player.vimeo.com/video/43380996" webkitallowfullscreen="" width="500"></iframe> </span><br />
<a href="http://vimeo.com/43380996">Wine Video</a> from <a href="http://vimeo.com/lyouta">lyouta</a> on <a href="http://vimeo.com/">Vimeo</a>.<br />
<br />
<br />
1) Simulate liquid by nParticle<br /><i>
2) Exports BIN files<br />
3) Edit BIN files by Sparta<br />
4) Import BIN files as Maya Particle<br /><span class="text_exposed_show"> 5) Connect Maya Particle to nParticle<br /> 6) Polygonize liquid<br /> 7) Render liquid</span></i>
<br />
<span class="text_exposed_show"></span><br />
<br />
<span class="text_exposed_show"> </span><span class="text_exposed_show">By the way </span><span class="text_exposed_show">it succeeded in cloud funding today. Congrats.</span><br />
<br />
<br />
<span class="text_exposed_show"></span><span class="text_exposed_show"><br /></span>hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-19326448835949444172012-06-17T05:27:00.000-07:002012-06-17T05:33:16.326-07:00Espresso Machine!Finally I bought one for myself. I'd been telling my friends to buy one since it's kind of big and expensive and it was best to have one at my friends apartment, but recent ones are smaller and cheaper than before.<br />
<br />
Buy the way I started working at a CG production again. It's good to be in the CG world.<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOFOP5BLNYC9nRotBG0sAMeYC6V2yexPA5gysBsFWTR_M4NHr6pz-7cpMw8cuuFmev6kZbz9YrzdWo2jthSVs_fHScJKNnxbWzhbXhVpMIApDA7bGoKGshn0Jg2vBLpo2zfiSt9_re5LI/s1600/20120617_211253.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOFOP5BLNYC9nRotBG0sAMeYC6V2yexPA5gysBsFWTR_M4NHr6pz-7cpMw8cuuFmev6kZbz9YrzdWo2jthSVs_fHScJKNnxbWzhbXhVpMIApDA7bGoKGshn0Jg2vBLpo2zfiSt9_re5LI/s400/20120617_211253.jpg" width="300" /></a></div>
<div style="text-align: center;">
Espresso machine and cow tit cup</div>
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com3tag:blogger.com,1999:blog-8823133891942040386.post-40428260279603566202012-05-20T15:00:00.001-07:002012-05-20T15:06:47.251-07:00Annular Solar Eclipse<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQeDbKXJfydNF3zyDbMMztVvQpUzSfdRY_Jx73E1hgUOeCwcu_o5ax7nXpN5jBo0P5OreKiV6q1Z8OSCkGSk5Dj1GkjGe3Uez9xtLQ67LBpW7Ikh_ACcKu4cohf_7D0Hc2uze4U-3RSKE/s1600/20120521_064408.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQeDbKXJfydNF3zyDbMMztVvQpUzSfdRY_Jx73E1hgUOeCwcu_o5ax7nXpN5jBo0P5OreKiV6q1Z8OSCkGSk5Dj1GkjGe3Uez9xtLQ67LBpW7Ikh_ACcKu4cohf_7D0Hc2uze4U-3RSKE/s320/20120521_064408.jpg" width="240" /></a>6.44 Still bright outside.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
7:03 <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1bu7X9FnLdGCX0OcHYcAxRcJMll7ikd9ekKulkDfdHTMcBelyYvkNzWuNT2Xdo2gtCzrtJKfReaY1bE0dW50fxVWHGRmBptplqfMOnEtV45j8Db5WZLYxFcvb5mwcQO_9GW2pkUscG8/s1600/20120521_070303.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj1bu7X9FnLdGCX0OcHYcAxRcJMll7ikd9ekKulkDfdHTMcBelyYvkNzWuNT2Xdo2gtCzrtJKfReaY1bE0dW50fxVWHGRmBptplqfMOnEtV45j8Db5WZLYxFcvb5mwcQO_9GW2pkUscG8/s320/20120521_070303.jpg" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTGfrHRLnZUp7umhDaJomc2DvrUWy4vcb9uvdxEhgm1CFj1f7KIUo4dcbCLqcN6_wmLkygtePA_YCaledtIE76lvmm3QMIxMpiAhxclNbxus3eIA6TUv_ZSwVyfG_ASW9Zi0NnGDo-4sI/s1600/20120521_070330.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTGfrHRLnZUp7umhDaJomc2DvrUWy4vcb9uvdxEhgm1CFj1f7KIUo4dcbCLqcN6_wmLkygtePA_YCaledtIE76lvmm3QMIxMpiAhxclNbxus3eIA6TUv_ZSwVyfG_ASW9Zi0NnGDo-4sI/s320/20120521_070330.jpg" width="240" /></a></div>
<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-25113609018165903252012-05-08T00:40:00.001-07:002012-05-08T00:44:10.104-07:00Sparta Project (Sculpting particles update)Updated info for <a href="http://koichitamura.blogspot.jp/2012/03/sculpting-particles.html">the previous entry.</a> Now it's under crowd funding.<br />
<br />
It's crowd funding page<br />
<a href="http://camp-fire.jp/projects/view/237">http://camp-fire.jp/projects/view/237</a><br />
(It accepts funding from overseas: see <a href="http://takavfx.blogspot.co.uk/2012/04/sparta-project-is-inviting-your-help.html">Sparta Project Is Inviting Your Help</a> for more details)<br />
<br />
Project's facebook page<br />
<a href="https://www.facebook.com/sparta.project">https://www.facebook.com/sparta.project</a><br />
<br />
A web news by a Japanese CG magazine.<br />
<a href="http://cgworld.jp/flashnews/software/sparta-project.html">http://cgworld.jp/flashnews/software/sparta-project.html</a><br />
(Click "Translate" for google translation)<br />hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-62189166366984264152012-03-13T06:32:00.001-07:002012-03-13T06:34:06.547-07:00Sculpting particlesThis is a tool a friend of mine is making right now.<br /><iframe src="http://player.vimeo.com/video/38428070?title=0&byline=0&portrait=0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" frameborder="0" height="300" width="400"></iframe><p><a href="http://vimeo.com/38428070">How to Make Fireball</a> from <a href="http://vimeo.com/lyouta">lyouta</a> on <a href="http://vimeo.com">Vimeo</a>.</p><br />Fun.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com1tag:blogger.com,1999:blog-8823133891942040386.post-71930068935050243792012-03-11T10:16:00.002-07:002012-03-11T10:19:32.768-07:00Please ignore my Google+ invitation if you have received one from meThat's the one Google+ has sent without confirmation when I classified your mail address in my account. Google+ is good, but this design sucks.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com1tag:blogger.com,1999:blog-8823133891942040386.post-90057330588473128702012-02-28T07:29:00.002-08:002012-02-28T07:31:59.783-08:00The true meaning of "This program was written in **"Watch this out :)<br /><a href="http://j.ktamura.com/archives/1944">The true meaning of "This program was written in **"</a>hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-26067196186641633832012-01-23T14:16:00.000-08:002012-01-27T08:11:00.324-08:00Photos<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz5kOA36IwqmzpOLJgLWRGNraSIvTJp-e6SHauN73hylSzpjXPO9UEE89gPESBSdLBNRTAlldsoBPJhk9eWNIKMGjGYs5LYayCo_2xf_eHBLavuPUhsOix6P3apYkXDhbko13xumfDBJ0/s1600/IMG_20120124_064705.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz5kOA36IwqmzpOLJgLWRGNraSIvTJp-e6SHauN73hylSzpjXPO9UEE89gPESBSdLBNRTAlldsoBPJhk9eWNIKMGjGYs5LYayCo_2xf_eHBLavuPUhsOix6P3apYkXDhbko13xumfDBJ0/s200/IMG_20120124_064705.jpg" alt="" id="BLOGGER_PHOTO_ID_5700955514635228338" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqp5RQANKuyMYaIYSHhvfzKJXrKHL8bekT25RD7bxCMe-CpZSlD1Pe-1XRmfzSnbQfGRKoOhXienycNhgZmqjRKT2PyEIhA470B-sKNSyMOVnikpqvpGl5-yo5-Ee5kI8dj6rHcHDLrHE/s1600/IMG_20111008_163111.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqp5RQANKuyMYaIYSHhvfzKJXrKHL8bekT25RD7bxCMe-CpZSlD1Pe-1XRmfzSnbQfGRKoOhXienycNhgZmqjRKT2PyEIhA470B-sKNSyMOVnikpqvpGl5-yo5-Ee5kI8dj6rHcHDLrHE/s200/IMG_20111008_163111.jpg" alt="" id="BLOGGER_PHOTO_ID_5700955504187329570" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid2ZUUB3RjU3y2Nv5nvophkwxso-Irif1cXos25MzOfeVXFXyaMlmc8tYxVd0YSVFv0dEhwHjnqA2n4nERmnwDfA6cpG9l9GkDJLa86FB87aHnFKTv4JTdMbOhWxP0Vowh46U0oMBfuk8/s1600/IMG_20110918_180351.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid2ZUUB3RjU3y2Nv5nvophkwxso-Irif1cXos25MzOfeVXFXyaMlmc8tYxVd0YSVFv0dEhwHjnqA2n4nERmnwDfA6cpG9l9GkDJLa86FB87aHnFKTv4JTdMbOhWxP0Vowh46U0oMBfuk8/s200/IMG_20110918_180351.jpg" alt="" id="BLOGGER_PHOTO_ID_5700955499128747442" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP_5-xy5D6TxEcXjJf_-wMW8uQ-_eHhAfGc1P1Yu0qEZp6B1ZCkuJ4BnkcCTgXxrNBKtEuWU-9PNDnw0AzJ0fJLG5qHjfKuDjt5yGKoUJ2kaml6uJKOpSAfTbZM-Lep9dX3EbEnylHnVs/s1600/IMG_20110918_191342.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP_5-xy5D6TxEcXjJf_-wMW8uQ-_eHhAfGc1P1Yu0qEZp6B1ZCkuJ4BnkcCTgXxrNBKtEuWU-9PNDnw0AzJ0fJLG5qHjfKuDjt5yGKoUJ2kaml6uJKOpSAfTbZM-Lep9dX3EbEnylHnVs/s200/IMG_20110918_191342.jpg" alt="" id="BLOGGER_PHOTO_ID_5702344370920216514" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYVtOSmadkJqe5ZsiXBep4XJZfk2_Ej10xnis70MzXXxscNfSV7WPEsHsEjyh4SwjpLx1j0dzyzlAIDFKm_QGJlAG5Y6RdLxrFIbEWOPVRLEFSFdeDDLgeWugBj_t5NmXDK7NuNcFiSdc/s1600/IMG_20111117_212357.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 150px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYVtOSmadkJqe5ZsiXBep4XJZfk2_Ej10xnis70MzXXxscNfSV7WPEsHsEjyh4SwjpLx1j0dzyzlAIDFKm_QGJlAG5Y6RdLxrFIbEWOPVRLEFSFdeDDLgeWugBj_t5NmXDK7NuNcFiSdc/s200/IMG_20111117_212357.jpg" alt="" id="BLOGGER_PHOTO_ID_5702344375119703298" border="0" /></a>hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0tag:blogger.com,1999:blog-8823133891942040386.post-86248781261568295022012-01-19T08:10:00.000-08:002012-01-19T08:15:04.828-08:00C++ template tecniqueNow reading <a href="http://www.amazon.co.jp/C-%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%CE%B5%CF%80%CE%B9%CF%83%CF%84%CE%B7%CE%BC%CE%B7/dp/4797354534">C++ template tecnique (Japanese)</a> written by a C++ Standards Committee member and another guy. Template is not like a standard procedural language, it's more like a pure functional typeless language. I found it a very good book.hohehohe2 [at] gmail.comhttp://www.blogger.com/profile/03759348601978839903noreply@blogger.com0