© 2020 Sony Interactive Entertainment LLC. Ghost of Tsushima is a trademark of Sony Interactive Entertainment LLC.
Input NDF
Parameter Estimation
Linear Filtering
Parameter Estimation
where \(\mathbf{M}_\mathbf{\hat{n}}\) rotates \(\mathbf{\hat{k}}=\left(0, 0, 1\right)\) onto \(\mathbf{\hat{n}} = \left(x, y, z\right)\):
To extract \(\mathbf{\hat{n}}'\) from \(\mathbf{S}'\), use power iteration:
void DecodeSggx(float3 anisoTex, float3 tangent, float3 bitangent, out SAnisoSpecData anid)
{
const float s_alphaMin = GgxAlphaFromGloss(1.0f);
float sxx = Square(anisoTex.x);
float sxy = anisoTex.x * (anisoTex.y * 2.0 - 1.0) * anisoTex.z;
float syy = Square(anisoTex.z);
float discr = sqrt(4.0f * Square(sxy) + Square(sxx - syy));
float discrRcp = rcp(max(discr, 1e-6f));
anid.m_alphaTSqr = max(saturate(0.5f * (sxx + syy + discr)), Square(s_alphaMin));
anid.m_alphaBSqr = max(saturate(0.5f * (sxx + syy - discr)), Square(s_alphaMin));
anid.m_alphaTB = sqrt(anid.m_alphaTSqr * anid.m_alphaBSqr);
float cSqr = saturate(0.5f * ((sxx - syy) * discrRcp + 1.0f));
float c = sqrt(cSqr);
float s = Sign(sxy) * sqrt(1.0f - cSqr);
anid.m_tangent = c * tangent + s * bitangent;
anid.m_bitangent = -s * tangent + c * bitangent;
}
Gloss U
Gloss V
Direction
Aniso
Ground Truth (256 samples per pixel)
SGGX (ours)
LEAN
Ground Truth (256 samples per pixel)
SGGX (ours)
LEAN
\(\alpha_t = 0.29, \alpha_b = 0.04\)
\(\alpha_t = 0.87, \alpha_b = 0.04\)
\(\alpha_t = 0.87, \alpha_b = 0.1\)
Base Layer
Scattering Layer
Base Layer
Scattering Layer
3D Plot:
Vary Schlick \(k\)
Vary Fiber (\(\mathbf{\hat{t}}\)) Polar Angle
Vary View (\(\mathbf{\hat{v}}\)) Polar Angle
Vary View (\(\mathbf{\hat{v}}\)) Azimuthal Angle
(Note: Normalized Amplitude)
3D Plot:
Vary \(\alpha\)
Vary Fiber (\(\mathbf{\hat{t}}\)) Polar Angle
Vary View (\(\mathbf{\hat{v}}\)) Polar Angle
Vary View (\(\mathbf{\hat{v}}\)) Azimuthal Angle
(Note: Normalized Amplitude)
Easy to compute from SH coefficients
Bonus Slide
Bonus Slide
\(\equiv E\), the irradiance on the surface (computed using SH)
Bonus Slide
Bonus Slide
\(\equiv R(\theta_f, \alpha)\), constant for fixed \(\theta_f\) and \(\alpha\)
\(\equiv E\), the irradiance on the surface (computed using SH)
Bonus Slide
Bonus Slide
Bonus Slide
No Fuzz
Fuzziness Enabled With Parameters:
No Base Layer Attenuation
Enabled Base Layer Attenuation
\(P_s(\mathbf{\hat{u}}) \equiv 0\)
\(P_s(\mathbf{\hat{u}})\) implemented
Vary Density \(d \;[0.0, 0.5]\)
Vary Spread \([0.0, 1.0]\)
Vary Fiber Tilt \(\theta_t \;[0.0, 90.0\degree]\)
Vary Fiber Color Saturation
Vary Fiber Color Value
Density: 0.1
Density: 0.2
Spread: 0.5
Spread: 1.0
Spread: 0.2
Fiber Tilt: 0 degrees
Fiber Tilt: 45 degrees
Fiber Tilt: 90 degrees
Fiber Tilt: 23 degrees
Fiber Color: Hot Pink
Deferred Fuzziness On
Deferred Fuzziness Off
Deferred Fuzziness On
Deferred Fuzziness Off
radial
linear
Zero Curvature
Mean Curvature
Directional Curvature
Zero Curvature
Mean Curvature
Directional Curvature
Mean Curvature
Directional Curvature
Zero Curvature
Mean Curvature
Directional Curvature
No Curvature
Mean Curvature
Directional Curvature
No Curvature
Mean Curvature
Directional Curvature
Zero Curvature
Mean Curvature
Directional Curvature
float CurvatureFromLight(
float3 tangent,
float3 bitangent,
float3 curvTensor,
float3 lightDir)
{
// Project light vector into tangent plane
float2 lightDirProj = float2(dot(lightDir, tangent), dot(lightDir, bitangent));
// NOTE (jasminp) We should normalize lightDirProj here in order to correctly
// calculate curvature in the light direction projected to the tangent plane.
// However, it makes no perceptible difference, since the skin LUT does not vary
// much with curvature when N.L is large.
float curvature = curvTensor.x * GSquare(lightDirProj.x) +
2.0f * curvTensor.y * lightDirProj.x * lightDirProj.y +
curvTensor.z * GSquare(lightDirProj.y);
return curvature;
}
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Synthesized
Detail
Target
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
Bonus Slide
No Detail
Bonus Slide
Only Detail
Bonus Slide
Synthesized
Detail
Target
Bonus Slide
Target
Bonus Slide
Target BC1
RMSE: 1.95
Bonus Slide
Standard Overlay Blend
RMSE: 1.74
Bonus Slide
Smooth Overlay Blend (Ours)
RMSE: 1.60
Bonus Slide
Target BC1 Error
RMSE: 1.95
Bonus Slide
Standard Overlay Blend Error
RMSE: 1.74
Bonus Slide
Smooth Overlay Blend Error (Ours)
RMSE: 1.60
Bonus Slide
Bonus Slide
Target
Bonus Slide
Blend without Compression Compensation
RMSE: 1.70
Bonus Slide
Blend with Compression Compensation (Ours)
RMSE: 1.60
Bonus Slide
Error without Compression Compensation
RMSE: 1.70
Bonus Slide
Error with Compression Compensation (Ours)
RMSE: 1.60
Bonus Slide
Bonus Slide
Bonus Slide
No Detail
Bonus Slide
Only Detail
Bonus Slide
Synthesized
Detail
Target
Bonus Slide
Target
Bonus Slide
Blend without Compression Compensation
RMSE: 2.43
Bonus Slide
Blend with Compression Compensation (Ours)
RMSE: 2.00
Bonus Slide
Target
Error without Compression Compensation
RMSE: 2.43
Bonus Slide
Error with Compression Compensation (Ours)
RMSE: 2.00
Bonus Slide
Synthesized
Detail
Target
Target
Blend without Compression Compensation
PSNR: 39.53
Blend with Compression Compensation (Ours)
PSNR: 43.55
Bonus Slide
Bonus Slide
Bonus Slide
[DHI+13] Jonathan Dupuy, Eric Heitz, Jean-Claude Iehl, Pierre Poulin, Fabrice Neyret, and Victor Ostromoukhov. Linear efficient antialiased displacement and reflectance mapping. ACM Trans. Graph., 32(6), November 2013.
[HDCD15] Eric Heitz, Jonathan Dupuy, Cyril Crassin, and Carsten Dachsbacher. The SGGX microflake distribution. ACM Trans. Graph., 34(4), July 2015.
[KK89] J. T. Kajiya and T. L. Kay. Rendering fur with three dimensional textures. SIGGRAPH Comput. Graph., 23(3):271–280, July 1989.
[KP03] Jan Koenderink and Sylvia Pont. The secret of velvety skin. Machine Vision and Applications, 14(4):260–268, 2003.
[McA13] Steve McAuley. Extension to energy-conserving wrapped diffuse. http://blog.stevemcauley.com/2013/01/30/extension-to-energy-conserving-wrapped-diffuse/, January 2013.
[MHH+12] Stephen McAuley, Stephen Hill, Naty Hoffman, Yoshiharu Gotanda, Brian Smits, Brent Burley, and Adam Martinez. Practical physically-based shading in film and game production. In ACM SIGGRAPH 2012 Courses, SIGGRAPH ’12, New York, NY, USA, 2012. Association for Computing Machinery.
[OB10] Marc Olano and Dan Baker. Lean mapping. In Proceedings of the 2010 ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, I3D ’10, page 181–188, New York, NY, USA, 2010. Association for Computing Machinery.
[PB11] Eric Penner and George Borshukov. Pre-integrated skin shading. In Wolfgang Engel, editor, GPU Pro 2, chapter 1. A K Peters/CRC Press, New York, 1st edition, 2011.
[PH10] Matt Pharr and Greg Humphreys. Physically Based Rendering, Second Edition: From Theory To Implementation, pages 583–587. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2nd edition, 2010.
[RH01a] Ravi Ramamoorthi and Pat Hanrahan. An efficient representation for irradiance environment maps. In Proceedings of the 28th Annual Conference on Computer Graphics and Interactive Techniques, SIGGRAPH ’01, pages 497–500, New York, NY, USA, 2001. ACM.
[RH01b] Ravi Ramamoorthi and Pat Hanrahan. On the relationship between Radiance and Irradiance: Determining the illumination from images of a convex Lambertian object. Journal of the Optical Society of America, 18(10):2448–2459, Oct 2001.
[Rus04] Szymon Rusinkiewicz. Estimating curvatures and their derivatives on triangle meshes. In Symposium on 3D Data Processing, Visualization, and Transmission, September 2004.
[RV11] P. Ramachandran and G. Varoquaux. Mayavi: 3D Visualization of Scientific Data. Computing in Science & Engineering, 13(2):40–51, 2011.
Text