diff --git a/doc/images/shape_heightfield.jpg b/doc/images/shape_heightfield.jpg new file mode 100644 index 00000000..3fd058d9 Binary files /dev/null and b/doc/images/shape_heightfield.jpg differ diff --git a/doc/main.bib b/doc/main.bib index 96b918dd..0744deaf 100644 --- a/doc/main.bib +++ b/doc/main.bib @@ -63,7 +63,7 @@ pages = {171--178}, publisher = {ACM}, address = {New York, NY, USA} -} +} @article{Phong1975Illumination, number = {6}, @@ -122,7 +122,7 @@ year = {2005}, organization = {Eurographics Association} } - + @phdthesis{IrawanThesis, author = {Irawan, Piti}, title = {Appearance of woven cloth}, @@ -141,7 +141,7 @@ pages = {286--292}, publisher = {ACM}, address = {New York, NY, USA}, -} +} @inproceedings{Hanrahan1993Reflection, author = {Hanrahan, Pat and Krueger, Wolfgang}, @@ -152,7 +152,7 @@ pages = {165--174}, publisher = {ACM}, address = {New York, NY, USA}, -} +} @article{Jakob2010Radiative, title={A radiative transfer framework for rendering materials with anisotropic structure}, @@ -213,6 +213,7 @@ pages = {54--59}, publisher = {} } + @article{Reinhard2002Photographic, title={Photographic tone reproduction for digital images}, author={Reinhard, E. and Stark, M. and Shirley, P. and Ferwerda, J.}, @@ -222,6 +223,7 @@ pages={267--276}, year={2002} } + @inproceedings{Cook2007Stochastic, author = {Cook, Robert L. and Halstead, John and Planck, Maxwell and Ryu, David}, title = {Stochastic simplification of aggregate detail}, @@ -294,7 +296,7 @@ pages = {221--228}, publisher = {ACM}, address = {New York, NY, USA}, -} +} @article{Saito2008SIMD, title={SIMD-oriented fast Mersenne Twister: a 128-bit pseudorandom number generator}, @@ -395,7 +397,7 @@ pages = {85--92}, publisher = {ACM}, address = {New York, NY, USA} -} +} @inproceedings{Jensen1996Global, author = {Jensen, Henrik Wann}, @@ -445,7 +447,7 @@ year = {2005}, publisher = {ACM}, address = {New York, NY, USA} -} +} @inproceedings{Jensen2001Practical, author = {Jensen, Henrik Wann and Marschner, Stephen R. and Levoy, Marc and Hanrahan, Pat}, @@ -469,7 +471,7 @@ pages = {166:1--166:10}, publisher = {ACM}, address = {New York, NY, USA} -} +} @article{Yuksel2012Stitch, author = {Yuksel, Cem and Kaldor, Jonathan M. and James, Doug L. and Marschner, Steve}, @@ -504,7 +506,7 @@ pages = {49--56}, publisher = {ACM Press/Addison-Wesley Publishing Co.}, address = {New York, NY, USA} -} +} @inproceedings{Kelemen2002Simple, title={A simple and robust mutation strategy for the metropolis light transport algorithm}, @@ -527,7 +529,7 @@ pages = {58:1--58:13}, publisher = {ACM}, address = {New York, NY, USA} -} +} @article{Cline2005Energy, author = {Cline, David and Talbot, Justin and Egbert, Parris}, @@ -540,7 +542,7 @@ pages = {1186--1195}, publisher = {ACM}, address = {New York, NY, USA}, -} +} @article{Narasimhan2006Acquiring, author = {Narasimhan, Srinivasa G. and Gupta, Mohit and Donner, Craig and Ramamoorthi, Ravi and Nayar, Shree K. and Jensen, Henrik Wann}, @@ -554,3 +556,11 @@ publisher = {ACM}, address = {New York, NY, USA} } + +@inproceedings{Tevs2008Maximum, + author = {Art Tevs and Ivo Ihrke and Hans-Peter Seidel}, + title = {Maximum Mipmaps for Fast, Accurate, and Scalable Dynamic Height Field Rendering}, + booktitle = {Symposium on Interactive 3D Graphics and Games (i3D'08)}, + year = 2008, + pages = {183--190} +} diff --git a/src/sensors/perspective_rdist.cpp b/src/sensors/perspective_rdist.cpp index e89130b9..52214850 100644 --- a/src/sensors/perspective_rdist.cpp +++ b/src/sensors/perspective_rdist.cpp @@ -87,7 +87,7 @@ MTS_NAMESPACE_BEGIN * camera whose distortion is known. When \code{kc=0, 0}, the model * turns into a standard pinhole camera. The reason for creating a separate * plugin for this feature is that distortion involves extra overheads per ray that - * users may not be willing to pay for if their scene doesn't use distortion. + * users may not be willing to pay for if their scene doesn't use it. * The MATLAB Camera Calibration Toolbox by Jean-Yves Bouguet * (\url{http://www.vision.caltech.edu/bouguetj/calib_doc/}) can be used to * obtain a distortion model, and the first entries of the \code{kc} variable diff --git a/src/shapes/heightfield.cpp b/src/shapes/heightfield.cpp index 494f1385..40a3f8e4 100644 --- a/src/shapes/heightfield.cpp +++ b/src/shapes/heightfield.cpp @@ -60,6 +60,61 @@ namespace { }; }; +/*!\plugin{heightfield}{Height field intersection shape} + * \order{11} + * \parameters{ + * \parameter{shadingNormals}{\Boolean}{ + * Use linearly interpolated shading normals over the height + * field as opposed to discontinuous normals from the underlying + * bilinear patches? \default{\code{true}, i.e. interpolate smoothly varying normals} + * } + * \parameter{flipNormals}{\Boolean}{ + * Optional flag to flip all normals. \default{\code{false}, i.e. + * the normals are left unchanged}. + * } + * \parameter{toWorld}{\Transform}{ + * Specifies an optional linear object-to-world transformation. + * \default{none, i.e. object space $=$ world space} + * } + * \parameter{width, height}{\Integer}{ + * When the nexted texture is procedural (see below), + * this parameter specifies the resolution at which it should + * be rasterized to create a height field made of bilinear patches. + * } + * \parameter{\Unnamed}{\Texture}{ + * A nested texture that specifies the height field values. This + * could be a bitmap-backed texture or one that is procedurally defined. + * In the latter case, it will be rasterized using the resolution specified + * by the \code{width} and \code{height} arguments. + * } + * } + *\vspace{-2mm} + * \renderings{ + * \rendering{Heigh field rendering of a mountain, see \lstref{heightfield-bitmap}} + * {shape_heightfield} + * } + * This plugin implements an efficient height field intersection shape, i.e. + * a two-dimensional plane that is vertically displaced using height values + * loaded from a texture. + * Internally, the height field is represented as a min-max mipmap + * \cite{Tevs2008Maximum}, allowing cheap storage and efficient ray + * intersection queries. It is generally preferable to represent + * height fields using this specialized plugin rather than converting + * them into triangle meshes. + * + * \begin{xml}[caption={Declaring a height field from a monochromatic scaled bitmap texture}, label=lst:heightfield-bitmap] + * + * + * + * + * + * + * + * + * + * \end{xml} + */ + class Heightfield : public Shape { public: Heightfield(const Properties &props) : Shape(props), m_data(NULL), m_normals(NULL), m_minmax(NULL) { @@ -674,6 +729,6 @@ private: }; MTS_IMPLEMENT_CLASS_S(Heightfield, false, Shape) -MTS_EXPORT_PLUGIN(Heightfield, "Height field intersection primitive"); +MTS_EXPORT_PLUGIN(Heightfield, "Height field intersection shape"); MTS_NAMESPACE_END