Notas de estudio 27

Así es como nuestro truco se aproxima al verdadero Lambert. Al elegir un punto para la pelota, la alta probabilidad está en la parte del vientre, y hay muy poca parte inferior, que corresponde a algunos

Hay muy pocos rayos en el ángulo rasante, y estas contribuciones correspondientes que se desvían del ángulo encontrado serán muy pequeñas.

En cuanto al Lambert real mencionado aquí, el método utilizado es encontrar puntos en la pelota y luego calcular el cos.

Por lo tanto, debe obtener el punto en la pelota, esto es muy simple, solo agregue un desplazamiento de vector unitario al centro de la pelota. Entonces, hay una función para generar un vector unitario aleatorio arriba,

Después de que lo tengamos, lo añadimos al centro de la bola.

Este cálculo no parece tener ninguna diferencia esencial, pero el resultado real parecerá tener menos puntos negros, y el de arriba es el Lambert utilizado.

No solo la mía, sino que la imagen del autor tiene menos puntos negros si miras con atención.

También se dice aquí que este Lambert es más uniforme, es decir, ambos tienen mayor probabilidad de dispersarse por partes cercanas a la normal, pero el de Lambert es más uniforme.

Aquí parece querer decir que nuestro truco es similar a un cos ^ 3, y este Lambert es similar a un cos. Pero por qué no explicó. . .

En resumen, después de cambiar Lambert, hay menos sombras, la bola es más brillante y la superficie es más suave, todo porque la dispersión se ha vuelto más aleatoria.

Tenga en cuenta que hemos estado considerando el desplazamiento normal anterior, ¿qué sucede si no hay un desplazamiento normal? (lo que significa que al buscar el objetivo, p se usa para agregar primero el normal)

Primero observe el papel de lo normal, es decir, cuando el vector unitario aleatorio que obtenemos apunta hacia el interior de la pelota, no es razonable usar directamente este vector como la dirección de salida.

Entonces aquí, si primero hacemos una compensación en el descubrimiento, entonces todos los puntos que consideramos están fuera de la superficie, por lo que no habrá resultados irrazonables.

Por supuesto, también es posible excluir la mitad que se emite al interior al generar el vector unitario. De esta forma, el desplazamiento sin usar la normal puede ser aleatorio en todas las direcciones:

Al considerar los materiales, hay dos ideas para el diseño de la clase: una es diseñar un material y abrir varios parámetros para ajustar diferentes efectos.

También hay una variedad de materiales, y luego ajusta directamente algunos de los primeros parámetros abiertos a cero (lo que significa que debe ser parte del código duro según el tipo)

Este último se utiliza aquí. Entonces sigue siendo una idea similar, todos los materiales tienen que resolver una cosa, de hecho, es BRDF, que es dar la luz entrante, y tú das la luz reflejada.

Incluyendo direcciones, incluyendo información como el color.

Así que aquí todavía está la encapsulación de la interfaz virtual pura.

Después de la encapsulación, pensemos en el momento de llamar a la función de dispersión. Debe llamarse después de que regrese la llamada de éxito.

Todo nuestro trabajo de coloreado anterior se realizó a través de los datos de aciertos registrados en rec. Ahora necesitamos usar el miembro material del objeto al calcular, esto requiere un parámetro

La transmisión de parámetros, y solíamos reducir la transmisión de parámetros en el espíritu de encapsulación rec.

Entonces, el puntero también se coloca en el registro aquí. Entonces, el proceso general debe ser: primero, el material debe ser un miembro del objeto, luego debemos asignar el material apropiado al objeto,

El objeto participa en el cálculo del golpe, y el material debe colocarse en el rec en este momento. Una vez completada la ejecución del golpe, hay datos como la normal y la posición de la superficie del golpe en rec, además de la dispersión

La función puede obtener directamente el color final.

Esta pieza trata sobre todo el proceso anterior.

Eso es lo que hace en el código/

Con la especificación de la interfaz del material principal, podemos crear diferentes submateriales y luego asignar estos submateriales a diferentes objetos en el momento adecuado.

Deje que los objetos tengan diferentes propiedades. Por lo tanto, al calcular el color, las llamadas polimórficas se realizan a diferentes objetos de subclase.

Tenga en cuenta que aquí se agrega una declaración debido a la referencia circular, y se requiere material en el registro. Y se necesita registro en el material. Si ambos archivos están incluidos entre sí, definitivamente es incorrecto.

Aquí se mencionan dos cosas, una es la atenuación y la absorción, la atenuación que dijo se refiere a la entrada de luz blanca y la salida de luz roja, que es atenuación. En la absorción, la luz blanca entra directamente y no se apaga ninguna luz.

Entonces aquí solo se puede considerar la atenuación, es decir, suponiendo luz blanca, entonces lo que se refleja es el albedo. También puede considerar ambos. Para asegurarse de que la cantidad total de los dos reflejos sea la misma, puede

