hier noch nen witziger shader den ich mal geschrieben hatte ist zwar nicht schön aber ich denke man versteht das prinzip dahinter ![Razz :P](./images/smilies/icon_razz.gif)
Code: !!ARBfp1.0 OPTION ARB_precision_hint_nicest; OPTION NV_fragment_program2; # texture 0 is the cube map # texture 1 is the per-surface bump map # texture 2 is the light falloff texture # texture 3 is the light projection texture # texture 4 is the per-surface diffuse map # texture 5 is the per-surface specular map # texture 6 is the specular lookup table # env[0] is the diffuse modifier # env[1] is the specular modifier TEMP light,color, R1, R2, R3, R4,R5, localNormal, newtexcoord,view,RT,shd,shadow; PARAM shdmodi = 0.1; PARAM cmodi = {0.9,0.67,0.4,1}; PARAM subOne = { -1, -1, -1, -1 }; PARAM scaleTwo = { 2, 2, 2, 2 }; PARAM const = { 0.06, 0.1, 0.5, 2.0 }; DP3 light, fragment.texcoord[0], fragment.texcoord[0]; RSQ light, light.w; MUL light.xyz, light.w, fragment.texcoord[0]; DP3 view, fragment.texcoord[7], fragment.texcoord[7]; RSQ view, view.x; MUL view, view.x, fragment.texcoord[7]; SUB R2.x, 1, -view.z; # depth bias in R2.x MUL R2.x, R2.x, R2.x; SUB R2.x, 1, R2.x; RCP R1.x, view.z; # R1=1.0/view.z MUL view.xy, view, const.x; # view.xy*=depth MUL view.xy, view, R2.x; # view.xy*=depth_bias MUL view, view, -R1.x; # view*=-R1 MUL view, view, const.y; # view/=10 MOV RT, fragment.texcoord[1]; # RT=texcoord MOV RT.z, 1; # RT.z=1 TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view;^ TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) ADD RT(GT.w), RT, view; # RT+=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; TEX R1, RT, texture[1], 2D; # R1=tex(RT) MUL view, view, const.z; # view*=0.5 SGTC R3.w, RT.z, R1.z; # if (RT.z>R1.w) MAD RT(GT.w), view, const.w, RT; # RT+=view*2; SUB RT, RT, view; # RT-=view; MOV newtexcoord,RT; MOV shd,1.0; MOV RT,fragment.texcoord[1]; TEX R1, RT, texture[1], 2D; MOV RT.z,R1.z; MOV R4,R1.z; MOV shadow,shdmodi; MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MAD RT,light,0.004,RT; TEX R1, RT, texture[1], 2D; #R1 = tex(RT) SGTC R3.w, R1.z, RT.z; #if(R1.z > RT.z) MOV shd(GT.w),shadow; #shd = 0.0 MUL R4.xyz,cmodi,program.env[0]; # modulate by the light projection TXP R1, fragment.texcoord[3], texture[3], 2D; MUL R4, R4, R1; # modulate by the light falloff TXP R1, fragment.texcoord[2], texture[2], 2D; MUL R4, R4, R1; MUL R4,R4,shd; TEX color,newtexcoord, texture[4], 2D; MUL color,color,R4; MUL result.color.xyz, color, fragment.color; END
|