5
\$\begingroup\$

Lets assume I wish to render a large, 3D, star object in a game engine using OpenGL. I can use a few different meshing methods: this includes mapping a cube to a sphere (with better subdivision to reduce distortion), a primitive lattitudional/longitudional based "globe" mesh, or a selectively subdivided icosphere. I would choose whatever would be easiest to apply the 3D effect to: I'm guessing an isocahedron, since it doesn't distort as much and the issues with mathematical discontinuities (when finding the Tangential, Normal, and Binormal) vectors should not be a worry (unless rendering the following effect would use a bump/normal mapping technique with a GPU-generated texture?)

Further, lets assume I wish to render a boiling, roiling, or vaguely evolving surface. The diamond-square algorithm could generate the proper effect, but how could this be used in 3D to generate something that looks vaguely like the surface of a star? Could I use the GPU to generate a texture that is then evolved with time, and use a procedural noise algorithm that includes the analytical derivatives to do so(for acquiring normal/bump map components to add "depth")? Should the noise algorithm be in 2D or 3D?

Lastly, what if I want to render the corona of the star in some volumetric fashion as well? Corona's created with billboards work well enough, but rapidly fall apart in appearance once the viewpoint gets closer to the star (as is common with sprite-based techniques).

Example images: Example of star surface and little loops of plasma

Another image, showing a bit more depth of detail on the surface

\$\endgroup\$
  • \$\begingroup\$ You can try a GPU debugging tool like Nvidia Nsight or AMD CodeXL to find out how they do it. \$\endgroup\$ – Alexey Vagarenko Jan 16 '17 at 17:25
  • \$\begingroup\$ That's brilliant! I didn't even consider that option, even as a routine user of Nsight. I'll have to give that a shot. \$\endgroup\$ – fuchstraumer Jan 17 '17 at 5:44
2
\$\begingroup\$

The texture can be achieved by using a 3d noise, like simplex noise. If you can, use a multi octaved noise (it makes the texture look rougher).

Get the current coordinate of the fragment relative to the center of the sphere, and get the noise value with this 3d vector. Once you have the value, blend it with the star's color.

The coronas on the image are probably just arc shaped meshes with a texture on them.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.