garyhuan9 / echo Goto Github PK
View Code? Open in Web Editor NEWAn awesome ray traced 3D renderer build in C# from scratch!
License: MIT License
An awesome ray traced 3D renderer build in C# from scratch!
License: MIT License
Is your feature request related to a problem? Please describe.
The Transform struct is an improvement to increase performance
Describe the solution you'd like
The Transform struct stores Float3x3s internally for rotation and translaton.
It can be multiplied with other Transforms just like a Float4x4.
It can be inverted like so: here
It can multiply with directions and positions.
After revamping essentially the entire Core.Evaluation
system, we have created a strong architecture allowing for many different materials. However, currently we have only added two: Matte
and Mirror
. We need to implement more BxDF
and Material
to support a wider range of rendering scenarios and requirements.
Describe the solution you'd like
Speed up QBVH by following this video: https://youtu.be/6BIfqfC1i7U
Test SoA on aggregates and see if they improve performance
Describe the bug
RGBA128.Parse
and RGBA128.TryParse
unit tests failing on edge cases.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
hdr(123, 45, 67, 89,)
and hdr(-12, 3, 4)
should fail.rgb(1, 2, 3, 4.5)
and rgb(-12, 3, 4)
should fail.hdr(.10, .001, .102)
should pass with the expected value equalingnew RGBA128(0.1, 0.001, 0.102, 1)
Systems
Additional context
Add any other context about the problem here.
Is your feature request related to a problem? Please describe.
We need a universal way of feeding the streamed data from the various mesh format readers into Echo.Scenic
, specifically, to the MeshEntity
object. Additionally, this should also be an interface that allow us to efficiently feed mesh data into Echo
from the outside (other code using Echo
).
Describe the solution you'd like
A new interface that requires a ReadTriangle
method which will allow the consumer to read the stream of triangles one by one. MeshEntity
will use this interface to handle the request from Echo.Scenic
during preparation. Since this interface will be implemented by many file loaders, it should also implement IDisposable
, to give the loaders a way to dispose of their resources.
Additional context
Note that for the time being, we will not allow different triangles from the same mesh to have different Material
s. Each triangle will simply contain 3 vertices, 3 normals, and 3 texture coordinates, with the latter two being optional.
Is your feature request related to a problem? Please describe.
The DiscreteDistribution1D.BinarySearch function is the third most intensive operation while rendering.
Describe the solution you'd like
Use the alias method for DiscreteDistribution1D from this paper: https://www.keithschwarz.com/darts-dice-coins/
Is your feature request related to a problem? Please describe.
We do not have a logo for Echo yet!
Describe the solution you'd like
make a logo.
After recreating basically the entire Core.Evaluation
system, we have also broke the old post processing pipeline. Using the new Compute
components, we need a new system that is executed after rendering is complete to composite together the different evaluations and enhance them into a single final image.
Additional context
http://paulbourke.net/dataformats/ply/
Is your feature request related to a problem? Please describe.
The Echo
project relies heavily on my CodeHelpers
library. While reusing code is certainly advantageous, originally CodeHelpers
was designed to only be used by Unity
projects. This dependency slowly became a large impediment to some of the new language features and optimizations. Furthermore, most a majority of the abilities provided by CodeHelpers
is not used.
Describe the solution you'd like
Fork CodeHelpers
and incorporate the library intrinsically.
RGBA128.Parser
is a ref struct
that helps converting from a string that is representing a color into an actual RGBA128
. It is designed to support three modes: HEX, RGB, and HDR. Currently the mode detection and HEX mode are already implemented, but the implementation for RGB and HDR are missing.
RGB mode:
Input string format rgb(123, 456, 789)
where 123
, 456
, and 789
can be any integer between 0 (inclusive) and 256 (exclusive). After the preprocessing that determines the mode, the content
field will contain the version with stripped prefix and postfix: 123, 456, 789
. Determine the separation between each integer based on the comma ,
character. Note that there can be optional white spaces between the numbers and the commas. Use the YieldError
method if any input error occurs.
HDR mode:
Similar input string format hdr(0.123, 0.456, 0.789)
where 0.123
, 0.456
, and 0.789
can be any decimal larger than or equals to 0 (no upper bound). The content
field will also contain the stripped version after preprocessing: 0.123, 0.456, 0.789
. Optional white spaces are also allowed.
Implement the ParseRGB
and ParseHDR
methods in RGBA128.Parser
.
Describe the solution you'd like
Use the Floyd-Steinberg dithering algorithm to better convert RGBA128 to RGBA32)
Additional context
https://www.youtube.com/watch?v=lseR6ZguBNY
Is your feature request related to a problem? Please describe.
The old readme is outdated
Describe the solution you'd like
make a new readme
Describe the solution you'd like
Use our overloads to ensure the correct requesting of samples on Samplers in debug mode
Is your feature request related to a problem? Please describe.
This is a critically needed file format to scene description in Echo.
Describe the solution you'd like
A loader for the new .echo format will be needed to be added and supported to use the various features Echo offers.
Additional context
Along with other features implemented in the preparation
rewrite, this file format will complete most of the preprocessing work prior to the main rendering.
Is your feature request related to a problem? Please describe.
The Echo.Core.Common.Compute
namespace works well for our main parallel rendering workload, however it needs to be more flexible for other applications such as pre-render compute or post-processing compositing.
Describe the solution you'd like
A new type of Operation<T>
that supports the asynchronous programming paradigm through custom Task
like async
method wrappers.
Additional context
https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.asyncvoidmethodbuilder
https://github.com/dotnet/roslyn/blob/main/docs/features/task-types.md
https://devblogs.microsoft.com/premier-developer/dissecting-the-async-methods-in-c/
Core.Scenic
is the oldest system in Echo right now. We need to restructure a major part of it to support better a preparation phase prior to rendering. This rewrite will also involve a big change of Core.Aggregation
to support light bounding volume hierarchies and removing virtual method invocations.
Is your feature request related to a problem? Please describe.
All Faces containing more than 3 vertices whill be incorrectly imported from the .ply file.
Describe the solution you'd like
If a n-gon with more than 3 vertices appears, it should be triangulated.
Describe alternatives you've considered
Let the blender plugin triangulate the meshes, but this could cause problems when creating/editing a .echo file outside of blender.
Additional context
Seems like a good starting points: https://www.youtube.com/watch?v=QAdfkylpYwc
Is your feature request related to a problem? Please describe.
Looking at the PolygonFileFormatReader, there are a lot of things that can be improved in terms of performance, readability and documentation.
Describe the solution you'd like
The PolygonFileFormatReader should be able to load the default blender monkey head in less than 10ms, maybe in even less time
The goal is to add a new Pattern for rendering parts of the final image.
This pattern should represent a hilbert curve like this:
Credits for the algorithm for non square hilbert spirals: https://github.com/jakubcerveny/gilbert
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.