Deje que la probabilidad p absorba y luego divida el reflejo por p, es decir, la reflectividad es mayor, pero algunos lugares no reflejan directamente.

Luego hay otra pregunta sobre scatter_diretion, que es algo generado aleatoriamente, es decir, cuando lo normal es completamente opuesto a nuestro vector unitario rand, aquí

Habrá problemas, porque la dirección de reflexión es 0 vector, y habrá errores de cálculo más adelante.

Así que prepara aquí un juicio y descarta esta situación.

Las fab de arriba son para el valor absoluto de los números de punto flotante.

La función Ray color entiende que el parámetro pasado es un rayo, y su función es de qué color es el rayo.

Luego, en la trayectoria de la luz real, actúa como una luz reflejada. Según Lambert, su luz es el color de la luz incidente multiplicado por el coeficiente de atenuación de Lambert, que es la luz reflejada, que es nuestra

resultado deseado.

Y cómo calcular el color de la luz incidente, ¿no sigue siendo el color del rayo, por lo que es recursivo?

De esta manera, podemos agregar color a nuestro objeto.

Aquí comenzamos a considerar la reflexión especular. Esta derivación es en realidad la misma que la del rombo anterior.

En cuanto al diseño de la dirección de reflexión, aquí es un poco confuso, porque la normal registrada en el rec aquí es un juicio y una selección. Esta normal debe ser contra el rayo, por lo que el punto parece ser mayor que 0.

Solo hay un caso, la tangente, que es igual a 0.

Entonces, aquí está reescribiendo esta vez, si el lado superior es tangente, significa que la luz no brilla en este punto, por lo que la luz debería verse negra en el pasado.

Por supuesto, debido a que la dispersión aquí es una interfaz estandarizada después de todo, debido a que varios cálculos de materiales son diferentes, puede haber algunos materiales específicos que requieran tal valor de retorno/

Hay algo mal con el color aquí.

El medio es más obvio y más fácil de depurar.

Entonces he estado rastreando su color, de la siguiente manera:

El lerp inferior es recursivo, porque aquí simplifiqué la escena y usé el reflejo del espejo, solo hay una bola, por lo que no habrá más colisiones después de recurrir una vez, por lo que regresará,

Podemos ver su valor de retorno.Después de regresar, es el valor de retorno de raycolor, y luego multiplicarlo por atten para regresar nuevamente, esta vez volverá a la llamada en main.

El atten establecido aquí es 1. El mismo valor debería haberse recibido en el lado principal, pero ha cambiado, por lo que el problema ocurre en esta devolución.

De hecho, la depuración de un solo paso aquí puede ver que ha tomado una sobrecarga de multiplicación de vec aquí.No esperaba que esta sobrecarga se escribiera mal.

Así que siento que el proceso de depuración actual es básicamente bloquear los píxeles y luego seguir el color si el problema radica en el color. Básicamente, la razón todavía se puede encontrar.

Entonces, aquí también hay una función, y estará bien llamarla directamente para depurar en el futuro, pero puede ser necesario eliminar manualmente la salida en el color, porque la salida toma un poco de tiempo.

Ahora el efecto es correcto, pero fíjate aquí que nuestra bola está actuando actualmente como una bola de espejos, es decir, es completamente reflectante y aún no ha sido refractada.

Al considerar que la superficie del objeto no es tan lisa, es posible tener la misma luz reflejada para dos ángulos de incidencia con pequeñas diferencias. Eso es lo que parece arriba.

Luego, cuando se realiza el trazado de rayos aquí, se puede considerar que hay una pequeña fluctuación en la luz reflejada, y la luz reflejada se agrega con una compensación (el radio de la bola corresponde a la cantidad de compensación)

El radio de la bola se puede utilizar como parámetro.

Además , mencionó un problema aquí , es decir, si toda la pelota es muy grande, lo que da como resultado una superficie local que es muy plana, y luego agregar el ángulo rasante es probable que cause que el resultado de nuestra perturbación entre en la pelota. (Pero esta situación no se considera en su código. Si no la consideramos aquí, la luz trazada realmente entrará en la pelota después de la reflexión y luego saldrá de otra superficie,

Esto está mal, porque si la bola es opaca, aunque sea transparente, debe haber un ángulo de refracción. Si queremos plantearlo, tenemos que modificar la normalidad de nuestro modelo para que siempre mire hacia el exterior,

De esta manera, cuando se calcule el color, aunque salga, será negro, pero cambiarlo para que siempre mire hacia afuera hará que la bola transparente realmente entre en el interior de la bola. . . . . Aquí hay otro problema. )

La derivación aquí también es relativamente simple, el autor no le dio el proceso específico de derivación de R', sino la parte de los corchetes.

Si consideramos el rayo incidente R como un vector unitario, entonces ncosθ es en realidad la longitud de la proyección R en la dirección n. (porque tanto R como n son vectores unitarios)

