Quartz Composer�ɂǂ��Ղ�!
Core Image Kernel �p�b�`�Ŏ��O�̃G�t�F�N�g�����

����̃e�[�}

����̃e�[�}�́ACore Image Kernel �p�b�`�Ŏ��O�̃G�t�F�N�g����邱�ƁB

�����‹� ���̉���́A�ȉ��̊‹���O��ɍ쐬���A����m�F�����s���Ă��܂��B���m�F���������B

���ŗ���

���O�̃G�t�F�N�g�͍����?

Quartz Composer �ɂ́A�l�X�ȉ摜�ɑ΂���G�t�F�N�g������܂����u����ȃG�t�F�N�g�������炢���̂Ɂv�Ȃ�Ă��Ƃ����邩������܂���B����Ȗ��������Ă����̂� Core Image Kernel �p�b�`�ł��B������g���΁A���O�̃p�b�`����邱�Ƃ��”\�ł��B

Core Image Kernel �p�b�`��z�u���� Inspector �� Settings ������ƁA�Ȃɂ��v���O�����炵�����̂�������Ă��܂��B����́AOpenGL Shading Language �ƌĂ΂�錾��ł��BC ����Ɏ������@�������Ă��܂��̂ŁAC ����̌o���̂�����Ȃ�኱�̒m�������Ńv���O���~���O�”\�ł��BOpenGL �̃I�t�B�V�����y�[�W�� PDF ������܂��B�������ACore Image Kernel �p�b�`�ł́AOpenGL Shading Language �̑S�Ă̋@�\���g����킯�ł͂���܂���̂Œ��ӂ��K�v�ł��B

�@�� OpenGL Shading Language

�t�ɁAMac OS X �̋@�\�ł��� Core Image Kernel Language �g���@�\���g�����Ƃ��o���܂��B

�@�� Core Image Kernel Language

Core Image Kernel �p�b�`�́A���͂Əo�͂� Image ������܂��̂ŁA�����ŏ�������摜�̓��͂Ə��������摜�̏o�͂��s���܂��B���̓|�[�g�ɂ� color ������܂����A����͂����܂ł��f�t�H���g�ŁA�D���Ȃ��̂���̓|�[�g�ɒlj����ăv���O�����̃p�����[�^�ɓn�����Ƃ��o���܂��B

�f�t�H���g�� Core Image Kernel �����

�܂��́ACore Image Kernel �p�b�`�Ƀf�t�H���g�œ����Ă���v���O�������ǂ̂悤�ɓ����Ă��邩�����Ă����܂��B

