Coder Social home page Coder Social logo

zzkjinc / godot-octahedral-impostors Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wojtekpil/godot-octahedral-impostors

0.0 1.0 0.0 254.15 MB

Octahedral Impostors implementation for Godot Game Engine

License: MIT License

GDScript 53.29% GLSL 46.71%

godot-octahedral-impostors's Introduction

Godot Octahedral Impostors

Simple implementation of octahedral impostors in Godot. Inspired by shaderbits article and this Unity implementation. Still work in progress but should be usable.

I was fed up with poor quality of impostors based on traditional billboards in Godot. This implementation uses only one plane to imitate a three-dimensional object from multiple angles. Trees with ~30k vertices vs theirs planes impostors:

alt text

This forest (1400 trees) only uses impostors planes:

alt text

Tree with 5k vertices vs one plane:

alt text

Shaders

alt text

There are currently two versions of shaders:

Shader Standard Light
Sphere mapping ✔️ ✔️
Hemisphere mapping ✔️ ✔️
Grid blending ✔️ ✔️
Depth maps ✔️
Shadows ✔️
Metallic textures ✔️
Roughness textures ✔️
Alpha prepass ✔️
Vertices* 36 12

Vertices count was calculated by the Godot engine in the "Information" table

Texture Baker

User interface is poor at the moment and some options must be setup from editor. (Like baking image reslution) alt text

Bake an asset to impostor

  1. Open the TestScene.tscn file and replace the asset in ViewportBaking/BakedContainer/ with the model for baking.
  2. Run project scene and setup:
    • Camera size - Camera size parameter is used to setup a distance beetween ray from octahedral sphere and world origin. Please use larger value to prevent texture bleeding. Increase this value until the model fits perfectly into baking window.
    • Grid size - A root value of number of images taken from different angles of baked model. 16 is recommended value
    • Use full sphere - Full sphere allows to use full octaherdal sphere for baking. Only useful when the object is visible from below. For standard foliage a hemisphere should be better, becouse it increase resolution from the side views.
    • Generarte Standard Shader - generates additional textures required by a standard version of a shader. Should be enabled for better quality.
  3. Click "Generate" and wait until progress bar shows 100%. Godot should reimport generated textures:
    • result.png
    • result_depth.png
    • result_metallic.png
    • result_normal.png
  4. You can preview the result by toggling visibility of "Impostor" object in TestScene.
  5. It's recommended to manually check generated textures for bleedeing and other artifacts.
  6. For better normal textures its possible to setup custom material (with ALBEDO equal to NORMAL) to an asset and baking it again. (in this case we need to use result.png as normal texture)

Shader parameters:

  • Albedo, Specular, Roughness, Metallic - standard PBR material parameters, it should be setup similar to baked model
  • Imposter Frames - X and Y value should be setup to the same value as in "Grid size" parameter in baking process.
  • Position Offset - Ofssets image texture from origin. Usefull when using with for example, MultimeshInstances
  • Is Full Sphere - Should be setup to the same value as in "Use full sphere " parameter in baking process
  • is Transparent - Allow transparancy in impostor
  • Scale - Scale of impostor
  • Depth Scale - Dept texture influence
  • Normalmap Depth - Sometimes baked normals are too rough. You can change the influence of light on the impostor here.
  • Impostor Base Texture, Impostor Normal Texture, Impostor Depth Texture, Impostor Metallic Texture - Ue textures genereted by the baker.

godot-octahedral-impostors's People

Contributors

wojtekpil avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.