Luego agregue R a esto, naturalmente, el tercer lado del triángulo formado por estos dos lados.

Luego, la comparación de los dos η es en realidad la comparación del seno, que es 1 para la hipotenusa, y el valor del seno es en realidad la longitud del lado horizontal, luego la relación de la longitud horizontal se multiplica por el vector horizontal de arriba.

Lo que se obtiene es el vector horizontal de la parte de refracción, que es R'vertical.

El resto es fácil. Calcule la vertical y la horizontal en R' y luego obtenga R'. Tenga en cuenta que el vector obtenido aquí es la suma de los dos.

En realidad.

El algoritmo anterior tiene una falta de consideración, es decir, cuando el objeto pasa de un medio como el vidrio o el agua al aire, tiene un fenómeno de reflexión total.

En ese momento, nuestro ángulo de reflexión senθ' se hizo mayor que 1, lo cual no tiene solución.

Así que debe haber una restricción aquí. Una vez que es igual a 1, significa que se ha alcanzado el estado crítico. Eso es reflexión total. Si no alcanza, puede refractar y reflejar al mismo tiempo.

Consulte los medios para obtener más detalles.

Esta es la solución al pecado.

El albedo en la vida real cambia, dependiendo de nuestro ángulo de visión. De hecho, este es el fenómeno de Fresnel.

Finalmente, aquí hay un truco interesante, es decir, hacemos una bola con radio negativo, esta bola se coloca en la misma posición que el centro de otra bola, y entonces el valor absoluto del número negativo es menor que el radio de la otra pelota.

Que resultados traerá esto, conocemos el código de rastreo, en primer lugar, el radio es cuadrado en casi todas las ocasiones, es decir, cuando se considera que se cruza, no se verá afectado después de agregar un signo menos, solo lo siguiente, usted puede verlo El signo de afecta exactamente a las normales registradas en rec.

En general, lo normal en realidad se invierte, pero el código anterior está incompleto y la versión posterior es:

Después de esta corrección, se registrará en la rec. Aquí es donde se pone interesante,

En primer lugar, cuando la luz entra en la bola interior desde el exterior, la cara frontal debería ser verdadera, pero debido a que aquí se invierte lo normal, aquí es falsa.

Por supuesto, lo normal aquí obtendrá una dirección con el rayo en contra de todos modos, y no tiene efecto en el siguiente cálculo.

La clave es que el frente aquí está asignado sin razón/

Pero esta cosa la usamos hace un momento, y determinaremos la relación del índice de refracción en función de esta cosa.

En general, debido a la inversión de la variable front_face, se considerará que nuestra luz es de adentro hacia afuera.

Es decir, el interior de la bola interior es aire, el exterior es vidrio, etc.

Y de hecho le ponemos un vaso por fuera, de modo que, según el cálculo del programa, él pensará que es una bola de cristal, pero por dentro es una bola de cristal hueca.

Cuando se determina la relación de aspecto, es suficiente determinar solo un FOV vertical y horizontal, y aquí se considera el vertical.

Con respecto a la modificación de FOV, la ventana virtual en realidad cambia, lo que afectará el ángulo del rayo emitido. Cambie el tamaño de la superficie de la ventana gráfica.

Con respecto a la determinación de la cámara, aquí especificamos tres cantidades, la posición de la cámara, el punto de enfoque de la cámara y la dirección hacia arriba.

Con estos tres, se puede construir un eje de coordenadas ortogonales por producto cruzado.

Esta pieza dice que el eje uw de la cámara y el up seleccionado siempre están en el mismo plano, esto es fácil de entender, porque pasamos el primer eje de la cruz, que es perpendicular al plano determinado por up y w, luego el tercer eje Uno también debe estar en este plano, porque debe ser perpendicular al plano de los otros dos ejes.

Con este punto, en realidad demuestra que, en cuanto a la función del eje superior, podemos controlar la superficie donde se encuentra el eje de la cámara ajustándolo. Si se dice que se inclinó varias veces, entonces el eje de toda la cámara también debe estar inclinado.

Porque si escala proporcionalmente, su posición antes y después de la distancia de la cámara cambiará en consecuencia. De hecho, el método de escritura anterior es colocar esta superficie en la distancia de enfoque.

Ponerlo en esta superficie es lo mismo que colocarlo en otras posiciones, y no tiene ningún efecto, porque la única función de esta superficie es determinar la dirección del rayo, y la escala proporcional + traslación hacia adelante y hacia atrás, el rayo no cambiará.

Esta apertura, aquí determina el radio del prisma, es decir, determina el grado de desenfoque del foco.

En cuanto a la forma de simplificar la cámara aquí, porque toda la luz que pasa por la lente se enfocará en el sensor, que es nuestra cámara. Así que no consideres la sección del sensor a la lente

 

Supongo que te gusta

Origin blog.csdn.net/yinianbaifaI/article/details/127702755
Recomendado
Clasificación