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 mova a0.x, TEMP1.x 39 40 dp4 TEMP3.x, TEMP_POSI, nw_matrix_pallet[0 + a0.x]._XYZW 41 dp4 TEMP3.y, TEMP_POSI, nw_matrix_pallet[1 + a0.x]._XYZW 42 dp4 TEMP3.z, TEMP_POSI, nw_matrix_pallet[2 + a0.x]._XYZW 43 44 dp3 TEMP4.x, TEMP_NORM, nw_matrix_pallet[0 + a0.x]._XYZW 45 dp3 TEMP4.y, TEMP_NORM, nw_matrix_pallet[1 + a0.x]._XYZW 46 dp3 TEMP4.z, TEMP_NORM, nw_matrix_pallet[2 + a0.x]._XYZW 47 48 mad MODL_POSI, TEMP1.w, TEMP3, MODL_POSI 49 mad WRLD_NORM, TEMP1.w, TEMP4, WRLD_NORM 50 ret 51 52//------------------------------------------ 53// ���_���W 54//------------------------------------------ 55l_transform_matrix: 56 mul TEMP_POSI.xyz, nw_position, nw_attribute_scale0._X 57 mul TEMP_NORM.xyz, nw_normal, nw_attribute_scale0._Y 58 add TEMP_POSI.xyz, TEMP_POSI, nw_position_offset._XYZW 59 mov TEMP_POSI.w, CONST_1 60 ifb nw_is_smooth_skin // �X���[�X�X�L�j���O�̏ꍇ 61 // �@���ƃ^���W�F���g�̓X�P�[���l���O�ȊO�Ȃ瑶�݂��܂��B 62 mov TEMP0, nw_attribute_scale0._XYZW 63 cmp NEQ, NEQ, TEMP0.yz, CONST_0 64 // ���C�e���V�[�̊W�� ifc �Ƃ̊Ԃɑ��̎������܂��B 65 66 mov MODL_POSI, CONST_0 67 mov WRLD_NORM, CONST_0 68 mul TEMP2, nw_boneIndex, CONST_3 69 70 ifc 1, 0, COND_MODE_STA0 71 // �@��������ꍇ�ł��B 72 // bone0 73 mov TEMP1.xy, TEMP2.x 74 mul TEMP1.w, nw_boneWeight.x, nw_attribute_scale1._W 75 call l_internal_blend_vertex_pn 76 // bone1 77 mov TEMP1.xy, TEMP2.y 78 mul TEMP1.w, nw_boneWeight.y, nw_attribute_scale1._W 79 call l_internal_blend_vertex_pn 80 // bone2 81 mov TEMP1.xy, TEMP2.z 82 mul TEMP1.w, nw_boneWeight.z, nw_attribute_scale1._W 83 call l_internal_blend_vertex_pn 84 // bone3 85 ifb nw_is_bone_weight_enable 86 mov TEMP1.xy, TEMP2.w 87 mul TEMP1.w, nw_boneWeight.w, nw_attribute_scale1._W 88 call l_internal_blend_vertex_pn 89 nop 90 endif 91 92 mov MODL_POSI.w, CONST_1 93 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 94 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 95 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 96 mov WRLD_POSI.w, CONST_1 97 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 98 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 99 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 100 mov TEMP_VIEW.w, CONST_1 101 dp3 TEMP_NORM.x, WRLD_NORM, nw_normal_matrix[0]._XYZW 102 dp3 TEMP_NORM.y, WRLD_NORM, nw_normal_matrix[1]._XYZW 103 dp3 TEMP_NORM.z, WRLD_NORM, nw_normal_matrix[2]._XYZW 104 nop 105 else 106 // bone0 107 mov TEMP1.xy, TEMP2.x 108 mul TEMP1.w, nw_boneWeight.x, nw_attribute_scale1._W 109 call l_internal_blend_vertex_p 110 // bone1 111 mov TEMP1.xy, TEMP2.y 112 mul TEMP1.w, nw_boneWeight.y, nw_attribute_scale1._W 113 call l_internal_blend_vertex_p 114 // bone2 115 mov TEMP1.xy, TEMP2.z 116 mul TEMP1.w, nw_boneWeight.z, nw_attribute_scale1._W 117 call l_internal_blend_vertex_p 118 // bone3 119 ifb nw_is_bone_weight_enable 120 mov TEMP1.xy, TEMP2.w 121 mul TEMP1.w, nw_boneWeight.w, nw_attribute_scale1._W 122 call l_internal_blend_vertex_p 123 mov TEMP_NORM, CONST_0 124 endif 125 126 mov MODL_POSI.w, CONST_1 127 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 128 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 129 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 130 mov WRLD_POSI.w, CONST_1 131 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 132 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 133 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 134 mov TEMP_VIEW.w, CONST_1 135 endif 136 m4x4 o_Position, TEMP_VIEW, nw_projection_matrix._XYZW 137 mov o_Normal, TEMP_NORM 138 else // ���W�b�h�X�L�j���O�ƒP��m�[�h�̏ꍇ 139 // �@���ƃ^���W�F���g�̓X�P�[���l���O�ȊO�Ȃ瑶�݂��܂��B 140 mov TEMP0, nw_attribute_scale0._XYZW 141 cmp NEQ, NEQ, TEMP0.yz, CONST_0 142 ifb nw_is_rigid_skin 143 mul TEMP1.x, nw_boneIndex.x, CONST_3 144 mova a0.x, TEMP1.x 145 dp4 MODL_POSI.x, TEMP_POSI, nw_matrix_pallet[0 + a0.x]._XYZW 146 dp4 MODL_POSI.y, TEMP_POSI, nw_matrix_pallet[1 + a0.x]._XYZW 147 dp4 MODL_POSI.z, TEMP_POSI, nw_matrix_pallet[2 + a0.x]._XYZW 148 mov MODL_POSI.w, CONST_1 149 dp4 WRLD_POSI.x, MODL_POSI, nw_local_to_world_matrix[0]._XYZW 150 dp4 WRLD_POSI.y, MODL_POSI, nw_local_to_world_matrix[1]._XYZW 151 dp4 WRLD_POSI.z, MODL_POSI, nw_local_to_world_matrix[2]._XYZW 152 mov WRLD_POSI.w, CONST_1 153 else 154 // nw_local_to_world_matrix �͒P�ʃ}�g���N�X�Ȃ̂�0��������B 155 mova a0.x, CONST_0 156 dp4 WRLD_POSI.x, TEMP_POSI, nw_matrix_pallet[0]._XYZW 157 dp4 WRLD_POSI.y, TEMP_POSI, nw_matrix_pallet[1]._XYZW 158 dp4 WRLD_POSI.z, TEMP_POSI, nw_matrix_pallet[2]._XYZW 159 mov WRLD_POSI.w, CONST_1 160 endif 161 ifc 1, 0, COND_MODE_STA0 162 // �@��������ꍇ�ł��B 163 dp3 WRLD_NORM.x, TEMP_NORM, nw_matrix_pallet[0 + a0.x]._XYZW 164 dp3 WRLD_NORM.y, TEMP_NORM, nw_matrix_pallet[1 + a0.x]._XYZW 165 dp3 WRLD_NORM.z, TEMP_NORM, nw_matrix_pallet[2 + a0.x]._XYZW 166 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 167 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 168 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 169 mov TEMP_VIEW.w, CONST_1 170 dp3 TEMP_NORM.x, WRLD_NORM, nw_normal_matrix[0]._XYZW 171 dp3 TEMP_NORM.y, WRLD_NORM, nw_normal_matrix[1]._XYZW 172 dp3 TEMP_NORM.z, WRLD_NORM, nw_normal_matrix[2]._XYZW 173 mov TEMP_NORM.w, CONST_1 174 else 175 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 176 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 177 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 178 mov TEMP_VIEW.w, CONST_1 179 mov TEMP_NORM, CONST_0 180 endif 181 m4x4 o_Position, TEMP_VIEW, nw_projection_matrix._XYZW 182 mov o_Normal, TEMP_NORM 183 endif 184 nop 185 ret 186