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