1// --------------------------------------------------------------------------- 2// Project: NintendoWare 3// File: TransformMatrix.vsh 4// 5// Copyright (C)2009-2010 Nintendo Co., Ltd. All rights reserved. 6// 7// These coded instructions, statements, and computer programs contain 8// proprietary information of Nintendo of America Inc. and/or Nintendo 9// Company Ltd., and are protected by Federal copyright law. They may 10// not be disclosed to third parties or copied or duplicated in any form, 11// in whole or in part, without the prior written consent of Nintendo. 12// 13// $Revision:$ 14// --------------------------------------------------------------------------- 15 16#include "ShaderConfig.h" 17#include "VertexShader.h" 18 19#define o_Normal o2 20 21//----------------------------------------------------------------------------- 22// @brief �����p�F�ϊ����ʂɃE�F�C�g���|���e���_�����ɉ��Z���܂��B 23//----------------------------------------------------------------------------- 24l_internal_blend_vertex_p: 25 mova a0.x, TEMP1.x 26 27 dp4 TEMP3.x, TEMP_POSI, nw_matrix_pallet[0 + a0.x]._XYZW 28 dp4 TEMP3.y, TEMP_POSI, nw_matrix_pallet[1 + a0.x]._XYZW 29 dp4 TEMP3.z, TEMP_POSI, nw_matrix_pallet[2 + a0.x]._XYZW 30 31 mad MODL_POSI, TEMP1.w, TEMP3, MODL_POSI 32 ret 33 34//----------------------------------------------------------------------------- 35// @brief �����p�F�ϊ����ʂɃE�F�C�g���|���e���_�����ɉ��Z���܂��B 36//----------------------------------------------------------------------------- 37l_internal_blend_vertex_pn: 38 add TEMP1.y, TEMP1.y, TEMP2.y 39 mova a0.xy, TEMP1.xy 40 41 dp4 TEMP3.x, TEMP_POSI, nw_matrix_pallet[0 + a0.x]._XYZW 42 dp4 TEMP3.y, TEMP_POSI, nw_matrix_pallet[1 + a0.x]._XYZW 43 dp4 TEMP3.z, TEMP_POSI, nw_matrix_pallet[2 + a0.x]._XYZW 44 45 dp3 TEMP4.x, TEMP_NORM, nw_matrix_pallet[0 + a0.y]._XYZW 46 dp3 TEMP4.y, TEMP_NORM, nw_matrix_pallet[1 + a0.y]._XYZW 47 dp3 TEMP4.z, TEMP_NORM, nw_matrix_pallet[2 + a0.y]._XYZW 48 49 mad MODL_POSI, TEMP1.w, TEMP3, MODL_POSI 50 mad WRLD_NORM, TEMP1.w, TEMP4, WRLD_NORM 51 ret 52 53//------------------------------------------ 54// ���_���W 55//------------------------------------------ 56l_transform_matrix: 57 mul TEMP_POSI.xyz, nw_position, nw_attribute_scale0._X 58 mul TEMP_NORM.xyz, nw_normal, nw_attribute_scale0._Y 59 add TEMP_POSI.xyz, TEMP_POSI, nw_position_offset._XYZW 60 mov TEMP_POSI.w, CONST_1 61 ifb nw_is_smooth_skin // �X���[�X�X�L�j���O�̏ꍇ 62 // �@���ƃ^���W�F���g�̓X�P�[���l���O�ȊO�Ȃ瑶�݂��܂��B 63 mov TEMP0, nw_attribute_scale0._XYZW 64 cmp NEQ, NEQ, TEMP0.yz, CONST_0 65 // ���C�e���V�[�̊W�� ifc �Ƃ̊Ԃɑ��̎������܂��B 66 67 mov MODL_POSI, CONST_0 68 mov WRLD_NORM, CONST_0 69 70 mov TEMP2.x, nw_attribute_scale2._X 71 ifb nw_is_use_normal_matrix 72 // �m�[�}���}�g���N�X������ꍇ�́A�}�g���N�X���I�t�Z�b�g�l���Ă��܂��B 73 mov TEMP2.y, nw_attribute_scale2._Z 74 else 75 mov TEMP2.y, CONST_0 76 endif 77 mul TEMP2.xy, TEMP2.xy, CONST_3 78 79 ifc 1, 0, COND_MODE_STA0 80 // �@��������ꍇ�ł��B 81 // bone0 82 mul TEMP1.xy, nw_boneIndex.x, TEMP2.x 83 mul TEMP1.w, nw_boneWeight.x, nw_attribute_scale1._W 84 call l_internal_blend_vertex_pn 85 // bone1 86 mul TEMP1.xy, nw_boneIndex.y, TEMP2.x 87 mul TEMP1.w, nw_boneWeight.y, nw_attribute_scale1._W 88 call l_internal_blend_vertex_pn 89 // bone2 90 mul TEMP1.xy, nw_boneIndex.z, TEMP2.x 91 mul TEMP1.w, nw_boneWeight.z, nw_attribute_scale1._W 92 call l_internal_blend_vertex_pn 93 // bone3 94 ifb nw_is_bone_weight_enable 95 mul TEMP1.xy, nw_boneIndex.w, TEMP2.x 96 mul TEMP1.w, nw_boneWeight.w, nw_attribute_scale1._W 97 call l_internal_blend_vertex_pn 98 nop 99 endif 100 101 mov MODL_POSI.w, CONST_1 102 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 103 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 104 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 105 mov WRLD_POSI.w, CONST_1 106 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 107 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 108 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 109 mov TEMP_VIEW.w, CONST_1 110 dp3 TEMP_NORM.x, WRLD_NORM, nw_normal_matrix[0]._XYZW 111 dp3 TEMP_NORM.y, WRLD_NORM, nw_normal_matrix[1]._XYZW 112 dp3 TEMP_NORM.z, WRLD_NORM, nw_normal_matrix[2]._XYZW 113 nop 114 else 115 // bone0 116 mul TEMP1.xy, nw_boneIndex.x, TEMP2.x 117 mul TEMP1.w, nw_boneWeight.x, nw_attribute_scale1._W 118 call l_internal_blend_vertex_p 119 // bone1 120 mul TEMP1.xy, nw_boneIndex.y, TEMP2.x 121 mul TEMP1.w, nw_boneWeight.y, nw_attribute_scale1._W 122 call l_internal_blend_vertex_p 123 // bone2 124 mul TEMP1.xy, nw_boneIndex.z, TEMP2.x 125 mul TEMP1.w, nw_boneWeight.z, nw_attribute_scale1._W 126 call l_internal_blend_vertex_p 127 // bone3 128 ifb nw_is_bone_weight_enable 129 mul TEMP1.xy, nw_boneIndex.w, TEMP2.x 130 mul TEMP1.w, nw_boneWeight.w, nw_attribute_scale1._W 131 call l_internal_blend_vertex_p 132 mov TEMP_NORM, CONST_0 133 endif 134 135 mov MODL_POSI.w, CONST_1 136 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 137 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 138 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 139 mov WRLD_POSI.w, CONST_1 140 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 141 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 142 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 143 mov TEMP_VIEW.w, CONST_1 144 endif 145 m4x4 o_Position, TEMP_VIEW, nw_projection_matrix._XYZW 146 mov o_Normal, TEMP_NORM 147 else // ���W�b�h�X�L�j���O�ƒP��m�[�h�̏ꍇ 148 // �@���ƃ^���W�F���g�̓X�P�[���l���O�ȊO�Ȃ瑶�݂��܂��B 149 mov TEMP0, nw_attribute_scale0._XYZW 150 cmp NEQ, NEQ, TEMP0.yz, CONST_0 151 // ���C�e���V�[�̊W�� ifc �Ƃ̊Ԃɑ��̎������܂��B 152 153 ifb nw_is_rigid_skin 154 mul TEMP1.xy, nw_boneIndex.x, nw_attribute_scale2._X 155 ifb nw_is_use_normal_matrix 156 // �m�[�}���}�g���N�X������ꍇ�́A�}�g���N�X���I�t�Z�b�g�l���Ă��܂��B 157 add TEMP1.y, TEMP1.y, nw_attribute_scale2._Z 158 endif 159 mul TEMP1.xy, TEMP1.xy, CONST_3 160 mova a0.xy, TEMP1.xy 161 dp4 MODL_POSI.x, TEMP_POSI, nw_matrix_pallet[0 + a0.x]._XYZW 162 dp4 MODL_POSI.y, TEMP_POSI, nw_matrix_pallet[1 + a0.x]._XYZW 163 dp4 MODL_POSI.z, TEMP_POSI, nw_matrix_pallet[2 + a0.x]._XYZW 164 mov MODL_POSI.w, CONST_1 165 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 166 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 167 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 168 mov WRLD_POSI.w, CONST_1 169 else 170 // nw_local_to_world_matrix ���m�[�}���}�g���N�X�͒P�ʃ}�g���N�X�Ȃ̂�0��������B 171 mova a0.xy, CONST_0 172 dp4 WRLD_POSI.x, TEMP_POSI, nw_matrix_pallet[0]._XYZW 173 dp4 WRLD_POSI.y, TEMP_POSI, nw_matrix_pallet[1]._XYZW 174 dp4 WRLD_POSI.z, TEMP_POSI, nw_matrix_pallet[2]._XYZW 175 mov WRLD_POSI.w, CONST_1 176 endif 177 ifc 1, 0, COND_MODE_STA0 178 // �@��������ꍇ�ł��B 179 dp3 WRLD_NORM.x, TEMP_NORM, nw_matrix_pallet[0 + a0.y]._XYZW 180 dp3 WRLD_NORM.y, TEMP_NORM, nw_matrix_pallet[1 + a0.y]._XYZW 181 dp3 WRLD_NORM.z, TEMP_NORM, nw_matrix_pallet[2 + a0.y]._XYZW 182 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 183 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 184 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 185 mov TEMP_VIEW.w, CONST_1 186 dp3 TEMP_NORM.x, WRLD_NORM, nw_normal_matrix[0]._XYZW 187 dp3 TEMP_NORM.y, WRLD_NORM, nw_normal_matrix[1]._XYZW 188 dp3 TEMP_NORM.z, WRLD_NORM, nw_normal_matrix[2]._XYZW 189 mov TEMP_NORM.w, CONST_1 190 else 191 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 192 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 193 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 194 mov TEMP_VIEW.w, CONST_1 195 mov TEMP_NORM, CONST_0 196 endif 197 m4x4 o_Position, TEMP_VIEW, nw_projection_matrix._XYZW 198 mov o_Normal, TEMP_NORM 199 endif 200 nop 201 ret 202