From 5465b13b9da1323292ebcdca28499740d24a6b21 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 3 Aug 2020 16:27:59 -0700 Subject: [PATCH] basic PBR is working! --- Effects/PBREffect.fx | 12 ++++++------ Effects/PBREffect.fxb | Bin 7536 -> 7636 bytes Importer.cs | 30 ++++++++++++++++-------------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/Effects/PBREffect.fx b/Effects/PBREffect.fx index 7944e13..ca66512 100644 --- a/Effects/PBREffect.fx +++ b/Effects/PBREffect.fx @@ -55,11 +55,11 @@ PixelShaderInput main_vs(VertexShaderInput input) { PixelShaderInput output; - output.PositionWS = mul(input.Position, World).xyz; output.TexCoord = input.TexCoord; - output.NormalWS = normalize(mul(input.Normal, WorldInverseTranspose)); - + output.PositionWS = mul(input.Position, World).xyz; + output.NormalWS = mul(input.Normal, WorldInverseTranspose); output.Position = mul(input.Position, WorldViewProjection); + return output; } @@ -104,7 +104,7 @@ float GeometrySmith(float3 N, float3 V, float3 L, float roughness) } // The case where we have no texture maps for any PBR data -float4 None(PixelShaderInput input) : SV_TARGET +float4 None(PixelShaderInput input) : SV_TARGET0 { float3 albedo = AlbedoValue; float metallic = MetallicValue; @@ -208,7 +208,7 @@ float4 AlbedoMapPS(PixelShaderInput input) : SV_TARGET float4 AlbedoMetallicRoughnessMapPS(PixelShaderInput input) : SV_TARGET { - float3 albedo = SAMPLE_TEXTURE(AlbedoTexture, input.TexCoord).rgb; + float3 albedo = pow(SAMPLE_TEXTURE(AlbedoTexture, input.TexCoord), 2.2).rgb; float2 metallicRoughness = SAMPLE_TEXTURE(MetallicRoughnessTexture, input.TexCoord).rg; float metallic = metallicRoughness.r; float roughness = metallicRoughness.g; @@ -263,6 +263,6 @@ Technique PBR Pass Pass1 { VertexShader = compile vs_3_0 main_vs(); - PixelShader = compile ps_3_0 None(); + PixelShader = compile ps_3_0 AlbedoMetallicRoughnessMapPS(); } } diff --git a/Effects/PBREffect.fxb b/Effects/PBREffect.fxb index f4d7e8f6229ee25ccab1dffddf3f77c33b212d84..217a521768636b170ebc8c9919761b087ead88ba 100644 GIT binary patch literal 7636 zcmeI1L2R7G6~||HKYKU9!9Z!7R!Cj7Ik*xkNy~u)rB32VAerJOF>pWv*WTbo8?Uu% zhamN^6+QHTRJZjZhaSFG9FR9sbLasfRgEgtQz~&QYB?Cm2M!!Kq*9QoZ2!NRdEbuL zPEnA{iLsvNy*F>(d-LYa`{w($bZBt3o#wWqesV^5qVPmjNq$+T{_P#TwHB6I*6GLKL>_dMSveaZg(y&wD$UO z3!&KX%XAozKK0{0(KiJ6u}kMZemu;?*v8b~CpdGl+3hylE9QyCqnF5zOYXD$cwX}7 z1z+E*v+%@p{3+25?|#8Ei;J!G)DiK_mkBl`wwij=V?26P+TQGl*cKcWZ&a^2V>+f2 z-G?Oq4Z+imwS`uzxp=m{{_^rlquaIMXv}=dlX>t=pU|SEK3$glnxL-HJLxyy@Pobo zAhB_e=m!L6RxZsnFI-sfHik}_PmhvZu}!EqJ;tL?eVUMbO~9J>=rw0FW@~FD`j3b| zDLB_Th3;cEbc?IP%C?l6Zq6!{t_S(qN?u*a6#Vf^GXK{xzfl*7b+>xe4;XNMoN&6k(g z=GxunnhHyIsB8NG^bw8f8yxnJ;jaTP7 z?N=I$?6j}roUhRsQn$#9Q9dD=Tj+LA#IdB&XhvI3c?lal-K%jH~s;`^qGbO_Qi^=CXw<*&;taP&3|RBw=MRxIK8)oj!l^6!*YCGAJHPiTA?#TjFhsF6)$* zRCTWie@j3PVW*^#_tew21!XrO-uK-*z?WIx65ER2C=G(|S4bE~~GI zQxflraGL6FA8yJ21>WfYeeae1en0bmFf+8Yu9dt_^oEw!N*hbkB}#q1ZluolNA=q? ztavWPC$l|4N7u31eenk`9(PYS7d!24`@&j%>g;#xPtKm3t)E+7SZZ|Yr`s1-o4Q=r zPaOZ=3D^ILb4rWJ+_~Og1V8%ML$c*vm7aAX2q_VQX^9@Y@- zo4ol(3~is;W9$7xV|bEPOuVneeUXdsXw96ZQrj@<-$FwsO`tCOzW$ z_356H)g%-0i84RoZkk=j+=Zp1) zT-idu-}@-z`9qz=-p8AH9DHD%A&1Qe z_Lf-2bENS>4v)3LBcIu0WXNG~bf;4&gi`Q+NGl-d(H#r2%0){Q1#f!9<{;AhSg(u(9{#dkujP) z9v#Og>Y^S$8XMN*NQ;-=3p1mmPH5`2-SN=j>vxZOOw4V*)nncboctiJ*p2&A)MIG* z>&NjMnmYyZ(A>?T74E&^E`iP6HCbzxnee{BJr0~_TDW_LybeCW+v%}U(80e! zK71Dm^*NORxB6`Jc)shM-p^xw;XP$Xy61CzAx}zLU%<=4!?RTH&cZE@#3-zp`(SuS za{g|pcXM<_JQF^g!*k+@>~J^Ki@Csvv@OOmNZ zyxdb>Z|mES^1ZaJz26Y%ehXdpwDvaAnWvSXIdw>1JhnBq!TmPSWl!_|9q7!{+#ArR zy5Q&QZV~CApZDl69`y744|L7TQ%A`e{Fm(wvV>ewein^=yVGwH$lA9qCLqh)-M@JR zow^$r4LQ}4y}#3lhfeueG-N;PcP!>qiy6U>`$dobUWN#=+Owje|31O!Z->Y!uth^o VXKnZIlA@7g%$mvV`rf6%{{kwpxr+b* literal 7536 zcmds+O>A6O702H^kL^if$LR-95E2$-VWf&Cr3)6N;Gg-wS4@1A?!+?jD& zDuph%%FR3H+;h+U-+TY}y!*zbeZ6}(C$ms^lvTfKYWTmT{|~Ajum7mJ(l}dvZGEFz zmA+pU-!)Y)xde~lHlD<|7KLZ^oLBvV>OjmhOPAN`)h2EpBlN+bGNuZS?>Cy4m+GT9 z?&1^+xIBj2c&0f1D*cu!I0jCJ=%%yg#11Y$9egm zRsGUv%mRtW_(KvK+e4}^EHBqLQXsN9mMJzQmWrMp$89_b>3h?ava9--Y{PLKjK?^Z z#NH?WFRMOZU0$0zYZotWw5okjj_E1L70Z;K9>;AwQ%qCxuc$KTk+=>jfCcax?LT?;b;9QBo{d<-eu+MYRsb>;v)n+(}}C;Sp8gKeJX{-l#7% zN3blgn6bclkK;C;DVD?XpH=;e?4xn}cz{8_tt7tNWG)JOVL9T(rTRuSL;GCj^=k0l+4_Tw*DZ0zmm#}IqXBZm0I2RIgLuUuMR zY_w|YN-V8@tlb9?pS29}Pd4g}W~;#Y7)dIYy|B~o)azA875Z_!ewOrO-pTUDXrKK- z$d?+;`ih=lVVr;d560oFgmIo*y;5x|BQ%#*TWgJ0H5qq>gBQz#n%|>}7sh?DR{il} zv+-(mnVk-KobxrjhU6`HF>Gf^7MEJBqp@xA#OZM6;3D~sb4?%exR)ame&~vxZ>e?? z{T<2OM1NGl<_H+eG0F8r|E=U3iGEA+-9(?$<~^O{;R}-AO7!<7-%j*9l4sfUSk6km zl;~~A*Ax8%$sZ^BlqUS0WTEPkf1c>qB;QQ*+mi1j`jpPtTs&t$cuMkOqHjsQk?0>w zo=UhmCwV^6Hzi+B^osa&IN{VgQD(`mN15gLHG`|PW&4ThZ%oauO5RfCJA6m6 zNm=*0OhTckR zt(U+3@{#QM+H$keYFu2Oojd)_*=HBdEX#5!Nfw7iwMo4ayB%eeUx}~MEAs1xDjvxNz1P<9 z$hBiZ7EePz?D(2qQOqnT7eE z(D?EZhHeMEERxtx_GXPVZXrB=NEX1^U*zf_9%lMdH4*t_wuVa{fJo9%fzJ3+$Df)xvSy+2-h;xCdGU5{0y&UwcoTU_Ho&KrKqNzQpNFg|-rzm&t+7zZ1C z1}i>rILhkV=do;`3y=3dKpvB4nTzun*>jw8CVf{pXKWoTho?ODJs93|=dri@{@LEc z3Epp`{Oa@6I4i%%Ti3~#gZx7Gb0Mx3=c0dx2G0e2bWZli8$5@^^!F{k{=Q`%&LP(B z|AEKi#OK1}1Chtv*@p9RCN4NP$;a@9yI7i!{a%*(!ef0E1Wr4T^Njm|^<}^C&y|;` z@D82!l*ewv?tPG*$KIZ{SxzRNy*sijQ(V7WlqCE8#AH7s_>(7x+Zhi&>Gi|2;BnOD z&;7&hnTCfLet)nz_3_&p&<>AT^L~HJbD8d*nK0(rwJ>hnmm(iqAMPLK-`}@x$JW8_ z6!EU1F*wiLA-{6(Nbe%OA< zC2};g&t!3_okuzP?AkXhK4VcX$!9Xkd0XFvyZUW~ z9J4F#Y{D_q^Pp>Qqh1cW&Ps=z#Q9X)Cb`vg_|@Iy?rS<6>u&PBY&tya>gOYiXXm@y zhOd)hPIkUI4`AY)(*~9-V&lGRx?$rR*>uCkJ;L;g`gb?U$MB803-=}rgJ@N2ezbXUzk$DTs_{RWh0U@6 diff --git a/Importer.cs b/Importer.cs index 64f65f7..97f8a03 100644 --- a/Importer.cs +++ b/Importer.cs @@ -218,6 +218,7 @@ namespace Smuggler graphicsDevice, metallicRoughnessChannel.Value.Texture.PrimaryImage.Content.Open() ); + System.Console.WriteLine(effect.MetallicRoughnessTexture.Width); } var parameter = metallicRoughnessChannel.Value.Parameter; @@ -231,24 +232,24 @@ namespace Smuggler effect.AO = 1f; effect.Lights[0] = new PBRLight( - new Vector3(-10f, 10f, -10f), + new Vector3(-10f, 10f, -5f), new Vector3(300f, 300f, 300f) ); - // effect.Lights[1] = new PBRLight( - // new Vector3(10f, 10f, 10f), - // new Vector3(300f, 300f, 300f) - // ); + effect.Lights[1] = new PBRLight( + new Vector3(10f, 10f, 5f), + new Vector3(300f, 300f, 300f) + ); - // effect.Lights[2] = new PBRLight( - // new Vector3(-10f, -10f, 10f), - // new Vector3(300f, 300f, 300f) - // ); + effect.Lights[2] = new PBRLight( + new Vector3(-10f, -10f, 5f), + new Vector3(300f, 300f, 300f) + ); - // effect.Lights[3] = new PBRLight( - // new Vector3(10f, -10f, 10f), - // new Vector3(300f, 300f, 300f) - // ); + effect.Lights[3] = new PBRLight( + new Vector3(10f, -10f, 5f), + new Vector3(300f, 300f, 300f) + ); /* FIXME: how to load cube maps from GLTF? */ /* @@ -311,7 +312,7 @@ namespace Smuggler for (int i = 0; i < normals.Length; i++) { var normal = normalAccessor[i]; - normals[i] = -new Vector3(normal.X, normal.Z, normal.Y); + normals[i] = new Vector3(-normal.X, -normal.Z, normal.Y); } return normals; @@ -415,6 +416,7 @@ namespace Smuggler uint[] indices, Vector3[] positions ) { + System.Console.WriteLine("normals"); var normals = Normals(primitive); var texcoords = TexCoords(primitive);