multiplyEffect �Ƃ����֐��������āA�킸�� 1 �s�̃v���O�����������Ă��邾���ł��B���ꂾ���Ńt�B���^�[�ɂȂ�킯�ł����A����́A�S�Ẵs�N�Z���ɑ΂��Ă��̊֐����Ăяo����āA�o�͂���s�N�Z���̐F���֐��̖߂�l�Ƃ��ĕԂ��Ă������߂ł��B�Ԃ�l�̌^�́Avec4 �ƂȂ��Ă��܂����A����́A���������l�� float �� 4 �W�߂����̂ł��B�‚܂�A�F���ł��̂ŁARGB �� 3 ���F�Ɠ����x�����܂߂� RGBA ��Ԃ��Ă���킯�ł��B

�����Ĉ��������Ă����܂��B�����̏������� C ����Ƃقړ����ŁA�ϐ��̌^�ƈ����̖��O�����ɏ����āA�R���}�ŋ�؂��ČJ��Ԃ��ł��Bsampler image �Ƃ����̂�����܂����Asampler �Ƃ����͉̂摜�f�[�^�̂��Ƃœ��͉摜�f�[�^������ŎQ�Ƃł��܂��B__color color �́A�F����\�� __color �Ƃ����^�̒l����͂��Ă��܂��B

�����āA�v���O�����̏����̒��g�ł����Asample �Ƃ����֐��� color ���|�������̂�Ԃ��Ă��܂��B

return sample( image, samplerCoord( image ) ) * color;

sample �Ƃ����֐��͓����̊֐��ŁA�w��摜�̎w��s�N�Z���̐F��� ( vec4 ) ��Ԃ��֐��ł��B�� 1 �����ʼn摜���A�� 2 �����ō��W���w�肵�܂��B

�F��� = sample( �摜�f�[�^, ���W );

samplerCoord �Ƃ����֐��������̊֐��ŁA�摜��^����ƌ��ݏ������̍��W���擾�ł��܂��B���W�̏��́Afloat �� 2 �W�߂� vec2 �Ƃ����^�ɂȂ��Ă��܂��B�����Ō�́u * color �v�̕������Ȃ���΁A���͉摜�Əo�͉摜���S�������ɂȂ�܂��Bcolor ���|���邱�ƂŊe�F�̐�����ς��ďo�͂��邱�Ƃ��o���܂��Bvec4 ���m�̂����Z�Ƃ����̂́A���ꂼ��̐������m�ł̂����Z�ɂȂ�܂� ( ���̉��Z�q�ł���ʂɓ����ł� )�B�‚܂�A

color3 = color1 * color2;

�Ƃ������́A���̎��Ɠ����ł��B�u .r �v�͐Ԃ̐����A�u .g �v�͗΂̐����A�u .b �v�͐‚̐����A�u .a �v�͓����x�̐�����\���܂��B

color3.r = color1.r * color2.r;
color3.g = color1.g * color2.g;
color3.b = color1.b * color2.b;
color3.a = color1.a * color2.a;

�F�̏��́ARGBA ���ꂼ�� 0.0 �` 1.0 �̒l�������܂��̂ŁA�F���ƐF�����|�����킹��ƂقƂ�ǂ̏ꍇ�� 0.0 �ɋ߂Â��܂��̂ňÂ��Ȃ�܂� ( �����x�̐����͓����x�������܂� )�B�Ƃ������ƂŁACore Image Kernel �p�b�`�̃f�t�H���g�̃v���O�����́A�u ���͉摜�����Â��A��蓧���x���グ������ւ̐F�ϊ����s�� �v���̂ɂȂ��Ă��邱�Ƃ��킩��܂��B

�ȒP�ȃG�t�F�N�g������Ă݂悤

�T���v���Ƃ��āA�����‚��ȒP�ȉ摜�G�t�F�N�g������Ă݂܂��傤�B�ŏ��́A�摜�̔��]�ł��B

kernel vec4 invert( sampler image )
{

�@vec4 src = sample( image, samplerCoord( image ) );
�@vec4 dst = 1.0 - src; /* Invert RGBA */

�@dst.a = src.a; /* Keep Alpha */

�@return( dst );

}

RGB �ɂ‚��ẮA1.0 ���猳�̐F���������ƂŔ��]�ɂȂ�܂����A�����x�̕����͂��̂܂܂ɂ������̂ŁA�ʓr�������Ă��܂��B

���́A�ڂ����ł��B���݂̃s�N�Z���̏㉺���E 4 �‚̃s�N�Z���Ǝ������g�̐F�𑫂��� 5 �Ŋ���܂��Bsample �֐��ɓn�����W���㉺���E�ɂ��炵�Ă����Ȃ���΂����܂��񂪁A�u vec2( a, b ) �v�̂悤�ɂȂ��Ă���Ƃ��낪����܂��B����́Avec2 �^�̐��l����邽�߂̊֐��ł��B

kernel vec4 blur( sampler image )
{
�@vec2 xy = samplerCoord( image );

�@vec4 p = sample( image, xy );
�@vec4 pUp = sample( image, xy + vec2( 0, -1 ) );
�@vec4 pLeft = sample( image, xy + vec2( -1, 0 ) );
�@vec4 pRight = sample( image, xy + vec2( 1, 0 ) );
�@vec4 pLow = sample( image, xy + vec2( 0, 1 ) );

�@return ( p + pUp + pLeft + pRight + pLow ) / 5.0;
}

�Ō�́A�N���}�L�[�p�t�B���^�ł��B�‚ɋ߂��F�𓧖��F�ɒu�������܂��B

kernel vec4 multiplyEffect( sampler image )
{

�@vec4 src = sample( image, samplerCoord( image ) );
�@vec4 dst = src;

�@dst.a = ( 1.0 < ( src.b + 0.3 ) * sign( src.r + src.g - 0.2 ) ) ? 0.0 : src.a;

�@return( dst );

}

�‚ɋ߂����ǂ����̔�����u �‚̐����� 0.7 ���傫���A���A�ԂƗ΂̐����𑫂��� 0.2 ��菬�����Ƃ��������𖞂������Ƃ� �v�Ƃ��܂����B�����������́A�����x�� 0.0�A�������Ă��Ȃ����͓����x�͌��摜�̓����x���g���悤�ɂ��Ă��܂��B��ʓI�ɂ́A�����\������̂ɂ́A if �����g�����肵�܂����A�c�O�Ȃ��� Core Image Kernel �p�b�`�ł́A�ȉ��̂悤�� if ���� && ���Z�q���T�|�[�g����Ă��܂���B

�@if (( 0.7 < src.b )&&( ( src.r + src.g ) < 0.2 )) dst.a = 0.0;
�@else dst.a = src.a;

�Ƃ������ƂŁA��������̂�����̂͂Ȃ��Ȃ����Â炢�ł����A���܂����w�I�ȏ��������邵������܂���B